← Back to team overview

clearcorp team mailing list archive

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