From 4611c81036cb869f9bb1c50dd4a89545c35180d8 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Thu, 18 Feb 2016 17:36:43 +0100 Subject: [PATCH 01/16] [ADD] crm_deduplicate_acl: Deduplicate permission groups This module allows any user to get special permissions to be able to deduplicate contacts, instead of just giving them to a sale manager with settings permissions. The new permissions allow the user to deduplicate: - *Manually*. - *Automatically* (dangerous). - *Without restrictions* (more dangerous). Beware what you do! :hushed: --- partner_deduplicate_acl/README.rst | 96 ++++++++++++++++++ partner_deduplicate_acl/__init__.py | 5 + partner_deduplicate_acl/__openerp__.py | 24 +++++ partner_deduplicate_acl/i18n/es.po | 43 ++++++++ partner_deduplicate_acl/images/perms.png | Bin 0 -> 76295 bytes .../security/crm_deduplicate_acl_security.xml | 44 ++++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes partner_deduplicate_acl/wizards/__init__.py | 5 + .../wizards/partner_merge.py | 25 +++++ .../wizards/partner_merge_view.xml | 31 ++++++ 10 files changed, 273 insertions(+) create mode 100644 partner_deduplicate_acl/README.rst create mode 100644 partner_deduplicate_acl/__init__.py create mode 100644 partner_deduplicate_acl/__openerp__.py create mode 100644 partner_deduplicate_acl/i18n/es.po create mode 100644 partner_deduplicate_acl/images/perms.png create mode 100644 partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml create mode 100644 partner_deduplicate_acl/static/description/icon.png create mode 100644 partner_deduplicate_acl/wizards/__init__.py create mode 100644 partner_deduplicate_acl/wizards/partner_merge.py create mode 100644 partner_deduplicate_acl/wizards/partner_merge_view.xml diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst new file mode 100644 index 000000000..3666d56aa --- /dev/null +++ b/partner_deduplicate_acl/README.rst @@ -0,0 +1,96 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================== +Deduplicate Contacts ACL +======================== + +This module extends the functionality of the CRM contact deduplicator to add +permission groups that allow the matching users to use those tools, not +needing to be the sale settings manager. + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Settings > Users > Users*. +#. Choose a user. +#. Choose the desired permission level(s) in *Appplication > Deduplicate + Contacts*: + + - *Manually* allows him to do the manual deduplication process. + - *Automatically* allows him to do the automatic deduplication process. + + .. warning:: + Automatic contact deduplication can easily lead to unwanted results. + Better backup before doing it. + + - *Without restrictions* executes the chosen deduplication method with admin + rigts, to be able to update objects where the user would normally not have + write rights, and to allow him to merge contacts with different email + addresses. + + .. warning:: + This is an advanced feature, be sure to train the user before enabling + this permission for him. + +Usage +===== + +To use this module, you need to: + +#. Ask your admin to give you the new rigts. +#. Go to *Sales > Tools > Deduplicate Contacts* as usual. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/111/8.0 + +Known issues / Roadmap +====================== + +* Wizard's code is partially written in old API because somehow [possibly] + the upstream's ``@mute_logger`` decorator prevents API from doing its magic. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed `feedback +`_. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Rafael Blasco +* Jairo Llopis + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/partner_deduplicate_acl/__init__.py b/partner_deduplicate_acl/__init__.py new file mode 100644 index 000000000..a803d44dd --- /dev/null +++ b/partner_deduplicate_acl/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import wizards diff --git a/partner_deduplicate_acl/__openerp__.py b/partner_deduplicate_acl/__openerp__.py new file mode 100644 index 000000000..76d2e015b --- /dev/null +++ b/partner_deduplicate_acl/__openerp__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Deduplicate Contacts ACL", + "summary": "Contact deduplication with fine-grained permission control", + "version": "8.0.1.0.0", + "category": "Tools", + "website": "http://www.antiun.com", + "author": "Antiun Ingeniería S.L., Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "crm", + ], + "data": [ + "security/crm_deduplicate_acl_security.xml", + "wizards/partner_merge_view.xml", + ], + "images": [ + "images/perms.png", + ], +} diff --git a/partner_deduplicate_acl/i18n/es.po b/partner_deduplicate_acl/i18n/es.po new file mode 100644 index 000000000..6fd866a6b --- /dev/null +++ b/partner_deduplicate_acl/i18n/es.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-18 16:30+0000\n" +"PO-Revision-Date: 2016-02-18 17:32+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"Language: es\n" +"X-Generator: Poedit 1.8.6\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Automáticamente" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +msgid "Deduplicate Contacts" +msgstr "Deduplicar contactos" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Manualmente" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Sin restricciones" + +#. module: crm_deduplicate_acl +#: view:base.partner.merge.automatic.wizard:crm_deduplicate_acl.base_partner_merge_automatic_wizard_form +msgid "crm_deduplicate_acl.group_automatically" +msgstr "crm_deduplicate_acl.group_automatically" diff --git a/partner_deduplicate_acl/images/perms.png b/partner_deduplicate_acl/images/perms.png new file mode 100644 index 0000000000000000000000000000000000000000..aacf5528d146fed7e24f0f3d24ee6bb38a9487e2 GIT binary patch literal 76295 zcmXt91yGx9vn>>dQk)c*;1qXv2t|VyEd+Nj?(Xi=qQ#-O7fo>~?heJ><)+_1H#3>c zo8*;!cF)S$eIitpWZ$6?p}l$Y<{d~*3jF2`+yLxdfPw`3rct-y7wiMUSpuYv0(*I* zn1sWQKe$M1yQtZlxqLNpGJRuiXK!oz(HY`oYHH_fVefMKwoByA8;Um|DRFi8?4ypa z$uuCJy~l`fuDLYc<7am$A22!?>nBQl_c7Y{mD|Ds>GqVHV=JvFO?z_YBYE>{P4o90 z6v4n)E)D?Y(;Lp{FKj{NYg=tzi<+)!T`c-i?V=p^GnEIhS5@l@XZ)Jl?KF4B2U^ap zEK$}9?o`FF-!DsbqPpl3ZnjH7yM#;i<~}?F6h-jA05Nz}hsq`P#+GR*d8|Kd`CjkZ z{7(CYDx8-4*->lEQaWvFM9X8VokwiOiV*sK-VW~#u#lps`Zd|PkgL@^J$-Fh=r|to z;YB>;*Q_4*n>!yDc+F`E7;Ph)n}5wdw!gU>_j|p)dC@&iXR5l_fUcEWQ%c`n`^`Q# zQC75vZ7g4Q&E9E|SvMRy3;TSQePr5eFBhI9HrAU2S^sPzl;p7fRaI~(;qtL&^T4hRsS6A=Z+_{-(jyb{W~C_ z^;o_VO)PcW{`FO~++J8>@4LmQt>^TM735@gwxV5Y?AEtqpX~DUmLc@IN!7*BZ}`D@ z{Kd!gaqn=rb*$ub$Fu2N*XQ$2uPntr{=HYd<2*>$*q(Dt*CW{pncwZ{N?~)=rC-AB ztJUH7CZ(38^TIX>vF2!7XMjK6IgOc1_gf8#c?exs`%1$DHux)at zN%44?f1vShh4HfMqUi*p&&(pV>8F$(bxK&_`ofE9ZQ!?OX#9I1ri88Yv|v(4=oOZD!{7&22ykm;d8TCJsf~Bkz`3z*DNmHzv z>Mh!UBk0}tz`7XRE!wuX_Be&fD3p#QA;~y%uBt=g3_%TOP)Da3tACf!GpMdOyQd^;A+tvks;(-*-i+2 z_CDLsCZIH-<=@>-|0hlw+L%*V98H#{d}JnHEc?Lv<4gWK8-DysNeQ7ayamP30gGTP zzStn{RKCbJ@r)Y0jHNa3J@iyc#(Gd`Py|jOJ;u47y{glUb~HDAQEGyF)AoXN*l8*h4A}Mr{5JT>0;iBM2~}YQcvHnrntQIbQVJ~ZTgAfWO9GE(1-Tu2-vx{8J=kmUB*KDikSs*BJ zu~lHHCv;HN1!wh*DuAL$iZR2qv&s9i+;AuB)+dMQJ;{0zs}E|`*4cK!d&j3cM}zAF zEwxHb%GmV0%pO((dV)v=WkqZ#`;Jpa=LThP@)xzNB77=*_|GTOS&K|*15Paw^bru8 zxut3C$$wV%yVkejL)G_&Zh+)6O}9-Xb-3cO&j6r@t?$++xj=3cz(9csk9o8&&A@)6(IS~Slfd1S*tHYCYN3C&UsT{Rw70@c!{fA4_p3FY_LTw-$ z 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
{z1I=geB-PR&dSh3 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 + + + + + + + + Deduplicate Contacts + + + + + Manually + + + + + Automatically + + + + + + Without restrictions + + + + + + + + + + + + + + + + diff --git a/partner_deduplicate_acl/static/description/icon.png b/partner_deduplicate_acl/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/partner_deduplicate_acl/wizards/__init__.py b/partner_deduplicate_acl/wizards/__init__.py new file mode 100644 index 000000000..c93eadfed --- /dev/null +++ b/partner_deduplicate_acl/wizards/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import partner_merge diff --git a/partner_deduplicate_acl/wizards/partner_merge.py b/partner_deduplicate_acl/wizards/partner_merge.py new file mode 100644 index 000000000..babd38527 --- /dev/null +++ b/partner_deduplicate_acl/wizards/partner_merge.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import SUPERUSER_ID, api, models + + +class BasePartnerMergeAutomaticWizard(models.TransientModel): + _inherit = "base.partner.merge.automatic.wizard" + + @api.cr_uid_context + def _merge(self, cr, uid, partner_ids, dst_partner=None, context=None): + """Allow non-admins to merge partners with different emails.""" + # Know if user has unrestricted access + group_unrestricted = self.pool["ir.model.data"].xmlid_to_object( + cr, uid, "crm_deduplicate_acl.group_unrestricted", context) + user = self.pool["res.users"].browse(cr, uid, uid, context) + + # Run as admin if so + return super(BasePartnerMergeAutomaticWizard, self)._merge( + cr, + SUPERUSER_ID if group_unrestricted in user.groups_id else uid, + partner_ids, + dst_partner, + context) diff --git a/partner_deduplicate_acl/wizards/partner_merge_view.xml b/partner_deduplicate_acl/wizards/partner_merge_view.xml new file mode 100644 index 000000000..9abc6a311 --- /dev/null +++ b/partner_deduplicate_acl/wizards/partner_merge_view.xml @@ -0,0 +1,31 @@ + + + + + + + + Restrict automatic merge access + base.partner.merge.automatic.wizard + + + + + crm_deduplicate_acl.group_automatically + + + + + crm_deduplicate_acl.group_automatically + + + + + + + From d9df3952c85db8efffb88f9aa6781aa9ecb732ec Mon Sep 17 00:00:00 2001 From: jbeficent Date: Wed, 13 Jul 2016 16:54:06 +0200 Subject: [PATCH 02/16] only users beloning to group 'Manually' should be able to merge partners from the partner list views (action 'Merge automatically') Use - + - - Restrict automatic merge access - base.partner.merge.automatic.wizard - - - - - crm_deduplicate_acl.group_automatically - - - - - crm_deduplicate_acl.group_automatically - - - - + + Restrict automatic merge access + base.partner.merge.automatic.wizard + + + + crm_deduplicate_acl.group_automatically + + + crm_deduplicate_acl.group_automatically + + + - + + group_manually + + + From ff1a5124d4822864f38cce4cc593a9e85f32e46b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 15 Aug 2016 02:40:00 +0200 Subject: [PATCH 03/16] crm_deduplicate_*: Better icons --- partner_deduplicate_acl/README.rst | 3 +- .../static/description/icon.png | Bin 9455 -> 10562 bytes .../static/description/icon.svg | 101 ++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 partner_deduplicate_acl/static/description/icon.svg diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index 3666d56aa..b0df5b7ec 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -72,7 +72,8 @@ Credits Images ------ -* Odoo Community Association: `Icon `_. +* `Arrow `_. +* `Lock `_. Contributors ------------ diff --git a/partner_deduplicate_acl/static/description/icon.png b/partner_deduplicate_acl/static/description/icon.png index 3a0328b516c4980e8e44cdb63fd945757ddd132d..6eb6c3008ec449ca5a3f0271011c97b579a0d440 100644 GIT binary patch delta 10531 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 b;`AA5wWY6uZ;|i>gt+8BDoa;_O@jXeC@YB= literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I diff --git a/partner_deduplicate_acl/static/description/icon.svg b/partner_deduplicate_acl/static/description/icon.svg new file mode 100644 index 000000000..0a7035ea2 --- /dev/null +++ b/partner_deduplicate_acl/static/description/icon.svg @@ -0,0 +1,101 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + From f09310cad17ee0976dfafbcf9fb555931830e4f6 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 12 Mar 2016 04:04:15 -0500 Subject: [PATCH 04/16] OCA Transbot updated translations from Transifex --- partner_deduplicate_acl/i18n/de.po | 51 +++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/es.po | 33 ++++++++++------- partner_deduplicate_acl/i18n/hr.po | 50 ++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/it.po | 50 ++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/pt_BR.po | 51 +++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/sk.po | 50 ++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/sl.po | 51 +++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/tr.po | 50 ++++++++++++++++++++++++++ partner_deduplicate_acl/i18n/zh_CN.po | 50 ++++++++++++++++++++++++++ 9 files changed, 423 insertions(+), 13 deletions(-) create mode 100644 partner_deduplicate_acl/i18n/de.po create mode 100644 partner_deduplicate_acl/i18n/hr.po create mode 100644 partner_deduplicate_acl/i18n/it.po create mode 100644 partner_deduplicate_acl/i18n/pt_BR.po create mode 100644 partner_deduplicate_acl/i18n/sk.po create mode 100644 partner_deduplicate_acl/i18n/sl.po create mode 100644 partner_deduplicate_acl/i18n/tr.po create mode 100644 partner_deduplicate_acl/i18n/zh_CN.po diff --git a/partner_deduplicate_acl/i18n/de.po b/partner_deduplicate_acl/i18n/de.po new file mode 100644 index 000000000..7b98634b9 --- /dev/null +++ b/partner_deduplicate_acl/i18n/de.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# OCA Transbot , 2016 +# Rudolf Schnapka , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-28 02:27+0000\n" +"PO-Revision-Date: 2017-03-28 02:27+0000\n" +"Last-Translator: Rudolf Schnapka , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Automatisch" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Deduplizieren der Kontakte" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Manuell" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "Werkzeuge" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Ohne Beschränkungen" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/es.po b/partner_deduplicate_acl/i18n/es.po index 6fd866a6b..96646cecf 100644 --- a/partner_deduplicate_acl/i18n/es.po +++ b/partner_deduplicate_acl/i18n/es.po @@ -1,21 +1,22 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl -# +# * crm_deduplicate_acl +# +# Translators: +# OCA Transbot , 2016 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-18 16:30+0000\n" -"PO-Revision-Date: 2016-02-18 17:32+0100\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"POT-Creation-Date: 2017-03-16 03:45+0000\n" +"PO-Revision-Date: 2017-03-16 03:45+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: \n" +"Content-Transfer-Encoding: \n" "Language: es\n" -"X-Generator: Poedit 1.8.6\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically @@ -24,6 +25,7 @@ msgstr "Automáticamente" #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Deduplicar contactos" @@ -32,12 +34,17 @@ msgstr "Deduplicar contactos" msgid "Manually" msgstr "Manualmente" +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "Herramientas" + #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Sin restricciones" #. module: crm_deduplicate_acl -#: view:base.partner.merge.automatic.wizard:crm_deduplicate_acl.base_partner_merge_automatic_wizard_form -msgid "crm_deduplicate_acl.group_automatically" -msgstr "crm_deduplicate_acl.group_automatically" +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/hr.po b/partner_deduplicate_acl/i18n/hr.po new file mode 100644 index 000000000..bab09bae8 --- /dev/null +++ b/partner_deduplicate_acl/i18n/hr.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-07 03:39+0000\n" +"PO-Revision-Date: 2016-12-07 03:39+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Automatski" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Ukloni duple kontakte" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Ručno" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Bez ograničenja" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" diff --git a/partner_deduplicate_acl/i18n/it.po b/partner_deduplicate_acl/i18n/it.po new file mode 100644 index 000000000..d8f8c382e --- /dev/null +++ b/partner_deduplicate_acl/i18n/it.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-07 03:39+0000\n" +"PO-Revision-Date: 2016-12-07 03:39+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Automaticamente" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Deduplica Contatti" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Manualmente" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Senza restrinzioni" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" diff --git a/partner_deduplicate_acl/i18n/pt_BR.po b/partner_deduplicate_acl/i18n/pt_BR.po new file mode 100644 index 000000000..b347a75a1 --- /dev/null +++ b/partner_deduplicate_acl/i18n/pt_BR.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# OCA Transbot , 2016 +# danimaribeiro , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-07 03:39+0000\n" +"PO-Revision-Date: 2016-12-07 03:39+0000\n" +"Last-Translator: danimaribeiro , 2016\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Deduplicar contatos" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "Ferramentas" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" diff --git a/partner_deduplicate_acl/i18n/sk.po b/partner_deduplicate_acl/i18n/sk.po new file mode 100644 index 000000000..1f7f603ea --- /dev/null +++ b/partner_deduplicate_acl/i18n/sk.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# gebri , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 01:29+0000\n" +"PO-Revision-Date: 2016-12-17 01:29+0000\n" +"Last-Translator: gebri , 2016\n" +"Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Automaticky" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Odduplikovať Kontakty" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Manuálne" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "Nástroje" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Bez obmedzení" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/sl.po b/partner_deduplicate_acl/i18n/sl.po new file mode 100644 index 000000000..9176ba2c2 --- /dev/null +++ b/partner_deduplicate_acl/i18n/sl.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# OCA Transbot , 2016 +# Matjaž Mozetič , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-07 03:39+0000\n" +"PO-Revision-Date: 2016-12-07 03:39+0000\n" +"Last-Translator: Matjaž Mozetič , 2016\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Samodejno" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Odstrani dvojnike stikov" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Ročno" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "Orodja" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Brez omejitev" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" diff --git a/partner_deduplicate_acl/i18n/tr.po b/partner_deduplicate_acl/i18n/tr.po new file mode 100644 index 000000000..c7b87e6a4 --- /dev/null +++ b/partner_deduplicate_acl/i18n/tr.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# Ahmet Altinisik , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-24 01:15+0000\n" +"PO-Revision-Date: 2016-12-24 01:15+0000\n" +"Last-Translator: Ahmet Altinisik , 2016\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Çift kayıtlı kişileri birleştir" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/zh_CN.po b/partner_deduplicate_acl/i18n/zh_CN.po new file mode 100644 index 000000000..9baa86dcc --- /dev/null +++ b/partner_deduplicate_acl/i18n/zh_CN.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# ITGeeker , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-28 02:27+0000\n" +"PO-Revision-Date: 2017-03-28 02:27+0000\n" +"Last-Translator: ITGeeker , 2017\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "自动" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "联系人去重" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "手动" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "无限制" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" From 5cf568bf47ae91bb36c99795b12e54abc80a799c Mon Sep 17 00:00:00 2001 From: cubells Date: Mon, 14 Nov 2016 09:22:26 +0100 Subject: [PATCH 05/16] crm_deduplicate_acl --- partner_deduplicate_acl/README.rst | 10 +-- partner_deduplicate_acl/__init__.py | 3 +- partner_deduplicate_acl/__openerp__.py | 10 ++- .../security/crm_deduplicate_acl_security.xml | 75 ++++++++----------- partner_deduplicate_acl/wizards/__init__.py | 3 +- .../wizards/partner_merge.py | 24 +++--- .../wizards/partner_merge_view.xml | 10 +-- 7 files changed, 61 insertions(+), 74 deletions(-) diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index b0df5b7ec..61c0be42e 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -46,7 +46,7 @@ To use this module, you need to: .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/111/8.0 + :target: https://runbot.odoo-community.org/runbot/111/9.0 Known issues / Roadmap ====================== @@ -60,11 +60,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed `feedback -`_. +help us smashing it by providing a detailed and welcomed feedback. Credits ======= @@ -72,6 +68,7 @@ Credits Images ------ +* Odoo Community Association: `Icon `_. * `Arrow `_. * `Lock `_. @@ -80,6 +77,7 @@ Contributors * Rafael Blasco * Jairo Llopis +* Vicent Cubells Maintainer ---------- diff --git a/partner_deduplicate_acl/__init__.py b/partner_deduplicate_acl/__init__.py index a803d44dd..e2a6315db 100644 --- a/partner_deduplicate_acl/__init__.py +++ b/partner_deduplicate_acl/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import wizards diff --git a/partner_deduplicate_acl/__openerp__.py b/partner_deduplicate_acl/__openerp__.py index 76d2e015b..c62c0f161 100644 --- a/partner_deduplicate_acl/__openerp__.py +++ b/partner_deduplicate_acl/__openerp__.py @@ -1,13 +1,15 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Deduplicate Contacts ACL", "summary": "Contact deduplication with fine-grained permission control", - "version": "8.0.1.0.0", + "version": "9.0.1.0.0", "category": "Tools", - "website": "http://www.antiun.com", - "author": "Antiun Ingeniería S.L., Odoo Community Association (OCA)", + "website": "http://www.tecnativa.com", + "author": "Tecnativa, " + "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, "installable": True, diff --git a/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml b/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml index e4338d619..7c0f0f87c 100644 --- a/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml +++ b/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml @@ -1,44 +1,35 @@ - - - - - - - - Deduplicate Contacts - - - - - Manually - - - - - Automatically - - - - - - Without restrictions - - - - - - - - - - - - - - - - + + + + + Deduplicate Contacts + + + + + Manually + + + + + Automatically + + + + + + Without restrictions + + + + + + + + + + diff --git a/partner_deduplicate_acl/wizards/__init__.py b/partner_deduplicate_acl/wizards/__init__.py index c93eadfed..823838c11 100644 --- a/partner_deduplicate_acl/wizards/__init__.py +++ b/partner_deduplicate_acl/wizards/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import partner_merge diff --git a/partner_deduplicate_acl/wizards/partner_merge.py b/partner_deduplicate_acl/wizards/partner_merge.py index babd38527..1b89a1aca 100644 --- a/partner_deduplicate_acl/wizards/partner_merge.py +++ b/partner_deduplicate_acl/wizards/partner_merge.py @@ -1,25 +1,21 @@ # -*- coding: utf-8 -*- -# © 2016 Antiun Ingeniería S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Jairo Llopis +# © 2016 Tecnativa, S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import SUPERUSER_ID, api, models +from openerp import api, models class BasePartnerMergeAutomaticWizard(models.TransientModel): _inherit = "base.partner.merge.automatic.wizard" - @api.cr_uid_context - def _merge(self, cr, uid, partner_ids, dst_partner=None, context=None): + @api.model + def _merge(self, partner_ids, dst_partner=None): """Allow non-admins to merge partners with different emails.""" # Know if user has unrestricted access - group_unrestricted = self.pool["ir.model.data"].xmlid_to_object( - cr, uid, "crm_deduplicate_acl.group_unrestricted", context) - user = self.pool["res.users"].browse(cr, uid, uid, context) - - # Run as admin if so + if self.env.user.has_group('crm_deduplicate_acl.group_unrestricted'): + # Run as admin if so + self = self.sudo() return super(BasePartnerMergeAutomaticWizard, self)._merge( - cr, - SUPERUSER_ID if group_unrestricted in user.groups_id else uid, - partner_ids, - dst_partner, - context) + partner_ids=partner_ids, dst_partner=dst_partner + ) diff --git a/partner_deduplicate_acl/wizards/partner_merge_view.xml b/partner_deduplicate_acl/wizards/partner_merge_view.xml index fa53913ca..c4a556cc7 100644 --- a/partner_deduplicate_acl/wizards/partner_merge_view.xml +++ b/partner_deduplicate_acl/wizards/partner_merge_view.xml @@ -1,9 +1,8 @@ - - - - + Restrict automatic merge access @@ -23,5 +22,4 @@ group_manually - - + From 03a81a589412a99a44e3c1d4adf2792cc31469cc Mon Sep 17 00:00:00 2001 From: cubells Date: Mon, 5 Dec 2016 20:46:10 +0100 Subject: [PATCH 06/16] Added menu tools --- partner_deduplicate_acl/__openerp__.py | 1 + .../views/base_partner_merge_view.xml | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 partner_deduplicate_acl/views/base_partner_merge_view.xml diff --git a/partner_deduplicate_acl/__openerp__.py b/partner_deduplicate_acl/__openerp__.py index c62c0f161..6360af9ad 100644 --- a/partner_deduplicate_acl/__openerp__.py +++ b/partner_deduplicate_acl/__openerp__.py @@ -19,6 +19,7 @@ "data": [ "security/crm_deduplicate_acl_security.xml", "wizards/partner_merge_view.xml", + "views/base_partner_merge_view.xml", ], "images": [ "images/perms.png", diff --git a/partner_deduplicate_acl/views/base_partner_merge_view.xml b/partner_deduplicate_acl/views/base_partner_merge_view.xml new file mode 100644 index 000000000..5173474ee --- /dev/null +++ b/partner_deduplicate_acl/views/base_partner_merge_view.xml @@ -0,0 +1,11 @@ + + + + + + From 1224059343637d54bcd992d2e85f3f4116ca16d4 Mon Sep 17 00:00:00 2001 From: cubells Date: Sat, 14 Jan 2017 12:02:33 +0100 Subject: [PATCH 07/16] Keyword arguments problem on merge partner (#128) Closes #125 --- .../wizards/partner_merge.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/partner_deduplicate_acl/wizards/partner_merge.py b/partner_deduplicate_acl/wizards/partner_merge.py index 1b89a1aca..4dd66656a 100644 --- a/partner_deduplicate_acl/wizards/partner_merge.py +++ b/partner_deduplicate_acl/wizards/partner_merge.py @@ -3,19 +3,21 @@ # © 2016 Tecnativa, S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import api, models +from openerp import SUPERUSER_ID, models class BasePartnerMergeAutomaticWizard(models.TransientModel): _inherit = "base.partner.merge.automatic.wizard" - @api.model - def _merge(self, partner_ids, dst_partner=None): - """Allow non-admins to merge partners with different emails.""" - # Know if user has unrestricted access - if self.env.user.has_group('crm_deduplicate_acl.group_unrestricted'): - # Run as admin if so - self = self.sudo() + def _merge(self, cr, uid, partner_ids, dst_partner=None, context=None): + """Allow non-admins to merge partners""" + + user = self.pool["res.users"].browse(cr, uid, uid, context=context) return super(BasePartnerMergeAutomaticWizard, self)._merge( - partner_ids=partner_ids, dst_partner=dst_partner + cr, + SUPERUSER_ID if user.has_group( + 'crm_deduplicate_acl.group_unrestricted') else uid, + partner_ids, + dst_partner=dst_partner, + context=context ) From 3b795c4a9b9d71574b93f674ee404f835ed71894 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 10 Feb 2017 00:37:04 +0100 Subject: [PATCH 08/16] crm_deduplicate_acl: Show deduplicate menu for automatic group --- partner_deduplicate_acl/README.rst | 5 +++-- partner_deduplicate_acl/__openerp__.py | 2 +- .../security/crm_deduplicate_acl_security.xml | 2 +- .../views/base_partner_merge_view.xml | 16 +++++++++------- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index 61c0be42e..c924ca5da 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -41,7 +41,7 @@ Usage To use this module, you need to: -#. Ask your admin to give you the new rigts. +#. Ask your admin to give you the new rights. #. Go to *Sales > Tools > Deduplicate Contacts* as usual. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas @@ -76,8 +76,9 @@ Contributors ------------ * Rafael Blasco -* Jairo Llopis +* Jairo Llopis * Vicent Cubells +* Pedro M. Baeza Maintainer ---------- diff --git a/partner_deduplicate_acl/__openerp__.py b/partner_deduplicate_acl/__openerp__.py index 6360af9ad..f4673ce49 100644 --- a/partner_deduplicate_acl/__openerp__.py +++ b/partner_deduplicate_acl/__openerp__.py @@ -5,7 +5,7 @@ { "name": "Deduplicate Contacts ACL", "summary": "Contact deduplication with fine-grained permission control", - "version": "9.0.1.0.0", + "version": "9.0.1.1.0", "category": "Tools", "website": "http://www.tecnativa.com", "author": "Tecnativa, " diff --git a/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml b/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml index 7c0f0f87c..40f6bcf20 100644 --- a/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml +++ b/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml @@ -24,7 +24,7 @@ Without restrictions - + diff --git a/partner_deduplicate_acl/views/base_partner_merge_view.xml b/partner_deduplicate_acl/views/base_partner_merge_view.xml index 5173474ee..bc0fea30f 100644 --- a/partner_deduplicate_acl/views/base_partner_merge_view.xml +++ b/partner_deduplicate_acl/views/base_partner_merge_view.xml @@ -1,11 +1,13 @@ - - - + + From 0f745133af8695bd013871758d2bb6e138744ca4 Mon Sep 17 00:00:00 2001 From: "Luis M. Ontalba" Date: Tue, 30 May 2017 14:47:55 +0200 Subject: [PATCH 09/16] [MIG] crm_deduplicate_acl: Migration to 10.0 --- partner_deduplicate_acl/README.rst | 7 +- partner_deduplicate_acl/__init__.py | 2 - .../{__openerp__.py => __manifest__.py} | 2 +- partner_deduplicate_acl/i18n/hr.po | 59 ++++++++++-- partner_deduplicate_acl/i18n/nl_NL.po | 87 ++++++++++++++++++ partner_deduplicate_acl/i18n/pt_BR.po | 51 +++++++++-- partner_deduplicate_acl/i18n/tr.po | 58 ++++++++++-- .../views/base_partner_merge_view.xml | 3 +- partner_deduplicate_acl/wizards/__init__.py | 2 - .../wizards/partner_merge.py | 90 ++++++++++++++++--- .../wizards/partner_merge_view.xml | 4 +- 11 files changed, 317 insertions(+), 48 deletions(-) rename partner_deduplicate_acl/{__openerp__.py => __manifest__.py} (96%) create mode 100644 partner_deduplicate_acl/i18n/nl_NL.po diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index c924ca5da..b4fa43db1 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -42,17 +42,15 @@ Usage To use this module, you need to: #. Ask your admin to give you the new rights. -#. Go to *Sales > Tools > Deduplicate Contacts* as usual. +#. Go to *CRM > Tools > Deduplicate Contacts* as usual. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/111/9.0 + :target: https://runbot.odoo-community.org/runbot/111/10.0 Known issues / Roadmap ====================== -* Wizard's code is partially written in old API because somehow [possibly] - the upstream's ``@mute_logger`` decorator prevents API from doing its magic. Bug Tracker =========== @@ -79,6 +77,7 @@ Contributors * Jairo Llopis * Vicent Cubells * Pedro M. Baeza +* Luis M. Ontalba Maintainer ---------- diff --git a/partner_deduplicate_acl/__init__.py b/partner_deduplicate_acl/__init__.py index e2a6315db..f8944f05c 100644 --- a/partner_deduplicate_acl/__init__.py +++ b/partner_deduplicate_acl/__init__.py @@ -1,6 +1,4 @@ # -*- coding: utf-8 -*- -# © 2016 Tecnativa, S.L. - Jairo Llopis -# © 2016 Tecnativa, S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import wizards diff --git a/partner_deduplicate_acl/__openerp__.py b/partner_deduplicate_acl/__manifest__.py similarity index 96% rename from partner_deduplicate_acl/__openerp__.py rename to partner_deduplicate_acl/__manifest__.py index f4673ce49..57588c75e 100644 --- a/partner_deduplicate_acl/__openerp__.py +++ b/partner_deduplicate_acl/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Deduplicate Contacts ACL", "summary": "Contact deduplication with fine-grained permission control", - "version": "9.0.1.1.0", + "version": "10.0.1.0.0", "category": "Tools", "website": "http://www.tecnativa.com", "author": "Tecnativa, " diff --git a/partner_deduplicate_acl/i18n/hr.po b/partner_deduplicate_acl/i18n/hr.po index bab09bae8..2153af29b 100644 --- a/partner_deduplicate_acl/i18n/hr.po +++ b/partner_deduplicate_acl/i18n/hr.po @@ -3,14 +3,15 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2016 +# OCA Transbot , 2017 +# Bole , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-07 03:39+0000\n" -"PO-Revision-Date: 2016-12-07 03:39+0000\n" -"Last-Translator: OCA Transbot , 2016\n" +"POT-Creation-Date: 2017-07-08 01:22+0000\n" +"PO-Revision-Date: 2017-07-08 01:22+0000\n" +"Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,6 +19,16 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 +#, python-format +msgid "" +"All contacts must have the same email. Only the Administrator can merge " +"contacts with different emails." +msgstr "" +"Svi kontakti moraju imati isti e-mail, samo administrator može spajati " +"kontakte sa različitim mailovima." + #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" @@ -29,22 +40,56 @@ msgstr "Automatski" msgid "Deduplicate Contacts" msgstr "Ukloni duple kontakte" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 +#, python-format +msgid "" +"For safety reasons, you cannot merge more than 3 contacts together. You can " +"re-open the wizard several times if needed." +msgstr "" +"Iz sigurnosnih razloga nije moguće spajati više od 3 kontakta. Možete " +"pokrenuti čarobnjaka za spajanje više puta ukoliko je potrebno." + #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" msgstr "Ručno" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 +#, python-format +msgid "Merged with the following partners:" +msgstr "Spojen sa sljedećim partnerima:" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 +#, python-format +msgid "" +"Only the destination contact may be linked to existing Journal Items. Please" +" ask the Administrator if you need to merge several contacts linked to " +"existing Journal Items." +msgstr "" +"Samo odredišni kontakt može biti povezan sa postojećim stavkama dnevnika. " +"Molimo zamolite administratora ukoliko je potrebno spojiti nekoliko " +"kontakata povezanih sa postojećim stavkama dnevnika." + #. module: crm_deduplicate_acl #: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu msgid "Tools" -msgstr "" +msgstr "Alati" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Bez ograničenja" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 +#, python-format +msgid "You cannot merge a contact with one of his parent." +msgstr "Nije moguće spojiti kontakt sa svojim nadređenim." + #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" -msgstr "" +msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/nl_NL.po b/partner_deduplicate_acl/i18n/nl_NL.po new file mode 100644 index 000000000..aaf3cf59b --- /dev/null +++ b/partner_deduplicate_acl/i18n/nl_NL.po @@ -0,0 +1,87 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-04 15:47+0000\n" +"PO-Revision-Date: 2017-12-04 15:47+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 +#, python-format +msgid "" +"All contacts must have the same email. Only the Administrator can merge " +"contacts with different emails." +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "Automatisch" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "Ontdubbel Relaties" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 +#, python-format +msgid "" +"For safety reasons, you cannot merge more than 3 contacts together. You can " +"re-open the wizard several times if needed." +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "Handmatig" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 +#, python-format +msgid "Merged with the following partners:" +msgstr "Samengevoegd met de volgende contacten:" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 +#, python-format +msgid "" +"Only the destination contact may be linked to existing Journal Items. Please" +" ask the Administrator if you need to merge several contacts linked to " +"existing Journal Items." +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +msgid "Tools" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "Zonder beperkingen" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 +#, python-format +msgid "You cannot merge a contact with one of his parent." +msgstr "Je kan geen relatie samenvoegen met één van haar ouders." + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/pt_BR.po b/partner_deduplicate_acl/i18n/pt_BR.po index b347a75a1..82054b8cb 100644 --- a/partner_deduplicate_acl/i18n/pt_BR.po +++ b/partner_deduplicate_acl/i18n/pt_BR.po @@ -3,15 +3,15 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2016 -# danimaribeiro , 2016 +# OCA Transbot , 2017 +# falexandresilva , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-07 03:39+0000\n" -"PO-Revision-Date: 2016-12-07 03:39+0000\n" -"Last-Translator: danimaribeiro , 2016\n" +"POT-Creation-Date: 2017-06-19 02:41+0000\n" +"PO-Revision-Date: 2017-06-19 02:41+0000\n" +"Last-Translator: falexandresilva , 2017\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,10 +19,18 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 +#, python-format +msgid "" +"All contacts must have the same email. Only the Administrator can merge " +"contacts with different emails." +msgstr "" + #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" -msgstr "" +msgstr "Automaticamente" #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category @@ -30,9 +38,32 @@ msgstr "" msgid "Deduplicate Contacts" msgstr "Deduplicar contatos" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 +#, python-format +msgid "" +"For safety reasons, you cannot merge more than 3 contacts together. You can " +"re-open the wizard several times if needed." +msgstr "" + #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" +msgstr "Manualmente" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 +#, python-format +msgid "Merged with the following partners:" +msgstr "" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 +#, python-format +msgid "" +"Only the destination contact may be linked to existing Journal Items. Please" +" ask the Administrator if you need to merge several contacts linked to " +"existing Journal Items." msgstr "" #. module: crm_deduplicate_acl @@ -43,6 +74,12 @@ msgstr "Ferramentas" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_unrestricted msgid "Without restrictions" +msgstr "Sem restrições" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 +#, python-format +msgid "You cannot merge a contact with one of his parent." msgstr "" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/tr.po b/partner_deduplicate_acl/i18n/tr.po index c7b87e6a4..66140f1bf 100644 --- a/partner_deduplicate_acl/i18n/tr.po +++ b/partner_deduplicate_acl/i18n/tr.po @@ -3,14 +3,15 @@ # * crm_deduplicate_acl # # Translators: -# Ahmet Altinisik , 2016 +# OCA Transbot , 2017 +# Ediz Duman , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-24 01:15+0000\n" -"PO-Revision-Date: 2016-12-24 01:15+0000\n" -"Last-Translator: Ahmet Altinisik , 2016\n" +"POT-Creation-Date: 2017-06-10 03:36+0000\n" +"PO-Revision-Date: 2017-06-10 03:36+0000\n" +"Last-Translator: Ediz Duman , 2017\n" "Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,31 +19,70 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 +#, python-format +msgid "" +"All contacts must have the same email. Only the Administrator can merge " +"contacts with different emails." +msgstr "" + #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" -msgstr "" +msgstr "Otomatikman" #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" -msgstr "Çift kayıtlı kişileri birleştir" +msgstr "Çift Kayıtlı Kontakları Birleştir" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 +#, python-format +msgid "" +"For safety reasons, you cannot merge more than 3 contacts together. You can " +"re-open the wizard several times if needed." +msgstr "" +"Güvenlik nedeniyle, en fazla 3 kişiyi birleştirebilirsiniz. Gerekirse birkaç" +" kez sihirbazını yeniden açabilirsiniz." #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" +msgstr "Manuel" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 +#, python-format +msgid "Merged with the following partners:" +msgstr "Aşağıdaki iş ortaklarla birleştirildi:" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 +#, python-format +msgid "" +"Only the destination contact may be linked to existing Journal Items. Please" +" ask the Administrator if you need to merge several contacts linked to " +"existing Journal Items." msgstr "" #. module: crm_deduplicate_acl #: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu msgid "Tools" -msgstr "" +msgstr "Araçlar" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_unrestricted msgid "Without restrictions" -msgstr "" +msgstr "Kısıtlama olmaksızın" + +#. module: crm_deduplicate_acl +#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 +#, python-format +msgid "You cannot merge a contact with one of his parent." +msgstr "Bir kontağın kendi üst kontağı ile birleştiremezsiniz." #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard diff --git a/partner_deduplicate_acl/views/base_partner_merge_view.xml b/partner_deduplicate_acl/views/base_partner_merge_view.xml index bc0fea30f..5d43b1ca1 100644 --- a/partner_deduplicate_acl/views/base_partner_merge_view.xml +++ b/partner_deduplicate_acl/views/base_partner_merge_view.xml @@ -4,7 +4,8 @@ Copyright 2017 Tecnativa - Pedro M. Baeza License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> - + 3: + raise UserError(_("For safety reasons, you cannot merge more than" + " 3 contacts together. You can re-open" + " the wizard several times if needed.")) + + # check if the list of partners to merge contains child/parent relation + child_ids = self.env['res.partner'] + for partner_id in partner_ids: + child_ids |= Partner.search( + [('id', 'child_of', [partner_id.id])]) - partner_id + if partner_ids & child_ids: + raise UserError(_("You cannot merge a contact with one" + " of his parent.")) + + user = self.env.user + + if SUPERUSER_ID != self.env.uid and not user.has_group( + 'crm_deduplicate_acl.group_unrestricted') and\ + len(set(partner.email for partner in partner_ids)) > 1: + raise UserError(_("All contacts must have the same email." + " Only the Administrator can merge contacts" + " with different emails.")) + + # remove dst_partner from partners to merge + if dst_partner and dst_partner in partner_ids: + src_partners = partner_ids - dst_partner + else: + ordered_partners = self._get_ordered_partner(partner_ids.ids) + dst_partner = ordered_partners[-1] + src_partners = ordered_partners[:-1] + _logger.info("dst_partner: %s", dst_partner.id) + + # FIXME: is it still required to make and exception for + # account.move.line since accounting v9.0 ? + if SUPERUSER_ID != self.env.uid and not user.has_group( + 'crm_deduplicate_acl.group_unrestricted') and\ + 'account.move.line' in self.env and\ + self.env[ + 'account.move.line' + ].sudo().search([('partner_id', 'in', [partner.id for + partner in src_partners + ])]): + raise UserError(_("Only the destination contact may be linked to" + " existing Journal Items. Please ask the" + " Administrator if you need to merge several" + " contacts linked to existing Journal Items.")) + + # call sub methods to do the merge + self._update_foreign_keys(src_partners, dst_partner) + self._update_reference_fields(src_partners, dst_partner) + self._update_values(src_partners, dst_partner) + + _logger.info('(uid = %s) merged the partners %r with %s', + self._uid, src_partners.ids, dst_partner.id) + dst_partner.message_post(body='%s %s' % (_( + "Merged with the following partners:"), ", ".join( + '%s <%s> (ID %s)' % (p.name, p.email or 'n/a', p.id) + for p in src_partners))) + + # delete source partner, since they are merged + src_partners.unlink() diff --git a/partner_deduplicate_acl/wizards/partner_merge_view.xml b/partner_deduplicate_acl/wizards/partner_merge_view.xml index c4a556cc7..ed0839ba3 100644 --- a/partner_deduplicate_acl/wizards/partner_merge_view.xml +++ b/partner_deduplicate_acl/wizards/partner_merge_view.xml @@ -9,10 +9,10 @@ base.partner.merge.automatic.wizard - + crm_deduplicate_acl.group_automatically - + crm_deduplicate_acl.group_automatically From e4f696650015aab192d30e654357bb20f960ed5d Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Tue, 26 Dec 2017 11:55:33 +0100 Subject: [PATCH 10/16] [MIG] crm_deduplicate_acl: Migration to 11.0 * Don't overwrite code, but use inheritance system * Add tests --- partner_deduplicate_acl/README.rst | 2 +- partner_deduplicate_acl/__init__.py | 1 + partner_deduplicate_acl/__manifest__.py | 11 ++- partner_deduplicate_acl/i18n/de.po | 18 ++-- partner_deduplicate_acl/i18n/es.po | 18 ++-- partner_deduplicate_acl/i18n/hr.po | 62 +++--------- partner_deduplicate_acl/i18n/nl_NL.po | 54 +++-------- partner_deduplicate_acl/i18n/pt_BR.po | 56 +++-------- partner_deduplicate_acl/i18n/sk.po | 17 ++-- partner_deduplicate_acl/i18n/sl.po | 18 ++-- partner_deduplicate_acl/i18n/tr.po | 57 +++-------- partner_deduplicate_acl/models/__init__.py | 3 + partner_deduplicate_acl/models/res_partner.py | 16 ++++ partner_deduplicate_acl/tests/__init__.py | 3 + .../tests/test_crm_deduplicate_acl.py | 50 ++++++++++ .../views/base_partner_merge_view.xml | 6 +- partner_deduplicate_acl/wizards/__init__.py | 1 - .../wizards/partner_merge.py | 94 ++++--------------- .../wizards/partner_merge_view.xml | 7 +- 19 files changed, 194 insertions(+), 300 deletions(-) create mode 100644 partner_deduplicate_acl/models/__init__.py create mode 100644 partner_deduplicate_acl/models/res_partner.py create mode 100644 partner_deduplicate_acl/tests/__init__.py create mode 100644 partner_deduplicate_acl/tests/test_crm_deduplicate_acl.py diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index b4fa43db1..579f3f345 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -46,7 +46,7 @@ To use this module, you need to: .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/111/10.0 + :target: https://runbot.odoo-community.org/runbot/111/11.0 Known issues / Roadmap ====================== diff --git a/partner_deduplicate_acl/__init__.py b/partner_deduplicate_acl/__init__.py index f8944f05c..ef2bd060e 100644 --- a/partner_deduplicate_acl/__init__.py +++ b/partner_deduplicate_acl/__init__.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models from . import wizards diff --git a/partner_deduplicate_acl/__manifest__.py b/partner_deduplicate_acl/__manifest__.py index 57588c75e..59c92f7c0 100644 --- a/partner_deduplicate_acl/__manifest__.py +++ b/partner_deduplicate_acl/__manifest__.py @@ -1,13 +1,14 @@ -# -*- coding: utf-8 -*- -# © 2016 Tecnativa, S.L. - Jairo Llopis -# © 2016 Tecnativa, S.L. - Vicent Cubells +# Copyright 2016 Tecnativa - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells +# Copyright 2017-2018 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + { "name": "Deduplicate Contacts ACL", "summary": "Contact deduplication with fine-grained permission control", - "version": "10.0.1.0.0", + "version": "11.0.1.0.0", "category": "Tools", - "website": "http://www.tecnativa.com", + "website": "https://github.com/OCA/crm", "author": "Tecnativa, " "Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/partner_deduplicate_acl/i18n/de.po b/partner_deduplicate_acl/i18n/de.po index 7b98634b9..e020f7e89 100644 --- a/partner_deduplicate_acl/i18n/de.po +++ b/partner_deduplicate_acl/i18n/de.po @@ -3,15 +3,14 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2016 -# Rudolf Schnapka , 2017 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-28 02:27+0000\n" -"PO-Revision-Date: 2017-03-28 02:27+0000\n" -"Last-Translator: Rudolf Schnapka , 2017\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,6 +23,11 @@ msgstr "" msgid "Automatically" msgstr "Automatisch" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu @@ -36,7 +40,7 @@ msgid "Manually" msgstr "Manuell" #. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Werkzeuge" diff --git a/partner_deduplicate_acl/i18n/es.po b/partner_deduplicate_acl/i18n/es.po index 96646cecf..8e90b872e 100644 --- a/partner_deduplicate_acl/i18n/es.po +++ b/partner_deduplicate_acl/i18n/es.po @@ -3,14 +3,15 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2016 +# Pedro M. Baeza , 2018 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-16 03:45+0000\n" -"PO-Revision-Date: 2017-03-16 03:45+0000\n" -"Last-Translator: OCA Transbot , 2016\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,6 +24,11 @@ msgstr "" msgid "Automatically" msgstr "Automáticamente" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "Contacto" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu @@ -35,7 +41,7 @@ msgid "Manually" msgstr "Manualmente" #. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Herramientas" diff --git a/partner_deduplicate_acl/i18n/hr.po b/partner_deduplicate_acl/i18n/hr.po index 2153af29b..c703c5730 100644 --- a/partner_deduplicate_acl/i18n/hr.po +++ b/partner_deduplicate_acl/i18n/hr.po @@ -3,15 +3,14 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2017 -# Bole , 2017 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-08 01:22+0000\n" -"PO-Revision-Date: 2017-07-08 01:22+0000\n" -"Last-Translator: Bole , 2017\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,62 +18,29 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 -#, python-format -msgid "" -"All contacts must have the same email. Only the Administrator can merge " -"contacts with different emails." -msgstr "" -"Svi kontakti moraju imati isti e-mail, samo administrator može spajati " -"kontakte sa različitim mailovima." - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automatski" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Ukloni duple kontakte" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 -#, python-format -msgid "" -"For safety reasons, you cannot merge more than 3 contacts together. You can " -"re-open the wizard several times if needed." -msgstr "" -"Iz sigurnosnih razloga nije moguće spajati više od 3 kontakta. Možete " -"pokrenuti čarobnjaka za spajanje više puta ukoliko je potrebno." - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" msgstr "Ručno" #. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 -#, python-format -msgid "Merged with the following partners:" -msgstr "Spojen sa sljedećim partnerima:" - -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 -#, python-format -msgid "" -"Only the destination contact may be linked to existing Journal Items. Please" -" ask the Administrator if you need to merge several contacts linked to " -"existing Journal Items." -msgstr "" -"Samo odredišni kontakt može biti povezan sa postojećim stavkama dnevnika. " -"Molimo zamolite administratora ukoliko je potrebno spojiti nekoliko " -"kontakata povezanih sa postojećim stavkama dnevnika." - -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Alati" @@ -83,12 +49,6 @@ msgstr "Alati" msgid "Without restrictions" msgstr "Bez ograničenja" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 -#, python-format -msgid "You cannot merge a contact with one of his parent." -msgstr "Nije moguće spojiti kontakt sa svojim nadređenim." - #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/nl_NL.po b/partner_deduplicate_acl/i18n/nl_NL.po index aaf3cf59b..c470aa387 100644 --- a/partner_deduplicate_acl/i18n/nl_NL.po +++ b/partner_deduplicate_acl/i18n/nl_NL.po @@ -3,14 +3,14 @@ # * crm_deduplicate_acl # # Translators: -# Peter Hageman , 2017 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-04 15:47+0000\n" -"PO-Revision-Date: 2017-12-04 15:47+0000\n" -"Last-Translator: Peter Hageman , 2017\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,55 +18,29 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 -#, python-format -msgid "" -"All contacts must have the same email. Only the Administrator can merge " -"contacts with different emails." -msgstr "" - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automatisch" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Ontdubbel Relaties" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 -#, python-format -msgid "" -"For safety reasons, you cannot merge more than 3 contacts together. You can " -"re-open the wizard several times if needed." -msgstr "" - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" msgstr "Handmatig" #. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 -#, python-format -msgid "Merged with the following partners:" -msgstr "Samengevoegd met de volgende contacten:" - -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 -#, python-format -msgid "" -"Only the destination contact may be linked to existing Journal Items. Please" -" ask the Administrator if you need to merge several contacts linked to " -"existing Journal Items." -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "" @@ -75,12 +49,6 @@ msgstr "" msgid "Without restrictions" msgstr "Zonder beperkingen" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 -#, python-format -msgid "You cannot merge a contact with one of his parent." -msgstr "Je kan geen relatie samenvoegen met één van haar ouders." - #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/pt_BR.po b/partner_deduplicate_acl/i18n/pt_BR.po index 82054b8cb..7a9a7c350 100644 --- a/partner_deduplicate_acl/i18n/pt_BR.po +++ b/partner_deduplicate_acl/i18n/pt_BR.po @@ -3,15 +3,15 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2017 -# falexandresilva , 2017 +# falexandresilva , 2018 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-19 02:41+0000\n" -"PO-Revision-Date: 2017-06-19 02:41+0000\n" -"Last-Translator: falexandresilva , 2017\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,55 +19,29 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 -#, python-format -msgid "" -"All contacts must have the same email. Only the Administrator can merge " -"contacts with different emails." -msgstr "" - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automaticamente" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "Contato" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Deduplicar contatos" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 -#, python-format -msgid "" -"For safety reasons, you cannot merge more than 3 contacts together. You can " -"re-open the wizard several times if needed." -msgstr "" - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" msgstr "Manualmente" #. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 -#, python-format -msgid "Merged with the following partners:" -msgstr "" - -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 -#, python-format -msgid "" -"Only the destination contact may be linked to existing Journal Items. Please" -" ask the Administrator if you need to merge several contacts linked to " -"existing Journal Items." -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Ferramentas" @@ -76,12 +50,6 @@ msgstr "Ferramentas" msgid "Without restrictions" msgstr "Sem restrições" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 -#, python-format -msgid "You cannot merge a contact with one of his parent." -msgstr "" - #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/sk.po b/partner_deduplicate_acl/i18n/sk.po index 1f7f603ea..72785fed7 100644 --- a/partner_deduplicate_acl/i18n/sk.po +++ b/partner_deduplicate_acl/i18n/sk.po @@ -3,14 +3,14 @@ # * crm_deduplicate_acl # # Translators: -# gebri , 2016 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-17 01:29+0000\n" -"PO-Revision-Date: 2016-12-17 01:29+0000\n" -"Last-Translator: gebri , 2016\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,6 +23,11 @@ msgstr "" msgid "Automatically" msgstr "Automaticky" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu @@ -35,7 +40,7 @@ msgid "Manually" msgstr "Manuálne" #. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Nástroje" diff --git a/partner_deduplicate_acl/i18n/sl.po b/partner_deduplicate_acl/i18n/sl.po index 9176ba2c2..bf55f62cd 100644 --- a/partner_deduplicate_acl/i18n/sl.po +++ b/partner_deduplicate_acl/i18n/sl.po @@ -3,15 +3,14 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2016 -# Matjaž Mozetič , 2016 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-07 03:39+0000\n" -"PO-Revision-Date: 2016-12-07 03:39+0000\n" -"Last-Translator: Matjaž Mozetič , 2016\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,6 +23,11 @@ msgstr "" msgid "Automatically" msgstr "Samodejno" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu @@ -36,7 +40,7 @@ msgid "Manually" msgstr "Ročno" #. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Orodja" diff --git a/partner_deduplicate_acl/i18n/tr.po b/partner_deduplicate_acl/i18n/tr.po index 66140f1bf..6aa5078d8 100644 --- a/partner_deduplicate_acl/i18n/tr.po +++ b/partner_deduplicate_acl/i18n/tr.po @@ -3,15 +3,14 @@ # * crm_deduplicate_acl # # Translators: -# OCA Transbot , 2017 -# Ediz Duman , 2017 +# OCA Transbot , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-10 03:36+0000\n" -"PO-Revision-Date: 2017-06-10 03:36+0000\n" -"Last-Translator: Ediz Duman , 2017\n" +"POT-Creation-Date: 2018-05-03 02:51+0000\n" +"PO-Revision-Date: 2018-05-03 02:51+0000\n" +"Last-Translator: OCA Transbot , 2018\n" "Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,57 +18,29 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:46 -#, python-format -msgid "" -"All contacts must have the same email. Only the Administrator can merge " -"contacts with different emails." -msgstr "" - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Otomatikman" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Çift Kayıtlı Kontakları Birleştir" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:28 -#, python-format -msgid "" -"For safety reasons, you cannot merge more than 3 contacts together. You can " -"re-open the wizard several times if needed." -msgstr "" -"Güvenlik nedeniyle, en fazla 3 kişiyi birleştirebilirsiniz. Gerekirse birkaç" -" kez sihirbazını yeniden açabilirsiniz." - #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_manually msgid "Manually" msgstr "Manuel" #. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:81 -#, python-format -msgid "Merged with the following partners:" -msgstr "Aşağıdaki iş ortaklarla birleştirildi:" - -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:69 -#, python-format -msgid "" -"Only the destination contact may be linked to existing Journal Items. Please" -" ask the Administrator if you need to merge several contacts linked to " -"existing Journal Items." -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "Araçlar" @@ -78,12 +49,6 @@ msgstr "Araçlar" msgid "Without restrictions" msgstr "Kısıtlama olmaksızın" -#. module: crm_deduplicate_acl -#: code:addons/crm_deduplicate_acl/wizards/partner_merge.py:38 -#, python-format -msgid "You cannot merge a contact with one of his parent." -msgstr "Bir kontağın kendi üst kontağı ile birleştiremezsiniz." - #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/models/__init__.py b/partner_deduplicate_acl/models/__init__.py new file mode 100644 index 000000000..ccebc7247 --- /dev/null +++ b/partner_deduplicate_acl/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import res_partner diff --git a/partner_deduplicate_acl/models/res_partner.py b/partner_deduplicate_acl/models/res_partner.py new file mode 100644 index 000000000..2d9f246f9 --- /dev/null +++ b/partner_deduplicate_acl/models/res_partner.py @@ -0,0 +1,16 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.returns('self', lambda value: value.id) + def message_post(self, *args, **kwargs): + """Change user who is posting the message if set by context.""" + if self.env.context.get('message_post_user'): + obj = self.sudo(self.env.context['message_post_user']) + else: + obj = self + return super(ResPartner, obj).message_post(*args, **kwargs) diff --git a/partner_deduplicate_acl/tests/__init__.py b/partner_deduplicate_acl/tests/__init__.py new file mode 100644 index 000000000..10d77771a --- /dev/null +++ b/partner_deduplicate_acl/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_crm_deduplicate_acl diff --git a/partner_deduplicate_acl/tests/test_crm_deduplicate_acl.py b/partner_deduplicate_acl/tests/test_crm_deduplicate_acl.py new file mode 100644 index 000000000..4c0da683d --- /dev/null +++ b/partner_deduplicate_acl/tests/test_crm_deduplicate_acl.py @@ -0,0 +1,50 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import exceptions +from odoo.tests import common + + +class TestCrmDeduplicateAcl(common.TransactionCase): + def setUp(self): + super(TestCrmDeduplicateAcl, self).setUp() + self.partner_1 = self.env['res.partner'].create({ + 'name': 'Partner 1', + 'email': 'partner1@example.org', + 'is_company': True, + 'parent_id': False, + }) + self.partner_2 = self.partner_1.copy() + self.partner_2.write({ + 'name': 'Partner 1', + 'email': 'partner2@example.org' + }) + self.user = self.env['res.users'].create({ + 'login': 'test_crm_deduplicate_acl', + 'name': 'test_crm_deduplicate_acl', + 'email': 'crm_deduplicate_acl@example.org', + 'groups_id': [ + (4, self.env.ref('base.group_user').id), + (4, self.env.ref('base.group_partner_manager').id), + ] + }) + self.wizard = self.env['base.partner.merge.automatic.wizard'].sudo( + self.user, + ).create({ + 'group_by_name': True, + }) + + def test_same_email_restriction(self): + self.wizard.action_start_manual_process() + with self.assertRaises(exceptions.UserError): + self.wizard.action_merge() + self.user.groups_id = [ + (4, self.env.ref('crm_deduplicate_acl.group_unrestricted').id), + ] + # Now there shouldn't be error + self.wizard.action_merge() + # Check that the posted message has correct user + resulting_partner = (self.partner_1 + self.partner_2).exists() + self.assertEqual( + resulting_partner.message_ids[0].author_id, + self.user.partner_id, + ) diff --git a/partner_deduplicate_acl/views/base_partner_merge_view.xml b/partner_deduplicate_acl/views/base_partner_merge_view.xml index 5d43b1ca1..f9fb03dab 100644 --- a/partner_deduplicate_acl/views/base_partner_merge_view.xml +++ b/partner_deduplicate_acl/views/base_partner_merge_view.xml @@ -4,11 +4,11 @@ Copyright 2017 Tecnativa - Pedro M. Baeza License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> - + diff --git a/partner_deduplicate_acl/wizards/__init__.py b/partner_deduplicate_acl/wizards/__init__.py index 31a70707d..fa92260c9 100644 --- a/partner_deduplicate_acl/wizards/__init__.py +++ b/partner_deduplicate_acl/wizards/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import partner_merge diff --git a/partner_deduplicate_acl/wizards/partner_merge.py b/partner_deduplicate_acl/wizards/partner_merge.py index dd0227d6f..e02dee836 100644 --- a/partner_deduplicate_acl/wizards/partner_merge.py +++ b/partner_deduplicate_acl/wizards/partner_merge.py @@ -1,87 +1,27 @@ -# -*- coding: utf-8 -*- -# © 2016 Tecnativa, S.L. - Jairo Llopis -# © 2016 Tecnativa, S.L. - Vicent Cubells +# Copyright 2016 Tecnativa - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells +# Copyright 2017 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, SUPERUSER_ID, models -from odoo.exceptions import UserError -import logging - - -_logger = logging.getLogger('base.partner.merge') +from odoo import models class BasePartnerMergeAutomaticWizard(models.TransientModel): _inherit = "base.partner.merge.automatic.wizard" def _merge(self, partner_ids, dst_partner=None): - """ private implementation of merge partner - :param partner_ids : ids of partner to merge - :param dst_partner : record of destination res.partner + """Perform the operation as admin if you have unrestricted merge + rights to avoid the rise of exceptions. An special context key is + passed for preserving the message author. """ - Partner = self.env['res.partner'] - partner_ids = Partner.browse(partner_ids).exists() - if len(partner_ids) < 2: - return - - if len(partner_ids) > 3: - raise UserError(_("For safety reasons, you cannot merge more than" - " 3 contacts together. You can re-open" - " the wizard several times if needed.")) - - # check if the list of partners to merge contains child/parent relation - child_ids = self.env['res.partner'] - for partner_id in partner_ids: - child_ids |= Partner.search( - [('id', 'child_of', [partner_id.id])]) - partner_id - if partner_ids & child_ids: - raise UserError(_("You cannot merge a contact with one" - " of his parent.")) - - user = self.env.user - - if SUPERUSER_ID != self.env.uid and not user.has_group( - 'crm_deduplicate_acl.group_unrestricted') and\ - len(set(partner.email for partner in partner_ids)) > 1: - raise UserError(_("All contacts must have the same email." - " Only the Administrator can merge contacts" - " with different emails.")) - - # remove dst_partner from partners to merge - if dst_partner and dst_partner in partner_ids: - src_partners = partner_ids - dst_partner + if self.env.user.has_group('crm_deduplicate_acl.group_unrestricted'): + obj = self.sudo().with_context(message_post_user=self.env.uid) + if dst_partner: + dst_partner = dst_partner.with_context( + message_post_user=self.env.uid, + ) else: - ordered_partners = self._get_ordered_partner(partner_ids.ids) - dst_partner = ordered_partners[-1] - src_partners = ordered_partners[:-1] - _logger.info("dst_partner: %s", dst_partner.id) - - # FIXME: is it still required to make and exception for - # account.move.line since accounting v9.0 ? - if SUPERUSER_ID != self.env.uid and not user.has_group( - 'crm_deduplicate_acl.group_unrestricted') and\ - 'account.move.line' in self.env and\ - self.env[ - 'account.move.line' - ].sudo().search([('partner_id', 'in', [partner.id for - partner in src_partners - ])]): - raise UserError(_("Only the destination contact may be linked to" - " existing Journal Items. Please ask the" - " Administrator if you need to merge several" - " contacts linked to existing Journal Items.")) - - # call sub methods to do the merge - self._update_foreign_keys(src_partners, dst_partner) - self._update_reference_fields(src_partners, dst_partner) - self._update_values(src_partners, dst_partner) - - _logger.info('(uid = %s) merged the partners %r with %s', - self._uid, src_partners.ids, dst_partner.id) - dst_partner.message_post(body='%s %s' % (_( - "Merged with the following partners:"), ", ".join( - '%s <%s> (ID %s)' % (p.name, p.email or 'n/a', p.id) - for p in src_partners))) - - # delete source partner, since they are merged - src_partners.unlink() + obj = self + return super(BasePartnerMergeAutomaticWizard, obj)._merge( + partner_ids, dst_partner=dst_partner, + ) diff --git a/partner_deduplicate_acl/wizards/partner_merge_view.xml b/partner_deduplicate_acl/wizards/partner_merge_view.xml index ed0839ba3..3ac3588cc 100644 --- a/partner_deduplicate_acl/wizards/partner_merge_view.xml +++ b/partner_deduplicate_acl/wizards/partner_merge_view.xml @@ -1,6 +1,7 @@ - @@ -19,7 +20,7 @@ - group_manually + From b43fa928847377d72605a177d61e6d4cbd1fdcdb Mon Sep 17 00:00:00 2001 From: oca-travis Date: Wed, 22 Aug 2018 12:00:45 +0000 Subject: [PATCH 11/16] [UPD] Update crm_deduplicate_acl.pot --- .../i18n/crm_deduplicate_acl.pot | 51 +++++++++++++++++++ partner_deduplicate_acl/i18n/de.po | 4 +- partner_deduplicate_acl/i18n/es.po | 4 +- partner_deduplicate_acl/i18n/hr.po | 7 +-- partner_deduplicate_acl/i18n/it.po | 11 ++-- partner_deduplicate_acl/i18n/nl_NL.po | 7 +-- partner_deduplicate_acl/i18n/pt_BR.po | 7 +-- partner_deduplicate_acl/i18n/sk.po | 4 +- partner_deduplicate_acl/i18n/sl.po | 7 +-- partner_deduplicate_acl/i18n/tr.po | 4 +- partner_deduplicate_acl/i18n/zh_CN.po | 14 +++-- 11 files changed, 93 insertions(+), 27 deletions(-) create mode 100644 partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot diff --git a/partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot b/partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot new file mode 100644 index 000000000..91ed43c34 --- /dev/null +++ b/partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_deduplicate_acl +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.module.category,name:crm_deduplicate_acl.category +#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_manually +msgid "Manually" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +msgid "Tools" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "" + +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" + diff --git a/partner_deduplicate_acl/i18n/de.po b/partner_deduplicate_acl/i18n/de.po index e020f7e89..055d612da 100644 --- a/partner_deduplicate_acl/i18n/de.po +++ b/partner_deduplicate_acl/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2018 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/es.po b/partner_deduplicate_acl/i18n/es.po index 8e90b872e..5ada15c02 100644 --- a/partner_deduplicate_acl/i18n/es.po +++ b/partner_deduplicate_acl/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # Pedro M. Baeza , 2018 # OCA Transbot , 2018 @@ -13,10 +13,10 @@ msgstr "" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/hr.po b/partner_deduplicate_acl/i18n/hr.po index c703c5730..c6ac67685 100644 --- a/partner_deduplicate_acl/i18n/hr.po +++ b/partner_deduplicate_acl/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2018 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically diff --git a/partner_deduplicate_acl/i18n/it.po b/partner_deduplicate_acl/i18n/it.po index d8f8c382e..9cade6955 100644 --- a/partner_deduplicate_acl/i18n/it.po +++ b/partner_deduplicate_acl/i18n/it.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2016 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2016-12-07 03:39+0000\n" "Last-Translator: OCA Transbot , 2016\n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: crm_deduplicate_acl @@ -23,6 +23,11 @@ msgstr "" msgid "Automatically" msgstr "Automaticamente" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu @@ -35,7 +40,7 @@ msgid "Manually" msgstr "Manualmente" #. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "" diff --git a/partner_deduplicate_acl/i18n/nl_NL.po b/partner_deduplicate_acl/i18n/nl_NL.po index c470aa387..5ed3d5b5d 100644 --- a/partner_deduplicate_acl/i18n/nl_NL.po +++ b/partner_deduplicate_acl/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2018 msgid "" @@ -11,11 +11,12 @@ msgstr "" "POT-Creation-Date: 2018-05-03 02:51+0000\n" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/pt_BR.po b/partner_deduplicate_acl/i18n/pt_BR.po index 7a9a7c350..3cfdfcf8d 100644 --- a/partner_deduplicate_acl/i18n/pt_BR.po +++ b/partner_deduplicate_acl/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # falexandresilva , 2018 # OCA Transbot , 2018 @@ -12,11 +12,12 @@ msgstr "" "POT-Creation-Date: 2018-05-03 02:51+0000\n" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/sk.po b/partner_deduplicate_acl/i18n/sk.po index 72785fed7..4ab2f5188 100644 --- a/partner_deduplicate_acl/i18n/sk.po +++ b/partner_deduplicate_acl/i18n/sk.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2018 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" "Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n" +"Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/sl.po b/partner_deduplicate_acl/i18n/sl.po index bf55f62cd..a75069674 100644 --- a/partner_deduplicate_acl/i18n/sl.po +++ b/partner_deduplicate_acl/i18n/sl.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2018 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" "Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically diff --git a/partner_deduplicate_acl/i18n/tr.po b/partner_deduplicate_acl/i18n/tr.po index 6aa5078d8..e5427757f 100644 --- a/partner_deduplicate_acl/i18n/tr.po +++ b/partner_deduplicate_acl/i18n/tr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # OCA Transbot , 2018 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2018-05-03 02:51+0000\n" "Last-Translator: OCA Transbot , 2018\n" "Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: crm_deduplicate_acl diff --git a/partner_deduplicate_acl/i18n/zh_CN.po b/partner_deduplicate_acl/i18n/zh_CN.po index 9baa86dcc..3182ea3ef 100644 --- a/partner_deduplicate_acl/i18n/zh_CN.po +++ b/partner_deduplicate_acl/i18n/zh_CN.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * crm_deduplicate_acl -# +# # Translators: # ITGeeker , 2017 msgid "" @@ -11,11 +11,12 @@ msgstr "" "POT-Creation-Date: 2017-03-28 02:27+0000\n" "PO-Revision-Date: 2017-03-28 02:27+0000\n" "Last-Translator: ITGeeker , 2017\n" -"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/zh_CN/)\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/" +"zh_CN/)\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. module: crm_deduplicate_acl @@ -23,6 +24,11 @@ msgstr "" msgid "Automatically" msgstr "自动" +#. module: crm_deduplicate_acl +#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category #: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu @@ -35,7 +41,7 @@ msgid "Manually" msgstr "手动" #. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.root_menu +#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools msgid "Tools" msgstr "" From 6c974573bd3118663f81e61fa3ee7f8f54bc2e91 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Fri, 14 Dec 2018 16:47:49 +0000 Subject: [PATCH 12/16] Translated using Weblate (German) Currently translated at 100.0% (7 of 7 strings) Translation: crm-11.0/crm-11.0-crm_deduplicate_acl Translate-URL: https://translation.odoo-community.org/projects/crm-11-0/crm-11-0-crm_deduplicate_acl/de/ --- partner_deduplicate_acl/i18n/de.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/partner_deduplicate_acl/i18n/de.po b/partner_deduplicate_acl/i18n/de.po index 055d612da..730c0668e 100644 --- a/partner_deduplicate_acl/i18n/de.po +++ b/partner_deduplicate_acl/i18n/de.po @@ -9,14 +9,15 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-05-03 02:51+0000\n" -"PO-Revision-Date: 2018-05-03 02:51+0000\n" -"Last-Translator: OCA Transbot , 2018\n" +"PO-Revision-Date: 2018-12-15 16:58+0000\n" +"Last-Translator: Maria Sparenberg \n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.3\n" #. module: crm_deduplicate_acl #: model:res.groups,name:crm_deduplicate_acl.group_automatically @@ -26,7 +27,7 @@ msgstr "Automatisch" #. module: crm_deduplicate_acl #: model:ir.model,name:crm_deduplicate_acl.model_res_partner msgid "Contact" -msgstr "" +msgstr "Kontakt" #. module: crm_deduplicate_acl #: model:ir.module.category,name:crm_deduplicate_acl.category From faad4d146b6293767e2086c405d9570936763493 Mon Sep 17 00:00:00 2001 From: Victor Martin Date: Thu, 21 Mar 2019 20:12:09 +0100 Subject: [PATCH 13/16] [MIG] crm_deduplicate_acl: Migration to 12.0 --- partner_deduplicate_acl/README.rst | 73 +-- partner_deduplicate_acl/__manifest__.py | 3 +- partner_deduplicate_acl/readme/CONFIGURE.rst | 22 + .../readme/CONTRIBUTORS.rst | 6 + .../readme/DESCRIPTION.rst | 3 + partner_deduplicate_acl/readme/USAGE.rst | 4 + .../static/description/index.html | 448 ++++++++++++++++++ .../views/base_partner_merge_view.xml | 3 +- .../wizards/partner_merge_view.xml | 5 +- 9 files changed, 536 insertions(+), 31 deletions(-) create mode 100644 partner_deduplicate_acl/readme/CONFIGURE.rst create mode 100644 partner_deduplicate_acl/readme/CONTRIBUTORS.rst create mode 100644 partner_deduplicate_acl/readme/DESCRIPTION.rst create mode 100644 partner_deduplicate_acl/readme/USAGE.rst create mode 100644 partner_deduplicate_acl/static/description/index.html diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index 579f3f345..5ce028f97 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -1,15 +1,39 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - ======================== Deduplicate Contacts ACL ======================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcrm-lightgray.png?logo=github + :target: https://github.com/OCA/crm/tree/12.0/crm_deduplicate_acl + :alt: OCA/crm +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/crm-12-0/crm-12-0-crm_deduplicate_acl + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/111/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This module extends the functionality of the CRM contact deduplicator to add permission groups that allow the matching users to use those tools, not needing to be the sale settings manager. +**Table of contents** + +.. contents:: + :local: + Configuration ============= @@ -44,52 +68,47 @@ To use this module, you need to: #. Ask your admin to give you the new rights. #. Go to *CRM > Tools > Deduplicate Contacts* as usual. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/111/11.0 - -Known issues / Roadmap -====================== - - Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. -* `Arrow `_. -* `Lock `_. +* Tecnativa Contributors ------------- +~~~~~~~~~~~~ * Rafael Blasco * Jairo Llopis * Vicent Cubells * Pedro M. Baeza * Luis M. Ontalba +* Victor M.M. Torres + +Maintainers +~~~~~~~~~~~ -Maintainer ----------- +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/crm `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_deduplicate_acl/__manifest__.py b/partner_deduplicate_acl/__manifest__.py index 59c92f7c0..67dec46d8 100644 --- a/partner_deduplicate_acl/__manifest__.py +++ b/partner_deduplicate_acl/__manifest__.py @@ -1,12 +1,13 @@ # Copyright 2016 Tecnativa - Jairo Llopis # Copyright 2016 Tecnativa - Vicent Cubells # Copyright 2017-2018 Tecnativa - Pedro M. Baeza +# Copyright 2019 Tecnativa - Victor M.M. Torres # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Deduplicate Contacts ACL", "summary": "Contact deduplication with fine-grained permission control", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "category": "Tools", "website": "https://github.com/OCA/crm", "author": "Tecnativa, " diff --git a/partner_deduplicate_acl/readme/CONFIGURE.rst b/partner_deduplicate_acl/readme/CONFIGURE.rst new file mode 100644 index 000000000..f1fcf8666 --- /dev/null +++ b/partner_deduplicate_acl/readme/CONFIGURE.rst @@ -0,0 +1,22 @@ +To configure this module, you need to: + +#. Go to *Settings > Users > Users*. +#. Choose a user. +#. Choose the desired permission level(s) in *Appplication > Deduplicate + Contacts*: + + - *Manually* allows him to do the manual deduplication process. + - *Automatically* allows him to do the automatic deduplication process. + + .. warning:: + Automatic contact deduplication can easily lead to unwanted results. + Better backup before doing it. + + - *Without restrictions* executes the chosen deduplication method with admin + rigts, to be able to update objects where the user would normally not have + write rights, and to allow him to merge contacts with different email + addresses. + + .. warning:: + This is an advanced feature, be sure to train the user before enabling + this permission for him. diff --git a/partner_deduplicate_acl/readme/CONTRIBUTORS.rst b/partner_deduplicate_acl/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..56751a869 --- /dev/null +++ b/partner_deduplicate_acl/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Rafael Blasco +* Jairo Llopis +* Vicent Cubells +* Pedro M. Baeza +* Luis M. Ontalba +* Victor M.M. Torres diff --git a/partner_deduplicate_acl/readme/DESCRIPTION.rst b/partner_deduplicate_acl/readme/DESCRIPTION.rst new file mode 100644 index 000000000..0fd657b8e --- /dev/null +++ b/partner_deduplicate_acl/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module extends the functionality of the CRM contact deduplicator to add +permission groups that allow the matching users to use those tools, not +needing to be the sale settings manager. diff --git a/partner_deduplicate_acl/readme/USAGE.rst b/partner_deduplicate_acl/readme/USAGE.rst new file mode 100644 index 000000000..d102ee38e --- /dev/null +++ b/partner_deduplicate_acl/readme/USAGE.rst @@ -0,0 +1,4 @@ +To use this module, you need to: + +#. Ask your admin to give you the new rights. +#. Go to *CRM > Tools > Deduplicate Contacts* as usual. diff --git a/partner_deduplicate_acl/static/description/index.html b/partner_deduplicate_acl/static/description/index.html new file mode 100644 index 000000000..1b1610325 --- /dev/null +++ b/partner_deduplicate_acl/static/description/index.html @@ -0,0 +1,448 @@ + + + + + + +Deduplicate Contacts ACL + + + +
+

Deduplicate Contacts ACL

+ + +

Beta License: AGPL-3 OCA/crm Translate me on Weblate Try me on Runbot

+

This module extends the functionality of the CRM contact deduplicator to add +permission groups that allow the matching users to use those tools, not +needing to be the sale settings manager.

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Settings > Users > Users.

    +
  2. +
  3. Choose a user.

    +
  4. +
  5. Choose the desired permission level(s) in Appplication > Deduplicate +Contacts:

    +
      +
    • Manually allows him to do the manual deduplication process.

      +
    • +
    • Automatically allows him to do the automatic deduplication process.

      +
      +

      Warning

      +

      Automatic contact deduplication can easily lead to unwanted results. +Better backup before doing it.

      +
      +
    • +
    • Without restrictions executes the chosen deduplication method with admin +rigts, to be able to update objects where the user would normally not have +write rights, and to allow him to merge contacts with different email +addresses.

      +
      +

      Warning

      +

      This is an advanced feature, be sure to train the user before enabling +this permission for him.

      +
      +
    • +
    +
  6. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Ask your admin to give you the new rights.
  2. +
  3. Go to CRM > Tools > Deduplicate Contacts as usual.
  4. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/crm project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/partner_deduplicate_acl/views/base_partner_merge_view.xml b/partner_deduplicate_acl/views/base_partner_merge_view.xml index f9fb03dab..aa5c79ce6 100644 --- a/partner_deduplicate_acl/views/base_partner_merge_view.xml +++ b/partner_deduplicate_acl/views/base_partner_merge_view.xml @@ -2,12 +2,13 @@ diff --git a/partner_deduplicate_acl/wizards/partner_merge_view.xml b/partner_deduplicate_acl/wizards/partner_merge_view.xml index 3ac3588cc..22e91f8c6 100644 --- a/partner_deduplicate_acl/wizards/partner_merge_view.xml +++ b/partner_deduplicate_acl/wizards/partner_merge_view.xml @@ -2,13 +2,14 @@ Restrict automatic merge access base.partner.merge.automatic.wizard - + crm_deduplicate_acl.group_automatically @@ -19,7 +20,7 @@ - + From f32a99167d4ab2985bf5f54a085a8c7db7688251 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 22 Mar 2019 15:38:39 +0100 Subject: [PATCH 14/16] [MOV] crm_deduplicate_acl > partner_deduplicate_acl --- partner_deduplicate_acl/README.rst | 16 +++--- partner_deduplicate_acl/__manifest__.py | 6 +-- .../i18n/crm_deduplicate_acl.pot | 51 ------------------- partner_deduplicate_acl/i18n/de.po | 32 ++++++------ partner_deduplicate_acl/i18n/es.po | 32 ++++++------ partner_deduplicate_acl/i18n/hr.po | 32 ++++++------ partner_deduplicate_acl/i18n/it.po | 32 ++++++------ partner_deduplicate_acl/i18n/nl_NL.po | 32 ++++++------ .../i18n/partner_deduplicate_acl.pot | 50 ++++++++++++++++++ partner_deduplicate_acl/i18n/pt_BR.po | 32 ++++++------ partner_deduplicate_acl/i18n/sk.po | 32 ++++++------ partner_deduplicate_acl/i18n/sl.po | 32 ++++++------ partner_deduplicate_acl/i18n/tr.po | 32 ++++++------ partner_deduplicate_acl/i18n/zh_CN.po | 32 ++++++------ ...l => partner_deduplicate_acl_security.xml} | 0 .../static/description/index.html | 42 +++++++++++---- partner_deduplicate_acl/tests/__init__.py | 2 +- .../tests/test_crm_deduplicate_acl.py | 4 +- .../wizards/partner_merge.py | 2 +- .../wizards/partner_merge_view.xml | 6 +-- 20 files changed, 260 insertions(+), 239 deletions(-) delete mode 100644 partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot create mode 100644 partner_deduplicate_acl/i18n/partner_deduplicate_acl.pot rename partner_deduplicate_acl/security/{crm_deduplicate_acl_security.xml => partner_deduplicate_acl_security.xml} (100%) diff --git a/partner_deduplicate_acl/README.rst b/partner_deduplicate_acl/README.rst index 5ce028f97..efaf1dc76 100644 --- a/partner_deduplicate_acl/README.rst +++ b/partner_deduplicate_acl/README.rst @@ -13,14 +13,14 @@ Deduplicate Contacts ACL .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcrm-lightgray.png?logo=github - :target: https://github.com/OCA/crm/tree/12.0/crm_deduplicate_acl - :alt: OCA/crm +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpartner--contact-lightgray.png?logo=github + :target: https://github.com/OCA/partner-contact/tree/12.0/partner_deduplicate_acl + :alt: OCA/partner-contact .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/crm-12-0/crm-12-0-crm_deduplicate_acl + :target: https://translation.odoo-community.org/projects/partner-contact-12-0/partner-contact-12-0-partner_deduplicate_acl :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/111/12.0 + :target: https://runbot.odoo-community.org/runbot/134/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -71,10 +71,10 @@ To use this module, you need to: Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -109,6 +109,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/crm `_ project on GitHub. +This module is part of the `OCA/partner-contact `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_deduplicate_acl/__manifest__.py b/partner_deduplicate_acl/__manifest__.py index 67dec46d8..477e5ba8e 100644 --- a/partner_deduplicate_acl/__manifest__.py +++ b/partner_deduplicate_acl/__manifest__.py @@ -9,17 +9,17 @@ "summary": "Contact deduplication with fine-grained permission control", "version": "12.0.1.0.0", "category": "Tools", - "website": "https://github.com/OCA/crm", + "website": "https://github.com/OCA/partner-contact", "author": "Tecnativa, " "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, "installable": True, "depends": [ - "crm", + "base", ], "data": [ - "security/crm_deduplicate_acl_security.xml", + "security/partner_deduplicate_acl_security.xml", "wizards/partner_merge_view.xml", "views/base_partner_merge_view.xml", ], diff --git a/partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot b/partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot deleted file mode 100644 index 91ed43c34..000000000 --- a/partner_deduplicate_acl/i18n/crm_deduplicate_acl.pot +++ /dev/null @@ -1,51 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_deduplicate_acl -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically -msgid "Automatically" -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner -msgid "Contact" -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu -msgid "Deduplicate Contacts" -msgstr "" - -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually -msgid "Manually" -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools -msgid "Tools" -msgstr "" - -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted -msgid "Without restrictions" -msgstr "" - -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard -msgid "base.partner.merge.automatic.wizard" -msgstr "" - diff --git a/partner_deduplicate_acl/i18n/de.po b/partner_deduplicate_acl/i18n/de.po index 730c0668e..be7a40de5 100644 --- a/partner_deduplicate_acl/i18n/de.po +++ b/partner_deduplicate_acl/i18n/de.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2018 @@ -19,38 +19,38 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.3\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automatisch" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "Kontakt" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Deduplizieren der Kontakte" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Manuell" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Werkzeuge" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Ohne Beschränkungen" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/es.po b/partner_deduplicate_acl/i18n/es.po index 5ada15c02..f83d2b6c9 100644 --- a/partner_deduplicate_acl/i18n/es.po +++ b/partner_deduplicate_acl/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # Pedro M. Baeza , 2018 @@ -19,38 +19,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automáticamente" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "Contacto" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Deduplicar contactos" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Manualmente" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Herramientas" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Sin restricciones" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/hr.po b/partner_deduplicate_acl/i18n/hr.po index c6ac67685..9b241c45b 100644 --- a/partner_deduplicate_acl/i18n/hr.po +++ b/partner_deduplicate_acl/i18n/hr.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2018 @@ -19,38 +19,38 @@ msgstr "" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automatski" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Ukloni duple kontakte" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Ručno" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Alati" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Bez ograničenja" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/it.po b/partner_deduplicate_acl/i18n/it.po index 9cade6955..d50d28d7d 100644 --- a/partner_deduplicate_acl/i18n/it.po +++ b/partner_deduplicate_acl/i18n/it.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2016 @@ -18,38 +18,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automaticamente" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Deduplica Contatti" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Manualmente" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Senza restrinzioni" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "" diff --git a/partner_deduplicate_acl/i18n/nl_NL.po b/partner_deduplicate_acl/i18n/nl_NL.po index 5ed3d5b5d..3cab8d2b0 100644 --- a/partner_deduplicate_acl/i18n/nl_NL.po +++ b/partner_deduplicate_acl/i18n/nl_NL.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2018 @@ -19,38 +19,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automatisch" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Ontdubbel Relaties" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Handmatig" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Zonder beperkingen" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/partner_deduplicate_acl.pot b/partner_deduplicate_acl/i18n/partner_deduplicate_acl.pot new file mode 100644 index 000000000..6b49addbd --- /dev/null +++ b/partner_deduplicate_acl/i18n/partner_deduplicate_acl.pot @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_deduplicate_acl +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically +msgid "Automatically" +msgstr "" + +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner +msgid "Contact" +msgstr "" + +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu +msgid "Deduplicate Contacts" +msgstr "" + +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually +msgid "Manually" +msgstr "" + +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools +msgid "Tools" +msgstr "" + +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted +msgid "Without restrictions" +msgstr "" + +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard +msgid "base.partner.merge.automatic.wizard" +msgstr "" diff --git a/partner_deduplicate_acl/i18n/pt_BR.po b/partner_deduplicate_acl/i18n/pt_BR.po index 3cfdfcf8d..648889749 100644 --- a/partner_deduplicate_acl/i18n/pt_BR.po +++ b/partner_deduplicate_acl/i18n/pt_BR.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # falexandresilva , 2018 @@ -20,38 +20,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automaticamente" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "Contato" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Deduplicar contatos" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Manualmente" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Ferramentas" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Sem restrições" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "" diff --git a/partner_deduplicate_acl/i18n/sk.po b/partner_deduplicate_acl/i18n/sk.po index 4ab2f5188..9556255ed 100644 --- a/partner_deduplicate_acl/i18n/sk.po +++ b/partner_deduplicate_acl/i18n/sk.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2018 @@ -18,38 +18,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Automaticky" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Odduplikovať Kontakty" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Manuálne" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Nástroje" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Bez obmedzení" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/sl.po b/partner_deduplicate_acl/i18n/sl.po index a75069674..eb515a189 100644 --- a/partner_deduplicate_acl/i18n/sl.po +++ b/partner_deduplicate_acl/i18n/sl.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2018 @@ -19,38 +19,38 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Samodejno" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Odstrani dvojnike stikov" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Ročno" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Orodja" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Brez omejitev" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "" diff --git a/partner_deduplicate_acl/i18n/tr.po b/partner_deduplicate_acl/i18n/tr.po index e5427757f..058539b37 100644 --- a/partner_deduplicate_acl/i18n/tr.po +++ b/partner_deduplicate_acl/i18n/tr.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # OCA Transbot , 2018 @@ -18,38 +18,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "Otomatikman" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "Çift Kayıtlı Kontakları Birleştir" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "Manuel" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "Araçlar" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "Kısıtlama olmaksızın" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "base.partner.merge.automatic.wizard" diff --git a/partner_deduplicate_acl/i18n/zh_CN.po b/partner_deduplicate_acl/i18n/zh_CN.po index 3182ea3ef..66ae18180 100644 --- a/partner_deduplicate_acl/i18n/zh_CN.po +++ b/partner_deduplicate_acl/i18n/zh_CN.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_deduplicate_acl +# * partner_deduplicate_acl # # Translators: # ITGeeker , 2017 @@ -19,38 +19,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=1; plural=0;\n" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_automatically +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_automatically msgid "Automatically" msgstr "自动" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_res_partner +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_res_partner msgid "Contact" msgstr "" -#. module: crm_deduplicate_acl -#: model:ir.module.category,name:crm_deduplicate_acl.category -#: model:ir.ui.menu,name:crm_deduplicate_acl.partner_merge_automatic_menu +#. module: partner_deduplicate_acl +#: model:ir.module.category,name:partner_deduplicate_acl.category +#: model:ir.ui.menu,name:partner_deduplicate_acl.partner_merge_automatic_menu msgid "Deduplicate Contacts" msgstr "联系人去重" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_manually +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_manually msgid "Manually" msgstr "手动" -#. module: crm_deduplicate_acl -#: model:ir.ui.menu,name:crm_deduplicate_acl.crm_tools +#. module: partner_deduplicate_acl +#: model:ir.ui.menu,name:partner_deduplicate_acl.crm_tools msgid "Tools" msgstr "" -#. module: crm_deduplicate_acl -#: model:res.groups,name:crm_deduplicate_acl.group_unrestricted +#. module: partner_deduplicate_acl +#: model:res.groups,name:partner_deduplicate_acl.group_unrestricted msgid "Without restrictions" msgstr "无限制" -#. module: crm_deduplicate_acl -#: model:ir.model,name:crm_deduplicate_acl.model_base_partner_merge_automatic_wizard +#. module: partner_deduplicate_acl +#: model:ir.model,name:partner_deduplicate_acl.model_base_partner_merge_automatic_wizard msgid "base.partner.merge.automatic.wizard" msgstr "" diff --git a/partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml b/partner_deduplicate_acl/security/partner_deduplicate_acl_security.xml similarity index 100% rename from partner_deduplicate_acl/security/crm_deduplicate_acl_security.xml rename to partner_deduplicate_acl/security/partner_deduplicate_acl_security.xml diff --git a/partner_deduplicate_acl/static/description/index.html b/partner_deduplicate_acl/static/description/index.html index 1b1610325..0686f2873 100644 --- a/partner_deduplicate_acl/static/description/index.html +++ b/partner_deduplicate_acl/static/description/index.html @@ -3,13 +3,13 @@ - + Deduplicate Contacts ACL