diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/calendar_sms/models | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/calendar_sms/models')
| -rw-r--r-- | addons/calendar_sms/models/__init__.py | 4 | ||||
| -rw-r--r-- | addons/calendar_sms/models/calendar.py | 72 |
2 files changed, 76 insertions, 0 deletions
diff --git a/addons/calendar_sms/models/__init__.py b/addons/calendar_sms/models/__init__.py new file mode 100644 index 00000000..a71750ab --- /dev/null +++ b/addons/calendar_sms/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import calendar diff --git a/addons/calendar_sms/models/calendar.py b/addons/calendar_sms/models/calendar.py new file mode 100644 index 00000000..433c7218 --- /dev/null +++ b/addons/calendar_sms/models/calendar.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import logging + +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + + +class CalendarEvent(models.Model): + _inherit = 'calendar.event' + + def _sms_get_default_partners(self): + """ Method overridden from mail.thread (defined in the sms module). + SMS text messages will be sent to attendees that haven't declined the event(s). + """ + return self.mapped('attendee_ids').filtered(lambda att: att.state != 'declined').mapped('partner_id') + + def _do_sms_reminder(self): + """ Send an SMS text reminder to attendees that haven't declined the event """ + for event in self: + event._message_sms_with_template( + template_xmlid='calendar_sms.sms_template_data_calendar_reminder', + template_fallback=_("Event reminder: %(name)s, %(time)s.", name=event.name, time=event.display_time), + partner_ids=self._sms_get_default_partners().ids, + put_in_queue=False + ) + + +class CalendarAlarm(models.Model): + _inherit = 'calendar.alarm' + + alarm_type = fields.Selection(selection_add=[ + ('sms', 'SMS Text Message') + ], ondelete={'sms': 'set default'}) + + +class AlarmManager(models.AbstractModel): + _inherit = 'calendar.alarm_manager' + + @api.model + def get_next_mail(self): + """ Cron method, overridden here to send SMS reminders as well + """ + result = super(AlarmManager, self).get_next_mail() + + cron = self.env.ref('calendar.ir_cron_scheduler_alarm', raise_if_not_found=False) + if not cron: + # Like the super method, do nothing if cron doesn't exist anymore + return result + + now = fields.Datetime.to_string(fields.Datetime.now()) + last_sms_cron = cron.lastcall + + interval_to_second = { + "weeks": 7 * 24 * 60 * 60, + "days": 24 * 60 * 60, + "hours": 60 * 60, + "minutes": 60, + "seconds": 1 + } + + cron_interval = cron.interval_number * interval_to_second[cron.interval_type] + events_data = self._get_next_potential_limit_alarm('sms', seconds=cron_interval) + + for event in self.env['calendar.event'].browse(events_data): + max_delta = events_data[event.id]['max_duration'] + event_start = fields.Datetime.from_string(event.start) + for alert in self.do_check_alarm_for_one_date(event_start, event, max_delta, 0, 'sms', after=last_sms_cron, missing=True): + event.browse(alert['event_id'])._do_sms_reminder() + return result |
