From b6e7d096cd869fcb429f096cf647ed352d8430fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20FRAN=C3=87OIS?= Date: Fri, 20 Mar 2020 13:39:22 +0100 Subject: [PATCH] [ADD] survey_deadline_autoclose module --- survey_deadline_autoclose/__init__.py | 1 + survey_deadline_autoclose/__manifest__.py | 34 ++++++++++ survey_deadline_autoclose/data/ir_cron.xml | 21 ++++++ .../data/mail_message_subtype.xml | 22 ++++++ survey_deadline_autoclose/models/__init__.py | 1 + .../models/survey_survey.py | 53 +++++++++++++++ .../views/survey_survey.xml | 67 +++++++++++++++++++ 7 files changed, 199 insertions(+) create mode 100644 survey_deadline_autoclose/__init__.py create mode 100644 survey_deadline_autoclose/__manifest__.py create mode 100644 survey_deadline_autoclose/data/ir_cron.xml create mode 100644 survey_deadline_autoclose/data/mail_message_subtype.xml create mode 100644 survey_deadline_autoclose/models/__init__.py create mode 100644 survey_deadline_autoclose/models/survey_survey.py create mode 100644 survey_deadline_autoclose/views/survey_survey.xml diff --git a/survey_deadline_autoclose/__init__.py b/survey_deadline_autoclose/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/survey_deadline_autoclose/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/survey_deadline_autoclose/__manifest__.py b/survey_deadline_autoclose/__manifest__.py new file mode 100644 index 0000000..89f3e9b --- /dev/null +++ b/survey_deadline_autoclose/__manifest__.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Survey deadline auto-close', + 'version': '0.1.0', + 'summary': """ + The module adds a deadline date on surveys and a checkbox to automatically close them with a planned action. + """, + 'description': """ """, + 'author': 'Sudokeys', + 'website': 'http://www.sudokeys.com', + 'license': 'AGPL-3', + 'category': 'Marketing', + 'depends': [ + 'survey', + ], + 'data': [ + 'data/ir_cron.xml', + 'data/mail_message_subtype.xml', + 'views/survey_survey.xml', + ], + 'demo': [], + 'auto_install': False, + 'external_dependencies': [], + 'application': False, + 'css': [], + 'images': [], + 'js': [], + 'installable': True, + 'maintainer': 'Sudokeys', + 'pre_init_hook': '', + 'post_init_hook': '', + 'uninstall_hook': '', +} diff --git a/survey_deadline_autoclose/data/ir_cron.xml b/survey_deadline_autoclose/data/ir_cron.xml new file mode 100644 index 0000000..a84dbdb --- /dev/null +++ b/survey_deadline_autoclose/data/ir_cron.xml @@ -0,0 +1,21 @@ + + + + + + + Clôture des sondages arrivés à échéance + + code + model.action_close_survey() + + + 1 + days + + -1 + + + + + diff --git a/survey_deadline_autoclose/data/mail_message_subtype.xml b/survey_deadline_autoclose/data/mail_message_subtype.xml new file mode 100644 index 0000000..bbf9887 --- /dev/null +++ b/survey_deadline_autoclose/data/mail_message_subtype.xml @@ -0,0 +1,22 @@ + + + + + + Sondage Échu + survey.survey + + + Ce sondage est arrivé à échéance. + + + + Sondage Clos + survey.survey + + + Ce sondage a été clôturé. + + + + diff --git a/survey_deadline_autoclose/models/__init__.py b/survey_deadline_autoclose/models/__init__.py new file mode 100644 index 0000000..38d56b9 --- /dev/null +++ b/survey_deadline_autoclose/models/__init__.py @@ -0,0 +1 @@ +from . import survey_survey diff --git a/survey_deadline_autoclose/models/survey_survey.py b/survey_deadline_autoclose/models/survey_survey.py new file mode 100644 index 0000000..2a18f72 --- /dev/null +++ b/survey_deadline_autoclose/models/survey_survey.py @@ -0,0 +1,53 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError + + +class SurveySurvey(models.Model): + _inherit = 'survey.survey' + + @api.model + def 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') + + date_deadline = fields.Date(string="Date d'échéance", help="Passé cette date, il ne sera plus possible de répondre au sondage.", copy=False) + auto_close = fields.Boolean(string="Clôture automatique à l'échéance", default=False) + + # 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: + raise UserError("Aucun statut qualifié de \"fermé\" n'a été trouvé, l'opération demandée est impossible.") + self.write({ + 'stage_id': stage.id + }) + for survey in self: + survey.message_post(subtype='survey_deadline_autoclose.mail_message_subtype_survey_closed') + + # ONCHANGES + + @api.onchange('date_deadline') + def onchange_is_template(self): + self.ensure_one() + if not self.date_deadline: + self.auto_close = False + elif not self.auto_close: + self.auto_close = True diff --git a/survey_deadline_autoclose/views/survey_survey.xml b/survey_deadline_autoclose/views/survey_survey.xml new file mode 100644 index 0000000..a7ead6f --- /dev/null +++ b/survey_deadline_autoclose/views/survey_survey.xml @@ -0,0 +1,67 @@ + + + + + survey_deadline_autoclose survey.survey form + survey.survey + + 25 + + +