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.
		
		
		
		
		
			
		
			
				
					
					
						
							120 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							120 lines
						
					
					
						
							4.3 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################# | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: ASWIN A K (odoo@cybrosys.com) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |
| # | |
| #    This program is distributed in the hope that it will be useful, | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ############################################################################# | |
| from odoo import api, fields, models | |
| 
 | |
| 
 | |
| class HoverRelatedFields(models.Model): | |
|     """ | |
|         Model for managing hover-related fields and their configurations. | |
|     """ | |
|     _name = 'hover.related.fields' | |
|     _description = 'Hover Related Fields' | |
|     _rec_name = 'model_id' | |
|     _sql_constraints = [ | |
|         ('unique_model_id', 'UNIQUE(model_id)', | |
|          'One model should only have one configuration.') | |
|     ] | |
| 
 | |
|     model_ids = fields.Many2many( | |
|         'ir.model', | |
|         string='Models', | |
|         compute='_compute_model_ids', | |
|         help='Models related to the configuration ' | |
|              'for setting domain for model_id', | |
|     ) | |
|     model_id = fields.Many2one( | |
|         'ir.model', | |
|         'Model', | |
|         domain="[('id', 'not in', model_ids)]", | |
|         help='Select a model for configuration', | |
|     ) | |
|     field_ids = fields.Many2many( | |
|         'ir.model.fields', | |
|         string='Fields', domain="[('model_id', '=', model_id)]", | |
|         help='Fields related to the selected model', | |
|     ) | |
|     active = fields.Boolean( | |
|         string='Active', | |
|         default=True, | |
|         help='Helps to archive the configurations') | |
| 
 | |
|     @api.depends('model_id') | |
|     def _compute_model_ids(self): | |
|         self.model_ids = self.search([]).mapped('model_id') | |
| 
 | |
|     @api.model | |
|     def finding_the_data_to_show_tooltip(self, info): | |
|         """ | |
|             Method to find data to display in tooltips based on the provided | |
|             information. | |
|  | |
|             :param info: Information about the tooltip request. | |
|             :type info: dict | |
|             :return: Data to display in the tooltip. | |
|             :rtype: list or bool | |
|         """ | |
|         current_record = self.env[info['resModel']].browse(int(info['resId'])) | |
|         field_name = info['field']['name'] | |
|         configured_model = self.search( | |
|             [('model_id.model', '=', info['field']['relation'])]) | |
|         required_data = [[ | |
|             { | |
|                 'id': field.id, | |
|                 'field': field.field_description, | |
|                 'field_name': field.name, | |
|                 'ttype': field.ttype, | |
|                 'value': rec[ | |
|                     field.name | |
|                 ].display_name if field.ttype == 'many2one' else rec[field.name] | |
|             } for field in configured_model.field_ids | |
|         ] for rec in current_record[field_name]] | |
|         return required_data if required_data != [[]] else False | |
| 
 | |
|     @api.model | |
|     def finding_the_data_to_show_tooltip_many2many(self, info): | |
|         """ | |
|             Method to find data for tooltips in many2many, | |
|              many2one relationships. | |
|  | |
|             :param info: Information about the tooltip request. | |
|             :type info: dict | |
|             :return: Data to display in the tooltip. | |
|             :rtype: list or string | |
|         """ | |
|         rec_to_show = self.env[info['field']['relation']].browse( | |
|             int(info['related_record_id'])) | |
|         configured_model = self.search( | |
|             [('model_id.model', '=', info['field']['relation'])]) | |
|         required_data = [ | |
|             { | |
|                 'id': field.id, | |
|                 'field': field.field_description, | |
|                 'field_name': field.name, | |
|                 'ttype': field.ttype, | |
|                 'value': rec_to_show[ | |
|                     field.name | |
|                 ].display_name if field.ttype == 'many2one' else rec_to_show[field.name] | |
|             } | |
|             for field in configured_model.field_ids] | |
|         if required_data == [] and info['viewMode'] == 'list': | |
|             required_data = rec_to_show.display_name | |
|         return required_data
 | |
| 
 |