from odoo import models, fields, api import io from datetime import date, timedelta from odoo.exceptions import UserError class SOS_BRM_Report_Wizard(models.TransientModel): _name = 'sos_cross_dept_report_wizard' _description = 'Cross dept Report Wizard' assigned_from_dept = fields.Many2one('sos_departments', string='Assigned By') assigned_to_dept = fields.Many2one('sos_departments', string='Assigned To Dept') status = fields.Selection([ ('all', 'All'),('open', 'Open'),('close', 'Closed'),('hold', 'Hold')], default='open' , string="Status") assigned_by = fields.Many2one( 'res.users', string='Assigned By' ) def generate_report(self): # Build domain for filtering records domain = [('cross_dept_action','=','cross_dept')] if self.assigned_from_dept: domain.append(('assigned_from_dept', '=', self.assigned_from_dept.id)) if self.assigned_to_dept: domain.append(('assigned_to_dept', '=', self.assigned_to_dept.id)) if self.assigned_by: domain.append(('assigned_by', '=', self.assigned_by.id)) if self.status and self.status != 'all': domain.append(('status', '=', self.status)) # Search for records records = self.env['sos_brm_action'].search(domain) if not records: return { 'type': 'ir.actions.client', 'tag': 'display_notification', 'params': { 'title': ('No Records Found'), 'message': ('No Records Found'), 'type': 'warning', 'sticky': False, } } # Generate report with filtered record IDs return self.env.ref('sos_brm.action_cross_dept_report').report_action( records.ids, data={ 'assigned_from_dept' : self.assigned_from_dept.id, 'assigned_to_dept':self.assigned_to_dept.id, 'assigned_by':self.assigned_by.id, 'status' : self.status, 'cross_dept_action':'cross_dept' } )