Slink/sos_sales/wizard/week_summary_wizard.py

55 lines
2.1 KiB
Python
Executable File

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}
)