summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-05-24 16:31:23 +0200
committerChristophe Simonis <chs@odoo.com>2018-05-24 16:31:23 +0200
commit299b613da355a94a33f0db1bbe7820fe6e8fd8f1 (patch)
tree7c7eabe02ad9e231d1c17469cde278624d64149a
parent682ae1cc64e663ef46464083e86916106434d716 (diff)
parent919a1af93601f3873b78c755575cf0486da24e4e (diff)
[MERGE] forward port branch 9.0 up to 919a1af9360
-rw-r--r--addons/mass_mailing/models/mail_mail.py4
-rw-r--r--addons/purchase/report/purchase_report.py2
-rw-r--r--odoo/addons/base/res/res_partner.py4
-rw-r--r--odoo/addons/base/res/res_partner_view.xml44
-rw-r--r--odoo/addons/base/security/base_security.xml35
5 files changed, 85 insertions, 4 deletions
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 @@
</field>
</record>
+ <!-- Special restricted view for private address, with limited "named" info that
+ can be traced back to the employee -->
+ <record id="res_partner_view_form_private" model="ir.ui.view">
+ <field name="name">res.partner.view.form.private</field>
+ <field name="model">res.partner</field>
+ <field name="priority" eval="300"/>
+ <field name="arch" type="xml">
+ <form string="Private Address Form">
+ <sheet>
+ <field name="type" invisible="1"/>
+ <label for="name" class="oe_editonly"/>
+ <field name="name" required="0"/>
+ <group>
+ <group>
+ <label for="street" string="Address"/>
+ <div>
+ <div class="o_address_format" name="div_address">
+ <field name="street" placeholder="Street..." class="o_address_street"/>
+ <field name="street2" placeholder="Street 2..." class="o_address_street"/>
+ <field name="city" placeholder="City" class="o_address_city"/>
+ <field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}' context="{'country_id': country_id, 'zip': zip}"/>
+ <field name="zip" placeholder="ZIP" class="o_address_zip"/>
+ <field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
+ </div>
+ </div>
+ </group>
+ <group>
+ <field name="phone" widget="phone"/>
+ <field name="mobile" widget="phone"/>
+ <field name="email"/>
+ </group>
+ </group>
+ <group string="Bank Accounts">
+ <field name="bank_ids">
+ <tree editable="bottom">
+ <field name="acc_number"/>
+ </tree>
+ </field>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
<record id="view_res_partner_filter" model="ir.ui.view">
<field name="name">res.partner.select</field>
<field name="model">res.partner</field>
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 @@
<field name="groups_id" eval="[(4,ref('base.group_partner_manager'))]"/>
</record>
+ <record id="group_private_addresses" model="res.groups">
+ <field name="name">Access to Private Addresses</field>
+ </record>
+
<!--
A group dedicated to the portal users, making groups
restrictions more convenient.
@@ -143,6 +147,37 @@
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
+ <!-- Security restriction for private addresses -->
+ <record id="res_partner_rule_private_employee" model="ir.rule">
+ <field name="name">res.partner.rule.private.employee</field>
+ <field name="model_id" ref="base.model_res_partner"/>
+ <field name="domain_force">
+ [('type', '!=', 'private')]
+ </field>
+ <field name="groups" eval="[
+ (4, ref('base.group_user')),
+ ]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_unlink" eval="False"/>
+ </record>
+ <!-- Relex previous rule for group_private_addresses -->
+ <record id="res_partner_rule_private_group" model="ir.rule">
+ <field name="name">res.partner.rule.private.group</field>
+ <field name="model_id" ref="base.model_res_partner"/>
+ <field name="domain_force">
+ [('type', '=', 'private')]
+ </field>
+ <field name="groups" eval="[
+ (4, ref('base.group_private_addresses'))
+ ]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_unlink" eval="False"/>
+ </record>
+
</data>
</odoo>