diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py
index 489b2653474..695e3c4a73d 100644
--- a/openerp/addons/base/res/res_partner.py
+++ b/openerp/addons/base/res/res_partner.py
@@ -14,6 +14,7 @@ from odoo import api, fields, models, tools, _
from odoo.modules import get_module_resource
from odoo.osv.expression import get_unaccent_wrapper
from odoo.exceptions import UserError, ValidationError
+from odoo.osv.orm import browse_record
# Global variables used for the warning fields declared on the res.partner
# in the following modules : sale, purchase, account, stock
@@ -204,6 +205,9 @@ class Partner(models.Model, FormatAddress):
# technical field used for managing commercial fields
commercial_partner_id = fields.Many2one('res.partner', compute='_compute_commercial_partner',
string='Commercial Entity', store=True)
+ commercial_company_name = fields.Char('Company Name Entity', compute='_compute_commercial_company_name',
+ store=True)
+ company_name = fields.Char('Company Name')
# image: all image fields are base64 encoded and PIL-supported
image = fields.Binary("Image", attachment=True,
@@ -221,7 +225,7 @@ class Partner(models.Model, FormatAddress):
('check_name', "CHECK( (type='contact' AND name IS NOT NULL) or (type!='contact') )", 'Contacts require a name.'),
]
- @api.depends('is_company', 'name', 'parent_id.name', 'type')
+ @api.depends('is_company', 'name', 'parent_id.name', 'type', 'company_name')
def _compute_display_name(self):
diff = dict(show_address=None, show_address_only=None, show_email=None)
names = dict(self.with_context(**diff).name_get())
@@ -246,6 +250,12 @@ class Partner(models.Model, FormatAddress):
else:
partner.commercial_partner_id = partner.parent_id.commercial_partner_id
+ @api.depends('company_name', 'parent_id.is_company', 'commercial_partner_id.name')
+ def _compute_commercial_company_name(self):
+ for partner in self:
+ p = partner.commercial_partner_id
+ partner.commercial_company_name = p.is_company and p.name or partner.company_name
+
@api.model
def _get_default_image(self, partner_type, is_company, parent_id):
if getattr(threading.currentThread(), 'testing', False) or self._context.get('install_mode'):
@@ -469,6 +479,8 @@ class Partner(models.Model, FormatAddress):
# company)
if vals.get('website'):
vals['website'] = self._clean_website(vals['website'])
+ if vals.get('parent_id'):
+ vals['company_name'] = False
if vals.get('company_id'):
company = self.env['res.company'].browse(vals['company_id'])
for partner in self:
@@ -489,6 +501,8 @@ class Partner(models.Model, FormatAddress):
def create(self, vals):
if vals.get('website'):
vals['website'] = self._clean_website(vals['website'])
+ if vals.get('parent_id'):
+ vals['company_name'] = False
# compute default image in create, because computing gravatar in the onchange
# cannot be easily performed if default images are in the way
if not vals.get('image'):
@@ -499,6 +513,21 @@ class Partner(models.Model, FormatAddress):
partner._handle_first_contact_creation()
return partner
+ @api.multi
+ def create_company(self):
+ self.ensure_one()
+ if self.company_name:
+ # Create parent company
+ values = dict(name=self.company_name, is_company=True)
+ values.update(self._update_fields_values(self._address_fields()))
+ new_company = self.create(values)
+ # Set new company as my parent
+ self.write({
+ 'parent_id': new_company.id,
+ 'child_ids': [(1, partner_id, dict(parent_id=new_company.id)) for partner_id in self.child_ids.ids]
+ })
+ return True
+
@api.multi
def open_commercial_entity(self):
""" Utility method used to add an "Open Company" button in partner views """
@@ -528,10 +557,12 @@ class Partner(models.Model, FormatAddress):
res = []
for partner in self:
name = partner.name or ''
- if partner.parent_id and not partner.is_company:
+
+ if partner.commercial_company_name:
if not name and partner.type in ['invoice', 'delivery', 'other']:
name = dict(self.fields_get(['type'])['type']['selection'])[partner.type]
- name = "%s, %s" % (partner.parent_name, name)
+ if not partner.is_company:
+ name = "%s, %s" % (partner.commercial_company_name, name)
if self._context.get('show_address_only'):
name = partner._display_address(without_company=True)
if self._context.get('show_address'):
@@ -741,13 +772,13 @@ class Partner(models.Model, FormatAddress):
'state_name': self.state_id.name or '',
'country_code': self.country_id.code or '',
'country_name': self.country_id.name or '',
- 'company_name': self.parent_name or '',
+ 'company_name': self.commercial_company_name or '',
}
for field in self._address_fields():
args[field] = getattr(self, field) or ''
if without_company:
args['company_name'] = ''
- elif self.parent_id:
+ elif self.commercial_company_name:
address_format = '%(company_name)s\n' + address_format
return address_format % args
@@ -755,5 +786,5 @@ class Partner(models.Model, FormatAddress):
# field dependencies of method _display_address()
return self._address_fields() + [
'country_id.address_format', 'country_id.code', 'country_id.name',
- 'parent_id.name', 'state_id.code', 'state_id.name',
+ 'company_name', 'state_id.code', 'state_id.name',
]
diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml
index 352dc09b52e..8537660e16d 100644
--- a/openerp/addons/base/res/res_partner_view.xml
+++ b/openerp/addons/base/res/res_partner_view.xml
@@ -150,7 +150,10 @@
+ attrs="{'invisible': ['|', '&', ('is_company','=', True),('parent_id', '=', False),('display_company_name', '!=', False),('display_company_name', '!=', '')]}"/>
+
+
+