You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

94 lines
4.1 KiB

# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Nihala KP (odoo@cybrosys.com)
#
# This program is under the terms of the Odoo Proprietary License v1.0(OPL-1)
# It is forbidden to publish, distribute, sublicense, or sell copies of the
# Software or modified copies 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 NON INFRINGEMENT. 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.
#
###############################################################################
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class SurveyQuestion(models.Model):
""" Inherited survey.question to add custom question type"""
_inherit = 'survey.question'
selection_ids = fields.One2many('question.selection',
'question_id',
string='Select',
help="""Field used to create selection type
questions""")
question_type = fields.Selection(selection_add=[
('time', 'Time'),
('month', 'Month'),
('name', 'Name'),
('address', 'Address'),
('email', 'Email'),
('password', 'Password'),
('qr', 'Qrcode'),
('url', 'URL'),
('week', 'Week'),
('color', 'Color'),
('range', 'Range'),
('many2one', 'Many2one'),
('file', 'Upload File'),
('many2many', 'Many2many'),
('selection', 'Selection'),
('barcode', 'Barcode')
], help="Survey supported question types")
matrix_subtype = fields.Selection(
selection_add=[('custom', 'Custom Matrix')],
help="""Matrix selection type question""")
model_id = fields.Many2one('ir.model', string='Model',
domain=[('transient', '=', False)],
help="Many2one type question")
range_min = fields.Integer(string='Min',
help='Minimum range,range type question')
range_max = fields.Integer(string='Max',
help='Maximum range,range type question')
qrcode = fields.Text(string='Qrcode',
help='Show qrcode in survey')
qrcode_png = fields.Binary(string='Qrcode PNG', help="Qrcode PNG")
barcode = fields.Char(string='Barcode', help="Barcode number")
barcode_png = fields.Binary(string='Barcode PNG',
help="Saves barcode png file")
@api.onchange('barcode')
def _onchange_barcode(self):
"""Onchange function to restrict barcode less-than 12 character """
if self.barcode:
if len(self.barcode) < 12:
raise ValidationError(
_("Make sure barcode is at least 12 letters"))
if len(self.barcode) > 12:
raise ValidationError(
_("There should not be more than 12 "
"characters in a barcode"))
if not self.barcode.isdigit():
raise ValidationError(_("Only digits are allowed."))
def get_selection_values(self):
"""Function return options for selection type question"""
return self.selection_ids
def prepare_model_id(self, model):
"""Function to return options for many2one question"""
if model:
model_data = self.env[model.model].sudo().search([])
return [rec.read([model_data._rec_name])[0] for rec in model_data]
model_data = self.env[self.model_id.model].sudo().search([])
return [rec.read([model_data._rec_name])[0] for rec in model_data]