# -*- coding: utf-8 -*- from odoo import models, fields, api from odoo.exceptions import UserError, ValidationError from psycopg2 import sql, DatabaseError from werkzeug import utils class opendons_qualifierCategory(models.Model): _name = 'opendons_qualifier.category' _description = 'categories pour les qualificatifs' sql_constraints = [ ('category_uniq', 'UNIQUE((name))', 'This name already exists.') ] name = fields.Char('Name', required=True) order= fields.Integer() description = fields.Text() company_id = fields.Many2one( "res.company", string="Company", required=True, default=lambda self: self.env.company ) @api.constrains('name') def _check_name(self): count=self.search_count([('name','=',self.name),('id', '!=', self.id)]) if count>0: raise UserError('This name already exist') class opendons_qualifier(models.Model): _name = 'opendons_qualifier.qualifier' _description = 'qualificatifs de contacts' name = fields.Char() #type=fields.Selection([('checkbox','checkbox'),('text','text'),('numerical','numerical')], default='checkbox') default_value_text = fields.Char(string='Default value') default_value_bool = fields.Boolean(string='Default value') description = fields.Text() actif=fields.Boolean(string='actif',default=False) value_type=fields.Selection(string='Value type', selection=[('boolean', 'boolean'), ('text', 'text')], readonly=True) category_id = fields.Many2one( 'opendons_qualifier.category', string='Category', tracking=True, required=True) company_id = fields.Many2one( "res.company", string="Company", required=True, default=lambda self: self.env.company ) @api.model def create(self,vals): res = super(opendons_qualifier, self).create(vals) #ajout du qualificatif nouvellement créé pour chaque contact for partner in self.env['res.partner'].sudo().search([]): vals2={} vals2['partner_id']=int(partner.id) vals2['qualifier_id']=int(res.id) vals2['value_type']=res.value_type vals2['actif']=res.actif if res.value_type=='boolean': vals2['value_bool']=vals['default_value_bool'] if res.value_type=='text': vals2['value_text']=vals['default_value_text'] create_partner_qualifier=self.env['opendons_qualifier.partnerqualifier'].sudo().create(vals2) return res def write(self,vals): for val in vals: if val=='actif': #mise à jour des contact pour le qualificatif qualifier_partner=self.env['opendons_qualifier.partnerqualifier'].search([('qualifier_id','=',self.id)]) for q_p in qualifier_partner: q_p.actif=vals['actif'] if vals['actif'] and self.value_type=='text': q_p.value_text=self.default_value_text if vals['actif'] and self.value_type=='boolean': q_p.value_bool=self.default_value_bool if not vals['actif'] and self.value_type=='text': q_p.value_text='' if not vals['actif'] and self.value_type=='boolean': q_p.value_bool=False res=super(opendons_qualifier, self).write(vals) def delete_all_partner_qualifiers(self): partnerqualifier=self.env['opendons_qualifier.partnerqualifier'].search([]) partnerqualifier.unlink() class opendons_partnerqualifier(models.Model): _name = 'opendons_qualifier.partnerqualifier' _description = 'qualificatifs pour stocker les valeurs au niveau du contact' value_text=fields.Char(string='value') value_bool=fields.Boolean(string='value',default=False) @api.model def _compute_value_type(self): for q in self: qualifier=self.env['opendons_qualifier.qualifier'].search([('id',"=",int(q.qualifier_id))]) q.value_type=qualifier.value_type @api.model def _compute_actif(self): for q in self: qualifier=self.env['opendons_qualifier.qualifier'].search([('id',"=",int(q.qualifier_id))]) q.actif=qualifier.actif value_type=fields.Selection(string='Value type',selection=[('boolean', 'boolean'), ('text', 'text')], compute=_compute_value_type,store=True, readonly=True) actif=fields.Boolean(string='actif',compute=_compute_actif,store=True, readonly=True) qualifier_id=fields.Many2one('opendons_qualifier.qualifier',string='qualifier',readonly=True,ondelete='cascade') category = fields.Char(related='qualifier_id.category_id.name') partner_id = fields.Many2one( 'res.partner', string='partner', required=True, index=True, readonly=True, track_visibility='onchange', ondelete='cascade' ) sql_constraints = [ ('qualifier_uniq', 'unique (qualifier_id,partner_id)', 'A qualifier could be defined only one time on same partner.') ] @api.constrains('qualifier_id') def _check_qualifier_id(self): for q in self: result=self.search_count([('qualifier_id','=',int(self.qualifier_id)),('id', '!=', self.id),('partner_id','=',int(self.partner_id))]) if result>0: raise UserError('A qualifier could be defined only one time on same partner.')