82 lines
3.1 KiB
Python
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})
|