diff --git a/__manifest__.py b/__manifest__.py index a151eb2..307b2e2 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -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' diff --git a/controllers/__pycache__/__init__.cpython-37.pyc b/controllers/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 95d8346..0000000 Binary files a/controllers/__pycache__/__init__.cpython-37.pyc and /dev/null differ diff --git a/controllers/__pycache__/controllers.cpython-37.pyc b/controllers/__pycache__/controllers.cpython-37.pyc deleted file mode 100644 index a8145f4..0000000 Binary files a/controllers/__pycache__/controllers.cpython-37.pyc and /dev/null differ diff --git a/models/__init__.py b/models/__init__.py index e690b10..ef8a066 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -13,3 +13,4 @@ from . import payment_batch from . import sale_order from . import product from . import aggregate +from . import duplicate diff --git a/models/__pycache__/__init__.cpython-37.pyc b/models/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index d2d8dee..0000000 Binary files a/models/__pycache__/__init__.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/address.cpython-37.pyc b/models/__pycache__/address.cpython-37.pyc deleted file mode 100644 index 8f06c81..0000000 Binary files a/models/__pycache__/address.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/email.cpython-37.pyc b/models/__pycache__/email.cpython-37.pyc deleted file mode 100644 index c945a69..0000000 Binary files a/models/__pycache__/email.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/mail_mail.cpython-37.pyc b/models/__pycache__/mail_mail.cpython-37.pyc deleted file mode 100644 index 2ae2398..0000000 Binary files a/models/__pycache__/mail_mail.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/mailing_mailing.cpython-37.pyc b/models/__pycache__/mailing_mailing.cpython-37.pyc deleted file mode 100644 index 1ca550a..0000000 Binary files a/models/__pycache__/mailing_mailing.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/models.cpython-37.pyc b/models/__pycache__/models.cpython-37.pyc deleted file mode 100644 index bd2ca03..0000000 Binary files a/models/__pycache__/models.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/operation.cpython-37.pyc b/models/__pycache__/operation.cpython-37.pyc deleted file mode 100644 index 8c952ab..0000000 Binary files a/models/__pycache__/operation.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/partner.cpython-37.pyc b/models/__pycache__/partner.cpython-37.pyc deleted file mode 100644 index 27a1cac..0000000 Binary files a/models/__pycache__/partner.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/phone.cpython-37.pyc b/models/__pycache__/phone.cpython-37.pyc deleted file mode 100644 index f0e857c..0000000 Binary files a/models/__pycache__/phone.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/qualifier.cpython-37.pyc b/models/__pycache__/qualifier.cpython-37.pyc deleted file mode 100644 index f90c5a1..0000000 Binary files a/models/__pycache__/qualifier.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/relationship.cpython-37.pyc b/models/__pycache__/relationship.cpython-37.pyc deleted file mode 100644 index 44e9e71..0000000 Binary files a/models/__pycache__/relationship.cpython-37.pyc and /dev/null differ diff --git a/models/duplicate.py b/models/duplicate.py new file mode 100644 index 0000000..9dae18a --- /dev/null +++ b/models/duplicate.py @@ -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 j1: + + 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 diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 0ed7ed1..5755e42 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -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 diff --git a/views/duplicate.xml b/views/duplicate.xml new file mode 100644 index 0000000..6329c8a --- /dev/null +++ b/views/duplicate.xml @@ -0,0 +1,67 @@ + + + + + + opendons_duplicate rules list + opendons.duplicate_rule + + + + + + + + + + opendons_duplicate partner list + opendons.duplicate_partner + + + + + + + + + + + opendons_duplicate_rule Form + opendons.duplicate_rule + +
+ + + + + + + +
+
+
+ + + + + duplicate rules + opendons.duplicate_rule + tree,form + + + + + duplicate partners + opendons.duplicate_partner + tree,form + + + + generate_duplicate_partner + + code + action=model.find_duplicate_partner() + + +
+
\ No newline at end of file diff --git a/views/partner.xml b/views/partner.xml index 1efe78e..823ad40 100644 --- a/views/partner.xml +++ b/views/partner.xml @@ -184,7 +184,17 @@ - + + + + + + +