odex25_standard/odex-event/event_custom/models/event_mail.py

82 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
from datetime import datetime
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, tools
from odoo.tools import exception_to_unicode
from odoo.tools.translate import _
import random
import logging
_logger = logging.getLogger(__name__)
_INTERVALS = {
'hours': lambda interval: relativedelta(hours=interval),
'days': lambda interval: relativedelta(days=interval),
'weeks': lambda interval: relativedelta(days=7*interval),
'months': lambda interval: relativedelta(months=interval),
'now': lambda interval: relativedelta(hours=0),
}
class EventMailScheduler(models.Model):
_inherit = 'event.mail'
interval_type = fields.Selection(selection_add = [('after_change_tracks', 'After Change in Tracks')],ondelete={'after_change_tracks': 'set default'})
mail_track_ids = fields.One2many('event.mail.track', 'scheduler_id')
# @api.one
@api.depends('mail_sent', 'interval_type', 'event_id.registration_ids','mail_track_ids','mail_track_ids.mail_sent', 'mail_registration_ids')
def _compute_done(self):
"""
overwrite to include new interval type After Change in Tracks
"""
if self.interval_type in ['before_event', 'after_event']:
self.done = self.mail_sent
elif self.interval_type in ['after_sub']:
self.done = len(self.mail_registration_ids) == len(self.event_id.registration_ids) and all(mail.mail_sent for mail in self.mail_registration_ids)
else:
self.done = all(mail.mail_sent for mail in self.mail_track_ids)
# @api.one
def execute(self):
"""
inherit to include new interval type After Change in Tracks
"""
result = super(EventMailScheduler, self).execute()
now = fields.Datetime.now()
if self.interval_type == 'after_change_tracks' and self._context.get('track_change',False):
# update Tracks change lines
track_change = self._context.get('track_change',False)
lines = [
(0, 0, {'track_id': track_change['id'],'change_date_from':track_change['change_date_from'],'change_date_to':track_change['change_date_to']})
]
if lines:
self.write({'mail_track_ids': lines})
# execute scheduler on registrations
self.mail_track_ids.execute()
return result
class EventMailRegistration(models.Model):
_name = 'event.mail.track'
_description = 'Tracks change Mail Scheduler'
_rec_name = 'scheduler_id'
_order = 'change_date_to DESC'
scheduler_id = fields.Many2one('event.mail', 'Mail Scheduler', required=True, ondelete='cascade')
track_id = fields.Many2one('event.track', 'Tracks', required=True, ondelete='cascade')
change_date_from = fields.Datetime('Old Time')
change_date_to = fields.Datetime('New Time')
mail_sent = fields.Boolean('Mail Sent')
# @api.one
def execute(self):
if not self.mail_sent:
for registration in self.track_id.event_id.registration_ids:
self.scheduler_id.template_id.send_mail(registration.id)
self.write({'mail_sent': True})