diff --git a/custom_matrix_survey/COPYRIGHT b/custom_matrix_survey/COPYRIGHT new file mode 100644 index 0000000..3143258 --- /dev/null +++ b/custom_matrix_survey/COPYRIGHT @@ -0,0 +1,15 @@ + +Most of the files are + + Copyright (c) 2012-TODAY Kanak Infosystems LLP + +Many files also contain contributions from third +parties. In this case the original copyright of +the contributions can be traced through the +history of the source version control system. + +When that is not the case, the files contain a prominent +notice stating the original copyright and applicable +license, or come with their own dedicated COPYRIGHT +and/or LICENSE file. + diff --git a/custom_matrix_survey/LICENSE b/custom_matrix_survey/LICENSE new file mode 100644 index 0000000..d99face --- /dev/null +++ b/custom_matrix_survey/LICENSE @@ -0,0 +1,11 @@ +Kanak Infosystems LLP Proprietary License v1.0 + +This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Kanak Infosystems LLP Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). + +You may develop Kanak Infosystems LLP modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Kanak Infosystems LLP Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). + +It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. + +The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/custom_matrix_survey/__init__.py b/custom_matrix_survey/__init__.py new file mode 100644 index 0000000..3b38916 --- /dev/null +++ b/custom_matrix_survey/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import models +from . import controllers diff --git a/custom_matrix_survey/__manifest__.py b/custom_matrix_survey/__manifest__.py new file mode 100644 index 0000000..a788d35 --- /dev/null +++ b/custom_matrix_survey/__manifest__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +################################################################################# +# Author : Kanak Infosystems LLP. () +# Copyright(c): 2012-Present Kanak Infosystems LLP. +# All Rights Reserved. +# +# +# This program is copyright property of the author mentioned above. +# You can`t redistribute it and/or modify it. +# +# +# You should have received a copy of the License along with this program. +# If not, see +################################################################################# + +{ + 'name': "Custom Matrix Survey", + 'version': '1.0', + 'summary': 'This app allows handling of complex survey forms with options like multiple choice questions, custom matrix etc.', + 'description': """ +Custom Matrix Survey. +================================ + """, + 'license': 'OPL-1', + 'author': "Kanak Infosystems LLP.", + 'website': "http://www.kanakinfosystems.com", + 'images': ['static/description/banner.jpg'], + 'category': 'Website', + 'depends': ['survey_crm'], + 'data': [ + 'security/ir.model.access.csv', + 'views/survey_views.xml', + 'views/custom_survey.xml', + ], + 'application': True, + 'price': 49, + 'currency': 'EUR', +} diff --git a/custom_matrix_survey/controllers/__init__.py b/custom_matrix_survey/controllers/__init__.py new file mode 100644 index 0000000..65a8c12 --- /dev/null +++ b/custom_matrix_survey/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import main diff --git a/custom_matrix_survey/controllers/main.py b/custom_matrix_survey/controllers/main.py new file mode 100644 index 0000000..5f852c1 --- /dev/null +++ b/custom_matrix_survey/controllers/main.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +import json +from odoo import http +from odoo.http import request +import logging +from odoo.addons.survey.controllers.main import Survey +_logger = logging.getLogger(__name__) + +class Survey(Survey): + @http.route(['/survey/prefill//', + '/survey/prefill///'], + type='http', auth='public', website=True) + def prefill(self, survey, token, page=None, **post): + UserInputLine = request.env['survey.user_input_line'] + ret = {} + # Fetch previous answers + if page: + previous_answers = UserInputLine.sudo().search([('user_input_id.token', '=', token), ('page_id', '=', page.id)]) + else: + previous_answers = UserInputLine.sudo().search([('user_input_id.token', '=', token)]) + # Return non empty answers in a JSON compatible format + for answer in previous_answers: + if not answer.skipped: + answer_tag = '%s_%s_%s' % (answer.survey_id.id, answer.page_id.id, answer.question_id.id) + answer_value = None + if answer.question_id.matrix_subtype == 'custom_row': + if answer.answer_type == 'free_text': + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = answer.value_free_text + elif answer.answer_type == 'text': + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = answer.value_text + elif answer.answer_type == 'number': + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = str(answer.value_number) + elif answer.answer_type == 'date': + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = answer.value_date + elif answer.answer_type == 'dropdown': + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = answer.value_dropdown.id + elif answer.answer_type == 'suggestion' and not answer.value_suggested_row: + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = answer.value_suggested.id + elif answer.answer_type == 'suggestion' and answer.value_suggested_row: + answer_tag = "%s_%s_%s" % (answer_tag, answer.value_suggested_row.id, answer.value_suggested.id) + answer_value = answer.value_suggested.id + if answer_value: + ret.setdefault(answer_tag, []).append(answer_value) + else: + _logger.warning("[survey] No answer has been found for question %s marked as non skipped" % answer_tag) + else: + if answer.answer_type == 'free_text': + answer_value = answer.value_free_text + elif answer.answer_type == 'text' and answer.question_id.type == 'textbox': + answer_value = answer.value_text + elif answer.answer_type == 'text' and answer.question_id.type != 'textbox': + # here come comment answers for matrices, simple choice and multiple choice + answer_tag = "%s_%s" % (answer_tag, 'comment') + answer_value = answer.value_text + elif answer.answer_type == 'number': + answer_value = str(answer.value_number) + elif answer.answer_type == 'date': + answer_value = answer.value_date + elif answer.answer_type == 'suggestion' and not answer.value_suggested_row: + answer_value = answer.value_suggested.id + elif answer.answer_type == 'suggestion' and answer.value_suggested_row: + answer_tag = "%s_%s" % (answer_tag, answer.value_suggested_row.id) + answer_value = answer.value_suggested.id + if answer_value: + ret.setdefault(answer_tag, []).append(answer_value) + else: + _logger.warning("[survey] No answer has been found for question %s marked as non skipped" % answer_tag) + return json.dumps(ret) \ No newline at end of file diff --git a/custom_matrix_survey/models/__init__.py b/custom_matrix_survey/models/__init__.py new file mode 100644 index 0000000..7e49d37 --- /dev/null +++ b/custom_matrix_survey/models/__init__.py @@ -0,0 +1 @@ +from . import survey diff --git a/custom_matrix_survey/models/survey.py b/custom_matrix_survey/models/survey.py new file mode 100644 index 0000000..eca2cdf --- /dev/null +++ b/custom_matrix_survey/models/survey.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, _ +from odoo.exceptions import UserError, ValidationError + + +def dict_keys_startswith(dictionary, string): + """Returns a dictionary containing the elements of whose keys start with . + .. note:: + This function uses dictionary comprehensions (Python >= 2.7) + """ + return {k: v for k, v in dictionary.items() if k.startswith(string)} + +class SurveyQuestion(models.Model): + _inherit = 'survey.question' + + matrix_subtype = fields.Selection([('simple', 'One choice per row'), + ('multiple', 'Multiple choices per row'), ('custom_row', 'Custom Matrix')], string='Matrix Type', default='simple') + + @api.multi + def validate_matrix(self, post, answer_tag): + self.ensure_one() + errors = {} + if self.constr_mandatory: + lines_number = len(self.labels_ids_2) + answer_candidates = dict_keys_startswith(post, answer_tag) + answer_candidates.pop(("%s_%s" % (answer_tag, 'comment')), '').strip() + # Number of lines that have been answered + if self.matrix_subtype == 'simple': + answer_number = len(answer_candidates) + elif self.matrix_subtype == 'multiple': + answer_number = len({sk.rsplit('_', 1)[0] for sk in answer_candidates}) + elif self.matrix_subtype == 'custom_row': + answer_number = len({sk.rsplit('_', 1)[0] for sk in answer_candidates}) + else: + raise RuntimeError("Invalid matrix subtype") + # Validate that each line has been answered + if answer_number != lines_number: + errors.update({answer_tag: self.constr_error_msg}) + return errors + +class SurveyLabel(models.Model): + _inherit = 'survey.label' + type = fields.Selection([ + ('free_text', 'Multiple Lines Text Box'), + ('textbox', 'Single Line Text Box'), + ('numerical_box', 'Numerical Value'), + ('dropdown', 'Dropdown'), + ('checkbox', 'Checkbox') + ], string='Type of Question', default="checkbox") + + dpvalues = fields.Many2many('dp.attributes.value', string="values") + +class SurveyLabelManyTags(models.Model): + _name = 'dp.attributes.value' + + name = fields.Char("Name") + +class SurveyUserInputLine(models.Model): + _inherit = 'survey.user_input_line' + + answer_type = fields.Selection([ + ('text', 'Text'), + ('number', 'Number'), + ('date', 'Date'), + ('free_text', 'Free Text'), + ('suggestion', 'Suggestion'), ('dropdown', 'Dropdown')], string='Answer Type') + + value_dropdown = fields.Many2one('dp.attributes.value', string="Value Dropdown") + matrix_subtype_id = fields.Selection(related='question_id.matrix_subtype', string="Matrix subtype") + + @api.model + def save_line_matrix(self, user_input_id, question, post, answer_tag): + vals = { + 'user_input_id': user_input_id, + 'question_id': question.id, + 'survey_id': question.survey_id.id, + 'skipped': False + } + old_uil = self.search([ + ('user_input_id', '=', user_input_id), + ('survey_id', '=', question.survey_id.id), + ('question_id', '=', question.id) + ]) + old_uil.sudo().unlink() + + no_answers = True + ca_dict = dict_keys_startswith(post, answer_tag + '_') + + comment_answer = ca_dict.pop(("%s_%s" % (answer_tag, 'comment')), '').strip() + if comment_answer: + vals.update({'answer_type': 'text', 'value_text': comment_answer}) + self.create(vals) + no_answers = False + + if question.matrix_subtype == 'simple': + for row in question.labels_ids_2: + a_tag = "%s_%s" % (answer_tag, row.id) + if a_tag in ca_dict: + no_answers = False + vals.update({'answer_type': 'suggestion', 'value_suggested': ca_dict[a_tag], 'value_suggested_row': row.id}) + self.create(vals) + + elif question.matrix_subtype == 'multiple': + for col in question.labels_ids: + for row in question.labels_ids_2: + a_tag = "%s_%s_%s" % (answer_tag, row.id, col.id) + if a_tag in ca_dict: + no_answers = False + vals.update({'answer_type': 'suggestion', 'value_suggested': col.id, 'value_suggested_row': row.id}) + self.create(vals) + elif question.matrix_subtype == 'custom_row': + for col in question.labels_ids: + for row in question.labels_ids_2: + a_tag = "%s_%s_%s" % (answer_tag, row.id, col.id) + if a_tag in ca_dict: + no_answers = False + if post.get(a_tag): + sline = a_tag.split('_')[-1] + label_obj = question.labels_ids.browse(int(sline)) + if label_obj.type == 'textbox': + vals.update({'answer_type': 'text', 'value_suggested': col.id, 'value_suggested_row': row.id, 'value_text': post.get(a_tag)}) + elif label_obj.type == 'free_text': + vals.update({'answer_type': 'free_text', 'value_suggested': col.id, 'value_suggested_row': row.id, 'value_free_text': post.get(a_tag)}) + elif label_obj.type == 'numerical_box': + vals.update({'answer_type': 'number', 'value_suggested': col.id, 'value_suggested_row': row.id, 'value_number': post.get(a_tag)}) + elif label_obj.type == 'date': + vals.update({'answer_type': 'date', 'value_suggested': col.id, 'value_suggested_row': row.id, 'value_date': post.get(a_tag)}) + elif label_obj.type == 'dropdown': + vals.update({'answer_type': 'dropdown', 'value_suggested': col.id, 'value_suggested_row': row.id, 'value_dropdown': int(post.get(a_tag))}) + else: + vals.update({'answer_type': 'suggestion', 'value_suggested': col.id, 'value_suggested_row': row.id}) + self.create(vals) + + if no_answers: + vals.update({'answer_type': None, 'skipped': True}) + self.create(vals) + return True \ No newline at end of file diff --git a/custom_matrix_survey/security/ir.model.access.csv b/custom_matrix_survey/security/ir.model.access.csv new file mode 100644 index 0000000..0550a48 --- /dev/null +++ b/custom_matrix_survey/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_dp_attributes_value,access_dp_attributes_value,model_dp_attributes_value,,1,1,1,1 diff --git a/custom_matrix_survey/static/description/banner.jpg b/custom_matrix_survey/static/description/banner.jpg new file mode 100644 index 0000000..8177cdb Binary files /dev/null and b/custom_matrix_survey/static/description/banner.jpg differ diff --git a/custom_matrix_survey/static/description/call-icon.png b/custom_matrix_survey/static/description/call-icon.png new file mode 100644 index 0000000..14f116d Binary files /dev/null and b/custom_matrix_survey/static/description/call-icon.png differ diff --git a/custom_matrix_survey/static/description/color code.txt b/custom_matrix_survey/static/description/color code.txt new file mode 100644 index 0000000..4d68dc8 --- /dev/null +++ b/custom_matrix_survey/static/description/color code.txt @@ -0,0 +1,2 @@ +Blue color: 123246 +Red Color: dc1d1d \ No newline at end of file diff --git a/custom_matrix_survey/static/description/features-icon.png b/custom_matrix_survey/static/description/features-icon.png new file mode 100644 index 0000000..8d6b2f7 Binary files /dev/null and b/custom_matrix_survey/static/description/features-icon.png differ diff --git a/custom_matrix_survey/static/description/icon-2.png b/custom_matrix_survey/static/description/icon-2.png new file mode 100644 index 0000000..447419b Binary files /dev/null and b/custom_matrix_survey/static/description/icon-2.png differ diff --git a/custom_matrix_survey/static/description/icon-3.png b/custom_matrix_survey/static/description/icon-3.png new file mode 100644 index 0000000..87af289 Binary files /dev/null and b/custom_matrix_survey/static/description/icon-3.png differ diff --git a/custom_matrix_survey/static/description/icon-4.png b/custom_matrix_survey/static/description/icon-4.png new file mode 100644 index 0000000..a3340a7 Binary files /dev/null and b/custom_matrix_survey/static/description/icon-4.png differ diff --git a/custom_matrix_survey/static/description/icon-5.png b/custom_matrix_survey/static/description/icon-5.png new file mode 100644 index 0000000..65d77bd Binary files /dev/null and b/custom_matrix_survey/static/description/icon-5.png differ diff --git a/custom_matrix_survey/static/description/icon-6.png b/custom_matrix_survey/static/description/icon-6.png new file mode 100644 index 0000000..7a1044f Binary files /dev/null and b/custom_matrix_survey/static/description/icon-6.png differ diff --git a/custom_matrix_survey/static/description/icon.png b/custom_matrix_survey/static/description/icon.png new file mode 100644 index 0000000..b27344b Binary files /dev/null and b/custom_matrix_survey/static/description/icon.png differ diff --git a/custom_matrix_survey/static/description/icon1.png b/custom_matrix_survey/static/description/icon1.png new file mode 100644 index 0000000..00b2c78 Binary files /dev/null and b/custom_matrix_survey/static/description/icon1.png differ diff --git a/custom_matrix_survey/static/description/index.html b/custom_matrix_survey/static/description/index.html new file mode 100644 index 0000000..eb284b6 --- /dev/null +++ b/custom_matrix_survey/static/description/index.html @@ -0,0 +1,248 @@ +
+
+
+

+ Matrix Survey +

+
+
+
+
+
+
+

Create Survey & Add Survey pages

+
+
+
+
+ +
+
+
+
+
+
+
+
+

Add questions for survey page

+
+
+ +
+
+
+
+
+
+
+
+

Set question type as "matrix"

+
+
+ +
+
+
+
+
+
+
+
+

Set type of matrix

+
+
+ +
+
+
+
+
+
+
+
+

+ Add answer's choices & Set display type of questions
+ with different types of input methods +

+
+
+ +
+
+
+
+
+
+
+
+

Add multiple header rows

+
+
+ +
+
+
+
+
+
+
+
+

Fill survey

+
+
+ +
+
+
+
+
+
+
+
+

View filled answers of survey

+
+
+ +
+
+
+
+
+
+
+
+

Get print in .pdf

+
+
+ +
+
+
+
+
+
+
+
+

PDF view

+
+
+ +
+
+
+
+
+
+
+
+

Print filled answers

+
+
+ +
+
+
+
+
+
+
+
+

Filled Answers

+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
"We are groupies wrapped in Creativity, Skills and Innovation"
+

We are authorized IT company to offer advanced, hight quality and affordable IT solutions. We have years of rich experience in the field of ODOO Development, ERP Solutions, Web Development, Mobile Apps, Web Designing and Digital marketing. Around a decade are offering quality assured and 100% customer satisfaction services to global clientele.

+ +

Our highly experienced and devoted team of professionals works with there heart, passion and talent to provide the most dedicated IT Business Solutions to our valuable clients globally. Our team works on the real words "Dedication,"Timely Deliverables",And "Happy Clients"!

+
+
+
+
+

What We Do

+
+
+
+
+ +
Odoo Customization
+
+
+ +
Odoo Code Migration
+
+
+ +
Odoo Mobile App
+
+
+ +
Odoo DB Migration
+
+
+ +
Odoo Web Development
+
+
+ +
Odoo Themes
+
+
+ +
+ +
+
+
+ + Help +
+
+ + Support +
+
+ + Request New Features +
+
+
+
+
+
+
diff --git a/custom_matrix_survey/static/description/logo.png b/custom_matrix_survey/static/description/logo.png new file mode 100644 index 0000000..78fdb08 Binary files /dev/null and b/custom_matrix_survey/static/description/logo.png differ diff --git a/custom_matrix_survey/static/description/main_image.jpg b/custom_matrix_survey/static/description/main_image.jpg new file mode 100755 index 0000000..5b48b41 Binary files /dev/null and b/custom_matrix_survey/static/description/main_image.jpg differ diff --git a/custom_matrix_survey/static/description/support-icon.png b/custom_matrix_survey/static/description/support-icon.png new file mode 100644 index 0000000..c169f79 Binary files /dev/null and b/custom_matrix_survey/static/description/support-icon.png differ diff --git a/custom_matrix_survey/static/description/survey_1.png b/custom_matrix_survey/static/description/survey_1.png new file mode 100644 index 0000000..0816ad9 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_1.png differ diff --git a/custom_matrix_survey/static/description/survey_10.png b/custom_matrix_survey/static/description/survey_10.png new file mode 100644 index 0000000..ca397ef Binary files /dev/null and b/custom_matrix_survey/static/description/survey_10.png differ diff --git a/custom_matrix_survey/static/description/survey_11.png b/custom_matrix_survey/static/description/survey_11.png new file mode 100644 index 0000000..901a3e1 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_11.png differ diff --git a/custom_matrix_survey/static/description/survey_12.png b/custom_matrix_survey/static/description/survey_12.png new file mode 100644 index 0000000..0d58894 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_12.png differ diff --git a/custom_matrix_survey/static/description/survey_13.png b/custom_matrix_survey/static/description/survey_13.png new file mode 100644 index 0000000..46e65fb Binary files /dev/null and b/custom_matrix_survey/static/description/survey_13.png differ diff --git a/custom_matrix_survey/static/description/survey_2.png b/custom_matrix_survey/static/description/survey_2.png new file mode 100644 index 0000000..b79280c Binary files /dev/null and b/custom_matrix_survey/static/description/survey_2.png differ diff --git a/custom_matrix_survey/static/description/survey_3.png b/custom_matrix_survey/static/description/survey_3.png new file mode 100644 index 0000000..1c37524 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_3.png differ diff --git a/custom_matrix_survey/static/description/survey_4.png b/custom_matrix_survey/static/description/survey_4.png new file mode 100644 index 0000000..d7d1f16 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_4.png differ diff --git a/custom_matrix_survey/static/description/survey_5.png b/custom_matrix_survey/static/description/survey_5.png new file mode 100644 index 0000000..b079065 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_5.png differ diff --git a/custom_matrix_survey/static/description/survey_6.png b/custom_matrix_survey/static/description/survey_6.png new file mode 100644 index 0000000..a50a096 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_6.png differ diff --git a/custom_matrix_survey/static/description/survey_8.png b/custom_matrix_survey/static/description/survey_8.png new file mode 100644 index 0000000..12633c9 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_8.png differ diff --git a/custom_matrix_survey/static/description/survey_9.png b/custom_matrix_survey/static/description/survey_9.png new file mode 100644 index 0000000..df36c99 Binary files /dev/null and b/custom_matrix_survey/static/description/survey_9.png differ diff --git a/custom_matrix_survey/static/src/js/custom.js b/custom_matrix_survey/static/src/js/custom.js new file mode 100644 index 0000000..4f58016 --- /dev/null +++ b/custom_matrix_survey/static/src/js/custom.js @@ -0,0 +1,7 @@ +odoo.define('custom_matrix_survey.custom', function(require) { +"use strict"; + // var ajax = require('web.ajax'); + $(document).ready(function() { + + }); +}); diff --git a/custom_matrix_survey/views/assets.xml b/custom_matrix_survey/views/assets.xml new file mode 100644 index 0000000..9c779e3 --- /dev/null +++ b/custom_matrix_survey/views/assets.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/custom_matrix_survey/views/custom_survey.xml b/custom_matrix_survey/views/custom_survey.xml new file mode 100644 index 0000000..933b778 --- /dev/null +++ b/custom_matrix_survey/views/custom_survey.xml @@ -0,0 +1,127 @@ + + + + + + + + + \ No newline at end of file diff --git a/custom_matrix_survey/views/survey_views.xml b/custom_matrix_survey/views/survey_views.xml new file mode 100644 index 0000000..79d47b2 --- /dev/null +++ b/custom_matrix_survey/views/survey_views.xml @@ -0,0 +1,49 @@ + + + + Form view for survey custom question + survey.question + + + + + + + + + + + survey_user_input_line_custom_form + survey.user_input_line + + + + + + + + + + + + + + + survey_user_input_custom_form + survey.user_input + + + +