diff --git a/pms/models/pms_automated_mails.py b/pms/models/pms_automated_mails.py index df9dacef0..1b2468162 100644 --- a/pms/models/pms_automated_mails.py +++ b/pms/models/pms_automated_mails.py @@ -10,10 +10,6 @@ class PmsAutomatedMails(models.Model): pms_property_id = fields.Many2one(string="Property", comodel_name="pms.property") - reservation_id = fields.Many2one( - string="Reservations", - comodel_name="pms.reservation", - ) automated_actions_id = fields.Many2one( string="Automated Actions", comodel_name="base.automation", ondelete="cascade" ) @@ -38,11 +34,6 @@ class PmsAutomatedMails(models.Model): string="Model", comodel_name="ir.model", compute="_compute_model_id", store=True ) - reservation_date_fields_id = fields.Many2one( - string="Action", - comodel_name="ir.model.fields", - ) - action = fields.Selection( string="Action", selection=[ @@ -78,23 +69,17 @@ class PmsAutomatedMails(models.Model): def create(self, vals): name = vals.get("name") action = vals.get("action") - model_field = vals.get("reservation_date_fields_id") time = vals.get("time") - moment = vals.get("moment") date_range_type = vals.get("time_type") template_id = vals.get("template_id") active = vals.get("active") + moment = vals.get("moment") model_id = False - trigger = "on_time" - filter_domain = False - if action == "creation": + model_field = False + if action in ("creation", "write", "cancel"): if moment == "before": raise UserError(_("The moment for this action cannot be 'Before'")) - model_field = self.env["ir.model.fields"].search( - [("model", "=", "pms.reservation"), ("name", "=", "date_order")] - ) - filter_domain = [("date_order", "=", fields.Date.today())] - if action in ("creation", "write", "cancellation", "checkin", "checkout"): + if action in ("creation", "write", "cancel", "checkin", "checkout"): model_id = self.env["ir.model"].search([("name", "=", "Reservation")]) elif action == "payment": model_id = self.env["ir.model"].search([("name", "=", "Payments")]) @@ -105,17 +90,83 @@ class PmsAutomatedMails(models.Model): "model_id": model_id.id, } action_server = self.env["ir.actions.server"].create(action_server_vals) - - automated_actions_vals = { - "active": active, - "action_server_id": action_server.id, - "trigger": trigger, - "trg_date_id": model_field.id, - "filter_domain": filter_domain, - "trg_date_range": time, - "trg_date_range_type": date_range_type, - "template_id": template_id, - } + dict_val = self._prepare_creation_write(action, time, moment) + if not model_field: + automated_actions_vals = { + "active": active, + "action_server_id": action_server.id, + "trigger": dict_val["trigger"], + "filter_domain": dict_val["filter_domain"], + "trg_date_range": dict_val["time"], + "trg_date_range_type": date_range_type, + "template_id": template_id, + } + else: + automated_actions_vals = { + "active": active, + "action_server_id": action_server.id, + "trigger": dict_val["trigger"], + "trg_date_id": dict_val["model_field"].id, + "filter_domain": dict_val["filter_domain"], + "trg_date_range": dict_val["time"], + "trg_date_range_type": date_range_type, + "template_id": template_id, + } automated_action = self.env["base.automation"].create(automated_actions_vals) self.automated_actions_id = automated_action.id return super(PmsAutomatedMails, self).create(vals) + + def _prepare_creation_write(self, action, time, moment): + trigger = False + model_field = False + filter_domain = False + # action: create reservation + if action == "creation": + if moment == "in_act": + trigger = "on_create" + else: + trigger = "on_time" + model_field = self.env["ir.model.fields"].search( + [("model", "=", "pms.reservation"), ("name", "=", "date_order")] + ) + + # action: write and cancel reservation + if action == "write" or action == "cancel": + if action == "cancel": + filter_domain = [("state", "=", "cancelled")] + if moment == "in_act": + trigger = "on_write" + else: + trigger = "on_time" + model_field = self.env["ir.model.fields"].search( + [("model", "=", "pms.reservation"), ("name", "=", "write_date")] + ) + + # action: checkin + if action == "checkin": + trigger = "on_time" + model_field = self.env["ir.model.fields"].search( + [("model", "=", "pms.reservation"), ("name", "=", "checkin")] + ) + if moment == "in_act": + filter_domain = [("checkin", "=", fields.Date.today())] + elif moment == "before": + time = time * (-1) + + # action: checkout + if action == "checkout": + trigger = "on_time" + model_field = self.env["ir.model.fields"].search( + [("model", "=", "pms.reservation"), ("name", "=", "checkout")] + ) + if moment == "in_act": + filter_domain = [("checkout", "=", fields.Date.today())] + elif moment == "before": + time = time * (-1) + result = { + "trigger": trigger, + "model_field": model_field, + "filter_domain": filter_domain, + "time": time, + } + return result diff --git a/pms/views/pms_automated_mails_views.xml b/pms/views/pms_automated_mails_views.xml index 98f000fe3..8ac801d87 100644 --- a/pms/views/pms_automated_mails_views.xml +++ b/pms/views/pms_automated_mails_views.xml @@ -44,8 +44,7 @@ - - +