summaryrefslogtreecommitdiff
path: root/addons/calendar_sms/models
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/calendar_sms/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/calendar_sms/models')
-rw-r--r--addons/calendar_sms/models/__init__.py4
-rw-r--r--addons/calendar_sms/models/calendar.py72
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