From 387d90fbd7fe1cb2d1ebe382a5080fd5e25ab5e7 Mon Sep 17 00:00:00 2001 From: clementthomas Date: Fri, 1 Mar 2024 11:22:12 +0100 Subject: [PATCH] [NEW] event_mail_manual --- event_mail_manual/__init__.py | 1 + event_mail_manual/__manifest__.py | 22 ++++++ event_mail_manual/models/__init__.py | 1 + event_mail_manual/models/event_mail.py | 79 +++++++++++++++++++ event_mail_manual/views/event_event_views.xml | 30 +++++++ 5 files changed, 133 insertions(+) create mode 100644 event_mail_manual/__init__.py create mode 100644 event_mail_manual/__manifest__.py create mode 100644 event_mail_manual/models/__init__.py create mode 100644 event_mail_manual/models/event_mail.py create mode 100644 event_mail_manual/views/event_event_views.xml diff --git a/event_mail_manual/__init__.py b/event_mail_manual/__init__.py new file mode 100644 index 0000000..9a7e03e --- /dev/null +++ b/event_mail_manual/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/event_mail_manual/__manifest__.py b/event_mail_manual/__manifest__.py new file mode 100644 index 0000000..a35c815 --- /dev/null +++ b/event_mail_manual/__manifest__.py @@ -0,0 +1,22 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + "name": "Event mail manual", + "version": "16.0.0.0.0", + "license": "AGPL-3", + "author": "Elabore", + "website": "https://www.elabore.coop", + 'summary': 'Add manual send in event communication', + 'description': """ +Add manual send in event communication +---------------------------------------------------- + +""", + "category": "", + "depends": ["event"], + "data": [ + 'views/event_event_views.xml' + ], + "installable": True, + +} diff --git a/event_mail_manual/models/__init__.py b/event_mail_manual/models/__init__.py new file mode 100644 index 0000000..320b2e2 --- /dev/null +++ b/event_mail_manual/models/__init__.py @@ -0,0 +1 @@ +from . import event_mail \ No newline at end of file diff --git a/event_mail_manual/models/event_mail.py b/event_mail_manual/models/event_mail.py new file mode 100644 index 0000000..98a14cb --- /dev/null +++ b/event_mail_manual/models/event_mail.py @@ -0,0 +1,79 @@ +from odoo import _, api, Command, fields, models +from lxml import etree, html +import logging +from odoo.exceptions import MissingError, ValidationError + +_logger = logging.getLogger(__name__) + +class EventMail(models.Model): + _inherit = "event.mail" + + notification_type = fields.Selection(selection_add=[('mail_manual', 'Mail (manual)')], ondelete={'mail_manual': 'set default'}) + + def _selection_template_model_get_mapping(self): + return { + 'mail': 'mail.template', + 'mail_manual': 'mail.template' + } + + @api.depends('event_id.date_begin', 'event_id.date_end', 'interval_type', 'interval_unit', 'interval_nbr','notification_type') + def _compute_scheduled_date(self): + res = super(EventMail, self)._compute_scheduled_date() + for scheduler in self: + if scheduler.notification_type == 'mail_manual': + scheduler.scheduled_date = '2148-12-31' + scheduler.interval_type = 'after_sub' + + return res + + def send(self): + self.execute() + return + + +class EventMailRegistration(models.Model): + _inherit = 'event.mail.registration' + + + def execute(self): + """Inherit execute to send mail from schedulers "mail_manual" + """ + res = super(EventMailRegistration, self).execute() + + todo_manual = self.filtered(lambda reg_mail: + not reg_mail.mail_sent and + reg_mail.registration_id.state in ['open', 'done'] and + reg_mail.scheduler_id.notification_type == 'mail_manual' + ) + done = self.browse() + for reg_mail in todo_manual: + organizer = reg_mail.scheduler_id.event_id.organizer_id + company = self.env.company + author = self.env.ref('base.user_root').partner_id + if organizer.email: + author = organizer + elif company.email: + author = company.partner_id + elif self.env.user.email: + author = self.env.user.partner_id + + email_values = { + 'author_id': author.id, + } + template = None + try: + template = reg_mail.scheduler_id.template_ref.exists() + except MissingError: + pass + + if not template: + _logger.warning("Cannot process ticket %s, because Mail Scheduler %s has reference to non-existent template", reg_mail.registration_id, reg_mail.scheduler_id) + continue + + if not template.email_from: + email_values['email_from'] = author.email_formatted + template.send_mail(reg_mail.registration_id.id, email_values=email_values) + done |= reg_mail + done.write({'mail_sent': True}) + + return res diff --git a/event_mail_manual/views/event_event_views.xml b/event_mail_manual/views/event_event_views.xml new file mode 100644 index 0000000..fe0b064 --- /dev/null +++ b/event_mail_manual/views/event_event_views.xml @@ -0,0 +1,30 @@ + + + + + event.event.form.event.mail.manual + + event.event + + +