diff --git a/addons/mass_mailing/models/mail_mail.py b/addons/mass_mailing/models/mail_mail.py
index 9d1fa377b83..f2f6ffd7592 100644
--- a/addons/mass_mailing/models/mail_mail.py
+++ b/addons/mass_mailing/models/mail_mail.py
@@ -92,9 +92,9 @@ class MailMail(models.Model):
emails = tools.email_split(res.get('email_to')[0])
email_to = emails and emails[0] or False
unsubscribe_url = self._get_unsubscribe_url(email_to)
- link_to_replace = base_url + '/unsubscribe_from_list'
+ regex_link_to_replace = re.escape(base_url) + '(/[a-z]{2}_[A-Z]{2})?' + '/unsubscribe_from_list'
if link_to_replace in res['body']:
- res['body'] = res['body'].replace(link_to_replace, unsubscribe_url if unsubscribe_url else '#')
+ res['body'] = res['body'].replace(regex_link_to_replace, unsubscribe_url if unsubscribe_url else '#')
return res
@api.multi
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index dc158c76226..9399d74c760 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -88,7 +88,7 @@ class PurchaseReport(models.Model):
join res_partner partner on s.partner_id = partner.id
left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id)
- LEFT JOIN ir_property ip ON (ip.name='standard_price' AND ip.res_id=CONCAT('product.template,',t.id) AND ip.company_id=s.company_id)
+ LEFT JOIN ir_property ip ON (ip.name='standard_price' AND ip.res_id=CONCAT('product.product,',p.id) AND ip.company_id=s.company_id)
left join product_uom u on (u.id=l.product_uom)
left join product_uom u2 on (u2.id=t.uom_id)
left join stock_picking_type spt on (spt.id=s.picking_type_id)
diff --git a/odoo/addons/base/res/res_partner.py b/odoo/addons/base/res/res_partner.py
index df7cc6660fe..2f47cf925d0 100644
--- a/odoo/addons/base/res/res_partner.py
+++ b/odoo/addons/base/res/res_partner.py
@@ -180,7 +180,9 @@ class Partner(models.Model, FormatAddress):
[('contact', 'Contact'),
('invoice', 'Invoice address'),
('delivery', 'Shipping address'),
- ('other', 'Other address')], string='Address Type',
+ ('other', 'Other address'),
+ ("private", "Private Address"),
+ ], string='Address Type',
default='contact',
help="Used to select automatically the right address according to the context in sales and purchases documents.")
street = fields.Char()
diff --git a/odoo/addons/base/res/res_partner_view.xml b/odoo/addons/base/res/res_partner_view.xml
index 2ce80912386..853afc59248 100644
--- a/odoo/addons/base/res/res_partner_view.xml
+++ b/odoo/addons/base/res/res_partner_view.xml
@@ -322,6 +322,50 @@
+
+
+ res.partner.view.form.private
+ res.partner
+
+
+
+
+
+
res.partner.select
res.partner
diff --git a/odoo/addons/base/security/base_security.xml b/odoo/addons/base/security/base_security.xml
index 6bbc547c918..ff22b286ac9 100644
--- a/odoo/addons/base/security/base_security.xml
+++ b/odoo/addons/base/security/base_security.xml
@@ -49,6 +49,10 @@
+
+ Access to Private Addresses
+
+
+
+ res.partner.rule.private.employee
+
+
+ [('type', '!=', 'private')]
+
+
+
+
+
+
+
+
+
+ res.partner.rule.private.group
+
+
+ [('type', '=', 'private')]
+
+
+
+
+
+
+
+