# -*- 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 donation_categoryQualifier(models.Model): _name = 'donation_qualifier.donation_categoryqualifier' _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() @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') # @api.depends('value') # def _value_pc(self): # for record in self: # record.value2 = float(record.value) / 100 class donation_qualifier(models.Model): _name = 'donation_qualifier.donation_qualifier' _description = 'qualificatifs de contacts' name = fields.Char() type=fields.Selection([('checkbox','checkbox'),('text','text'),('numerical','numerical')], default='checkbox') default_value = fields.Char() description = fields.Text() category_id = fields.Many2one( 'donation_qualifier.donation_categoryqualifier', string='Category', tracking=True, required=True) class donation_partnerqualifier(models.Model): _name = 'donation_qualifier.donation_partnerqualifier' _description = 'qualificatifs pour stocker les valeurs au niveau du contact' # partner_id=fields.Many2one('res.partner',compute='compute_partner', inverse='partner_inverse') # partner_ids = fields.One2many('res.partner', 'qualifier_id') value=fields.Char() qualifier_id=fields.Many2one('donation_qualifier.donation_qualifier',string='qualifier') 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='restrict' ) 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.') # _sql_constraints = [ # ('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !') # ] # def validate(self): # raise UserError(_( # 'This qualifier %s can\'t be used twice') # % donation_partnerqualifier.qualifier_id.name) # for donation_partnerqualifier in self: # vals={} # if self.env['donation_qualifier.donation_qualifier'].search([('name','=',donation_partnerqualifier.qualifier_id.name)]): # raise UserError(_( # 'This qualifier %s can\'t be used twice') # % donation_partnerqualifier.qualifier_id.name) # vals['value']=donation_partnerqualifier.value # vals['partner_id']=donation_partnerqualifier.partner_id # vals['qualifier_id']=donation_partnerqualifier.qualifier_id # donation_partnerqualifier.write(vals) # return # @api.depends('contact_ids') # def compute_partner(self): # if len(self.partner_ids) > 0: # self.partner_id = self.partner_ids[0] # def partner_inverse(self): # if len(self.partner_ids) > 0: # # delete previous reference # partner = self.env['res.partner'].browse(self.partner_ids[0].id) # partner.qualifier_id = False # # set new reference # self.partner_id.qualifier_id = self class partner(models.Model): _inherit = 'res.partner' @api.depends('qualifier_ids.partner_id') def _compute_qualifier_count(self): # The current user may not have access rights for donations for partner in self: try: partner.qualifier_count = len(partner.qualifier_ids) except Exception: partner.qualifier_count = 0 qualifier_ids = fields.One2many( 'donation_qualifier.donation_partnerqualifier', 'partner_id', string='Qualifier', readonly=True ) qualifier_count = fields.Integer( compute='_compute_qualifier_count', string="# of Qualifiers", readonly=True )