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.
 
 
 
 
 

189 lines
9.0 KiB

# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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.
#
###############################################################################
import json
import textwrap
from datetime import datetime
from odoo import api, fields, models, _
class SurveyUserInputLine(models.Model):
"""Inherited user input line to add custom answer types """
_inherit = 'survey.user_input.line'
answer_type = fields.Selection(
selection_add=[('url', 'URL'),
('many2one', 'Many2one'),
('many2many', 'Many2many'),
('week', 'Week'),
('time', 'Time'),
('color', 'Color'),
('email', 'Email'),
('month', 'Month'),
('name', 'Name'),
('matrix', 'Matrix'),
('address', 'Address'),
('selection', 'Selection'),
('time', 'Time'),
('password', 'Password'),
('email', 'Email'),
('range', 'Range'),
('file', 'File'),
('qr', 'Qrcode'),
('barcode', 'Barcode')], help="Custom answer types")
value_url = fields.Char(string='User URL',
help='Answer question type : URL')
value_email = fields.Char(string='User Email',
help="Answer question type : Email")
value_week = fields.Char(string='User Week',
help="Answer question type : Week")
value_color = fields.Char(string='User Color',
help="Answer question type : Color")
value_many2one = fields.Char(string='Survey Many2one',
help="Answer question type : Many2one")
value_many2one_option = fields.Char(string='Many2one selected',
help="Answer question type : Selected")
value_many2many = fields.Char(string='Survey Many2many',
help="Answer question type : Many2many")
value_time = fields.Float(string='Time Value',
help="Answer question type : Time")
value_matrix = fields.Text(string='Custom Matrix Values',
help="Answer question type : Custom Matrix")
value_selection = fields.Char(string='User Selection',
help="Answer question type : Selection")
value_password = fields.Char(string='Password Value',
help="Answer question type : Password")
value_range = fields.Char(string='Range Value',
help="Answer question type:Range")
value_file = fields.Many2one('ir.attachment',
string='Survey file',
help="Answer question type : Attachment")
filename = fields.Char(string='File', help="Attachment file name")
file_data = fields.Binary(string='File Data',
help="Attachment file data",
related="value_file.datas")
value_month = fields.Char(string='Month Value',
help="Answer question type : Month")
value_address = fields.Text(string='Address Value',
help="Answer question type : Address")
value_name = fields.Text(string='Name Values',
help="Answer question type : Full name")
value_qr = fields.Char(string='Qr Values',
help="Answer question type : QRcode")
value_barcode = fields.Char(string='Barcode Values',
help="Answer question type : Barcode")
def get_value_time(self):
"""Function to return answer for question type time """
if self.value_time:
return datetime.strptime(str(self.value_time).replace('.', ':'),
"%H:%M").strftime("%H:%M")
return None
def get_value_address(self, field):
"""Function to return answer for question type address"""
data = json.loads(self[0].value_address.replace("'", "\""))
print("data",data)
if data:
question_id = self[0].question_id.id
return data.get(f'{question_id}-{field}',
'')
return ''
def get_value_matrix(self, item):
"""Function to return answer for custom matrix"""
data = json.loads(self.value_matrix)
if data:
question_id = self.question_id.id
return data[f'{item}-{question_id}']
return None
def get_value_name(self, field):
"""Function to return answer for Full name"""
data = json.loads(self.value_name)
if data:
question_id = self.question_id.id
return data[f'{question_id}-{field}']
return ''
@api.depends('answer_type')
def _compute_display_name(self):
"""Override compute function to add custom answer display"""
for line in self:
if line.answer_type == 'char_box':
line.display_name = line.value_char_box
elif line.answer_type == 'text_box' and line.value_text_box:
line.display_name = textwrap.shorten(line.value_text_box,
width=50,
placeholder=" [...]")
elif line.answer_type == 'numerical_box':
line.display_name = line.value_numerical_box
elif line.answer_type == 'date':
line.display_name = fields.Date.to_string(line.value_date)
elif line.answer_type == 'datetime':
line.display_name = fields.Datetime.to_string(line.value_datetime)
elif line.answer_type == 'time':
line.display_name = line.value_time
elif line.answer_type == 'month':
line.display_name = line.value_month
elif line.answer_type == 'address':
line.display_name = line.value_address
elif line.answer_type == 'name':
line.display_name = line.value_name
elif line.answer_type == 'url':
line.display_name = line.value_url
elif line.answer_type == 'many2one':
line.display_name = line.value_many2one_option
elif line.answer_type == 'many2many':
line.display_name = line.value_many2many
elif line.answer_type == 'week':
line.display_name = line.value_week
elif line.answer_type == 'time':
line.display_name = line.value_time
elif line.answer_type == 'email':
line.display_name = line.value_email
elif line.answer_type == 'range':
line.display_name = line.value_range
elif line.answer_type == 'matrix':
line.display_name = line.value_matrix
elif line.answer_type == 'password':
line.display_name = line.value_password
elif line.answer_type == 'signature':
line.display_name = line.value_signature
elif line.answer_type == 'color':
line.display_name = line.value_color
elif line.answer_type == 'selection':
line.display_name = line.value_selection
elif line.answer_type == 'barcode':
line.display_name = line.value_barcode
elif line.answer_type == 'qr':
line.display_name = line.value_qr
elif line.answer_type == 'file':
line.display_name = line.filename
elif line.answer_type == 'suggestion':
if line.matrix_row_id:
line.display_name = '%s: %s' % (
line.suggested_answer_id.value,
line.matrix_row_id.value)
else:
line.display_name = line.suggested_answer_id.value
if not line.display_name:
line.display_name = _('Skipped')