Skip to content

Commit

Permalink
Merge 13b460a into ab70f62
Browse files Browse the repository at this point in the history
  • Loading branch information
astirpe committed Nov 22, 2019
2 parents ab70f62 + 13b460a commit 3053870
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 7 deletions.
1 change: 1 addition & 0 deletions membership_extension/__manifest__.py
Expand Up @@ -10,6 +10,7 @@
"version": "12.0.1.0.2",
"category": "Membership",
"author": "Tecnativa, "
"Onestein, "
"Odoo Community Association (OCA)",
"website": "https://github.com/oca/vertical-association",
"license": "AGPL-3",
Expand Down
22 changes: 20 additions & 2 deletions membership_extension/models/membership_category.py
@@ -1,11 +1,29 @@
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2019 Onestein - Andrea Stirpe
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import models, fields
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError


class MembershipCategory(models.Model):
_name = "membership.membership_category"
_description = "Membership category"

name = fields.Char(required=True, translate=True)
company_id = fields.Many2one('res.company')

@api.constrains("company_id")
def _check_company_id(self):
if self.env.context.get("bypass_company_validation"):
return
categories = self.filtered(lambda c: c.company_id)
templates = self.env['product.template'].search([
('membership_category_id', 'in', categories.ids),
]).filtered(
lambda t: t.company_id != t.membership_category_id.company_id)
if templates:
raise ValidationError(_(
"You cannot change the Company, as this "
"Membership Category is used by Product Template (%s)."
) % fields.first(templates).name)
15 changes: 13 additions & 2 deletions membership_extension/models/product_template.py
@@ -1,5 +1,6 @@
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2019 Onestein - Andrea Stirpe
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from datetime import timedelta
from odoo import models, fields, api
Expand All @@ -10,7 +11,9 @@ class ProductTemplate(models.Model):

membership_category_id = fields.Many2one(
string="Membership category",
comodel_name='membership.membership_category')
comodel_name='membership.membership_category',
domain="['|',('company_id','=',False),('company_id','=',company_id)]",
)

@api.multi
def _get_next_date(self, date, qty=1):
Expand All @@ -19,3 +22,11 @@ def _get_next_date(self, date, qty=1):
date_to = fields.Date.from_string(self.membership_date_to)
return date_to + timedelta(1)
return False # pragma: no cover

@api.onchange('company_id')
def _onchange_company_id_compute_membership_category_id(self):
"""Reset the Membership Category in case a different Company is set"""
category_company = self.membership_category_id.company_id
if self.company_id and category_company:
if not category_company == self.company_id:
self.membership_category_id = False
1 change: 1 addition & 0 deletions membership_extension/readme/CONTRIBUTORS.rst
Expand Up @@ -4,3 +4,4 @@
* Rafael Blasco <rafael.blasco@tecnativa.com>
* Luis M. Ontalba <luis.martinez@tecnativa.com>
* Alberto Martín Cortada <alberto.martin@guadaltech.es>
* Andrea Stirpe <a.stirpe@onestein.nl>
7 changes: 7 additions & 0 deletions membership_extension/security/membership_security.xml
Expand Up @@ -12,4 +12,11 @@
<field name="category_id" ref="module_category_membership_management"/>
</record>

<record id="membership_category_comp_rule" model="ir.rule">
<field name="name">Membership Category Multi-company rule</field>
<field name="model_id" ref="model_membership_membership_category"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>

</odoo>
40 changes: 39 additions & 1 deletion membership_extension/tests/test_membership.py
@@ -1,10 +1,11 @@
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2017 David Vidal <david.vidal@tecnativa.com>
# Copyright 2019 Onestein - Andrea Stirpe
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from datetime import datetime, timedelta
from odoo import fields
from odoo.exceptions import UserError
from odoo.exceptions import UserError, ValidationError
from psycopg2 import IntegrityError
from odoo.tests import common
from odoo.tools import mute_logger
Expand Down Expand Up @@ -409,3 +410,40 @@ def test_adhered_member(self):
self.child.associate_member = False
self.child.onchange_associate_member()
self.assertFalse(self.child.is_adhered_member)

def test_category_multicompany(self):
company_a = self.env['res.company'].create({
'name': 'Test company A',
})
# Gold Membership Category cannot be assigned to Company A
with self.assertRaises(ValidationError):
self.category_gold.company_id = company_a

# force Gold Membership Category assignment to Company A
self.category_gold\
.with_context(bypass_company_validation=True)\
.company_id = company_a

# Company can be removed from any Membership Category
self.category_gold.company_id = False

# set all the product templates for Gold Membership to Company A
membership_0_product_template = self.env.ref(
'membership_extension.membership_0_product_template')
self.assertTrue(membership_0_product_template)
membership_0_product_template.company_id = company_a

product_tmpl_gold = self.gold_product.product_tmpl_id
product_tmpl_gold.company_id = company_a

# Gold Membership Category can now be assigned to Company A
self.category_gold.company_id = company_a

# test onchange
company_b = self.env['res.company'].create({
'name': 'Test company B',
})
self.assertTrue(product_tmpl_gold.membership_category_id)
product_tmpl_gold.company_id = company_b
product_tmpl_gold._onchange_company_id_compute_membership_category_id()
self.assertFalse(product_tmpl_gold.membership_category_id)
1 change: 1 addition & 0 deletions membership_extension/views/membership_category_view.xml
Expand Up @@ -16,6 +16,7 @@
<field name="arch" type="xml">
<tree string="Membership categories" editable="top">
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</field>
</record>
Expand Down
4 changes: 2 additions & 2 deletions membership_extension/views/product_template_view.xml
Expand Up @@ -19,8 +19,8 @@
<field name="model">product.template</field>
<field name="inherit_id" ref="membership.membership_products_form" />
<field name="arch" type="xml">
<field name="membership" position="after">
<field name="membership_category_id" />
<field name="company_id" position="after">
<field name="membership_category_id" context="{'default_company_id':company_id}"/>
</field>
</field>
</record>
Expand Down

0 comments on commit 3053870

Please sign in to comment.