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.
86 lines
3.0 KiB
86 lines
3.0 KiB
from odoo import models, fields, api, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class SurveySurvey(models.Model):
|
|
_inherit = "survey.survey"
|
|
|
|
@api.model
|
|
def cron_close_deadline_survey(self):
|
|
deadline = self.search(
|
|
[
|
|
("date_deadline", "!=", False),
|
|
("date_deadline", "<", fields.Date.today()),
|
|
]
|
|
)
|
|
to_close = deadline.filtered("auto_close")
|
|
if to_close:
|
|
to_close.action_close_survey()
|
|
for survey in deadline - to_close:
|
|
survey.message_post(
|
|
subtype="survey_deadline_autoclose.mail_message_subtype_survey_deadline",
|
|
body=_("This survey has expired."),
|
|
)
|
|
|
|
date_deadline = fields.Date(
|
|
string="Deadline", copy=False, track_visibility="onchange"
|
|
)
|
|
auto_close = fields.Boolean(
|
|
string="Auto close",
|
|
default=False,
|
|
help="If checked, the survey will be automatically closed when deadline is overpassed.",
|
|
track_visibility="onchange",
|
|
)
|
|
|
|
# ACTIONS
|
|
|
|
@api.multi
|
|
def action_send_survey(self):
|
|
self.ensure_one()
|
|
action = super(SurveySurvey, self).action_send_survey()
|
|
action["context"].update(
|
|
{
|
|
"default_date_deadline": self.date_deadline,
|
|
}
|
|
)
|
|
return action
|
|
|
|
@api.multi
|
|
def action_close_survey(self):
|
|
stage = self.env["survey.stage"].search([("closed", "=", True)], limit=1)
|
|
if not stage:
|
|
if self.env.context.get("cron", False):
|
|
for survey in self:
|
|
survey.message_post(
|
|
subtype="survey_deadline_autoclose.mail_message_subtype_survey_closed",
|
|
subject=_("Survey closing impossible"),
|
|
body=_(
|
|
'Survey should have been automatically closed but no "closed" '
|
|
"stage was found, the requested operation was impossible to proceed.\n"
|
|
'To fix this situation, you have to check "Closed" at least on one survey stage.'
|
|
),
|
|
)
|
|
else:
|
|
raise UserError(
|
|
_(
|
|
'No "closed" stage found, the requested operation is impossible.\n'
|
|
'To fix this situation, you have to check "Closed" at least on one survey stage.'
|
|
)
|
|
)
|
|
else:
|
|
self.write({"stage_id": stage.id})
|
|
for survey in self:
|
|
survey.message_post(
|
|
subtype="survey_deadline_autoclose.mail_message_subtype_survey_closed",
|
|
body=_("This survey was automatically closed."),
|
|
)
|
|
|
|
# ONCHANGES
|
|
|
|
@api.onchange("date_deadline")
|
|
def onchange_date_deadline(self):
|
|
self.ensure_one()
|
|
if not self.date_deadline:
|
|
self.auto_close = False
|
|
elif not self.auto_close:
|
|
self.auto_close = True
|