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
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							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')
 | |
| 
 |