Как вызывать функцию каждый интервал времени Odoo 11 - PullRequest
0 голосов
/ 07 февраля 2019

я знаю, что мы можем создать автоматическое действие, используя cron в odoo, но я хочу что-то другое в массовой рассылке odoo. Я хочу добавить опцию повтора массовой рассылки почты. Пример в форме view_mail_mass_mailing_form> Опции страница
Я добавил поле выбора повторения, я добавил это, потому что я хочу, чтобы каждое массовое письмо было отдельно

class MailMassMailing(models.Model):
_inherit = 'mail.mass_mailing' 

recurrence_mail = fields.Selection([
    ('daily', 'Day'),
    ('weekly', 'Weeks'),
    ('monthly', 'Months'),
], string='Recurring')

Я хочу, чтобы это массовое почтовое сообщение отправляло каждый (дни, недели или месяцы), как вызывать функциюс датой интервала, как вызывать функцию каждые (дни, недели или месяцы)

Отправка этой массовой рассылки возобновляется со дня создания

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Спасибо @CZoellner за вашу помощь. Я нашел решение с вашей идеей

# Solution ############### .py
@api.model
def run_send_recurring(self):
    """ Resend mass mailing with recurring interval"""
    date_format = '%Y-%m-%d'
    domain = [('recurrence_mail', '!=', False),('state','=','done')]
    deltas = {'daily': 1, 'weekly': 7, 'monthly': 30}
    logger.info("______deltas________: %s ",deltas)
    today = fields.Date.today()
    logger.info("______today________: %s ",today) 
    for mass_mail in self.search(domain):
        logger.info("______mass_mail________: %s ",mass_mail)
        # never sent? go send it
        if not mass_mail.last_sent_on:
            self.put_in_queue()  

        joining_date = mass_mail.last_sent_on
        current_date = (datetime.today()).strftime(date_format)
        print('joining_date',joining_date)
        d1 = datetime.strptime(joining_date, date_format).date()
        logger.info("______1 day________: %s ",d1)
        d2 = datetime.strptime(current_date, date_format).date()
        logger.info("______2 day________: %s ",d2)
        logger.info("______deltas[mass_mail.recurrence_mail]________: %s ",deltas[mass_mail.recurrence_mail])
        r = relativedelta(d1,d2)    
        logger.info("______r day________: %s ",r.days)  
        if (r ,'>=' ,  deltas[mass_mail.recurrence_mail]):
            mass_mail.put_in_queue()
0 голосов
/ 08 февраля 2019

Просто расширьте модель массовой рассылки новым полем даты и внедрите метод модели, который будет использоваться для ежедневного запуска ir.cron.

from odoo import api, fields, models

class MailMassMailing(models.Model):
    _inherit = 'mail.mass_mailing' 

    recurrence_mail = fields.Selection([
        ('daily', 'Day'),
        ('weekly', 'Weeks'),
        ('monthly', 'Months'),
    ], string='Recurring')
    last_sent_on = fields.Date()

    @api.model
    def run_send_recurring(self):
        """ Resend mass mailing with recurring interval"""
        domain = [('recurrence_mail', '!=', False)]
        # TODO monthly should be solved in another way, but that
        # is not needed for this example
        deltas = {'daily': 1, 'weekly': 7, 'monthly': 30}
        today = fields.Date.today()
        for mass_mail in self.search(domain):
            # never sent? go send it
            if not mass_mail.last_sent_on:
                # send the way you want
            # or get delta between today and last_sent_on
            last_dt = fields.Date.from_string(mass_mail.last_sent_on)
            if (today - last_dt).days >= deltas[mass_mail.recurrence_mail]:
                # send the way you want
...