diff options
| author | Yannick Tivisse <yti@odoo.com> | 2018-05-04 13:17:25 +0200 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2018-05-04 13:17:25 +0200 |
| commit | 2f15a5fa647d55df36c9019df467802a3aa9b4e3 (patch) | |
| tree | c16bf44774fc9bee5461878a8bdd2b8ec5ab0780 /odoo/addons/base | |
| parent | ec929342ebdeee0681fd044d45c48b99853a61b8 (diff) | |
[IMP] base: Add support for private addresses
Purpose
=======
Add the possibility to create private addresses, only accessible for a subset
of users.
Specification
=============
- Add a new 'Private' partner type
- Add a res.groups in base 'Access to Private Addresses'
- Add ir.rules for the following behavior:
- Every employees/internal users can read non-private addresses
- Only users in group_private_addresses can access private addresses
- Add in base a simplified form view for private addresses
- A HR Officer is automatically granted in group_private_addresses
- Use the simplified form view to open the address_home_id form on employees
Diffstat (limited to 'odoo/addons/base')
| -rw-r--r-- | odoo/addons/base/models/res_partner.py | 3 | ||||
| -rw-r--r-- | odoo/addons/base/models/res_users.py | 4 | ||||
| -rw-r--r-- | odoo/addons/base/security/base_groups.xml | 3 | ||||
| -rw-r--r-- | odoo/addons/base/security/base_security.xml | 31 | ||||
| -rw-r--r-- | odoo/addons/base/views/res_partner_views.xml | 44 | ||||
| -rw-r--r-- | odoo/addons/base/views/res_users_views.xml | 4 |
6 files changed, 88 insertions, 1 deletions
diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index 38f49b255a0..3b27dc81c28 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -177,7 +177,8 @@ class Partner(models.Model): [('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/models/res_users.py b/odoo/addons/base/models/res_users.py index 8664e70c556..a3c826eb532 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -231,6 +231,10 @@ class Users(models.Model): 'Contact Creation', compute='_compute_groups_id', inverse='_inverse_groups_id', group_xml_id='base.group_partner_manager') + has_group_private_addresses = fields.Boolean( + 'Access to Private Addresses', compute='_compute_groups_id', inverse='_inverse_groups_id', + group_xml_id='base.group_private_addresses') + _sql_constraints = [ ('login_key', 'UNIQUE (login)', 'You can not have two users with the same login !') ] diff --git a/odoo/addons/base/security/base_groups.xml b/odoo/addons/base/security/base_groups.xml index 863046f9c4e..a7e32bb1065 100644 --- a/odoo/addons/base/security/base_groups.xml +++ b/odoo/addons/base/security/base_groups.xml @@ -49,6 +49,9 @@ <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. diff --git a/odoo/addons/base/security/base_security.xml b/odoo/addons/base/security/base_security.xml index 8d03802aadf..4eeac276f83 100644 --- a/odoo/addons/base/security/base_security.xml +++ b/odoo/addons/base/security/base_security.xml @@ -30,6 +30,37 @@ <field name="perm_write" eval="False"/> </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> + <record model="ir.rule" id="ir_default_user_rule"> <field name="name">Defaults: alter personal defaults</field> <field name="model_id" ref="model_ir_default"/> diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml index a878b8c2994..28ad85b892a 100644 --- a/odoo/addons/base/views/res_partner_views.xml +++ b/odoo/addons/base/views/res_partner_views.xml @@ -391,6 +391,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/views/res_users_views.xml b/odoo/addons/base/views/res_users_views.xml index db9181ac2bf..4e7f9420839 100644 --- a/odoo/addons/base/views/res_users_views.xml +++ b/odoo/addons/base/views/res_users_views.xml @@ -205,6 +205,10 @@ <div> <field name='has_group_partner_manager' colspan="1" class="oe_inline"/> </div> + <label for="has_group_private_addresses" colspan="3"/> + <div> + <field name="has_group_private_addresses" colspan="1" class="oe_inline"/> + </div> </group> </page> <page string="Preferences"> |
