Slink/sos_sales/controllers/controllers.py

89 lines
4.8 KiB
Python
Executable File

# from odoo import http
# from odoo.http import request
# from datetime import date, timedelta
# class SpencoController(http.Controller):
# @http.route('/spenco/week_summary_report', type='json', auth='user')
# def week_summary_report(self, **kwargs):
# sales_person_id = kwargs.get('sales_person_id')
# if not sales_person_id:
# return {'error': 'No sales person provided'}
# return {
# 'status': 'ok',
# 'redirect_url': f"/spenco/render_week_summary?sales_person_id={sales_person_id}"
# }
# @http.route('/spenco/render_week_summary', type='http', auth='user', website=True)
# def render_week_summary(self, sales_person_id=None, **kwargs):
# sales_person_id = int(sales_person_id) if sales_person_id else None
# current_date = date.today()
# start_of_week = current_date - timedelta(days=current_date.weekday())
# end_of_week = start_of_week + timedelta(days=5)
# week_number = f"{start_of_week.strftime('%b %d')} - {end_of_week.strftime('%b %d')}"
# domain = [('week_number', '=', week_number)]
# sales_users = request.env['res.users'].search([
# ('groups_id', 'in', [request.env.ref('sos_inventory.sos_sales_user').id])
# ]).read(['id', 'name'])
# if sales_person_id:
# domain.append(('sales_executive', '=', sales_person_id))
# records = request.env['sos_spenco_summary_week_wise'].search(domain)
# if not records:
# return request.render("sos_sales.spenco_week_summary_report_template", {
# 'error': f"No records found for week {week_number}.",
# 'sales_users': sales_users,
# 'sales_person_id': sales_person_id,
# 'sales_person_name': "All Sales Persons",
# 'aggregated_data': {},
# })
# # Reuse aggregation logic
# status_map = {
# 'Suspects': 'S',
# 'Prospects': 'P',
# 'Engaged': 'E',
# 'Negotiation': 'N',
# 'Commercial Order': 'CO'
# }
# aggregated_data = {
# 'Opening': {'P': {'count': 0, 'value': 0.0}, 'E': {'count': 0, 'value': 0.0}, 'N': {'count': 0, 'value': 0.0}, 'CO': {'count': 0, 'value': 0.0}, 'EOV': {'value': 0.0}},
# 'Downgrade': {'P': {'count': 0, 'value': 0.0}, 'E': {'count': 0, 'value': 0.0}, 'N': {'count': 0, 'value': 0.0}, 'CO': {'count': 0, 'value': 0.0}, 'EOV': {'value': 0.0}},
# 'Upgrade': {'P': {'count': 0, 'value': 0.0}, 'E': {'count': 0, 'value': 0.0}, 'N': {'count': 0, 'value': 0.0}, 'CO': {'count': 0, 'value': 0.0}, 'EOV': {'value': 0.0}},
# 'New': {'P': {'count': 0, 'value': 0.0}, 'E': {'count': 0, 'value': 0.0}, 'N': {'count': 0, 'value': 0.0}, 'CO': {'count': 0, 'value': 0.0}, 'EOV': {'value': 0.0}},
# 'Closing': {'P': {'count': 0, 'value': 0.0}, 'E': {'count': 0, 'value': 0.0}, 'N': {'count': 0, 'value': 0.0}, 'CO': {'count': 0, 'value': 0.0}, 'EOV': {'value': 0.0}}
# }
# for record in records:
# status = record.spenco_status
# if not status or status not in status_map:
# continue
# status_key = status_map[status]
# if status in ['Prospects', 'Engaged', 'Negotiation', 'Commercial Order']:
# for stage in ['Opening', 'Downgrade', 'Upgrade', 'New']:
# aggregated_data[stage][status_key]['count'] += getattr(record, f'{stage.lower()}_cases_count', 0)
# aggregated_data[stage][status_key]['value'] += getattr(record, f'{stage.lower()}_cases_value', 0.0)
# aggregated_data[stage]['EOV']['value'] += getattr(record, f'{stage.lower()}_cases_value', 0.0)
# for status_key in ['P', 'E', 'N', 'CO']:
# aggregated_data['Closing'][status_key]['count'] = (
# aggregated_data['Opening'][status_key]['count'] -
# aggregated_data['Downgrade'][status_key]['count'] -
# aggregated_data['Upgrade'][status_key]['count'] +
# aggregated_data['New'][status_key]['count']
# )
# aggregated_data['Closing'][status_key]['value'] = (
# aggregated_data['Opening'][status_key]['value'] -
# aggregated_data['Downgrade'][status_key]['value'] -
# aggregated_data['Upgrade'][status_key]['value'] +
# aggregated_data['New'][status_key]['value']
# )
# return request.render("sos_sales.spenco_week_summary_report_template", {
# 'aggregated_data': aggregated_data,
# 'sales_users': sales_users,
# 'sales_person_id': sales_person_id,
# 'sales_person_name': request.env['res.users'].browse(sales_person_id).name if sales_person_id else "All Sales Persons"
# })