Coverage for ingadhoc-odoo-saas-adhoc / saas_provider_upgrade / controllers / appointment.py: 23%
50 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 18:05 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 18:05 +0000
1import math
2from datetime import datetime
3from typing import TYPE_CHECKING
5from odoo import http
6from odoo.addons.appointment.controllers.appointment import AppointmentController
7from odoo.http import request
8from odoo.tools import str2bool
10if TYPE_CHECKING:
11 from ..models.appointment_type import AppointmentType
12 from ..models.helpdesk_ticket import HelpdeskTicket
15class AppointmentControllerUpgrade(AppointmentController):
16 @http.route()
17 def appointment_form_submit(
18 self,
19 appointment_type_id,
20 datetime_str,
21 duration_str,
22 name,
23 email,
24 staff_user_id=None,
25 available_resource_ids=None,
26 asked_capacity=1,
27 guest_emails_str=None,
28 **kwargs,
29 ):
30 """
31 Inherit this method to add the upgrade ticket to the context before creating the event.
32 """
33 # Verificar si el enlace ha caducado
34 expiration_date = kwargs.get("expiration_date")
35 if expiration_date:
36 expiration_date = datetime.fromisoformat(expiration_date)
37 if datetime.now() > expiration_date:
38 return request.render("saas_provider_upgrade.link_expired_template")
40 # Agregar el ticket_id al contexto si está presente
41 new_context = dict(request.env.context)
42 if kwargs.get("ticket_id"):
43 ticket_id = int(kwargs.get("ticket_id"))
44 new_context.update({"upgrade_ticket_id": ticket_id})
45 new_context.update({"confirm_now": str2bool(kwargs.get("confirm_now", False))})
46 request.env = request.env(context=new_context)
47 ticket: HelpdeskTicket = request.env["helpdesk.ticket"].sudo().browse(ticket_id)
48 duration = ticket._get_estimated_production_upgrade_duration()
49 duration_str = f"{duration:.2f}"
51 # Continuar con la lógica normal del formulario
52 return super().appointment_form_submit(
53 appointment_type_id,
54 datetime_str,
55 duration_str,
56 name,
57 email,
58 staff_user_id,
59 available_resource_ids,
60 asked_capacity,
61 guest_emails_str,
62 **kwargs,
63 )
65 @http.route()
66 def appointment_type_id_form(
67 self,
68 appointment_type_id,
69 date_time,
70 duration,
71 staff_user_id=None,
72 resource_selected_id=None,
73 available_resource_ids=None,
74 asked_capacity=1,
75 **kwargs,
76 ):
77 """
78 Inherit this method to add the upgrade ticket to the context before creating the event.
79 This method is used to render "appointment_form" template.
80 """
81 res = super().appointment_type_id_form(
82 appointment_type_id,
83 date_time,
84 duration,
85 staff_user_id=staff_user_id,
86 resource_selected_id=resource_selected_id,
87 available_resource_ids=available_resource_ids,
88 asked_capacity=asked_capacity,
89 **kwargs,
90 )
91 if not hasattr(res, "qcontext"):
92 return res
94 ticket_id = kwargs.get("ticket_id")
95 if not ticket_id:
96 return res
98 ticket_id = int(ticket_id)
99 ticket: HelpdeskTicket = request.env["helpdesk.ticket"].sudo().browse(ticket_id)
100 total_time = ticket._get_estimated_production_upgrade_duration()
101 res.qcontext["duration"] = total_time
102 res.qcontext["duration_str"] = f"{total_time:.2f}"
103 return res
105 def _prepare_appointment_type_page_values(self, appointment_type: "AppointmentType", *args, **kwargs):
106 """
107 Inherit to set duration based on ticket's last test request line total time if ticket_id is provided.
108 This method is used to render "appointment_info" template.
109 """
110 page_values = super()._prepare_appointment_type_page_values(appointment_type, *args, **kwargs)
111 if ticket_id := int(kwargs.get("ticket_id", 0)):
112 ticket: HelpdeskTicket = request.env["helpdesk.ticket"].sudo().browse(ticket_id)
113 duration = ticket._get_estimated_production_upgrade_duration()
114 else:
115 duration = math.ceil(appointment_type.appointment_duration)
116 page_values["duration"] = duration
117 return page_values
119 def _appointment_website_domain(self):
120 """
121 Override to exclude appointment types meant for upgrade creation from general listing.
122 """
123 domain = super()._appointment_website_domain()
124 return domain + [("upgrade_create", "=", False)]