[NEW] survey_record_generation
This commit is contained in:
1
survey_record_generation/__init__.py
Normal file
1
survey_record_generation/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
26
survey_record_generation/__manifest__.py
Normal file
26
survey_record_generation/__manifest__.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Survey record generation",
|
||||||
|
'summary': 'Allow to create record of any model when sending the form',
|
||||||
|
'description': """
|
||||||
|
Allow to create record of any model when sending the form :
|
||||||
|
----------------------------------------------------
|
||||||
|
* Choose list of models created on survey submission
|
||||||
|
* Set default values for record created
|
||||||
|
* Associate question with fields
|
||||||
|
* For x2m fields : Associate values to questions
|
||||||
|
""",
|
||||||
|
"version": "16.0.1.0.0",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://www.elabore.coop",
|
||||||
|
"category": "",
|
||||||
|
"depends": ["survey"],
|
||||||
|
"data": [
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
"views/survey_survey_views.xml",
|
||||||
|
"views/survey_question_views.xml",
|
||||||
|
],
|
||||||
|
"installable": True,
|
||||||
|
}
|
6
survey_record_generation/models/__init__.py
Normal file
6
survey_record_generation/models/__init__.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
from . import survey_question_answer
|
||||||
|
from . import survey_question
|
||||||
|
from . import survey_record_creation_field_values
|
||||||
|
from . import survey_record_creation
|
||||||
|
from . import survey_survey
|
||||||
|
from . import survey_user_input
|
25
survey_record_generation/models/survey_question.py
Normal file
25
survey_record_generation/models/survey_question.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyQuestion(models.Model):
|
||||||
|
_inherit = 'survey.question'
|
||||||
|
|
||||||
|
model_id = fields.Many2one('ir.model', string="Model")
|
||||||
|
answer_values_type = fields.Selection([('no', 'No values'),('value','Value'),('record','Record')])
|
||||||
|
|
||||||
|
@api.onchange('model_id')
|
||||||
|
def onchange_model_id(self):
|
||||||
|
if self.model_id:
|
||||||
|
rec = self.env[self.model_id.model].search([], limit=1)
|
||||||
|
if not rec:
|
||||||
|
raise UserError(_('No record found in %s',self.model_id.name))
|
||||||
|
else:
|
||||||
|
for answer in self.suggested_answer_ids:
|
||||||
|
answer.record_id = f"{self.model_id.model},{rec.id}"
|
||||||
|
|
42
survey_record_generation/models/survey_question_answer.py
Normal file
42
survey_record_generation/models/survey_question_answer.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyQuestionAnswer(models.Model):
|
||||||
|
_inherit = 'survey.question.answer'
|
||||||
|
|
||||||
|
record_id = fields.Reference(string="Referenced record", selection='_selection_target_model')
|
||||||
|
model_id = fields.Many2one('ir.model', related="question_id.model_id")
|
||||||
|
answer_values_type = fields.Selection(related="question_id.answer_values_type")
|
||||||
|
value_char = fields.Char('Value')
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _selection_target_model(self):
|
||||||
|
return [(model.model, model.name) for model in self.env['ir.model'].sudo().search([])]
|
||||||
|
|
||||||
|
@api.onchange('record_id')
|
||||||
|
def onchange_record_id(self):
|
||||||
|
if self.record_id:
|
||||||
|
self.value = self.record_id.display_name
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def default_get(self, fields):
|
||||||
|
result = super().default_get(fields)
|
||||||
|
if (
|
||||||
|
not result.get("model_id")
|
||||||
|
or "record_id" not in fields
|
||||||
|
):
|
||||||
|
return result
|
||||||
|
|
||||||
|
model = self.env['ir.model'].browse(result.get("model_id")).model
|
||||||
|
res = self.env[model].search([], limit=1)
|
||||||
|
if res:
|
||||||
|
result["record_id"] = "%s,%s" % (
|
||||||
|
model,
|
||||||
|
res.id,
|
||||||
|
)
|
||||||
|
return result
|
42
survey_record_generation/models/survey_record_creation.py
Normal file
42
survey_record_generation/models/survey_record_creation.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyRecordCreation(models.Model):
|
||||||
|
"""Configure list of models for wich record will be created on survey submission
|
||||||
|
"""
|
||||||
|
_name = 'survey.record.creation'
|
||||||
|
|
||||||
|
name = fields.Char('Name')
|
||||||
|
survey_id = fields.Many2one('survey.survey', string="Survey")
|
||||||
|
model_id = fields.Many2one('ir.model', "Model", help="Model of generated record")
|
||||||
|
field_values_ids = fields.One2many('survey.record.creation.field.values', 'survey_record_creation_id', string="Field values")
|
||||||
|
warning_message = fields.Html('Warning message', compute="_compute_warning_message")
|
||||||
|
|
||||||
|
@api.onchange('model_id')
|
||||||
|
def clear_field_values_ids(self):
|
||||||
|
self.field_values_ids = None
|
||||||
|
|
||||||
|
@api.depends('model_id','field_values_ids')
|
||||||
|
def _compute_warning_message(self):
|
||||||
|
for record_creation in self:
|
||||||
|
# check if all mandatory fields set
|
||||||
|
if record_creation.model_id:
|
||||||
|
required_field_ids = self.model_id.field_id.filtered(lambda f:f.required and "property_" not in f.name)
|
||||||
|
set_field_ids = self.field_values_ids.field_id
|
||||||
|
missing_fields = required_field_ids - set_field_ids
|
||||||
|
|
||||||
|
if missing_fields:
|
||||||
|
record_creation.warning_message = _("Some required fields are not set : %s",', '.join([f"<b>{f.field_description}</b> (<i>{f.name}</i>)" for f in missing_fields]))
|
||||||
|
else:
|
||||||
|
record_creation.warning_message = None
|
||||||
|
else:
|
||||||
|
record_creation.warning_message = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -0,0 +1,189 @@
|
|||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
from odoo.tools.misc import format_date
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
type_mapping = {
|
||||||
|
"char": ["char_box", "numerical_box", "date", "datetime", "simple_choice", "multiple_choice"],
|
||||||
|
"text": ["char_box", "date"],
|
||||||
|
"html": ["text_box", "numerical_box", "datetime", "simple_choice", "multiple_choice"],
|
||||||
|
"integer": ["numerical_box"],
|
||||||
|
"float": ["numerical_box"],
|
||||||
|
"date": ["date"],
|
||||||
|
"datetime": ["datetime"],
|
||||||
|
"many2one": ["simple_choice"],
|
||||||
|
"many2many": ["multiple_choice"],
|
||||||
|
"selection": ["char_box"]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyRecordCreationFieldValues(models.Model):
|
||||||
|
"""Configure default values of records created on survey submission
|
||||||
|
"""
|
||||||
|
_name = 'survey.record.creation.field.values'
|
||||||
|
|
||||||
|
survey_record_creation_id = fields.Many2one('survey.record.creation')
|
||||||
|
survey_id = fields.Many2one('survey.survey', related="survey_record_creation_id.survey_id")
|
||||||
|
model_id = fields.Many2one('ir.model', related="survey_record_creation_id.model_id")
|
||||||
|
|
||||||
|
field_id = fields.Many2one(
|
||||||
|
'ir.model.fields',
|
||||||
|
domain="[('model_id','=',model_id),('readonly','=',False),('ttype','in',['char','selection','text','html','integer','float','date','datetime','many2one','many2many'])]")
|
||||||
|
field_relation = fields.Char(related='field_id.relation')
|
||||||
|
field_type = fields.Selection(related="field_id.ttype")
|
||||||
|
field_help = fields.Html('Help', compute="_compute_field_help")
|
||||||
|
|
||||||
|
value_origin = fields.Selection(
|
||||||
|
[('fixed','Fixed'),('question','Question'),('other_record','From other created record')],
|
||||||
|
string="Value origin",
|
||||||
|
required=True,
|
||||||
|
default='fixed',
|
||||||
|
help="""* Fixed: you can set the value in value field
|
||||||
|
* Question: Response of the question will set the value. If you do not see your question, maybe the type of question do not match the type of field
|
||||||
|
* From other created record: You can set other record creation to link several created records. Can only be used with many2one fields.""")
|
||||||
|
|
||||||
|
fixed_value_many2one = fields.Reference(string='Record', selection='_selection_target_model')
|
||||||
|
fixed_value_many2many = fields.One2many('survey.record.creation.field.values.x2m', "survey_record_creation_field_values_id")
|
||||||
|
fixed_value_char = fields.Char("Value")
|
||||||
|
fixed_value_selection = fields.Char("Value")
|
||||||
|
fixed_value_text = fields.Text("Value")
|
||||||
|
fixed_value_html = fields.Html("Value")
|
||||||
|
fixed_value_integer = fields.Integer("Value")
|
||||||
|
fixed_value_float = fields.Float("Value")
|
||||||
|
fixed_value_date = fields.Date("Value")
|
||||||
|
fixed_value_datetime = fields.Datetime("Value")
|
||||||
|
|
||||||
|
displayed_value = fields.Char("Value", compute="_compute_displayed_value")
|
||||||
|
other_created_record_id = fields.Many2one("survey.record.creation", string="Other record", domain="[('survey_id','=',survey_id),('model_id.model','=',field_relation)]")
|
||||||
|
|
||||||
|
allowed_question_ids = fields.Many2many('survey.question', compute='_compute_allowed_question_ids')
|
||||||
|
question_id = fields.Many2one('survey.question', string="Question", domain="[('id','in',allowed_question_ids)]")
|
||||||
|
|
||||||
|
@api.depends("field_id")
|
||||||
|
def _compute_field_help(self):
|
||||||
|
for record in self:
|
||||||
|
field_help = _("Field type is : <b>%s</b>",record.field_type)
|
||||||
|
if record.field_type == "selection":
|
||||||
|
field_help += "<br />"+_("possible values are %s",', '.join([f"<b>{s.value}</b> <i>({s.name})</i>" for s in record.field_id.selection_ids]))
|
||||||
|
record.field_help = field_help
|
||||||
|
|
||||||
|
|
||||||
|
@api.depends('field_id')
|
||||||
|
def _compute_allowed_question_ids(self):
|
||||||
|
for record_creation_field_values in self:
|
||||||
|
if not record_creation_field_values.survey_id or not record_creation_field_values.field_id:
|
||||||
|
record_creation_field_values.allowed_question_ids = None
|
||||||
|
return
|
||||||
|
question_domain = [('survey_id','=',record_creation_field_values.survey_id.id),'|','&',('answer_values_type','=','record'),('model_id','=',record_creation_field_values.field_id.relation),('answer_values_type','=','value')]
|
||||||
|
if record_creation_field_values.field_id.ttype in type_mapping:
|
||||||
|
question_domain.append(('question_type','in',type_mapping[record_creation_field_values.field_id.ttype]))
|
||||||
|
|
||||||
|
record_creation_field_values.allowed_question_ids = self.env['survey.question'].search(question_domain)
|
||||||
|
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _selection_target_model(self):
|
||||||
|
return [(model.model, model.name) for model in self.env['ir.model'].sudo().search([])]
|
||||||
|
|
||||||
|
@api.onchange('field_id','origin')
|
||||||
|
def clean_values(self):
|
||||||
|
# clean values
|
||||||
|
self.fixed_value_many2many = None
|
||||||
|
self.fixed_value_many2one = None
|
||||||
|
self.fixed_value_char = None
|
||||||
|
self.fixed_value_selection = None
|
||||||
|
self.fixed_value_text = None
|
||||||
|
self.fixed_value_html = None
|
||||||
|
self.fixed_value_integer = None
|
||||||
|
self.fixed_value_float = None
|
||||||
|
self.fixed_value_date = None
|
||||||
|
self.fixed_value_datetime = None
|
||||||
|
self.other_created_record_id = None
|
||||||
|
self.question_id = None
|
||||||
|
|
||||||
|
@api.onchange('field_id')
|
||||||
|
def _onchange_field_id(self):
|
||||||
|
# Set reference field model and select first record
|
||||||
|
if self.field_id and self.field_id.ttype == 'many2one' and self.field_id.relation:
|
||||||
|
rec = self.env[self.field_id.relation].search([], limit=1)
|
||||||
|
if rec:
|
||||||
|
self.fixed_value_many2one = f"{self.field_id.relation},{rec.id}"
|
||||||
|
else:
|
||||||
|
model_name = self.env['ir.model'].search([('model','=',self.field_id.relation)]).name
|
||||||
|
self.fixed_value_many2one = None
|
||||||
|
raise UserError(_('You should append at least one record in %s',model_name))
|
||||||
|
else:
|
||||||
|
self.fixed_value_many2one = None
|
||||||
|
|
||||||
|
|
||||||
|
def get_fixed_value_for_record_creation(self):
|
||||||
|
"""return val used in create() method
|
||||||
|
|
||||||
|
"""
|
||||||
|
if self.value_origin == 'fixed':
|
||||||
|
if self.field_type == 'many2one':
|
||||||
|
if self.fixed_value_many2one:
|
||||||
|
return self.fixed_value_many2one.id
|
||||||
|
elif self.field_type == 'many2many':
|
||||||
|
return [m2m.value_reference.id for m2m in self.fixed_value_many2many if m2m.value_reference]
|
||||||
|
else:
|
||||||
|
return self["fixed_value_"+self.field_type]
|
||||||
|
|
||||||
|
|
||||||
|
@api.onchange("fixed_value_char","fixed_value_selection","fixed_value_text","fixed_value_html","fixed_value_integer","fixed_value_float","fixed_value_date","fixed_value_datetime",'fixed_value_many2one', "fixed_value_many2many","other_created_record_id","question_id")
|
||||||
|
def _compute_displayed_value(self):
|
||||||
|
for record in self:
|
||||||
|
if record.field_id:
|
||||||
|
if record.value_origin == 'other_record' and record.other_created_record_id:
|
||||||
|
record.displayed_value = _("Other created record: ")+record.other_created_record_id.name
|
||||||
|
elif record.value_origin == 'fixed':
|
||||||
|
if record.field_id.ttype == "many2one":
|
||||||
|
if record.fixed_value_many2one:
|
||||||
|
record.displayed_value = record.fixed_value_many2one.display_name
|
||||||
|
else:
|
||||||
|
record.displayed_value = None
|
||||||
|
elif record.field_id.ttype == "many2many":
|
||||||
|
if record.fixed_value_many2many:
|
||||||
|
record.displayed_value = ", ".join([r.value_reference.display_name for r in record.fixed_value_many2many if r.value_reference])
|
||||||
|
else:
|
||||||
|
record.displayed_value = None
|
||||||
|
elif record.field_id.ttype == "date":
|
||||||
|
record.displayed_value = format_date(self.env, record.fixed_value_date)
|
||||||
|
elif record.field_id.ttype == "datetime":
|
||||||
|
record.displayed_value = format_date(self.env, record.fixed_value_datetime)
|
||||||
|
else:
|
||||||
|
record.displayed_value = str(record['fixed_value_'+record.field_id.ttype])
|
||||||
|
else: #value_origin = question
|
||||||
|
record.displayed_value = _('Answer to question: %s',record.question_id.title)
|
||||||
|
else:
|
||||||
|
record.displayed_value = ""
|
||||||
|
|
||||||
|
class SurveyRecordCreationFieldValuesX2m(models.Model):
|
||||||
|
"""O2m an M2m default values
|
||||||
|
"""
|
||||||
|
_name = 'survey.record.creation.field.values.x2m'
|
||||||
|
|
||||||
|
survey_record_creation_field_values_id = fields.Many2one('survey.record.creation.field.values')
|
||||||
|
value_reference = fields.Reference(string='Record', selection='_selection_target_model')
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _selection_target_model(self):
|
||||||
|
return [(model.model, model.name) for model in self.env['ir.model'].sudo().search([])]
|
||||||
|
|
||||||
|
|
||||||
|
@api.onchange('survey_record_creation_field_values_id')
|
||||||
|
def _onchange_model_name(self):
|
||||||
|
# Set reference field model and select first record
|
||||||
|
field = self.survey_record_creation_field_values_id.field_id
|
||||||
|
if field and "2many" in field.ttype and field.relation:
|
||||||
|
rec = self.env[field.relation].search([], limit=1)
|
||||||
|
if rec:
|
||||||
|
self.value_reference = f"{field.relation},{rec.id}"
|
||||||
|
else:
|
||||||
|
model_name = self.env['ir.model'].search([('model','=',field.relation)]).name
|
||||||
|
raise ValueError(_('You should append at least one record in %s',(model_name,)))
|
13
survey_record_generation/models/survey_survey.py
Normal file
13
survey_record_generation/models/survey_survey.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SurveySurvey(models.Model):
|
||||||
|
_inherit = 'survey.survey'
|
||||||
|
|
||||||
|
survey_record_creation_ids = fields.One2many('survey.record.creation', 'survey_id', 'Records creation', help="List of records created when survey submitted")
|
||||||
|
|
53
survey_record_generation/models/survey_user_input.py
Normal file
53
survey_record_generation/models/survey_user_input.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
from odoo import models
|
||||||
|
|
||||||
|
|
||||||
|
class SurveyUserInput(models.Model):
|
||||||
|
_inherit = "survey.user_input"
|
||||||
|
|
||||||
|
def _mark_done(self):
|
||||||
|
# generate records
|
||||||
|
for user_input in self:
|
||||||
|
created_records = {}
|
||||||
|
fields_to_update = []
|
||||||
|
|
||||||
|
for record_creation in user_input.survey_id.survey_record_creation_ids:
|
||||||
|
model = record_creation.model_id.model
|
||||||
|
vals = {}
|
||||||
|
|
||||||
|
for field_value in record_creation.field_values_ids:
|
||||||
|
if field_value.value_origin == 'fixed':
|
||||||
|
vals[field_value.field_id.name] = field_value.get_fixed_value_for_record_creation()
|
||||||
|
elif field_value.value_origin == 'question':
|
||||||
|
# find user_input_lines of the question
|
||||||
|
user_input_lines = [user_input_line for user_input_line in user_input.user_input_line_ids if user_input_line.question_id == field_value.question_id]
|
||||||
|
|
||||||
|
if field_value.question_id.question_type in ['simple_choice', 'multiple_choice','matrix']:
|
||||||
|
if field_value.question_id.answer_value_type == 'record':
|
||||||
|
record_ids = []
|
||||||
|
for user_input_line in user_input_lines:
|
||||||
|
if user_input_line.suggested_answer_id and user_input_line.suggested_answer_id.record_id:
|
||||||
|
record_ids.append(user_input_line.suggested_answer_id.record_id.id)
|
||||||
|
if field_value.question_id.question_type == 'simple_choice':
|
||||||
|
vals[field_value.field_id.name] = record_ids[0]
|
||||||
|
else:
|
||||||
|
vals[field_value.field_id.name] = record_ids
|
||||||
|
if field_value.question_id.answer_value_type == 'value':
|
||||||
|
vals[field_value.field_id.name] = user_input_line.suggested_answer_id.value_char
|
||||||
|
else:
|
||||||
|
user_input_line = user_input_lines[0]
|
||||||
|
vals[field_value.field_id.name] = user_input_line[0][f"value_{user_input_line.answer_type}"]
|
||||||
|
elif field_value.value_origin == 'other_record':
|
||||||
|
fields_to_update.append(field_value)
|
||||||
|
|
||||||
|
# Create record
|
||||||
|
record = self.env[model].create(vals)
|
||||||
|
created_records[record_creation.id] = record
|
||||||
|
|
||||||
|
# update linked records
|
||||||
|
for field_to_update in fields_to_update:
|
||||||
|
record_to_update = created_records[field_to_update.survey_record_creation_id.id]
|
||||||
|
linked_record = created_records[field_to_update.other_created_record_id.id]
|
||||||
|
record_to_update.write({field_to_update.field_id.name:linked_record.id})
|
||||||
|
|
||||||
|
return super()._mark_done()
|
4
survey_record_generation/security/ir.model.access.csv
Normal file
4
survey_record_generation/security/ir.model.access.csv
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_survey_record_creation,survey.record.creation,survey_record_generation.model_survey_record_creation,survey.group_survey_user,1,1,1,1
|
||||||
|
access_survey_record_creation_field_values,survey.record.creation.field.values,survey_record_generation.model_survey_record_creation_field_values,survey.group_survey_user,1,1,1,1
|
||||||
|
access_survey_record_creation_field_values_x2m,survey.record.creation.field.values.x2m,survey_record_generation.model_survey_record_creation_field_values_x2m,survey.group_survey_user,1,1,1,1
|
|
28
survey_record_generation/views/survey_question_views.xml
Normal file
28
survey_record_generation/views/survey_question_views.xml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="survey_question_form" model="ir.ui.view">
|
||||||
|
<field name="name">survey.question.view.form.inherit.record.generation</field>
|
||||||
|
<field name="model">survey.question</field>
|
||||||
|
<field name="inherit_id" ref="survey.survey_question_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='suggested_answer_ids']" position="before">
|
||||||
|
<field name="answer_values_type" />
|
||||||
|
<field name="model_id" attrs="{'invisible':[('answer_values_type','!=','record')]}" />
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='suggested_answer_ids']" position="attributes">
|
||||||
|
<attribute
|
||||||
|
name="context"
|
||||||
|
>{'default_question_id': active_id, 'default_model_id': model_id}</attribute>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='suggested_answer_ids']/tree" position="inside">
|
||||||
|
<field name="answer_values_type" invisible="1" />
|
||||||
|
<field name="model_id" invisible="1" />
|
||||||
|
<field name="record_id"
|
||||||
|
options="{'hide_model': True, 'no_create': True, 'no_edit': True, 'no_open': True}"
|
||||||
|
attrs="{'invisible':[('answer_values_type','!=','record')]}"/>
|
||||||
|
<field name="value_char"
|
||||||
|
attrs="{'invisible':[('answer_values_type','!=','value')]}" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
113
survey_record_generation/views/survey_survey_views.xml
Normal file
113
survey_record_generation/views/survey_survey_views.xml
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="survey_survey_view_form" model="ir.ui.view">
|
||||||
|
<field name="name">survey.survey.view.form.inherit.record.generation</field>
|
||||||
|
<field name="model">survey.survey</field>
|
||||||
|
<field name="inherit_id" ref="survey.survey_survey_view_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//notebook" position="inside">
|
||||||
|
<page name="record_creation" string="Record creation">
|
||||||
|
<field name="survey_record_creation_ids">
|
||||||
|
<tree>
|
||||||
|
<field name="name" />
|
||||||
|
<field name="model_id" />
|
||||||
|
</tree>
|
||||||
|
<form>
|
||||||
|
<group>
|
||||||
|
<field name="name" />
|
||||||
|
<field name="model_id" />
|
||||||
|
<field name="field_values_ids">
|
||||||
|
<tree>
|
||||||
|
<field name="field_id" />
|
||||||
|
<field name="displayed_value" />
|
||||||
|
</tree>
|
||||||
|
<form>
|
||||||
|
<group>
|
||||||
|
<field name="model_id" invisible="1" />
|
||||||
|
<field name="field_id" />
|
||||||
|
<field name="field_relation" invisible="1" />
|
||||||
|
<field name="field_type" invisible="1" />
|
||||||
|
<div colspan="2">
|
||||||
|
<field name="field_help" />
|
||||||
|
</div>
|
||||||
|
<field name="survey_id" invisible="1" />
|
||||||
|
<field name="value_origin" />
|
||||||
|
<field name="allowed_question_ids" invisible="1" />
|
||||||
|
</group>
|
||||||
|
<div attrs="{'invisible':['|',('value_origin','!=','fixed'),('field_id','=',False)]}">
|
||||||
|
<group>
|
||||||
|
<field name="displayed_value" invisible="1" />
|
||||||
|
<field
|
||||||
|
name="fixed_value_char"
|
||||||
|
attrs="{'invisible':[('field_type','in',['selection','text','html','integer','float','date','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_selection"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','text','html','integer','float','date','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_text"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','selection','html','integer','float','date','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_html"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','selection','text','integer','float','date','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_integer"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','selection','text','html','float','date','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_float"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','selection','text','html','integer','date','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_date"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','selection','text','html','integer','float','datetime','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_datetime"
|
||||||
|
attrs="{'invisible':[('field_type','in',['char','selection','text','html','integer','float','date','many2one','many2many'])]}"
|
||||||
|
/>
|
||||||
|
<field
|
||||||
|
name="fixed_value_many2one"
|
||||||
|
attrs="{'invisible':[('field_type','!=','many2one')]}"
|
||||||
|
readonly="False"
|
||||||
|
options="{'hide_model': True, 'no_create': True, 'no_edit': True, 'no_open': True}"
|
||||||
|
/>
|
||||||
|
<field name="fixed_value_many2many"
|
||||||
|
attrs="{'invisible':[('field_type','not in',['one2many','many2many'])]}">
|
||||||
|
<tree editable="bottom">
|
||||||
|
<field name="survey_record_creation_field_values_id" invisible="1" />
|
||||||
|
<field name="value_reference"
|
||||||
|
options="{'hide_model': True, 'no_create': True, 'no_edit': True, 'no_open': True}"
|
||||||
|
/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
</div>
|
||||||
|
<div attrs="{'invisible':['|',('value_origin','!=','question'),('field_id','=',False)]}">
|
||||||
|
<group>
|
||||||
|
<field name="question_id" />
|
||||||
|
</group>
|
||||||
|
</div>
|
||||||
|
<div attrs="{'invisible':['|','|',('value_origin','!=','other_record'),('field_id','=',False),('field_type','!=','many2one')]}">
|
||||||
|
<group>
|
||||||
|
<field name="other_created_record_id" />
|
||||||
|
</group>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
<div colspan="2">
|
||||||
|
<field name="warning_message" />
|
||||||
|
</div>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
Reference in New Issue
Block a user