diff --git a/cooperator/models/subscription_request.py b/cooperator/models/subscription_request.py index 603f3f5f4..ee44004e1 100644 --- a/cooperator/models/subscription_request.py +++ b/cooperator/models/subscription_request.py @@ -115,18 +115,6 @@ def _adapt_create_vals_and_membership_from_partner(self, vals, partner): company_id = vals.get("company_id", self.env.company.id) company_id = self.env["res.company"].browse(company_id) cooperative_membership = partner.get_cooperative_membership(company_id) - member = cooperative_membership and cooperative_membership.member - pending_requests_domain = [ - ("company_id", "=", company_id.id), - ("partner_id", "=", partner.id), - ("state", "in", ("draft", "waiting", "done")), - ] - # we don't use partner.coop_candidate because we want to also - # handle draft and waiting requests. - if member or self.search(pending_requests_domain): - vals["type"] = "increase" - if member: - vals["already_cooperator"] = True if not cooperative_membership: cooperative_membership = partner.create_cooperative_membership(company_id) elif not cooperative_membership.cooperator: @@ -170,6 +158,18 @@ def _compute_name(self): if part ) + @api.depends("partner_id.member") + def _compute_type(self): + for sub_request in self: + if sub_request.partner_id: + sub_request.already_cooperator = sub_request.partner_id.member + sub_request.type = ( + "increase" if sub_request.partner_id.member else "new" + ) + else: + sub_request.already_cooperator = False + sub_request.type = "new" + @api.depends("iban", "skip_iban_control") def _compute_is_valid_iban(self): for sub_request in self: @@ -185,10 +185,12 @@ def _compute_subscription_amount(self): sub_request.share_product_id.list_price * sub_request.ordered_parts ) + # The field is technically kind of superfluous, but it's also handy as a + # shorthand. already_cooperator = fields.Boolean( - string="I'm already cooperator", + string="Already a cooperator", readonly=True, - states={"draft": [("readonly", False)]}, + compute="_compute_type", ) # previously, this was a normal field. it is now computed, and is used for @@ -222,11 +224,13 @@ def _compute_subscription_amount(self): type = fields.Selection( [ ("new", "New Cooperator"), - ("increase", "Increase number of share"), + ("increase", "Increase number of shares"), ], + string="Type of Subscription", + compute="_compute_type", default="new", + required=True, readonly=True, - states={"draft": [("readonly", False)]}, ) state = fields.Selection( [ @@ -252,13 +256,13 @@ def _compute_subscription_amount(self): states={"draft": [("readonly", False)]}, ) iban = fields.Char( - string="Account Number", + string="Bank Account Number", readonly=True, states={"draft": [("readonly", False)]}, ) partner_id = fields.Many2one( "res.partner", - string="Cooperator", + string="Existing Contact", readonly=True, states={"draft": [("readonly", False)]}, ) @@ -478,7 +482,6 @@ def _compute_subscription_amount(self): def get_person_info(self, partner): self.firstname = partner.firstname - self.name = partner.name self.lastname = partner.lastname self.email = partner.email self.birthdate = partner.birthdate_date @@ -495,11 +498,8 @@ def onchange_partner(self): partner = self.partner_id if partner: self.is_company = partner.is_company - self.already_cooperator = partner.member if partner.bank_ids: self.iban = partner.bank_ids[0].acc_number - if partner.member: - self.type = "increase" if partner.is_company: self.company_name = partner.name self.company_email = partner.email @@ -742,14 +742,7 @@ def _find_or_create_partner(self): if partner: return partner domain = [] - if self.already_cooperator: - raise UserError( - _( - "The checkbox already cooperator is" - " checked please select a cooperator." - ) - ) - elif self.is_company and self.company_register_number: + if self.is_company and self.company_register_number: domain = [ ( "company_register_number", diff --git a/cooperator/tests/test_cooperator.py b/cooperator/tests/test_cooperator.py index a628a3b3f..a97d21e5a 100644 --- a/cooperator/tests/test_cooperator.py +++ b/cooperator/tests/test_cooperator.py @@ -9,7 +9,7 @@ from odoo import fields from odoo.exceptions import AccessError, UserError, ValidationError -from odoo.tests.common import TransactionCase, users +from odoo.tests.common import Form, TransactionCase, users from .cooperator_test_mixin import CooperatorTestMixin @@ -290,8 +290,8 @@ def test_create_subscription_from_non_cooperator_company_partner(self): def test_create_multiple_subscriptions_from_non_cooperator_partner(self): """ - Test that creating a subscription from a partner that has no parts yet - creates a subscription request with the correct type. + Test that creating a subscription from a partner is not member yet + creates a subscription request with type 'new'. """ partner = self.env["res.partner"].create( { @@ -301,12 +301,12 @@ def test_create_multiple_subscriptions_from_non_cooperator_partner(self): subscription_request = self.create_dummy_subscription_from_partner(partner) self.assertEqual(subscription_request.type, "new") subscription_request2 = self.create_dummy_subscription_from_partner(partner) - self.assertEqual(subscription_request2.type, "increase") + self.assertEqual(subscription_request2.type, "new") def test_create_multiple_subscriptions_from_non_cooperator_company_partner(self): """ - Test that creating a subscription from a company partner that has no - parts yet creates a subscription request with the correct type. + Test that creating a subscription from a company partner is not member yet + creates a subscription request with the type 'new'. """ partner = self.env["res.partner"].create( { @@ -321,7 +321,7 @@ def test_create_multiple_subscriptions_from_non_cooperator_company_partner(self) subscription_request2 = self.create_dummy_subscription_from_company_partner( partner ) - self.assertEqual(subscription_request2.type, "increase") + self.assertEqual(subscription_request2.type, "new") def test_create_subscription_from_cooperator_partner(self): """ @@ -892,6 +892,61 @@ def test_existing_partner_company_dependent_fields_with_membership(self): cooperative_membership.generic_rules_approved, ) + def test_partner_existing(self): + """ + Test that selecting an existing partner automatically changes certain + fields to default values. + """ + partner = self.env["res.partner"].create( + { + "firstname": "Test", + "lastname": "Partner", + "email": "test@example.com", + "birthdate_date": "2018-01-01", + "gender": "other", + "street": "Example Street 1", + "city": "Brussels", + "zip": "1000", + "country_id": self.env.ref("base.be").id, + "phone": "1234", + "lang": "en_US", + } + ) + partner.create_cooperative_membership(self.env.company) + partner.member = True + with Form(self.env["subscription.request"]) as request_form: + self.assertEqual(request_form.type, "new") + request_form.partner_id = partner + self.assertEqual(request_form.type, "increase") + self.assertEqual(request_form.firstname, partner.firstname) + self.assertEqual(request_form.lastname, partner.lastname) + self.assertEqual(request_form.email, partner.email) + self.assertEqual(request_form.birthdate, partner.birthdate_date) + self.assertEqual(request_form.gender, partner.gender) + self.assertEqual(request_form.address, partner.street) + self.assertEqual(request_form.city, partner.city) + self.assertEqual(request_form.zip_code, partner.zip) + self.assertEqual(request_form.country_id, partner.country_id) + self.assertEqual(request_form.phone, partner.phone) + self.assertEqual(request_form.lang, partner.lang) + + # This is to make sure that the form can be saved. + request_form.share_product_id = self.share_x + + def test_constrain_type_if_already_cooperator(self): + """ + If a partner is already a cooperator, check that type is 'increase' + """ + partner = self.env["res.partner"].create({"name": "Test Partner"}) + partner.create_cooperative_membership(self.env.company) + partner.member = True + vals = self.get_dummy_subscription_requests_vals() + subscription_request = self.env["subscription.request"].create(vals) + subscription_request.partner_id = partner + self.assertTrue(subscription_request.already_cooperator) + self.assertEqual(subscription_request.type, "increase") + subscription_request.validate_subscription_request() + @freeze_time("2023-06-21") def test_partner_company_dependent_fields_with_membership(self): """ diff --git a/cooperator/views/subscription_request_view.xml b/cooperator/views/subscription_request_view.xml index 6337c6e6b..2d367854d 100644 --- a/cooperator/views/subscription_request_view.xml +++ b/cooperator/views/subscription_request_view.xml @@ -97,10 +97,13 @@ SPDX-License-Identifier: AGPL-3.0-or-later attrs="{'invisible': [('active', '=', True)]}" /> + - - + + + + + + @@ -143,26 +148,21 @@ SPDX-License-Identifier: AGPL-3.0-or-later + - - - - - + - + - - - - + + @@ -177,6 +177,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later groups="!base.group_multi_company" invisible="True" /> + + diff --git a/cooperator_website/controllers/main.py b/cooperator_website/controllers/main.py index 96539bc5d..b05fd3520 100644 --- a/cooperator_website/controllers/main.py +++ b/cooperator_website/controllers/main.py @@ -138,8 +138,6 @@ def get_values_from_user(self, values, is_company): values["logged"] = "on" partner = request.env.user.partner_id - if partner.member or partner.old_member: - values["already_cooperator"] = "on" if partner.bank_ids: values["iban"] = partner.bank_ids[0].acc_number values["address"] = partner.street @@ -426,15 +424,6 @@ def share_subscription(self, **kwargs): # noqa: C901 (method too complex) if response is not True: return response - already_coop = False - if logged: - partner = request.env.user.partner_id - values["partner_id"] = partner.id - already_coop = partner.member - elif kwargs.get("already_cooperator") == "on": - already_coop = True - - values["already_cooperator"] = already_coop values["is_company"] = is_company if kwargs.get("data_policy_approved", "off") == "on": diff --git a/cooperator_website/views/subscription_template.xml b/cooperator_website/views/subscription_template.xml index e914e4ecc..df1188301 100644 --- a/cooperator_website/views/subscription_template.xml +++ b/cooperator_website/views/subscription_template.xml @@ -416,20 +416,6 @@ SPDX-License-Identifier: AGPL-3.0-or-later Logged -