Browse Source
[ADD] base_contact_function_partner_firstname
[ADD] base_contact_function_partner_firstname
Add firstname before name. Name is considered like the lastname and we have firstname and lastname on partner view and contact view.pull/20/head
EL HADJI DEM
11 years ago
committed by
Sandy Carter
8 changed files with 370 additions and 0 deletions
-
23base_contact_function_partner_firstname/__init__.py
-
51base_contact_function_partner_firstname/__openerp__.py
-
27base_contact_function_partner_firstname/i18n/base_contact_function_partner_firstname.pot
-
27base_contact_function_partner_firstname/i18n/fr.po
-
82base_contact_function_partner_firstname/res_partner.py
-
76base_contact_function_partner_firstname/res_partner_view.xml
-
27base_contact_function_partner_firstname/tests/__init__.py
-
57base_contact_function_partner_firstname/tests/test_partner.py
@ -0,0 +1,23 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2013 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 res_partner |
@ -0,0 +1,51 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2013 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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': 'Contacts by Functions - Partner Firstname Bindings', |
||||
|
'version': '0.1', |
||||
|
'category': 'Customer Relationship Management', |
||||
|
'summary': 'Contacts by Functions - Partner Firstname Bindings', |
||||
|
'description': """ |
||||
|
Contacts by Functions - Partner Firstname Bindings |
||||
|
================================================== |
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
* El Hadji Dem (elhadji.dem@savoirfairelinux.com) |
||||
|
""", |
||||
|
'author': 'Savoir-faire Linux', |
||||
|
'website': 'www.savoirfairelinux.com', |
||||
|
'license': 'AGPL-3', |
||||
|
'depends': [ |
||||
|
'base_contact_function', |
||||
|
'partner_firstname', |
||||
|
], |
||||
|
'data': [ |
||||
|
'res_partner_view.xml', |
||||
|
], |
||||
|
'test': [], |
||||
|
'demo': [ |
||||
|
], |
||||
|
'installable': True, |
||||
|
'auto_install': True, |
||||
|
} |
@ -0,0 +1,27 @@ |
|||||
|
# Translation of OpenERP Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * base_contact_function_partner_firstname |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: OpenERP Server 7.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2014-01-03 07:16+0000\n" |
||||
|
"PO-Revision-Date: 2014-01-03 02:17-0500\n" |
||||
|
"Last-Translator: EL Hadji DEM <elhadji.dem@savoirfairelinux.com>\n" |
||||
|
"Language-Team: \n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: \n" |
||||
|
"X-Generator: Poedit 1.5.4\n" |
||||
|
|
||||
|
#. module: base_contact_function_partner_firstname |
||||
|
#: view:res.partner:0 |
||||
|
msgid "lastname" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: base_contact_function_partner_firstname |
||||
|
#: view:res.partner:0 |
||||
|
msgid "Firstname" |
||||
|
msgstr "" |
@ -0,0 +1,27 @@ |
|||||
|
# Translation of OpenERP Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * base_contact_function_partner_firstname |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: OpenERP Server 7.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2014-01-03 07:17+0000\n" |
||||
|
"PO-Revision-Date: 2014-01-03 02:18-0500\n" |
||||
|
"Last-Translator: EL Hadji DEM <elhadji.dem@savoirfairelinux.com>\n" |
||||
|
"Language-Team: \n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: \n" |
||||
|
"X-Generator: Poedit 1.5.4\n" |
||||
|
|
||||
|
#. module: base_contact_function_partner_firstname |
||||
|
#: view:res.partner:0 |
||||
|
msgid "lastname" |
||||
|
msgstr "Nom" |
||||
|
|
||||
|
#. module: base_contact_function_partner_firstname |
||||
|
#: view:res.partner:0 |
||||
|
msgid "Firstname" |
||||
|
msgstr "Prénom" |
@ -0,0 +1,82 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2013 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 time |
||||
|
from openerp.osv import orm |
||||
|
|
||||
|
|
||||
|
class res_partner(orm.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
def create(self, cr, user, vals, context=None): |
||||
|
context = self._basecontact_check_context(cr, user, 'create', context) |
||||
|
if not vals.get('name') and vals.get('contact_id'): |
||||
|
vals['name'] = self.browse( |
||||
|
cr, user, vals['contact_id'], context=context).name |
||||
|
if vals.get('end_date'): |
||||
|
if vals.get('end_date', "Z") <= time.strftime('%Y-%m-%d'): |
||||
|
vals['active'] = False |
||||
|
if vals.get('contact_type') == 'standalone': |
||||
|
contact_vals = dict( |
||||
|
filter(lambda (k, v): k != 'parent_id', vals.iteritems()) |
||||
|
) |
||||
|
contact_vals['active'] = True |
||||
|
contact_vals['function_id'] = None |
||||
|
vals['contact_id'] = super(res_partner, self).create( |
||||
|
cr, user, contact_vals, context=context |
||||
|
) |
||||
|
self.write(cr, user, vals['contact_id'], { |
||||
|
'firstname': vals.get('firstname', ''), |
||||
|
'lastname': vals.get('lastname', ''), |
||||
|
}, context=context) |
||||
|
# Check if we create existing contact from company(ie: company is true) |
||||
|
# Check if we create another function from contact view |
||||
|
if vals.get('contact_type') == 'attached' or ( |
||||
|
not vals.get('contact_type') and vals.get('contact_id')): |
||||
|
contact_info = self.browse( |
||||
|
cr, user, vals.get('contact_id'), context=context) |
||||
|
vals['firstname'] = contact_info.firstname |
||||
|
vals['title'] = contact_info.title.id or '' |
||||
|
|
||||
|
if ('contact_id'in vals and ('reset_password' in context or |
||||
|
'install_mode' in context)): |
||||
|
return vals['contact_id'] |
||||
|
res = super(res_partner, self).create(cr, user, vals, context=context) |
||||
|
return res |
||||
|
|
||||
|
def write(self, cr, user, ids, vals, context=None): |
||||
|
context = self._basecontact_check_context(cr, user, 'write', context) |
||||
|
if vals.get('end_date'): |
||||
|
if vals.get('end_date', "Z") <= time.strftime('%Y-%m-%d'): |
||||
|
vals['active'] = False |
||||
|
if vals.get('contact_type') == 'standalone': |
||||
|
contact_vals = dict( |
||||
|
filter(lambda (k, v): k != 'parent_id', vals.iteritems()) |
||||
|
) |
||||
|
contact_vals['active'] = True |
||||
|
contact_vals['function_id'] = None |
||||
|
vals['contact_id'] = super(res_partner, self).write( |
||||
|
cr, user, contact_vals, context=context |
||||
|
) |
||||
|
return super(res_partner, self).write( |
||||
|
cr, user, ids, vals, context=context |
||||
|
) |
@ -0,0 +1,76 @@ |
|||||
|
<?xml version = "1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<!--Redefine this part of view from firstname_partner module --> |
||||
|
<record id="view_partner_form_firstname_inherit11" model="ir.ui.view"> |
||||
|
<field name="name">res.partner.form.firstname.inherit11</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="partner_firstname.view_partner_form_firstname"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<!--Redefine firstname field in view partner--> |
||||
|
<field name="firstname" position="replace"> |
||||
|
<group attrs="{'invisible': [('is_company', '=', True)]}"> |
||||
|
<field name="firstname"/> |
||||
|
</group> |
||||
|
</field> |
||||
|
<!--Redefine firstname field in contact view--> |
||||
|
<xpath expr="//form[@string='Contact']/sheet/div//field[@name='firstname']" position="replace"> |
||||
|
<field name="firstname" attrs="{'invisible': [('contact_type', '=', 'attached')]}"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--Replace name by full name in kanban view--> |
||||
|
<record id="view_partner_form_firstname_inherit11" model="ir.ui.view"> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base_contact_function.view_contact_by_function_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='other_contact_history_ids']/kanban//field[@name='name']" position="replace"> |
||||
|
<field name="lastname"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='other_contact_history_ids']/kanban/templates//t[@t-name='kanban-box']//div[@class='oe_kanban_details']//field[@name='name']" |
||||
|
position="before"> |
||||
|
<field name="firstname"/> |
||||
|
</xpath> |
||||
|
<!--Display firstname and name after Image--> |
||||
|
<xpath expr="//field[@name='other_contact_history_ids']/form[@string='Contact']/sheet//field[@name='image']" |
||||
|
position="after"> |
||||
|
<h1> |
||||
|
<field name="contact_id" style="width: 70%%" readonly="1"/> |
||||
|
</h1> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--Display firstname and name in kanban view for other position --> |
||||
|
<record id="view_partner_form_firstname_name" model="ir.ui.view"> |
||||
|
<field name="name">res.partner.form.firstname.name</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base_contact_function.view_position_info_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
|
||||
|
<xpath expr="//field[@name='other_contact_ids']/form//field[@name='name']" |
||||
|
position="replace"/> |
||||
|
|
||||
|
<xpath expr="//field[@name='other_contact_ids']/form//field[@name='image']" |
||||
|
position="after"> |
||||
|
<h1> |
||||
|
<field name="contact_id" style="width: 70%%" readonly="1"/> |
||||
|
</h1> |
||||
|
</xpath> |
||||
|
|
||||
|
<!-- Don't display the label field --> |
||||
|
<xpath expr="//field[@name='other_contact_ids']/form//label[@for='name']" |
||||
|
position="replace"/> |
||||
|
|
||||
|
<!-- Add firstname before name in templates view --> |
||||
|
<xpath expr="//t[@t-name='kanban-box']//div[@class='oe_kanban_details']/h4[@class='oe_partner_heading']//field[@name='name']" |
||||
|
position="before"> |
||||
|
<field name="firstname"/> |
||||
|
</xpath> |
||||
|
|
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,27 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2010 - 2014 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 . import test_partner |
||||
|
|
||||
|
checks = [ |
||||
|
test_partner, |
||||
|
] |
@ -0,0 +1,57 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# This module copyright (C) 2010 - 2014 Savoir-faire Linux |
||||
|
# (<http://www.savoirfairelinux.com>). |
||||
|
# |
||||
|
# 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 openerp.tests.common import TransactionCase |
||||
|
|
||||
|
|
||||
|
class test_partner_contact_id(TransactionCase): |
||||
|
|
||||
|
def setUp(self): |
||||
|
super(test_partner_contact_id, self).setUp() |
||||
|
# Clean up registries |
||||
|
self.registry('ir.model').clear_caches() |
||||
|
self.registry('ir.model.data').clear_caches() |
||||
|
# Get registries |
||||
|
self.user_model = self.registry("res.users") |
||||
|
self.partner_model = self.registry("res.partner") |
||||
|
# Get context |
||||
|
self.context = self.user_model.context_get(self.cr, self.uid) |
||||
|
# Create values for test, contact also created |
||||
|
contact_id = self.partner_model.create(self.cr, self.uid, { |
||||
|
'name': u'Astérix', |
||||
|
'title': 1, |
||||
|
}, context=self.context) |
||||
|
self.vals = { |
||||
|
'name': u'Obélix', |
||||
|
'type': 'contact', |
||||
|
'contact_id': contact_id, |
||||
|
} |
||||
|
|
||||
|
def test_create_partner(self): |
||||
|
cr, uid, vals, context = self.cr, self.uid, self.vals, self.context |
||||
|
partner_id = self.partner_model.create(cr, uid, vals, context=context) |
||||
|
partner = self.partner_model.browse( |
||||
|
cr, uid, partner_id, context=context |
||||
|
) |
||||
|
# Creating the partner uses the name from the contact |
||||
|
self.assertEqual(partner.name, u'Astérix') |
||||
|
self.assertEqual(partner.lastname, u'Astérix') |
Write
Preview
Loading…
Cancel
Save
Reference in new issue