Rémi FRANÇOIS
5 years ago
7 changed files with 199 additions and 0 deletions
-
1survey_deadline_autoclose/__init__.py
-
34survey_deadline_autoclose/__manifest__.py
-
21survey_deadline_autoclose/data/ir_cron.xml
-
22survey_deadline_autoclose/data/mail_message_subtype.xml
-
1survey_deadline_autoclose/models/__init__.py
-
53survey_deadline_autoclose/models/survey_survey.py
-
67survey_deadline_autoclose/views/survey_survey.xml
@ -0,0 +1 @@ |
|||
from . import models |
@ -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': '', |
|||
} |
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
<!-- <data> --> |
|||
|
|||
<record model="ir.cron" id="set_customer_inactive"> |
|||
<field name="name">Clôture des sondages arrivés à échéance</field> |
|||
<field name="model_id" ref="survey.model_survey_survey"/> |
|||
<field name="state">code</field> |
|||
<field name="code">model.action_close_survey()</field> |
|||
<field name="active" eval="True"/> |
|||
<field name="user_id" ref="base.user_root"/> |
|||
<field name="interval_number">1</field> |
|||
<field name="interval_type">days</field> |
|||
<field name="nextcall" eval="(datetime.today() + relativedelta(days=1)).strftime('%Y-%m-%d 00:10:00')"/> |
|||
<field name="numbercall">-1</field> |
|||
<field name="doall" eval="False"/> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
|
|||
<record id="mail_message_subtype_survey_deadline" model="mail.message.subtype"> |
|||
<field name="name">Sondage Échu</field> |
|||
<field name="res_model">survey.survey</field> |
|||
<field name="default" eval="True"/> |
|||
<field name="hidden" eval="False"/> |
|||
<field name="description">Ce sondage est arrivé à échéance.</field> |
|||
</record> |
|||
|
|||
<record id="mail_message_subtype_survey_closed" model="mail.message.subtype"> |
|||
<field name="name">Sondage Clos</field> |
|||
<field name="res_model">survey.survey</field> |
|||
<field name="default" eval="True"/> |
|||
<field name="hidden" eval="False"/> |
|||
<field name="description">Ce sondage a été clôturé.</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1 @@ |
|||
from . import survey_survey |
@ -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 |
@ -0,0 +1,67 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="survey_survey_form" model="ir.ui.view"> |
|||
<field name="name">survey_deadline_autoclose survey.survey form</field> |
|||
<field name="model">survey.survey</field> |
|||
<field name="inherit_id" ref="survey.survey_form"/> |
|||
<field name="priority">25</field> |
|||
<field name="arch" type="xml"> |
|||
<field name="stage_id" position="before"> |
|||
<button name="action_close_survey" string="Clore le sondage" type="object" attrs="{'invisible': [('is_closed', '=', True)]}"/> |
|||
</field> |
|||
<xpath expr="//group[hasclass('o_label_nowrap')]/.." position="inside"> |
|||
<group name="options"> |
|||
</group> |
|||
</xpath> |
|||
<group name="options" position="inside"> |
|||
<xpath expr="//group[hasclass('o_label_nowrap')]" position="move"/> |
|||
</group> |
|||
<group name="options" position="inside"> |
|||
<group name="deadline" class="o_label_nowrap"> |
|||
<field name="date_deadline" class="oe_inline"/> |
|||
<field name="auto_close" attrs="{'invisible': [('date_deadline','=',False)]}"/> |
|||
</group> |
|||
</group> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="survey_survey_tree" model="ir.ui.view"> |
|||
<field name="name">survey_deadline_autoclose survey.survey tree</field> |
|||
<field name="model">survey.survey</field> |
|||
<field name="inherit_id" ref="survey.survey_tree"/> |
|||
<field name="priority">25</field> |
|||
<field name="arch" type="xml"> |
|||
<tree position="attributes"> |
|||
<attribute name="decoration-muted">is_closed</attribute> |
|||
</tree> |
|||
<tree position="inside"> |
|||
<field name="is_closed" invisible="1"/> |
|||
</tree> |
|||
<field name="stage_id" position="after"> |
|||
<field name="date_deadline"/> |
|||
<field name="auto_close"/> |
|||
</field> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="survey_survey_kanban" model="ir.ui.view"> |
|||
<field name="name">survey_deadline_autoclose survey.survey kanban</field> |
|||
<field name="model">survey.survey</field> |
|||
<field name="inherit_id" ref="survey.survey_kanban"/> |
|||
<field name="priority">20</field> |
|||
<field name="arch" type="xml"> |
|||
<field name="title" position="after"> |
|||
<field name="date_deadline"/> |
|||
<field name="auto_close"/> |
|||
</field> |
|||
<li id="survey_test" position="before"> |
|||
<li t-if="record." id="deadline" class="text-muted" t-att-title="record.auto_close.raw_value and 'Clôture automatique à l'échéance or 'Clôture manuelle'"> |
|||
<t t-if="record.auto_close.raw_value">Échéance : <strong class="text-danger"><field name="date_deadline"/></strong></t> |
|||
<t t-else="">Échéance : <strong><field name="date_deadline"/></strong></t> |
|||
</li> |
|||
</li> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue