| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from odoo import models, fields, api, _
- from odoo.exceptions import UserError
- class HrEfficiencyFieldVisibilityWizard(models.TransientModel):
- _name = 'hr.efficiency.field.visibility.wizard'
- _description = 'Efficiency Field Visibility Wizard'
- _table = 'hr_efficiency_field_vis_wizard'
- # Dynamic fields for each indicator
- indicator_ids = fields.Many2many('hr.efficiency.indicator', 'hr_efficiency_field_vis_wizard_rel', 'wizard_id', 'indicator_id', string='Indicators to Show')
-
- @api.model
- def default_get(self, fields_list):
- """Get default values - show all active indicators"""
- res = super().default_get(fields_list)
- active_indicators = self.env['hr.efficiency.indicator'].search([('active', '=', True)])
- res['indicator_ids'] = [(6, 0, active_indicators.ids)]
- return res
-
- def action_apply_visibility(self):
- """Apply the selected field visibility"""
- # Get all active indicators
- all_indicators = self.env['hr.efficiency.indicator'].search([('active', '=', True)])
-
- # Get selected indicators
- selected_indicators = self.indicator_ids
-
- # Update the hr.efficiency model to only show selected indicators
- efficiency_model = self.env['hr.efficiency']
-
- # Clear all dynamic fields first
- for indicator in all_indicators:
- field_name = efficiency_model._get_indicator_field_name(indicator.name)
- if hasattr(efficiency_model, field_name):
- delattr(efficiency_model.__class__, field_name)
-
- # Create fields only for selected indicators
- for indicator in selected_indicators:
- field_name = efficiency_model._get_indicator_field_name(indicator.name)
- field = fields.Float(
- indicator.name + ' (%)',
- compute='_compute_indicators',
- store=True,
- help=f'Indicator: {indicator.description or indicator.name}'
- )
- setattr(efficiency_model.__class__, field_name, field)
-
- # Update views with dynamic fields
- efficiency_model._update_views_with_dynamic_fields()
-
- # Force recomputation
- records = efficiency_model.search([])
- if records:
- records._invalidate_cache()
-
- return {
- 'type': 'ir.actions.client',
- 'tag': 'display_notification',
- 'params': {
- 'title': _('Success'),
- 'message': _('Field visibility updated successfully.'),
- 'type': 'success',
- 'sticky': False,
- }
- }
|