[IMP] survey_event_registration_generation:

New type of question : multiple event products
This commit is contained in:
clementthomas
2023-10-24 10:57:55 +02:00
parent d5a834f3c9
commit 2690d69696
6 changed files with 85 additions and 30 deletions

View File

@@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 16.0\n" "Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-10-03 10:07+0000\n" "POT-Creation-Date: 2023-10-24 08:53+0000\n"
"PO-Revision-Date: 2023-10-03 10:07+0000\n" "PO-Revision-Date: 2023-10-24 08:53+0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -19,7 +19,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.question_event #: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.question_event
#: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.question_event_product #: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.question_event_product
msgid "<option>Please select...</option>" msgid "<option>Please select...</option>"
msgstr "" msgstr "<option>Veuillez sélectionner...</option>"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__answer_type #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__answer_type
@@ -28,11 +28,12 @@ msgstr "Type de réponse"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model,name:survey_event_registration_generation.model_event_event #: model:ir.model,name:survey_event_registration_generation.model_event_event
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input__event_id
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__value_event #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__value_event
#: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_question__question_type__event #: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_question__question_type__event
#: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_user_input_line__answer_type__event #: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_user_input_line__answer_type__event
msgid "Event" msgid "Event"
msgstr "Événement" msgstr "Session de formation"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question__event_registration_allowed_field_ids #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question__event_registration_allowed_field_ids
@@ -45,11 +46,12 @@ msgid "Event Stage"
msgstr "Étape de session de formation" msgstr "Étape de session de formation"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input__event_product_id
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__value_event_product #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__value_event_product
#: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_question__question_type__event_product #: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_question__question_type__event_product
#: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_user_input_line__answer_type__event_product #: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_user_input_line__answer_type__event_product
msgid "Event product" msgid "Event product"
msgstr "Produit d'événement" msgstr "Produit de formation"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question__event_product_question_id #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question__event_product_question_id
@@ -60,23 +62,17 @@ msgstr "Question sur les produits d'événements"
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input__registration_id #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input__registration_id
#: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.survey_question_form #: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.survey_question_form
msgid "Event registration" msgid "Event registration"
msgstr "Inscription à un événement" msgstr "Inscription à une session de formation"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question__event_registration_field #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question__event_registration_field
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question_answer__event_registration_field
msgid "Event registration field" msgid "Event registration field"
msgstr "Champ d'inscription à un événement" msgstr "Champ d'inscription à une formation"
#. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_question_answer__event_registration_field_resource_ref
msgid "Event registration field value"
msgstr "Valeur du champs d'inscription à un événement"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.survey_form #: model_terms:ir.ui.view,arch_db:survey_event_registration_generation.survey_form
msgid "Events registrations" msgid "Events registrations"
msgstr "Inscriptions aux événements" msgstr "Inscriptions aux sessions de formation"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_survey__generate_registration #: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_survey__generate_registration
@@ -85,7 +81,7 @@ msgstr "Générer une inscription"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,help:survey_event_registration_generation.field_survey_survey__generate_registration #: model:ir.model.fields,help:survey_event_registration_generation.field_survey_survey__generate_registration
msgid "Generate registration for selected event" msgid "Generate event registration for selected event"
msgstr "Générer un inscription pour les événements selectionnés" msgstr "Générer un inscription pour les événements selectionnés"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
@@ -94,15 +90,22 @@ msgid ""
"If you specify question of event product, only events of selected product " "If you specify question of event product, only events of selected product "
"will be proposed." "will be proposed."
msgstr "" msgstr ""
"Si vous indiquez la question du produit d'événement, seuls les événements " "Si vous indiquez la question du produit de formation, seuls les sessions de "
"correspondants seront proposés" "formation correspondantes seront proposés"
#. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_survey_user_input_line__value_multiple_event_products
#: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_question__question_type__multiple_event_products
#: model:ir.model.fields.selection,name:survey_event_registration_generation.selection__survey_user_input_line__answer_type__multiple_event_products
msgid "Multiple event products"
msgstr "Multiples produits de formation"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#. odoo-javascript #. odoo-javascript
#: code:addons/survey_event_registration_generation/static/src/js/survey_form.js:0 #: code:addons/survey_event_registration_generation/static/src/js/survey_form.js:0
#, python-format #, python-format
msgid "Please select..." msgid "Please select..."
msgstr "" msgstr "Veuillez sélectionner..."
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model,name:survey_event_registration_generation.model_product_product #: model:ir.model,name:survey_event_registration_generation.model_product_product
@@ -119,19 +122,14 @@ msgstr "Type de question"
msgid "" msgid ""
"Select the question asking for event product, to filter proposed events." "Select the question asking for event product, to filter proposed events."
msgstr "" msgstr ""
"Selectionnez la question portant sur le produit de l'événement, afin de " "Selectionnez la question portant sur le produit de formation, afin de filter"
"filter les événements selectionnés" " les sessions de formation selectionnées"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model,name:survey_event_registration_generation.model_survey_survey #: model:ir.model,name:survey_event_registration_generation.model_survey_survey
msgid "Survey" msgid "Survey"
msgstr "Questionnaire" msgstr "Questionnaire"
#. module: survey_event_registration_generation
#: model:ir.model,name:survey_event_registration_generation.model_survey_question_answer
msgid "Survey Label"
msgstr "Étiquette du questionnaire"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model,name:survey_event_registration_generation.model_survey_question #: model:ir.model,name:survey_event_registration_generation.model_survey_question
msgid "Survey Question" msgid "Survey Question"
@@ -150,4 +148,4 @@ msgstr "Ligne d'entrée pour l'utilisateur du questionnaire"
#. module: survey_event_registration_generation #. module: survey_event_registration_generation
#: model:ir.model.fields,field_description:survey_event_registration_generation.field_event_stage__visible_in_survey #: model:ir.model.fields,field_description:survey_event_registration_generation.field_event_stage__visible_in_survey
msgid "Visible in surveys" msgid "Visible in surveys"
msgstr "Visible dans les sondages" msgstr "Visible dans les questionnaires"

View File

@@ -5,7 +5,7 @@ class SurveyQuestion(models.Model):
_inherit = 'survey.question' _inherit = 'survey.question'
question_type = fields.Selection( question_type = fields.Selection(
selection_add=[('event_product', 'Event product'),('event', 'Event')]) #event_product : List product used in tickets of visible events selection_add=[('event_product', 'Event product'),('event', 'Event'),('multiple_event_products', 'Multiple event products')]) #event_product : List product used in tickets of visible events
#event : List events visible in surveys #event : List events visible in surveys
@@ -13,7 +13,7 @@ class SurveyQuestion(models.Model):
'survey.question', string="Event product question", copy=False, compute="_compute_event_product_question_id", 'survey.question', string="Event product question", copy=False, compute="_compute_event_product_question_id",
store=True, readonly=False, help="If you specify question of event product, only events of selected product will be proposed.", store=True, readonly=False, help="If you specify question of event product, only events of selected product will be proposed.",
domain="[('survey_id', '=', survey_id), \ domain="[('survey_id', '=', survey_id), \
'&', ('question_type', '=', 'event_product'), \ '&', ('question_type', 'in', ['event_product','multiple_event_products']), \
'|', \ '|', \
('sequence', '<', sequence), \ ('sequence', '<', sequence), \
'&', ('sequence', '=', sequence), ('id', '<', id)]") #event product question, used by event question, to filter list of events '&', ('sequence', '=', sequence), ('id', '<', id)]") #event product question, used by event question, to filter list of events

View File

@@ -53,6 +53,8 @@ class SurveyUserInput(models.Model):
]) ])
if question.question_type == 'event_product': if question.question_type == 'event_product':
self._save_event_product(question, old_answers, answer) self._save_event_product(question, old_answers, answer)
elif question.question_type == 'multiple_event_products':
self._save_multiple_event_products(question, old_answers, answer)
elif question.question_type == 'event': elif question.question_type == 'event':
self._save_event(question, old_answers, answer) self._save_event(question, old_answers, answer)
else: else:
@@ -74,6 +76,25 @@ class SurveyUserInput(models.Model):
else: else:
return self.env['survey.user_input.line'].create(vals) return self.env['survey.user_input.line'].create(vals)
def _save_multiple_event_products(self, question, old_answers, answer):
"""
Save multiple event products to user_input.line
"""
vals = self._get_line_answer_values(question, answer, question.question_type)
if 'value_multiple_event_products' in vals:
if isinstance(vals['value_multiple_event_products'], str) and vals['value_multiple_event_products'].isnumeric():
vals['value_multiple_event_products'] = [int(vals['value_multiple_event_products'])]
elif type(vals['value_multiple_event_products']) == list:
vals['value_multiple_event_products'] = [int(product_id) for product_id in vals['value_multiple_event_products']]
else:
vals['value_multiple_event_products'] = None
if old_answers:
old_answers.write(vals)
return old_answers
else:
return self.env['survey.user_input.line'].create(vals)
def _save_event(self, question, old_answers, answer): def _save_event(self, question, old_answers, answer):
""" """
Save event to user_input.line Save event to user_input.line

View File

@@ -13,10 +13,11 @@ class SurveyUserInputLine(models.Model):
_inherit = 'survey.user_input.line' _inherit = 'survey.user_input.line'
answer_type = fields.Selection( answer_type = fields.Selection(
selection_add=[('event_product', 'Event product'),('event', 'Event')]) #event_product if answer is a ticket Product, event if answer is an event selection_add=[('multiple_event_products', 'Multiple event products'), ('event_product', 'Event product'),('event', 'Event')]) #event_product if answer is a ticket Product, event if answer is an event
value_event = fields.Many2one('event.event', string="Event") #selected event value_event = fields.Many2one('event.event', string="Event") #selected event
value_event_product = fields.Many2one('product.product', string="Event product") #selected product value_event_product = fields.Many2one('product.product', string="Event product") #selected product
value_multiple_event_products = fields.Many2many('product.product', string="Multiple event products") #selected products
def _compute_display_name(self): def _compute_display_name(self):
"""display event product name, or event name, depending on answer type """display event product name, or event name, depending on answer type
@@ -25,6 +26,8 @@ class SurveyUserInputLine(models.Model):
for line in self: for line in self:
if line.answer_type == 'event_product': if line.answer_type == 'event_product':
line.display_name = line.value_event_product.name line.display_name = line.value_event_product.name
elif line.answer_type == 'multiple_event_products':
line.display_name = ','.join([product.name for product in line.value_multiple_event_products])
elif line.answer_type == 'event': elif line.answer_type == 'event':
line.display_name = line.value_event.name line.display_name = line.value_event.name

View File

@@ -18,7 +18,13 @@ SurveyFormWidget.include({
this.$('[data-question-type]').each(function () { this.$('[data-question-type]').each(function () {
if (['event','event_product'].includes($(this).data('questionType'))) { if (['event','event_product'].includes($(this).data('questionType'))) {
params[this.name] = this.value; params[this.name] = this.value;
} } else if ($(this).data('questionType') == 'multiple_event_products') {
$(this).find('input:checked').each(function () {
if (this.value !== '-1') {
params = self._prepareSubmitAnswer(params, this.name, this.value);
}
});
}
}); });
return result; return result;

View File

@@ -2,6 +2,7 @@
<template id="question_container" name="survey_event_registration_generation question container" inherit_id="survey.question_container"> <template id="question_container" name="survey_event_registration_generation question container" inherit_id="survey.question_container">
<xpath expr="//div[@role='alert']" position="before"> <xpath expr="//div[@role='alert']" position="before">
<t t-if="question.question_type == 'event_product'"><t t-call="survey_event_registration_generation.question_event_product" /></t> <t t-if="question.question_type == 'event_product'"><t t-call="survey_event_registration_generation.question_event_product" /></t>
<t t-if="question.question_type == 'multiple_event_products'"><t t-call="survey_event_registration_generation.question_multiple_event_products" /></t>
<t t-if="question.question_type == 'event'"><t t-call="survey_event_registration_generation.question_event" /></t> <t t-if="question.question_type == 'event'"><t t-call="survey_event_registration_generation.question_event" /></t>
</xpath> </xpath>
</template> </template>
@@ -31,6 +32,32 @@
</div> </div>
</template> </template>
<!-- Multiple Event product selector -->
<template id="question_multiple_event_products" name="Question: event product">
<div class="row o_survey_form_choice o_survey_question_multiple_choice"
t-att-data-name="question.id"
t-att-data-question-type="question.question_type">
<t t-set="item_idx" t-value="0"/>
<div class="d-flex flex-wrap col-lg-12">
<t t-set="has_correct_answer" t-value="scoring_display_correction and any(label.is_correct for label in question.suggested_answer_ids)"/>
<t t-foreach="event_products" t-as="event_product">
<label t-att-class="'o_survey_choice_btn form-label me-2 py-1 px-3 rounded %s' % ('o_survey_selected' if answer_line else '')">
<input type="checkbox" t-att-value='event_product.id' class="o_survey_form_choice_item invisible position-absolute"
t-att-name="question.id" />
<span class="ms-2 text-break" t-field='event_product.name'/>
<i class="fa fa-check-circle float-end mt-1 position-relative"></i>
<i class="fa fa-circle-thin float-end mt-1 position-relative"></i>
</label>
</t>
</div>
</div>
</template>
<!-- Event selector --> <!-- Event selector -->
<template id="question_event" name="Question: event"> <template id="question_event" name="Question: event">
<div class="o_survey_comment_container p-0"> <div class="o_survey_comment_container p-0">