You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.8 KiB
62 lines
1.8 KiB
from datetime import timedelta
|
|
from pytz import timezone, utc
|
|
from odoo import models, fields, api
|
|
|
|
|
|
class SurveySurvey(models.Model):
|
|
_inherit = "survey.survey"
|
|
|
|
@api.model
|
|
def cron_close_passed_deadline_survey(self):
|
|
to_close = self.search(
|
|
[
|
|
("deadline", "!=", False),
|
|
("deadline", "<", fields.Date.today()),
|
|
("auto_close", "=", True),
|
|
]
|
|
)
|
|
if to_close:
|
|
to_close.action_archive()
|
|
|
|
deadline = fields.Date(
|
|
string="Deadline",
|
|
copy=False,
|
|
tracking=True,
|
|
help="The day after date at 00:00 will be set as default answer deadline on survey sharing.",
|
|
)
|
|
auto_close = fields.Boolean(
|
|
string="Auto closing",
|
|
help="If checked, this survey will be automatically closed after the deadline.",
|
|
)
|
|
active = fields.Boolean(
|
|
tracking=True,
|
|
)
|
|
|
|
def action_send_survey(self):
|
|
self.ensure_one()
|
|
action = super(SurveySurvey, self).action_send_survey()
|
|
action["context"].update(
|
|
{
|
|
"default_deadline": timezone(self.env.user.tz)
|
|
.localize(
|
|
fields.Datetime.to_datetime(fields.Date.to_string(self.deadline))
|
|
+ timedelta(days=1)
|
|
)
|
|
.astimezone(utc),
|
|
}
|
|
)
|
|
return action
|
|
|
|
@api.onchange("deadline")
|
|
def onchange_deadline(self):
|
|
self.ensure_one()
|
|
if not self.deadline and self.auto_close:
|
|
self.auto_close = False
|
|
|
|
def _track_subtype(self, init_values):
|
|
self.ensure_one()
|
|
if "active" in init_values:
|
|
return self.env.ref(
|
|
"survey_deadline_autoclose.mail_message_subtype_survey_closing"
|
|
)
|
|
return super(SurveySurvey, self)._track_subtype(init_values)
|