Browse Source

duplicates

master
raynald 3 years ago
parent
commit
27192d78c9
19 changed files with 227 additions and 1 deletions
  1. +2
    -0
      __manifest__.py
  2. BIN
      controllers/__pycache__/__init__.cpython-37.pyc
  3. BIN
      controllers/__pycache__/controllers.cpython-37.pyc
  4. +1
    -0
      models/__init__.py
  5. BIN
      models/__pycache__/__init__.cpython-37.pyc
  6. BIN
      models/__pycache__/address.cpython-37.pyc
  7. BIN
      models/__pycache__/email.cpython-37.pyc
  8. BIN
      models/__pycache__/mail_mail.cpython-37.pyc
  9. BIN
      models/__pycache__/mailing_mailing.cpython-37.pyc
  10. BIN
      models/__pycache__/models.cpython-37.pyc
  11. BIN
      models/__pycache__/operation.cpython-37.pyc
  12. BIN
      models/__pycache__/partner.cpython-37.pyc
  13. BIN
      models/__pycache__/phone.cpython-37.pyc
  14. BIN
      models/__pycache__/qualifier.cpython-37.pyc
  15. BIN
      models/__pycache__/relationship.cpython-37.pyc
  16. +141
    -0
      models/duplicate.py
  17. +5
    -0
      security/ir.model.access.csv
  18. +67
    -0
      views/duplicate.xml
  19. +11
    -1
      views/partner.xml

+ 2
- 0
__manifest__.py View File

@ -39,8 +39,10 @@
'views/payment_batch.xml',
'views/website_sale.xml',
'views/aggregate.xml',
'views/duplicate.xml',
'wizard/operation_duplicate_wizard.xml',
'report/report_donationtax.xml'
#'views/website_donation.xml'


BIN
controllers/__pycache__/__init__.cpython-37.pyc View File


BIN
controllers/__pycache__/controllers.cpython-37.pyc View File


+ 1
- 0
models/__init__.py View File

@ -13,3 +13,4 @@ from . import payment_batch
from . import sale_order
from . import product
from . import aggregate
from . import duplicate

BIN
models/__pycache__/__init__.cpython-37.pyc View File


BIN
models/__pycache__/address.cpython-37.pyc View File


BIN
models/__pycache__/email.cpython-37.pyc View File


BIN
models/__pycache__/mail_mail.cpython-37.pyc View File


BIN
models/__pycache__/mailing_mailing.cpython-37.pyc View File


BIN
models/__pycache__/models.cpython-37.pyc View File


BIN
models/__pycache__/operation.cpython-37.pyc View File


BIN
models/__pycache__/partner.cpython-37.pyc View File


BIN
models/__pycache__/phone.cpython-37.pyc View File


BIN
models/__pycache__/qualifier.cpython-37.pyc View File


BIN
models/__pycache__/relationship.cpython-37.pyc View File


+ 141
- 0
models/duplicate.py View File

@ -0,0 +1,141 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError,Warning
from psycopg2 import sql, DatabaseError
from odoo.tools.safe_eval import safe_eval, datetime
from werkzeug import utils
import json
class opendons_duplicate_partner(models.Model):
_name = 'opendons.duplicate_partner'
_description = 'duplicate partner'
partner_id = fields.Many2one(
'res.partner',
string='partner',
required=True,
index=True,
readonly=True,
track_visibility='onchange',
ondelete='restrict'
)
def find_duplicate_partner(self):
self.env['opendons.duplicate_partner'].search([]).unlink()
rules=self.env['opendons.duplicate_rule'].search([])
dbl_partner_ids=[]
groupby_fields=''
list_field=[]
i=1
for rule in rules:
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 len(list_field)==1:
# domain= "('"+list_field[0]+"','=','"+list_field[0]+"')"
# else:
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!='[]':
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)
action = self.env.ref("contacts.action_contacts").sudo().read([])[0]
action.update(
{
"domain": [("id", "in", dbl_partner_ids)],
"limit": 500,
}
)
return action
class opendons_duplicate_rule(models.Model):
_name = 'opendons.duplicate_rule'
_description = 'duplicate partner rule'
field_ids=fields.One2many(
'opendons.duplicate_rule_line',
'rule_id',
string='fields',
)
class opendons_duplicate_rule_line(models.Model):
_name = 'opendons.duplicate_rule_line'
_description = 'duplicate partner rule line'
field=fields.Selection('field_selection', string='fields')
rule_id=fields.Many2one(
'opendons.duplicate_rule',
string='rule',
required=True,
index=True,
readonly=True,
track_visibility='onchange',
ondelete='restrict'
)
@api.model
def field_selection(self):
field_list=self.env['res.partner'].fields_get()
#raise Warning(json.dumps(field_list))
result=[]
for key in field_list:
result.append((key,key))
result.sort()
return result
def field_selection2(self):
field_list=self.env['res.partner'].fields_get()
#raise Warning(json.dumps(field_list))
result=[]
for key in field_list:
result.append((key,key))
raise Warning(result)
return result

+ 5
- 0
security/ir.model.access.csv View File

@ -24,3 +24,8 @@ access_opendons_payment_batch_qr_code,opendons_payment_batch_qrcode,model_opendo
access_opendons_duplicate_operation_wizard,opendons_duplicate_operation_wizard,model_opendons_operation_duplicate,donation.group_donation_manager,1,1,1,1
access_opendons_aggregate_partner,opendons_aggregate_partner,model_opendons_aggregate_partner,donation.group_donation_manager,1,1,1,1
access_opendons_duplicate_rule,opendons_duplicate_rule,model_opendons_duplicate_rule,donation.group_donation_manager,1,1,1,1
access_opendons_duplicate_rule_line,opendons_duplicate_rule_line,model_opendons_duplicate_rule_line,donation.group_donation_manager,1,1,1,1
access_opendons_duplicate_partner,opendons_duplicate_partner,model_opendons_duplicate_partner,donation.group_donation_manager,1,1,1,1

+ 67
- 0
views/duplicate.xml View File

@ -0,0 +1,67 @@
<odoo>
<data>
<record model="ir.ui.view" id="opendons.duplicate_rule_list">
<field name="name">opendons_duplicate rules list</field>
<field name="model">opendons.duplicate_rule</field>
<field name="arch" type="xml">
<tree>
<field name="id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="opendons.duplicate_partner_list">
<field name="name">opendons_duplicate partner list</field>
<field name="model">opendons.duplicate_partner</field>
<field name="arch" type="xml">
<tree>
<field name="partner_id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="opendons.duplicate_rule_form" >
<field name="name">opendons_duplicate_rule Form</field>
<field name="model">opendons.duplicate_rule</field>
<field name="arch" type="xml">
<form string="duplicate_rule_form">
<group>
<field name="field_ids">
<tree editable="1">
<field name="field"/>
</tree>
</field>
</group>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="duplicate_rule_action">
<field name="name">duplicate rules</field>
<field name="res_model">opendons.duplicate_rule</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.actions.act_window" id="duplicate_partner_action">
<field name="name">duplicate partners</field>
<field name="res_model">opendons.duplicate_partner</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.actions.server" id="ir_action_find_duplicate_partner">
<field name="name">generate_duplicate_partner</field>
<field name="model_id" ref="opendons.model_opendons_duplicate_partner"/>
<field name="state">code</field>
<field name="code">action=model.find_duplicate_partner()</field>
</record>
</data>
</odoo>

+ 11
- 1
views/partner.xml View File

@ -184,7 +184,17 @@
<menuitem id="opendons_relationship_title_menu" name ="Relationships"
parent="contacts.menu_contacts" sequence="22"/>
<menuitem id="opendons_duplicate_title_menu" name ="Duplicates"
parent="contacts.menu_contacts" sequence="23"/>
<menuitem id="opendons_duplicate_rule_menu" action="duplicate_rule_action"
parent="opendons_duplicate_title_menu" sequence="1"/>
<!-- <menuitem id="opendons_duplicate_partner_menu" action="duplicate_partner_action"
parent="opendons_duplicate_title_menu" sequence="2"/> -->
<menuitem id="opendons_duplicate_partner_menu" action="ir_action_find_duplicate_partner"
parent="opendons_duplicate_title_menu" sequence="2"/>


Loading…
Cancel
Save