summaryrefslogtreecommitdiff
path: root/addons/website_event_questions/models/event_event.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event_questions/models/event_event.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_event_questions/models/event_event.py')
-rw-r--r--addons/website_event_questions/models/event_event.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/addons/website_event_questions/models/event_event.py b/addons/website_event_questions/models/event_event.py
new file mode 100644
index 00000000..f81f5316
--- /dev/null
+++ b/addons/website_event_questions/models/event_event.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class EventType(models.Model):
+ _inherit = 'event.type'
+
+ use_questions = fields.Boolean('Questions to Attendees')
+ question_ids = fields.One2many(
+ 'event.question', 'event_type_id',
+ string='Questions', copy=True)
+
+
+class EventEvent(models.Model):
+ """ Override Event model to add optional questions when buying tickets. """
+ _inherit = 'event.event'
+
+ question_ids = fields.One2many(
+ 'event.question', 'event_id', 'Questions', copy=True,
+ compute='_compute_question_ids', readonly=False, store=True)
+ general_question_ids = fields.One2many('event.question', 'event_id', 'General Questions',
+ domain=[('once_per_order', '=', True)])
+ specific_question_ids = fields.One2many('event.question', 'event_id', 'Specific Questions',
+ domain=[('once_per_order', '=', False)])
+
+ @api.depends('event_type_id')
+ def _compute_question_ids(self):
+ """ Update event questions from its event type. Depends are set only on
+ event_type_id itself to emulate an onchange. Changing event type content
+ itself should not trigger this method.
+
+ When synchronizing questions:
+
+ * lines that no answer are removed;
+ * type lines are added;
+ """
+ if self._origin.question_ids:
+ # lines to keep: those with already sent emails or registrations
+ questions_tokeep_ids = self.env['event.registration.answer'].search(
+ [('question_id', 'in', self._origin.question_ids.ids)]
+ ).question_id.ids
+ else:
+ questions_tokeep_ids = []
+ for event in self:
+ if not event.event_type_id and not event.question_ids:
+ event.question_ids = False
+ continue
+
+ if questions_tokeep_ids:
+ questions_toremove = event._origin.question_ids.filtered(lambda question: question.id not in questions_tokeep_ids)
+ command = [(3, question.id) for question in questions_toremove]
+ else:
+ command = [(5, 0)]
+ if event.event_type_id.use_mail_schedule:
+ command += [
+ (0, 0, {
+ 'title': question.title,
+ 'question_type': question.question_type,
+ 'sequence': question.sequence,
+ 'once_per_order': question.once_per_order,
+ 'answer_ids': [(0, 0, {
+ 'name': answer.name,
+ 'sequence': answer.sequence
+ }) for answer in question.answer_ids],
+ }) for question in event.event_type_id.question_ids
+ ]
+ event.question_ids = command