Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMP] cooperator[_website]: Improve form #116

Open
wants to merge 12 commits into
base: 16.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 23 additions & 30 deletions cooperator/models/subscription_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -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(
[
Expand All @@ -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)]},
)
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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",
Expand Down
69 changes: 62 additions & 7 deletions cooperator/tests/test_cooperator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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(
{
Expand All @@ -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(
{
Expand All @@ -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):
"""
Expand Down Expand Up @@ -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):
"""
Expand Down
32 changes: 17 additions & 15 deletions cooperator/views/subscription_request_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,13 @@ SPDX-License-Identifier: AGPL-3.0-or-later
attrs="{'invisible': [('active', '=', True)]}"
/>
<field name="active" invisible="True" />
<field name="is_valid_iban" invisible="True" />
<group>
<group>
<field name="is_valid_iban" invisible="True" />
<field name="already_cooperator" />
<field name="partner_id" options="{'no_create':True}" />
<field name="type" />
</group>
<group string="Company Details">
<field
name="is_company"
groups="cooperator.cooperator_group_manager"
Expand All @@ -127,6 +130,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later
name="company_register_number"
attrs="{'invisible': [('is_company', '=', False)], 'required': [('is_company', '=', True)]}"
/>
</group>
<group string="Contact Details">
<field name="firstname" />
<field name="lastname" />
<field name="birthdate" />
Expand All @@ -143,26 +148,21 @@ SPDX-License-Identifier: AGPL-3.0-or-later
<field name="zip_code" />
<field name="city" />
<field name="country_id" options="{'no_create':True}" />
<field name="lang" />
</group>
<group>
<field
name="capital_release_request_date"
groups="cooperator.cooperator_group_manager"
/>
<field name="date" />
<field name="source" />
<field name="ordered_parts" />
<group string="Subscription Information">
<field
name="share_product_id"
options="{'no_create':True}"
/>
<field name="share_short_name" />
<field name="ordered_parts" />
<field name="share_unit_price" />
<field name="subscription_amount" />
<field name="partner_id" options="{'no_create':True}" />
<field name="type" />
<field name="lang" />
<field name="skip_iban_control" />
<field name="date" />
<field
name="capital_release_request_date"
groups="cooperator.cooperator_group_manager"
/>
<field name="internal_rules_approved" />
<field name="data_policy_approved" />
<field name="financial_risk_approved" />
Expand All @@ -177,6 +177,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later
groups="!base.group_multi_company"
invisible="True"
/>
<field name="source" />
<field name="skip_iban_control" />
</group>
</group>
<notebook>
Expand Down
11 changes: 0 additions & 11 deletions cooperator_website/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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":
Expand Down
14 changes: 0 additions & 14 deletions cooperator_website/views/subscription_template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -416,20 +416,6 @@ SPDX-License-Identifier: AGPL-3.0-or-later
Logged
</label>
</div>
<div
class="mb-3"
style="display: none;"
name="already_cooperator_container"
>
<label>
<input
type="checkbox"
t-att-checked="already_cooperator"
name="already_cooperator"
/>
Are you already a cooperator?
</label>
</div>
<t t-out="0" />
<div class="mt-3 mb-3 text-center">
<button class="btn btn-primary">Send</button>
Expand Down
Loading