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.
		
		
		
		
		
			
		
			
				
					
					
						
							136 lines
						
					
					
						
							6.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							136 lines
						
					
					
						
							6.4 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################### | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Mohammed Savad, Ahammed Harshad (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 | |
| from odoo import models | |
| 
 | |
| 
 | |
| class SurveyUserInput(models.Model): | |
|     """Inherited user input to make acceptable for custom question""" | |
|     _inherit = "survey.user_input" | |
| 
 | |
|     def _save_lines(self, question, answer, comment=None, overwrite_existing=True): | |
|         """Function to save custom answers""" | |
|         old_answers = self.env['survey.user_input.line'].search([ | |
|             ('user_input_id', '=', self.id), | |
|             ('question_id', '=', question.id), ]) | |
|         print('answer',answer) | |
|         if question.question_type in ['password', 'range', 'time', 'url', | |
|                                       'email', 'range', 'many2many', | |
|                                       'file', 'many2one', 'week', 'color', | |
|                                       'month', 'address', 'name', 'selection', | |
|                                       'file', 'qr', 'barcode', 'signature']: | |
|             res = self._save_user_answers(question, old_answers, answer) | |
|         elif question.matrix_subtype == 'custom': | |
|             res = self._save_user_answers(question, old_answers, answer) | |
|         else: | |
|             res = super()._save_lines(question, answer, comment) | |
|         return res | |
| 
 | |
|     def _save_user_answers(self, question, user_input_line, answer): | |
|         """Function to save custom answers""" | |
|         vals = (self._get_user_answers( | |
|             question, answer, question.question_type)) | |
|         if user_input_line: | |
|             user_input_line.write(vals) | |
|         else: | |
|             user_input_line = self.env['survey.user_input.line'].create(vals) | |
|         return user_input_line | |
| 
 | |
|     def _get_user_answers(self, question, answer, answer_type): | |
|         """Function to save custom answers""" | |
|         vals = {'user_input_id': self.id, 'question_id': question.id, | |
|                 'skipped': False, 'answer_type': answer_type, | |
|                 } | |
|         if not answer or (isinstance(answer, str) and not answer.strip()): | |
|             vals.update(answer_type=None, skipped=True) | |
|             return vals | |
|         if question.question_type == 'time': | |
|             vals['value_time'] = float(answer.replace(":", ".")) | |
|         elif question.question_type == 'url': | |
|             vals['value_url'] = answer | |
|         elif question.question_type == 'password': | |
|             vals['value_password'] = answer | |
|         elif question.question_type == 'email': | |
|             vals['value_email'] = answer | |
|         elif question.question_type == 'range': | |
|             vals['value_range'] = answer | |
|         elif question.question_type == 'many2one': | |
|             vals['value_many2one'] = answer[0] | |
|             vals['value_many2one_option'] = answer[1] | |
|         elif question.question_type == 'many2many': | |
|             vals['value_many2many'] = answer | |
|         elif question.question_type == 'week': | |
|             vals['value_week'] = answer | |
|         elif question.question_type == 'color': | |
|             vals['value_color'] = answer | |
|         elif question.question_type == 'month': | |
|             vals['value_month'] = answer | |
|         elif question.question_type == 'matrix' \ | |
|                 and question.matrix_subtype == 'custom': | |
|             vals['value_matrix'] = json.dumps(answer) | |
|         elif question.question_type == 'address': | |
|             vals['value_address'] = json.dumps(answer) | |
|         elif question.question_type == 'qr': | |
|             vals['value_qr'] = json.dumps(answer) | |
|         elif question.question_type == 'barcode': | |
|             vals['value_barcode'] = json.dumps(answer) | |
|         elif question.question_type == 'name': | |
|             vals['value_name'] = json.dumps(answer) | |
|         elif question.question_type == 'selection': | |
|             vals['value_selection'] = answer | |
|         elif question.question_type == 'file': | |
|             attachment = self.env['ir.attachment'].create({ | |
|                 'name': str(answer[1]), 'datas': answer[0], 'type': 'binary' | |
|             }) | |
|             vals['value_file'] = int(attachment.id if attachment else False) | |
|             vals['filename'] = attachment.name if attachment else False | |
|         return vals | |
| 
 | |
|     def _save_line_matrix(self, question, old_answers, answers, comment): | |
|         """Function to save custom matrix""" | |
|         if question.matrix_subtype == 'custom': | |
|             self._save_line(question, answers) | |
|         else: | |
|             vals_list = [] | |
|             if not answers and question.matrix_row_ids: | |
|                 # add a False answer to force saving a skipped line | |
|                 # this will make this question correctly considered as | |
|                 # skipped in statistics | |
|                 answers = {question.matrix_row_ids[0].id: [False]} | |
|             if answers: | |
|                 for row_key, row_answer in answers.items(): | |
|                     for answer in row_answer: | |
|                         vals = self._get_line_answer_values(question, answer, | |
|                                                             'suggestion') | |
|                         vals['matrix_row_id'] = int(row_key) | |
|                         vals_list.append(vals.copy()) | |
|             if comment: | |
|                 vals_list.append( | |
|                     self._get_line_comment_values(question, comment)) | |
|             old_answers.sudo().unlink() | |
|             return self.env['survey.user_input.line'].create(vals_list) | |
| 
 | |
|     def _save_line_selection_answer(self, question, answer): | |
|         """Function to save selection type answers""" | |
|         vals = self._get_line_answer_values(question, answer, | |
|                                             question.question_type) | |
|         return self.env['survey.user_input.line'].create(vals)
 | |
| 
 |