Browse Source

bug traitement des doublons

master
root 3 years ago
parent
commit
64acff4c8c
3 changed files with 120 additions and 119 deletions
  1. +107
    -60
      models/duplicate.py
  2. +10
    -56
      models/partner.py
  3. +3
    -3
      views/duplicate.xml

+ 107
- 60
models/duplicate.py View File

@ -26,72 +26,102 @@ class opendons_duplicate_partner(models.Model):
def find_duplicate_partner(self): def find_duplicate_partner(self):
self.env['opendons.duplicate_partner'].search([]).unlink() self.env['opendons.duplicate_partner'].search([]).unlink()
rules=self.env['opendons.duplicate_rule'].search([('active','=','true')])
rules=self.env['opendons.duplicate_rule'].search([('is_active','=','true')])
dbl_partner_ids=[] dbl_partner_ids=[]
i=1 i=1
for rule in rules: for rule in rules:
groupby_fields=''
selected_fields=''
list_field=[]
for f in rule.field_ids:
if i==1:groupby_fields+="'"+f.field+"'"
else:groupby_fields+=",'"+f.field+"'"
list_field.append(f.field)
i=i+1
selected_fields=''
j=1
i=i-1
for f in list_field:
if j==1:selected_fields+=""+f+""
if j>1 and j<i:selected_fields+="'"+f+""
if j==i and j!=1:selected_fields+=","+f+""
j=j+1
j=j-1
last_field=list_field[j-1]
sql="select count(id) as __count, "+ selected_fields +" from res_partner group by "+ selected_fields
self.env.cr.execute(sql)
p=self.env.cr.dictfetchall()
#raise Warning(json.dumps(p))
for pp in p:
if int(pp['__count'])>1:
domain=''
if rule.field_ids:
groupby_fields=''
selected_fields=''
list_field=[]
for f in rule.field_ids:
try:
if i==1:groupby_fields+="'"+f.field+"'"
else:groupby_fields+=",'"+f.field+"'"
list_field.append(f.field)
i=i+1
except:
raise warning(f.field)
selected_fields=''
j=1
i=i-1
for f in list_field:
try:
if j==1:selected_fields+=""+f+""
if j>1 and j<i:selected_fields+="'"+f+""
if j==i and j!=1:selected_fields+=","+f+""
j=j+1
except:
raise warning(f.field)
j=j-1
last_field=list_field[j-1]
sql="select count(id) as __count, "+ selected_fields +" from res_partner group by "+ selected_fields
try:
self.env.cr.execute(sql)
p=self.env.cr.dictfetchall()
except:
raise Warning(sql)
#raise Warning(json.dumps(p))
for pp in p:
if len(list_field)>1:domain="['&',"
else:domain="["
i=1
for f in list_field:
if pp[f]:
if i==1:domain+="('"+f+"','=','"+pp[f]+"')"
if i>1:domain+=",('"+f+"','=','"+pp[f]+"')"
i=i+1
domain+=']'
if domain!='[]':
if int(pp['__count'])>1:
partner_dbl=self.env['res.partner'].search(eval(domain))
domain=''
for partner in partner_dbl:
vals={}
vals['partner_id']=partner.id
self.env['opendons.duplicate_partner'].create(vals)
dbl_partner_ids.append(partner.id)
action = self.env.ref("contacts.action_contacts").sudo().read([])[0]
action.update(
{
"domain": [("id", "in", dbl_partner_ids)],
"limit": 5000,
"context":{'view_mode':'tree'}
}
)
return action
if len(list_field)>0:
i=1
for f in list_field:
if pp[f]!='' and pp[f]:
try:
if i==1:domain+="('"+f+"','=','"+pp[f]+"')"
if i>1:domain+=",('"+f+"','=','"+pp[f]+"')"
except: raise Warning(f+' '+pp[f])
i=i+1
if len(list_field)>1 : domain="['&',"+domain+"]"
else:domain="["+domain+"]"
else:domain="[]"
if domain!='[]' and domain!="['&',]" :
try:
partner_dbl=self.env['res.partner'].search(eval(domain))
for partner in partner_dbl:
vals={}
vals['partner_id']=partner.id
self.env['opendons.duplicate_partner'].create(vals)
dbl_partner_ids.append(partner.id)
except:
raise Warning(domain)
if dbl_partner_ids:
action = self.env.ref("contacts.action_contacts").sudo().read([])[0]
action.update(
{
"domain": [("id", "in", dbl_partner_ids)],
"limit": 5000,
'view_mode': 'tree',
'view_type': 'list'
#"context":{'view_mode':'tree,form'}
}
)
return action
@ -104,8 +134,22 @@ class opendons_duplicate_rule(models.Model):
string='fields', string='fields',
) )
active=fields.Boolean('active' ,default=True)
is_active=fields.Boolean('active' ,default=True)
fields_selected=fields.Char('fields', compute='_fields_selected')
def _fields_selected(self):
for rec in self:
result=''
field_list=rec.field_ids
if field_list:
i=1
for f in field_list:
if i==1: result+=f.field
else:result+=','+f.field
i=i+1
rec.fields_selected=result
class opendons_duplicate_rule_line(models.Model): class opendons_duplicate_rule_line(models.Model):
@ -140,3 +184,6 @@ class opendons_duplicate_rule_line(models.Model):
result.append((key,key)) result.append((key,key))
raise Warning(result) raise Warning(result)
return result return result

+ 10
- 56
models/partner.py View File

@ -4,37 +4,12 @@ from psycopg2 import sql, DatabaseError
from werkzeug import utils from werkzeug import utils
import re import re
from string import ascii_uppercase
class partner(models.Model): class partner(models.Model):
_inherit = 'res.partner' _inherit = 'res.partner'
# @api.depends('qualifier_ids.partner_id')
# def _compute_text_qualifier_count(self):
# # The current user may not have access rights for donations
# for partner in self:
# try:
# partner.text_qualifier_count = len(partner.qualifier_ids)
# except Exception:
# partner.text_qualifier_count = 0
# @api.depends('qualifier_ids.partner_id')
# def _compute_bool_qualifier_count(self):
# # The current user may not have access rights for donations
# for partner in self:
# try:
# for qualifier_id in partner.qualifier_ids:
# partner.bool_qualifier_count =self.env['opendons_qualifier.partnerqualifier'].search([(partner.qual_i
# except Exception:
# partner.bool_qualifier_count = 0
def _compute_address_count(self): def _compute_address_count(self):
# The current user may not have access rights for donations # The current user may not have access rights for donations
for partner in self: for partner in self:
@ -82,16 +57,7 @@ class partner(models.Model):
string='Qualifier', string='Qualifier',
readonly=True readonly=True
) )
# text_qualifier_count = fields.Integer(
# compute='_compute_text_qualifier_count',
# string="# of Qualifiers",
# readonly=True
# )
# bool_qualifier_count = fields.Integer(
# compute='_compute_bool_qualifier_count',
# string="# of Qualifiers",
# readonly=True
# )
address_ids = fields.One2many( address_ids = fields.One2many(
'opendons.partneraddress', 'opendons.partneraddress',
@ -100,12 +66,7 @@ class partner(models.Model):
readonly=True readonly=True
) )
# request_ids = fields.One2many(
# 'opendons.request',
# 'partner_ids',
# string='Request',
# readonly=True
# )
request_ids = fields.Many2many('opendons.request', 'request_partner_rel', 'partner_id', 'request_id', string='requests') request_ids = fields.Many2many('opendons.request', 'request_partner_rel', 'partner_id', 'request_id', string='requests')
operation_ids = fields.Many2many('opendons.operation', 'operation_partner_rel', 'partner_id', 'operation_id', string='operations') operation_ids = fields.Many2many('opendons.operation', 'operation_partner_rel', 'partner_id', 'operation_id', string='operations')
operation_excl_ids = fields.Many2many('opendons.operation', 'operation_excl_partner_rel', 'partner_id', 'operation_id', string='excluded operations') operation_excl_ids = fields.Many2many('opendons.operation', 'operation_excl_partner_rel', 'partner_id', 'operation_id', string='excluded operations')
@ -156,7 +117,7 @@ class partner(models.Model):
readonly=True readonly=True
) )
key=fields.Integer(
key=fields.Char(
compute='_compute_key', compute='_compute_key',
string="Key", string="Key",
store=True, store=True,
@ -173,29 +134,22 @@ class partner(models.Model):
def _compute_all_key(self): def _compute_all_key(self):
#for rec in self.env:
#rec.write({'key':3})
#raise Warning(rec.id)
for rec in self.env['res.partner'].search([]): for rec in self.env['res.partner'].search([]):
rec.key=int(rec.id)*40456 rec.key=int(rec.id)*40456
#raise Warning(len())
def _update_source(self): def _update_source(self):
#for rec in self.env:
#rec.write({'key':3})
#raise Warning(rec.id)
for rec in self.env['res.partner'].search([]): for rec in self.env['res.partner'].search([]):
rec.source='joomla' rec.source='joomla'
#raise Warning(len())
def _remove_source(self): def _remove_source(self):
#for rec in self.env:
#rec.write({'key':3})
#raise Warning(rec.id)
self.env["res.partner"].search([('source','=','joomla')]).unlink() self.env["res.partner"].search([('source','=','joomla')]).unlink()
#raise Warning(len())
@api.onchange('street') @api.onchange('street')


+ 3
- 3
views/duplicate.xml View File

@ -7,8 +7,8 @@
<field name="model">opendons.duplicate_rule</field> <field name="model">opendons.duplicate_rule</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree>
<field name="active"/>
<field name="field_ids"/>
<field name="fields_selected"/>
<field name="is_active"/>
</tree> </tree>
</field> </field>
@ -32,7 +32,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="duplicate_rule_form"> <form string="duplicate_rule_form">
<group> <group>
<field name="active"/>
<field name="is_active"/>
<field name="field_ids"> <field name="field_ids">
<tree editable="1"> <tree editable="1">
<field name="field"/> <field name="field"/>


Loading…
Cancel
Save