Skip to content

Commit

Permalink
[MIG+IMP]website_account_fiscal_position_partner_type: Standard migra…
Browse files Browse the repository at this point in the history
…tion to 15.0, show fiscal position type in additional portal views
  • Loading branch information
manuelregidor committed Aug 24, 2023
1 parent efbf7d9 commit 9e82a50
Show file tree
Hide file tree
Showing 11 changed files with 229 additions and 3 deletions.
1 change: 1 addition & 0 deletions website_account_fiscal_position_partner_type/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import controllers
from . import models
8 changes: 6 additions & 2 deletions website_account_fiscal_position_partner_type/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

{
"name": "Website Account Fiscal Position Partner Type",
"version": "13.0.0.0.1",
"version": "15.0.1.0.0",
"category": "Website",
"website": "https://github.com/OCA/e-commerce",
"author": "Sygel Technology," "Odoo Community Association (OCA)",
Expand All @@ -12,5 +12,9 @@
"installable": True,
"development_status": "Beta",
"depends": ["account_fiscal_position_partner_type", "website_sale"],
"data": ["views/website_sale.xml"],
"data": [
"views/website_sale.xml",
"views/portal_templates.xml",
"views/auth_signup_login_templates.xml",
],
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import main
from . import portal
55 changes: 54 additions & 1 deletion website_account_fiscal_position_partner_type/controllers/main.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Copyright 2021 Valentin Vinagre <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from odoo import http
from odoo import _, http
from odoo.http import request

from odoo.addons.auth_signup.controllers.main import AuthSignupHome
from odoo.addons.website_sale.controllers.main import WebsiteSale


Expand All @@ -18,6 +19,39 @@ def values_postprocess(self, order, mode, values, errors, error_msg):
)
return new_values, errors, error_msg

def checkout_form_validate(self, mode, all_form_values, data):
old_context = request.context
request.context = dict(
request.context,
fiscal_position_type=all_form_values.get("fiscal_position_type"),
)
error, error_message = super().checkout_form_validate(
mode, all_form_values, data
)
request.context = old_context
if data.get("fiscal_position_type"):
partner_su = (
request.env["res.partner"]
.sudo()
.browse(int(data["partner_id"]))
.exists()
)
fiscal_position_type_change = (
partner_su
and "fiscal_position_type" in data
and data["fiscal_position_type"] != partner_su.fiscal_position_type
)
if fiscal_position_type_change and not partner_su.can_edit_vat():
error["fiscal_position_type"] = "error"
error_message.append(
_(
"Changing partner type is not allowed once invoices have "
"been issued for your account. Please contact us directly"
" for this operation."
)
)
return error, error_message

@http.route()
def address(self, **kw):
res = super(WebsiteSale, self).address(**kw)
Expand Down Expand Up @@ -49,3 +83,22 @@ def address(self, **kw):
}
)
return res


class AuthSignupHome(AuthSignupHome):
def get_auth_signup_qcontext(self):
qcontext = super().get_auth_signup_qcontext()
qcontext.update(
{k: v for (k, v) in request.params.items() if k in {"fiscal_position_type"}}
)
afp_obj = request.env["account.fiscal.position"].sudo()
qcontext["fiscpostypevalues"] = dict(
afp_obj._fields["fiscal_position_type"].selection
)
return qcontext

def _prepare_signup_values(self, qcontext):
values = super()._prepare_signup_values(qcontext)
if "fiscal_position_type" in qcontext:
values["fiscal_position_type"] = qcontext["fiscal_position_type"]
return values
44 changes: 44 additions & 0 deletions website_account_fiscal_position_partner_type/controllers/portal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Copyright 2023 Manuel Regidor <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from odoo import _
from odoo.http import request

from odoo.addons.portal.controllers.portal import CustomerPortal


class CustomerPortal(CustomerPortal):

CustomerPortal.OPTIONAL_BILLING_FIELDS += ["fiscal_position_type"]

def details_form_validate(self, data):
error, error_message = super().details_form_validate(data)
partner = request.env.user.partner_id
if (
not partner.can_edit_vat()
and "fiscal_position_type" in data
and data.get("fiscal_position_type") != partner.fiscal_position_type
):
error["fiscal_position_type"] = "error"
error_message.append(
_(
"Changing Partner Type is not allowed once document(s) have "
"been issued for your account. Please contact us directly for"
" this operation."
)
)
return error, error_message

def _prepare_portal_layout_values(self):
vals = super()._prepare_portal_layout_values()
afp_obj = request.env["account.fiscal.position"].sudo()
partner = request.env.user.partner_id
vals.update(
{
"fiscpostypevalues": dict(
afp_obj._fields["fiscal_position_type"].selection
),
"fiscal_position_type_selected": partner.fiscal_position_type,
}
)
return vals
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Copyright 2023 Manuel Regidor <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import res_users
from . import res_partner
15 changes: 15 additions & 0 deletions website_account_fiscal_position_partner_type/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2023 Manuel Regidor <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3).

from odoo import api, models


class Partner(models.Model):
_inherit = "res.partner"

@api.model
def signup_retrieve_info(self, token):
res = super().signup_retrieve_info(token)
partner = self._signup_retrieve_partner(token, raise_exception=True)
res.update({"fiscal_position_type_selected": partner.fiscal_position_type})
return res
29 changes: 29 additions & 0 deletions website_account_fiscal_position_partner_type/models/res_users.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright 2023 Manuel Regidor <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3).

from odoo import api, models


class ResUsers(models.Model):
_inherit = "res.users"

@api.model
def signup(self, values, token=None):
if token:
partner = self.env["res.partner"]._signup_retrieve_partner(
token, check_validity=True, raise_exception=True
)
partner_user = partner.user_ids and partner.user_ids[0] or False
# Don't update fiscal_position_type if partner related to user
# exists (i.e. when resetting password)
if partner_user:
values.pop("fiscal_position_type", None)
return super().signup(values, token)

def _create_user_from_template(self, values):
user = super()._create_user_from_template(values)
if user and user.partner_id and values.get("fiscal_position_type"):
user.partner_id.write(
{"fiscal_position_type": values.get("fiscal_position_type")}
)
return user
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2023 Manuel Regidor <[email protected]>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<template
id="website_account_fiscal_position_partner_type_auth_signup"
inherit_id="auth_signup.fields"
>
<xpath expr="//div[hasclass('field-password')]" position="before">
<div class="form-group field-fiscalpositiontype">
<label
class="col-form-label"
for="fiscal_position_type"
>Partner Type</label>
<select
id="fiscal_position_type"
name="fiscal_position_type"
class="form-control"
t-att-disabled="'1' if only_passwords else None"
>
<t t-foreach="fiscpostypevalues" t-as="fptv">
<option
t-att-selected="fiscal_position_type_selected == fptv"
t-att-value="fptv"
>
<t t-esc="fiscpostypevalues[fptv]" />
</option>
</t>
</select>
</div>
</xpath>
</template>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2023 Manuel Regidor <[email protected]>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<template
id="website_checkoout_second_lastname_portal_my_details"
inherit_id="portal.portal_my_details"
>
<xpath expr="//label[@for='vat']/.." position="after">
<div
t-attf-class="form-group #{error.get('fiscal_position_type') and 'o_has_error' or ''} col-xl-6"
>
<label
class="col-form-label"
for="fiscal_position_type"
>Partner Type</label>
<select
id="fiscal_position_type"
name="fiscal_position_type"
t-att-disabled="None if partner_can_edit_vat else '1'"
t-attf-class="form-control #{error.get('fiscal_position_type') and 'is-invalid' or ''}"
>
<t t-foreach="fiscpostypevalues" t-as="fptv">
<option
t-att-value="fptv"
t-att-selected="fiscal_position_type_selected == fptv"
>
<t t-esc="fiscpostypevalues[fptv]" />
</option>
</t>
</select>
</div>
</xpath>
</template>
</odoo>
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
id="fiscal_position_type"
name="fiscal_position_type"
class="form-control"
t-att-disabled="'1' if not can_edit_vat else None"
t-attf-class="form-control #{error.get('fiscal_position_type') and 'is-invalid' or ''}"
>
<t t-foreach="fiscpostypevalues" t-as="fptv">
<option
Expand Down

0 comments on commit 9e82a50

Please sign in to comment.