clearcorp team mailing list archive
-
clearcorp team
-
Mailing list archive
-
Message #00650
lp:~wg.clearcorp/openerp-ccorp-addons/6.1-base-partner-merge-ccorp into lp:openerp-ccorp-addons
Willy Andres Gomez Solorzano has proposed merging lp:~wg.clearcorp/openerp-ccorp-addons/6.1-base-partner-merge-ccorp into lp:openerp-ccorp-addons.
Requested reviews:
Ronald Rubi (rr.clearcorp)
For more details, see:
https://code.launchpad.net/~wg.clearcorp/openerp-ccorp-addons/6.1-base-partner-merge-ccorp/+merge/147786
Migrated base_partner_merge and base_partner_sequence from extra-trunk
Modified base_partner_merge in oreder to allow selection of the "ref" field
--
https://code.launchpad.net/~wg.clearcorp/openerp-ccorp-addons/6.1-base-partner-merge-ccorp/+merge/147786
Your team CLEARCORP development team is subscribed to branch lp:openerp-ccorp-addons.
=== added directory 'base_partner_merge_ccorp'
=== added file 'base_partner_merge_ccorp/__init__.py'
--- base_partner_merge_ccorp/__init__.py 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/__init__.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,25 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+# $Id$
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import wizard
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
=== added file 'base_partner_merge_ccorp/__openerp__.py'
--- base_partner_merge_ccorp/__openerp__.py 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/__openerp__.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,54 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+# $Id$
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+# Fixes, improvements and V6 adaptation by Guewen Baconnier - Camptocamp 2011
+#
+
+{
+ 'name': 'Partner Merger CLEARCORP',
+ 'version': '1.0',
+ 'category': 'Generic Modules/Base',
+ 'description': """
+To merge 2 partners, select them in the list view and execute the Action "Merge Partners".
+To merge 2 addresses, select them in the list view and execute the Action "Merge Partner Addresses" or use the menu item :
+ Partners / Configuration / Merge Partner Addresses
+
+The selected addresses/partners are deactivated and a new one is created with :
+ - When a value is the same on each resources : the value
+ - When a value is different between the resources : you can choose the value to keep in a selection list
+ - When a value is set on a resource and is empty on the second one : the value set on the resource
+ - All many2many relations of the 2 resources are created on the new resource.
+ - All the one2many relations (invoices, sale_orders, ...) are updated in order to link to the new resource.
+
+ """,
+ 'author': 'Tiny-CLEARCORP',
+ 'website': 'http://www.clearcorp.co.cr',
+ 'depends': ['base','base_partner_sequence_ccorp'],
+ 'init_xml': [],
+ 'update_xml': [
+ "wizard/base_partner_merge_ccorp_view.xml",
+ "wizard/base_partner_merge_address_ccorp_view.xml"
+ ],
+ 'demo_xml': [],
+ 'installable': True,
+ "active": False,
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
=== added directory 'base_partner_merge_ccorp/i18n'
=== added file 'base_partner_merge_ccorp/i18n/base_partner_merge_ccorp.pot'
--- base_partner_merge_ccorp/i18n/base_partner_merge_ccorp.pot 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/i18n/base_partner_merge_ccorp.pot 2013-02-11 22:05:32 +0000
@@ -0,0 +1,116 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * base_partner_merge
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.6\n"
+"Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
+"POT-Creation-Date: 2009-11-25 05:33:56+0000\n"
+"PO-Revision-Date: 2009-11-25 05:33:56+0000\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: base_partner_merge
+#: help:base_partner_address.merge,init,address_id2:0
+msgid "Select second partner address to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: model:ir.module.module,shortdesc:base_partner_merge.module_meta_information
+msgid "Partner Merger"
+msgstr ""
+
+#. module: base_partner_merge
+#: code:addons/base_partner_merge/wizard/merge_partners.py:0
+#: model:ir.actions.wizard,name:base_partner_merge.wizard_base_partner_merge
+#: model:ir.ui.menu,name:base_partner_merge.menu_wizard_base_partner_merge
+#, python-format
+msgid "Merge Partners"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner.merge,init,partner_id2:0
+msgid "Second partner"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_view:base_partner.merge,init:0
+msgid "Merge Two Partners"
+msgstr ""
+
+#. module: base_partner_merge
+#: code:addons/base_partner_merge/wizard/merge_partners_address.py:0
+#, python-format
+msgid "Merge Partner Addresses"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner_address.merge,init,address_id1:0
+msgid "First address"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner_address.merge,init,address_id2:0
+msgid "Second address"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner.merge,init,next:0
+#: wizard_button:base_partner_address.merge,init,next:0
+msgid "Next"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner.merge,next,next_1:0
+msgid "Create And Open Partner"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner.merge,init,partner_id1:0
+msgid "First partner"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner_address.merge,next,next_1:0
+msgid "Create And Open Address"
+msgstr ""
+
+#. module: base_partner_merge
+#: help:base_partner.merge,init,partner_id2:0
+msgid "Select second partner to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: help:base_partner.merge,init,partner_id1:0
+msgid "Select first partner to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: help:base_partner_address.merge,init,address_id1:0
+msgid "Select first partner address to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner.merge,init,end:0
+#: wizard_button:base_partner.merge,next,end:0
+#: wizard_button:base_partner_address.merge,init,end:0
+#: wizard_button:base_partner_address.merge,next,end:0
+msgid "Cancel"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_view:base_partner_address.merge,init:0
+msgid "Merge Two Partner Address"
+msgstr ""
+
+#. module: base_partner_merge
+#: model:ir.actions.wizard,name:base_partner_merge.wizard_base_partner_address_merge
+#: model:ir.ui.menu,name:base_partner_merge.menu_wizard_base_partner_address_merge
+msgid "Merge Addresses"
+msgstr ""
+
=== added symlink 'base_partner_merge_ccorp/i18n/es.po'
=== target is u'es_CR.po'
=== added file 'base_partner_merge_ccorp/i18n/es_CR.po'
--- base_partner_merge_ccorp/i18n/es_CR.po 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/i18n/es_CR.po 2013-02-11 22:05:32 +0000
@@ -0,0 +1,172 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * base_partner_merge_ccorp
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 6.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-11 20:48+0000\n"
+"PO-Revision-Date: 2013-02-11 20:48+0000\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: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:91
+#, python-format
+msgid "Select Values"
+msgstr "Seleccione los valores a preservar"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:65
+#, python-format
+msgid "You must select only two addresses"
+msgstr "Sólo puede seleccionar 2 direcciones"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:124
+#, python-format
+msgid "The same address is selected in both fields."
+msgstr "La misma dirección está en ambos campos."
+
+#. module: base_partner_merge_ccorp
+#: field:base.partner.merge,container:0
+#: field:base.partner.merge.address.values,container:0
+msgid "Fields Container"
+msgstr "Campos contenedores"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge.address:0
+#: view:base.partner.merge.address.values:0
+#: model:ir.actions.act_window,name:base_partner_merge_ccorp.action_base_partner_merge_address_form
+#: model:ir.ui.menu,name:base_partner_merge_ccorp.menu_base_partner_address_merge
+msgid "Merge Partner Addresses"
+msgstr "Mezclar direcciones de Partner"
+
+#. module: base_partner_merge_ccorp
+#: field:base.partner.merge.address,address_id1:0
+msgid "Address1"
+msgstr "Dirección1"
+
+#. module: base_partner_merge_ccorp
+#: field:base.partner.merge.address,address_id2:0
+msgid "Address2"
+msgstr "Dirección2"
+
+#. module: base_partner_merge_ccorp
+#: model:ir.model,name:base_partner_merge_ccorp.model_base_partner_merge_address_values
+msgid "Merges two Addresses"
+msgstr "Mezcla dos direcciones"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:258
+#, python-format
+msgid "You have more than one default type in your addresses.\n"
+" Please change it and test once again!"
+msgstr "Tiene más de un tipo por defecto en sus direcciones.\n"
+" Por favor cámbielo y pruebe nuevamente!"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:138
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:216
+#, python-format
+msgid "You must select only two partners"
+msgstr "Debe seleccionar sólo 2 partners"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge.address:0
+msgid "Merge partner addresses"
+msgstr "Mezclar direcciones de Partner"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:265
+#, python-format
+msgid "You have to change the type of the default address of one of the partner to avoid having two default addresses"
+msgstr "Debe cambiar el tipo de dirección por defecto de uno de los partner para evitar tener dos direcciones por defecto"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:80
+#, python-format
+msgid "Selected addresses do not belong to the same partner!"
+msgstr "Las direcciones seleccionadas no pertencen al mismo proveedor !"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge.address:0
+msgid "_Next"
+msgstr "_Siguiente"
+
+#. module: base_partner_merge_ccorp
+#: model:ir.model,name:base_partner_merge_ccorp.model_base_partner_merge_address
+msgid "Merges two addresses"
+msgstr "Mezcla dos direcciones"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge:0
+#: view:base.partner.merge.address.values:0
+msgid "Merge"
+msgstr "Mezclar"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:80
+#, python-format
+msgid "Error"
+msgstr "Error"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge:0
+#: view:base.partner.merge.address.values:0
+msgid "placeholder"
+msgstr "placeholder"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge:0
+#: model:ir.actions.act_window,name:base_partner_merge_ccorp.action_base_partner_merge_form
+msgid "Merge Partners"
+msgstr "Mezclar partners"
+
+#. module: base_partner_merge_ccorp
+#: model:ir.actions.act_window,name:base_partner_merge_ccorp.act_base_partner_merge_addresses_link
+msgid "Addresses"
+msgstr "Direcciones"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:124
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:138
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:216
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:258
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py:265
+#, python-format
+msgid "Error!"
+msgstr "Error!"
+
+#. module: base_partner_merge_ccorp
+#: model:ir.model,name:base_partner_merge_ccorp.model_base_partner_merge
+msgid "Merges two partners"
+msgstr "Mezcla dos partners"
+
+#. module: base_partner_merge_ccorp
+#: code:addons/base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py:65
+#, python-format
+msgid "Warning!"
+msgstr "Advertencia!"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge.address:0
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#. module: base_partner_merge_ccorp
+#: view:base.partner.merge:0
+#: view:base.partner.merge.address.values:0
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: base_partner_merge_ccorp
+#: model:ir.model,name:base_partner_merge_ccorp.model_res_partner_address
+msgid "Partner Addresses"
+msgstr "Direcciones de partner"
+
=== added file 'base_partner_merge_ccorp/i18n/fr_BE.po'
--- base_partner_merge_ccorp/i18n/fr_BE.po 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/i18n/fr_BE.po 2013-02-11 22:05:32 +0000
@@ -0,0 +1,127 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * base_partner_merge
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.6\n"
+"Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
+"POT-Creation-Date: 2009-11-25 05:33:56+0000\n"
+"PO-Revision-Date: 2009-11-25 05:33:56+0000\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: base_partner_merge
+#: help:base_partner_address.merge,init,address_id2:0
+msgid "Select second partner address to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: model:ir.module.module,shortdesc:base_partner_merge.module_meta_information
+msgid "Partner Merger"
+msgstr ""
+
+#. module: base_partner_merge
+#: code:addons/base_partner_merge/wizard/merge_partners.py:0
+#: model:ir.actions.wizard,name:base_partner_merge.wizard_base_partner_merge
+#: model:ir.ui.menu,name:base_partner_merge.menu_wizard_base_partner_merge
+#, python-format
+msgid "Merge Partners"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner.merge,init,partner_id2:0
+msgid "Second partner"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_view:base_partner.merge,init:0
+msgid "Merge Two Partners"
+msgstr ""
+
+#. module: base_partner_merge
+#: code:addons/base_partner_merge/wizard/merge_partners_address.py:0
+#, python-format
+msgid "Merge Partner Addresses"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner_address.merge,init,address_id1:0
+msgid "First address"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner_address.merge,init,address_id2:0
+msgid "Second address"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner.merge,init,next:0
+#: wizard_button:base_partner_address.merge,init,next:0
+msgid "Next"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner.merge,next,next_1:0
+msgid "Create And Open Partner"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_field:base_partner.merge,init,partner_id1:0
+msgid "First partner"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner_address.merge,next,next_1:0
+msgid "Create And Open Address"
+msgstr ""
+
+#. module: base_partner_merge
+#: help:base_partner.merge,init,partner_id2:0
+msgid "Select second partner to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: help:base_partner.merge,init,partner_id1:0
+msgid "Select first partner to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: help:base_partner_address.merge,init,address_id1:0
+msgid "Select first partner address to merge"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_button:base_partner.merge,init,end:0
+#: wizard_button:base_partner.merge,next,end:0
+#: wizard_button:base_partner_address.merge,init,end:0
+#: wizard_button:base_partner_address.merge,next,end:0
+msgid "Cancel"
+msgstr ""
+
+#. module: base_partner_merge
+#: wizard_view:base_partner_address.merge,init:0
+msgid "Merge Two Partner Address"
+msgstr ""
+
+#. module: base_partner_merge
+#: model:ir.module.module,description:base_partner_merge.module_meta_information
+msgid "\n"
+"\n"
+" This Module creates two wizard on:\n"
+" 1. partners\configuration\merge partners => It merge two partners and create new third partner, and deactivate old two partners\n"
+" 2. partners\configuration\merge addresses => It merge two partner addresses and create new third address, and deactivate old two addresses\n"
+"\n"
+" "
+msgstr ""
+
+#. module: base_partner_merge
+#: model:ir.actions.wizard,name:base_partner_merge.wizard_base_partner_address_merge
+#: model:ir.ui.menu,name:base_partner_merge.menu_wizard_base_partner_address_merge
+msgid "Merge Addresses"
+msgstr ""
+
=== added directory 'base_partner_merge_ccorp/wizard'
=== added file 'base_partner_merge_ccorp/wizard/__init__.py'
--- base_partner_merge_ccorp/wizard/__init__.py 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/wizard/__init__.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,26 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+# $Id$
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import base_partner_merge_ccorp
+import base_partner_merge_address_ccorp
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
=== added file 'base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py'
--- base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,244 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+# Improvements + Fixes + Migration 6.0 and 6.1 Guewen Baconnier
+# Copyright 2011-2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+# Fixes, improvements and V6 adaptation by Guewen Baconnier - Camptocamp 2011
+
+from lxml import etree
+from osv import fields, osv
+from tools.translate import _
+
+
+class res_partner_address(osv.osv):
+ _inherit = 'res.partner.address'
+
+ def search(self, cr, uid, args, offset=0, limit=None, order=None,
+ context=None, count=False):
+ if context is None:
+ context = {}
+ if context.get('merge', False):
+ partner_address_obj = self.pool.get('res.partner.address')
+ add2 = partner_address_obj.browse(cr, uid, context['merge'], context=context).partner_id.id
+ args.append(('partner_id', '=', add2))
+ args.append(('id', '!=', context['merge']))
+ return super(res_partner_address, self).search(cr, uid, args, offset, limit,
+ order, context=context, count=count)
+res_partner_address()
+
+
+class base_partner_merge_address(osv.osv_memory):
+ """
+ Merges two Addresses
+ """
+ _name = 'base.partner.merge.address'
+ _description = 'Merges two addresses'
+
+ _columns = {
+ 'address_id1':fields.many2one('res.partner.address', 'Address1', required=True),
+ 'address_id2':fields.many2one('res.partner.address', 'Address2', required=True),
+ }
+
+ def get_addresses(self, cr, uid, context=None):
+ # wizard is launched from an address and not from the menu
+ if context.get('active_model', False) != 'res.partner.address':
+ return False
+ ids = context.get('active_ids', False)
+ if ids and not len(ids) == 2:
+ raise osv.except_osv(_('Warning!'), _('You must select only two addresses'))
+ return ids or False
+
+ def _get_address1(self, cr, uid, context=None):
+ ids = self.get_addresses(cr, uid, context)
+ return ids and ids[0] or False
+
+ def _get_address2(self, cr, uid, context=None):
+ ids = self.get_addresses(cr, uid, context)
+ if ids:
+ addresses = self.pool.get('res.partner.address').\
+ browse(cr, uid, ids, context=context)
+ partners = []
+ [partners.append(address.partner_id.id) for address in addresses]
+ if len(set(partners)) > 1:
+ raise osv.except_osv(_('Error'), _('Selected addresses do not belong to the same partner!'))
+ return ids and ids[1] or False
+
+ _defaults = {
+ 'address_id1': _get_address1,
+ 'address_id2': _get_address2,
+ }
+
+ def action_next(self, cr, uid, ids, context=None):
+
+ value = {
+ 'name': _('Select Values'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.partner.merge.address.values',
+ 'view_id': False,
+ 'target': 'new',
+ 'type': 'ir.actions.act_window',
+ 'context': str({'active_model': self._name,
+ 'active_id': ids[0],
+ 'active_ids': ids})
+ }
+ return value
+base_partner_merge_address()
+
+
+class base_partner_merge_address_values(osv.osv_memory):
+ """
+ Merges two addresses
+ """
+ _name = 'base.partner.merge.address.values'
+ _description = 'Merges two Addresses'
+
+ _columns = {
+ 'container': fields.serialized('Fields Container'),
+ }
+
+ _values = {}
+
+ def check_addresses(self, cr, uid, add_data, context):
+ """ Check validity of selected addresses.
+ Inherit to add other checks
+ """
+ if add_data.address_id1 == add_data.address_id2:
+ raise osv.except_osv(_("Error!"), _("The same address is selected in both fields."))
+ return True
+
+ def _get_previous_wizard(self, cr, uid, context=None):
+ if context is None:
+ context = {}
+ # get address data
+ merge_obj = self.pool.get('base.partner.merge.address')
+ base_wiz_id = context.get('active_model') == 'base.partner.merge.address' and\
+ context.get('active_id')
+ if not base_wiz_id:
+ return False
+ return merge_obj.browse(cr, uid, base_wiz_id, context=context)
+
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(base_partner_merge_address_values, self).fields_view_get(
+ cr, uid, view_id, view_type, context=context, toolbar=toolbar, submenu=submenu)
+ cr.execute("SELECT id, name, field_description, ttype, "
+ "required, relation, readonly "
+ "FROM ir_model_fields "
+ "WHERE model = 'res.partner.address'")
+ field_datas = cr.fetchall()
+
+ prev_wiz = self._get_previous_wizard(cr, uid, context=context)
+
+ self.check_addresses(cr, uid, prev_wiz, context)
+
+ form_xml, merge_fields, self._values, columns = self.pool.get('base.partner.merge')._build_form(
+ cr, uid, field_datas, prev_wiz.address_id1, prev_wiz.address_id2)
+ self._columns.update(columns)
+
+ eview = etree.fromstring(res['arch'])
+
+ placeholder = eview.xpath("//label[@string='placeholder']")[0]
+ placeholder.getparent().replace(placeholder, form_xml)
+
+ sep_diff = eview.xpath("//separator[@name='sep_diff']")[0]
+ if merge_fields:
+ sep_txt = "Select which data to use for the new record"
+ else:
+ sep_txt = "Merge Records"
+ sep_diff.set('string', _(sep_txt))
+
+ res['arch'] = etree.tostring(eview, pretty_print=True)
+
+ res['fields'] = merge_fields
+ return res
+
+ def cast_many2one_fields(self, cr, uid, data_record, context=None):
+ """ Some fields are many2one and the ORM expect them to be integer or in the form
+ 'relation,1' wher id is the id.
+ As some fields are displayed as selection in the view, we cast them in integer.
+ """
+ cr.execute("SELECT name from ir_model_fields "
+ "WHERE model = 'res.partner.address' "
+ "AND ttype = 'many2one'")
+ fields = cr.fetchall()
+ for field in fields:
+ if data_record.get(field[0], False):
+ data_record[field[0]] = int(data_record[field[0]])
+ return data_record
+
+ def action_merge(self, cr, uid, ids, context=None):
+ pool = self.pool
+ address_obj = pool.get('res.partner.address')
+ prev_wiz = self._get_previous_wizard(cr, uid, context=context)
+ add1 = prev_wiz.address_id1.id
+ add2 = prev_wiz.address_id2.id
+
+ res = self.read(cr, uid, ids, context=context)[0]
+ res.update(self._values)
+
+ if hasattr(address_obj, '_sql_constraints'):
+ #for uniqueness constraint (vat number for example)...
+ c_names = []
+ remove_field = {}
+ for const in address_obj._sql_constraints:
+ c_names.append('res_partner_address_' + const[0])
+ if c_names:
+ c_names = tuple(map(lambda x: "'"+ x +"'", c_names))
+ cr.execute("""select column_name from \
+ information_schema.constraint_column_usage u \
+ join pg_constraint p on (p.conname=u.constraint_name) \
+ where u.constraint_name in (%s) and p.contype='u' """ % c_names)
+ for i in cr.fetchall():
+ remove_field[i[0]] = None
+
+ remove_field.update({'active': False})
+ address_obj.write(cr, uid, [add1, add2], remove_field, context=context)
+
+ res = self.cast_many2one_fields(cr, uid, res, context)
+
+ add_id = address_obj.create(cr, uid, res, context=context)
+
+ self.custom_updates(cr, uid, add_id, [add1, add2], context)
+
+ # For one2many fields on res.partner.address
+ cr.execute("select name, model from ir_model_fields where relation='res.partner.address' and ttype not in ('many2many', 'one2many');")
+ for name, model_raw in cr.fetchall():
+ if hasattr(pool.get(model_raw), '_auto'):
+ if not pool.get(model_raw)._auto:
+ continue
+ elif hasattr(pool.get(model_raw), '_check_time'):
+ continue
+ else:
+ if hasattr(pool.get(model_raw), '_columns'):
+ from osv import fields
+ if pool.get(model_raw)._columns.get(name, False) and isinstance(pool.get(model_raw)._columns[name], fields.many2one):
+ model = model_raw.replace('.', '_')
+ cr.execute("update "+model+" set "+name+"="+str(add_id)+" where "+str(name)+" in ("+str(add1)+", "+str(add2)+")")
+ return {}
+
+ def custom_updates(self, cr, uid, address_id, old_address_ids, context):
+ """Hook for special updates on old addresses and new address
+ """
+ pass
+
+base_partner_merge_address_values()
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
=== added file 'base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp_view.xml'
--- base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp_view.xml 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/wizard/base_partner_merge_address_ccorp_view.xml 2013-02-11 22:05:32 +0000
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<openerp>
+ <data>
+
+ <record model="ir.ui.view" id="view_base_partner_merge_add_form">
+ <field name="name">base.partner_merge.address.form</field>
+ <field name="model">base.partner.merge.address</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Merge partner addresses">
+ <separator string="Merge Partner Addresses" colspan="4"/>
+ <field name="address_id1"/>
+ <newline/>
+ <field name="address_id2" context="{'merge':address_id1}"/>
+ <separator string="" colspan="4"/>
+ <group colspan="4" col="3">
+ <label string=""/>
+ <button special="cancel" string="_Cancel" icon="gtk-cancel"/>
+ <button name="action_next" string="_Next" type="object" icon="gtk-go-forward"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_base_partner_address_merge_form">
+ <field name="name">base.partner.merge.address.values.form</field>
+ <field name="model">base.partner.merge.address.values</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Merge Partner Addresses">
+ <separator colspan="4" name="sep_diff"/>
+ <label string="placeholder"/>
+ <separator colspan="4"/>
+ <group col="4" colspan="4">
+ <button special="cancel" string="Cancel" icon="gtk-cancel"/>
+ <button name="action_merge" string="Merge" type="object" icon="gtk-ok"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_base_partner_merge_address_form" model="ir.actions.act_window">
+ <field name="name">Merge Partner Addresses</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">base.partner.merge.address</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="view_base_partner_merge_add_form"/>
+ <field name="target">new</field>
+ </record>
+
+ <menuitem action="action_base_partner_merge_address_form" id="menu_base_partner_address_merge" parent="base.menu_base_config"/>
+
+ <record id="action_base_partner_address_merge_form_values" model="ir.values">
+ <field name="model_id" ref="base.model_res_partner_address" />
+ <field name="object" eval="1" />
+ <field name="name">Merge Partner Addresses</field>
+ <field name="key2">client_action_multi</field>
+ <field name="value" eval="'ir.actions.act_window,' + str(ref('action_base_partner_merge_address_form'))"/>
+ <field name="key">action</field>
+ <field name="model">res.partner.address</field>
+ </record>
+
+ <!-- Add a link to the addresses on the partners: useful to merge addresses right after a partner merge -->
+ <act_window domain="[('partner_id', '=', active_id)]" id="act_base_partner_merge_addresses_link" name="Addresses" res_model="res.partner.address" src_model="res.partner"/>
+
+ </data>
+</openerp>
=== added file 'base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py'
--- base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/wizard/base_partner_merge_ccorp.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,303 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+# Improvements + Fixes + Migration 6.0 and 6.1 Guewen Baconnier
+# Copyright 2011-2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import tools
+
+from lxml import etree
+from osv import fields, osv, orm
+from tools.translate import _
+
+
+class base_partner_merge(osv.osv_memory):
+ """
+ Merges two partners
+ """
+ _name = 'base.partner.merge'
+ _description = 'Merges two partners'
+
+ _columns = {
+ 'container': fields.serialized('Fields Container'),
+ }
+
+ _values = {}
+
+ def _build_form(self, cr, uid, field_datas, value1, value2):
+
+ update_values = {}
+ update_fields = {}
+ columns = {}
+
+ form_grp = etree.Element('group', colspan="4", col="2")
+ orm.setup_modifiers(form_grp)
+
+ for fid, fname, fdescription, ttype, required, relation, readonly in field_datas:
+ val1 = value1[fname]
+ val2 = value2[fname]
+ my_selection = []
+ size = 24
+
+ if (val1 and val2) and (val1 == val2):
+ if ttype in ('many2one'):
+ update_values.update({fname: val1.id})
+ elif ttype in ('many2many'):
+ update_values.update({fname: [(6, 0, map(lambda x: x.id, val1))]})
+ else:
+ update_values.update({fname: val1})
+
+ if (val1 and val2) and (val1 != val2) and not readonly:
+ if ttype in ('char', 'text', 'selection'):
+ my_selection = [(val1, val1), (val2, val2)]
+ size = max(len(val1), len(val2))
+ if ttype in ('float', 'integer'):
+ my_selection = [(str(val1), str(val1)), (str(val2), str(val2))]
+ if ttype in ('many2one'):
+ my_selection = [(str(val1.id), val1.name),
+ (str(val2.id), val2.name)]
+ if ttype in ('many2many'):
+ update_values.update({fname:
+ [(6, 0, list(set(map(lambda x: x.id, val1 + val2))))]})
+ if my_selection:
+ if not required:
+ my_selection.append((False, ''))
+ columns.update({fname:
+ fields.sparse('container',
+ type='selection',
+ selection=my_selection,
+ string=fdescription,
+ required=required,
+ size=size)})
+ update_fields.update({fname: {
+ 'string': fdescription,
+ 'type': 'selection',
+ 'selection': my_selection,
+ 'required': required}})
+ f = etree.SubElement(form_grp, 'field', name=fname)
+ orm.setup_modifiers(f, field=update_fields[fname])
+
+ if fname == 'ref':
+ if val1 == False or val2 == False:
+ update_values.update({fname: val1 or val2})
+ else:
+ my_selection = [(val1, val1), (val2, val2)]
+ size = max(len(val1), len(val2))
+
+ if my_selection:
+ columns.update({fname:
+ fields.sparse('container',
+ type='selection',
+ selection=my_selection,
+ string=fdescription,
+ required=required,
+ size=size)})
+ update_fields.update({fname: {
+ 'string': fdescription,
+ 'type': 'selection',
+ 'selection': my_selection,
+ 'required': required}})
+ f = etree.SubElement(form_grp, 'field', name=fname)
+ orm.setup_modifiers(f, field=update_fields[fname])
+
+ if (val1 and not val2) or (not val1 and val2):
+ if ttype == 'many2one':
+ update_values.update({fname: val1 and val1.id or val2 and val2.id})
+ elif ttype == 'many2many':
+ update_values.update({fname: [(6, 0, map(lambda x: x.id, val1 or val2))]})
+ elif ttype == 'one2many':
+ #skip one2many values
+ pass
+ else:
+ update_values.update({fname: val1 or val2})
+
+ return form_grp, update_fields, update_values, columns
+
+ def check_partners(self, cr, uid, partner_ids, context):
+ """ Check validity of selected partners.
+ Inherit to add other checks
+ """
+ if not len(partner_ids) == 2:
+ raise osv.except_osv(_('Error!'), _('You must select only two partners'))
+ return True
+
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(base_partner_merge, self).fields_view_get(
+ cr, uid, view_id, view_type, context=context, toolbar=toolbar, submenu=submenu)
+ partner_ids = context.get('active_ids') or []
+
+ self.check_partners(cr, uid, partner_ids, context)
+
+ if not len(partner_ids) == 2:
+ return res
+
+ partner_obj = self.pool.get('res.partner')
+ cr.execute("SELECT id, name, field_description, ttype, "
+ "required, relation, readonly "
+ "FROM ir_model_fields "
+ "WHERE model = 'res.partner'")
+
+ field_datas = cr.fetchall()
+ partner1 = partner_obj.browse(cr, uid, partner_ids[0], context=context)
+ partner2 = partner_obj.browse(cr, uid, partner_ids[1], context=context)
+ form_xml, merge_fields, self._values, columns = self._build_form(
+ cr, uid, field_datas, partner1, partner2)
+
+ self._columns.update(columns)
+ eview = etree.fromstring(res['arch'])
+
+ placeholder = eview.xpath("//label[@string='placeholder']")[0]
+ placeholder.getparent().replace(placeholder, form_xml)
+
+ sep_diff = eview.xpath("//separator[@name='sep_diff']")[0]
+ if merge_fields:
+ sep_txt = "Select which data to use for the new record"
+ else:
+ sep_txt = "Merge Records"
+ sep_diff.set('string', _(sep_txt))
+
+ res['arch'] = etree.tostring(eview, pretty_print=True)
+ res['fields'] = merge_fields
+ return res
+
+ def cast_many2one_fields(self, cr, uid, data_record, context=None):
+ """ Some fields are many2one and the ORM expect them to be integer or in the form
+ 'relation,1' where id is the id.
+ As some fields are displayed as selection in the view, we cast them in integer.
+ """
+ cr.execute("SELECT name "
+ "FROM ir_model_fields "
+ "WHERE model = 'res.partner' "
+ "AND ttype = 'many2one'")
+ fields = cr.fetchall()
+ for field in fields:
+ if data_record.get(field[0], False):
+ data_record[field[0]] = int(data_record[field[0]])
+ return data_record
+
+ def action_merge(self, cr, uid, ids, context=None):
+ """
+ Merges two partners and create 3rd and changes references of old partners with new
+ @param self: The object pointer
+ @param cr: the current row, from the database cursor,
+ @param uid: the current user’s ID for security checks,
+ @param ids: id of the wizard
+ @param context: A standard dictionary for contextual values
+
+ @return : empty dict
+ """
+ record_id = context and context.get('active_id', False) or False
+ pool = self.pool
+ if not record_id:
+ return {}
+ res = self.read(cr, uid, ids, context = context)[0]
+
+ res.update(self._values)
+ partner_pool = pool.get('res.partner')
+ partner_ids = context.get('active_ids') or []
+ if not len(partner_ids) == 2:
+ raise osv.except_osv(_('Error!'), _('You must select only two partners'))
+
+ self.check_partners(cr, uid, partner_ids, context)
+
+ part1 = partner_ids[0]
+ part2 = partner_ids[1]
+
+ if hasattr(partner_pool, '_sql_constraints'):
+ #for uniqueness constraint (vat number for example)...
+ c_names = []
+ remove_field = {}
+ unique_fields = []
+ for const in partner_pool._sql_constraints:
+ c_names.append('res_partner_' + const[0])
+ if c_names:
+ c_names = tuple(map(lambda x: "'"+ x +"'", c_names))
+ cr.execute("""select column_name from \
+ information_schema.constraint_column_usage u \
+ join pg_constraint p on (p.conname=u.constraint_name) \
+ where u.constraint_name in (%s) and p.contype='u' """ % c_names)
+ for i in cr.fetchall():
+ remove_field[i[0]] = None
+ unique_fields.append(i[0])
+ unique_fields.append('name')
+ unique_data = partner_pool.read(cr, uid, [part1, part2], unique_fields)
+ str_unq = '---------------------------------------\n'
+ for u in unique_data:
+ for key, value in u.items():
+ if key == 'id' or not value:
+ continue
+ str_unq += key + ': ' + str(value) + '\n'
+ if res.has_key('comment') and res['comment']:
+ res['comment'] += '\n' + str_unq
+ else:
+ res['comment'] = str_unq
+ list_partn = [part1, part2]
+ count_default_address = 0
+ for partner in partner_pool.browse(cr, uid, list_partn):
+ for address in partner.address:
+ if address.type == 'default':
+ count_default_address +=1
+ if count_default_address > 1:
+ raise osv.except_osv(_('Error!'), _('You have more than one default type in your addresses.\n Please change it and test once again!'))
+
+
+ remove_field.update({'active': False})
+ try:
+ partner_pool.write(cr, uid, [part1, part2], remove_field, context=context)
+ except:
+ raise osv.except_osv(_('Error!'), _('You have to change the type of the default address of one of the partner to avoid having two default addresses'))
+
+ res = self.cast_many2one_fields(cr, uid, res, context)
+
+ part_id = partner_pool.create(cr, uid, res, context=context)
+
+ self.custom_updates(cr, uid, part_id, [part1, part2], context)
+
+ # For one2many fields on res.partner
+ cr.execute("SELECT name, model "
+ "FROM ir_model_fields "
+ "WHERE relation='res.partner' "
+ "AND ttype NOT IN ('many2many', 'one2many');")
+ for name, model_raw in cr.fetchall():
+ if hasattr(pool.get(model_raw), '_auto'):
+ if not pool.get(model_raw)._auto:
+ continue
+ elif hasattr(pool.get(model_raw), '_check_time'):
+ continue
+ else:
+ if hasattr(pool.get(model_raw), '_columns'):
+ from osv import fields
+ if pool.get(model_raw)._columns.get(name, False) and isinstance(pool.get(model_raw)._columns[name], fields.many2one):
+ model = model_raw.replace('.', '_')
+ if name not in ('relation_partner_answer'):
+ cr.execute("update "+model+" set "+name+"="+str(part_id)+" where "+ tools.ustr(name) +" in ("+ tools.ustr(part1) +", "+tools.ustr(part2)+")")
+
+ return {}
+
+ def custom_updates(self, cr, uid, partner_id, old_partner_ids, context):
+ """Hook for special updates on old partners and new partner
+ """
+ pass
+
+base_partner_merge()
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
=== added file 'base_partner_merge_ccorp/wizard/base_partner_merge_ccorp_view.xml'
--- base_partner_merge_ccorp/wizard/base_partner_merge_ccorp_view.xml 1970-01-01 00:00:00 +0000
+++ base_partner_merge_ccorp/wizard/base_partner_merge_ccorp_view.xml 2013-02-11 22:05:32 +0000
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<openerp>
+ <data>
+
+ <record model="ir.ui.view" id="view_base_partner_merge_form">
+ <field name="name">base.partner_merge.form</field>
+ <field name="model">base.partner.merge</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Merge Partners">
+ <separator colspan="4" name="sep_diff"/>
+ <label string="placeholder"/>
+ <separator colspan="4"/>
+ <group col="4" colspan="4">
+ <button special="cancel" string="Cancel" icon="gtk-cancel"/>
+ <button name="action_merge" string="Merge" type="object" icon="gtk-ok"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+
+ <record id="action_base_partner_merge_form" model="ir.actions.act_window">
+ <field name="name">Merge Partners</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">base.partner.merge</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="view_base_partner_merge_form"/>
+ <field name="target">new</field>
+ </record>
+
+ <record id="action_base_partner_merge_form_values" model="ir.values">
+ <field name="model_id" ref="base.model_res_partner" />
+ <field name="object" eval="1" />
+ <field name="name">Merge Partners</field>
+ <field name="key2">client_action_multi</field>
+ <field name="value" eval="'ir.actions.act_window,' + str(ref('action_base_partner_merge_form'))"/>
+ <field name="key">action</field>
+ <field name="model">res.partner</field>
+ </record>
+
+ </data>
+</openerp>
=== added directory 'base_partner_sequence_ccorp'
=== added file 'base_partner_sequence_ccorp/__init__.py'
--- base_partner_sequence_ccorp/__init__.py 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/__init__.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+import partner_sequence_ccorp
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
=== added file 'base_partner_sequence_ccorp/__openerp__.py'
--- base_partner_sequence_ccorp/__openerp__.py 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/__openerp__.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,40 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+ "name" : "Add a sequence on partners Code",
+ "version" : "1.0",
+ "author" : "Tiny+Clearcorp",
+ "category" : "Generic Modules/Base",
+ "website": "http://www.openerp.com",
+ "depends" : ["base"],
+ "description": """
+ This module adds the possibility to define a sequence for
+ the partner code. This code is then set as default when you
+ create a new partner, using the defined sequence.
+ """,
+ "demo_xml" : [],
+ "init_xml" : ['partner_sequence_ccorp.xml'],
+ "update_xml" : [],
+ "active": False,
+ "installable": True
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
=== added directory 'base_partner_sequence_ccorp/i18n'
=== added file 'base_partner_sequence_ccorp/i18n/base_partner_sequence.pot'
--- base_partner_sequence_ccorp/i18n/base_partner_sequence.pot 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/i18n/base_partner_sequence.pot 2013-02-11 22:05:32 +0000
@@ -0,0 +1,31 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * base_partner_sequence
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.6\n"
+"Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
+"POT-Creation-Date: 2009-11-25 05:34:59+0000\n"
+"PO-Revision-Date: 2009-11-25 05:34:59+0000\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: base_partner_sequence
+#: model:ir.module.module,description:base_partner_sequence.module_meta_information
+msgid "\n"
+" This module adds the possibility to define a sequence for\n"
+" the partner code. This code is then set as default when you\n"
+" create a new partner, using the defined sequence.\n"
+" "
+msgstr ""
+
+#. module: base_partner_sequence
+#: model:ir.module.module,shortdesc:base_partner_sequence.module_meta_information
+msgid "Add an automatic sequence on partners"
+msgstr ""
+
=== added file 'base_partner_sequence_ccorp/i18n/es.po'
--- base_partner_sequence_ccorp/i18n/es.po 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/i18n/es.po 2013-02-11 22:05:32 +0000
@@ -0,0 +1,39 @@
+# Spanish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2009-11-25 05:34+0000\n"
+"PO-Revision-Date: 2011-11-15 22:55+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Spanish <es@xxxxxx>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-09-22 05:06+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
+
+#. module: base_partner_sequence
+#: model:ir.module.module,description:base_partner_sequence.module_meta_information
+msgid ""
+"\n"
+" This module adds the possibility to define a sequence for\n"
+" the partner code. This code is then set as default when you\n"
+" create a new partner, using the defined sequence.\n"
+" "
+msgstr ""
+"\n"
+" Este módulo añade la posibilidad de definir una secuencia para\n"
+" el código de partner. Con ello se establece este código como por "
+"defecto cuando\n"
+" se crea un nuevo partner, usando la secuencia definida.\n"
+" "
+
+#. module: base_partner_sequence
+#: model:ir.module.module,shortdesc:base_partner_sequence.module_meta_information
+msgid "Add an automatic sequence on partners"
+msgstr "Añadir una secuencia automática en los partners"
=== added file 'base_partner_sequence_ccorp/i18n/fr_BE.po'
--- base_partner_sequence_ccorp/i18n/fr_BE.po 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/i18n/fr_BE.po 2013-02-11 22:05:32 +0000
@@ -0,0 +1,31 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * base_partner_sequence
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.6\n"
+"Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
+"POT-Creation-Date: 2009-11-25 05:34:59+0000\n"
+"PO-Revision-Date: 2009-11-25 05:34:59+0000\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: base_partner_sequence
+#: model:ir.module.module,description:base_partner_sequence.module_meta_information
+msgid "\n"
+" This module adds the possibility to define a sequence for\n"
+" the partner code. This code is then set as default when you\n"
+" create a new partner, using the defined sequence.\n"
+" "
+msgstr ""
+
+#. module: base_partner_sequence
+#: model:ir.module.module,shortdesc:base_partner_sequence.module_meta_information
+msgid "Add an automatic sequence on partners"
+msgstr ""
+
=== added file 'base_partner_sequence_ccorp/i18n/sv.po'
--- base_partner_sequence_ccorp/i18n/sv.po 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/i18n/sv.po 2013-02-11 22:05:32 +0000
@@ -0,0 +1,32 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * base_partner_sequence
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.14\n"
+"Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
+"POT-Creation-Date: 2009-11-25 05:34+0000\n"
+"PO-Revision-Date: 2010-11-23 01:58+0000\n"
+"Last-Translator: Olivier Dony (OpenERP) <Unknown>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-09-22 05:06+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
+
+#. module: base_partner_sequence
+#: model:ir.module.module,description:base_partner_sequence.module_meta_information
+msgid ""
+"\n"
+" This module adds the possibility to define a sequence for\n"
+" the partner code. This code is then set as default when you\n"
+" create a new partner, using the defined sequence.\n"
+" "
+msgstr ""
+
+#. module: base_partner_sequence
+#: model:ir.module.module,shortdesc:base_partner_sequence.module_meta_information
+msgid "Add an automatic sequence on partners"
+msgstr ""
=== added file 'base_partner_sequence_ccorp/partner_sequence_ccorp.py'
--- base_partner_sequence_ccorp/partner_sequence_ccorp.py 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/partner_sequence_ccorp.py 2013-02-11 22:05:32 +0000
@@ -0,0 +1,37 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import osv, fields
+
+class partner_sequence(osv.osv):
+ _inherit = 'res.partner'
+
+ def create(self, cr, uid, vals, context={}):
+ if vals['ref']== None or vals['ref'] == '':
+ vals['ref'] = self.pool.get('ir.sequence').get(cr, uid, 'res.partner')
+ res = super(partner_sequence, self).create(cr, uid, vals, context)
+ return res
+ _columns = {
+ 'ref': fields.char('Code', size=64, readonly=True),
+ }
+partner_sequence()
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
=== added file 'base_partner_sequence_ccorp/partner_sequence_ccorp.xml'
--- base_partner_sequence_ccorp/partner_sequence_ccorp.xml 1970-01-01 00:00:00 +0000
+++ base_partner_sequence_ccorp/partner_sequence_ccorp.xml 2013-02-11 22:05:32 +0000
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<openerp>
+<data noupdate="1">
+
+ #
+ # Sequences for res.partner
+ #
+
+ <record model="ir.sequence.type" id="seq_type_res_partner">
+ <field name="name">Partner code</field>
+ <field name="code">res.partner</field>
+ </record>
+ <record model="ir.sequence" id="seq_res_partner">
+ <field name="name">Partner code</field>
+ <field name="code">res.partner</field>
+ <field name="prefix"></field>
+ <field name="padding">5</field>
+ <field name="implementation">no_gap</field>
+ </record>
+
+</data>
+</openerp>
Follow ups