from odoo import models, fields, api import io from datetime import date, timedelta class SPENCO_Summary_Wizard(models.TransientModel): _name = 'week_summary_wizard' _description = 'Spenco summary Report Wizard' sales_person_id = fields.Many2one( 'res.users', string='Sales Executive', default=lambda self: self.env.user, domain=lambda self: [('groups_id', 'in', self.env.ref('sos_inventory.sos_sales_user').ids + self.env.ref('sos_inventory.sos_ce_head').ids)] ) select_week = fields.Selection( selection='_get_week_selection', string='Select Week' ) def _get_week_selection(self): """Generate a list of weeks for the dropdown.""" weeks = [] current_date = date.today() for i in [-1, 0, 1]: week_start = current_date + timedelta(days=(i * 7 - current_date.weekday())) week_end = week_start + timedelta(days=5) week_label = f"{week_start.strftime('%b %d')} - {week_end.strftime('%b %d')}" weeks.append((week_label, week_label)) return weeks def generate_report(self): domain = [('week_number', '=', self.select_week)] if self.sales_person_id: domain.append(('sales_executive', '=', self.sales_person_id.id)) records = self.env['sos_spenco_summary_week_wise'].search(domain) # if not records: # return { # 'type': 'ir.actions.client', # 'tag': 'display_notification', # 'params': { # 'title': 'No Records Found', # 'message': f'No records found for week {week_number}.', # 'type': 'warning', # 'sticky': False, # } # } # Trigger report only if data exists return self.env.ref('sos_sales.action_week_summary_report').report_action( [], data={ 'week_number': self.select_week if self.select_week else False, 'sales_person_id': self.sales_person_id.id if self.sales_person_id else False} )