57 lines
2.1 KiB
Python
Executable File
57 lines
2.1 KiB
Python
Executable File
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'
|
|
}
|
|
)
|