Skip to content

Commit

Permalink
[16.0][FIX] account_avatax_oca, skip exception raise on lines with no…
Browse files Browse the repository at this point in the history
…t product in display_type
  • Loading branch information
ChrisOForgeFlow committed Oct 8, 2024
1 parent 288a0b0 commit 34336f0
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 13 deletions.
1 change: 1 addition & 0 deletions account_avatax_oca/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from . import models
from . import wizard
from .hooks import pre_init_hook
from .hooks import post_load_hook
1 change: 1 addition & 0 deletions account_avatax_oca/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"website": "https://github.com/OCA/account-fiscal-rule",
"depends": ["sale_stock", "base_geolocalize"],
"pre_init_hook": "pre_init_hook",
"post_load": "post_load_hook",
"data": [
"security/avalara_salestax_security.xml",
"security/ir.model.access.csv",
Expand Down
87 changes: 87 additions & 0 deletions account_avatax_oca/hooks.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# Copyright (C) 2022 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import _, api
from odoo.tools import frozendict

from odoo.addons.account.models.account_move_line import AccountMoveLine


def pre_init_hook(cr):
# Preserve key data when moving from account_avatax to account_avatax_oca
Expand All @@ -13,3 +18,85 @@ def pre_init_hook(cr):
WHERE name in ('avatax_fiscal_position_us', 'account_avatax')
"""
)


def post_load_hook(): # noqa: C901
@api.depends(
"tax_ids",
"currency_id",
"partner_id",
"analytic_distribution",
"balance",
"partner_id",
"move_id.partner_id",
"price_unit",
"quantity",
)
def _compute_all_tax_new(self):
for line in self:
sign = line.move_id.direction_sign
if line.display_type == "tax":
line.compute_all_tax = {}
line.compute_all_tax_dirty = False
continue
if line.display_type == "product" and line.move_id.is_invoice(True):
amount_currency = sign * line.price_unit * (1 - line.discount / 100)
handle_price_include = True
quantity = line.quantity
else:
amount_currency = line.amount_currency
handle_price_include = False
quantity = 1
compute_all_currency = line.tax_ids.with_context(
current_aml=line.id
).compute_all(
amount_currency,
currency=line.currency_id,
quantity=quantity,
product=line.product_id,
partner=line.move_id.partner_id or line.partner_id,
is_refund=line.is_refund,
handle_price_include=handle_price_include,
include_caba_tags=line.move_id.always_tax_exigible,
fixed_multiplicator=sign,
)
rate = line.amount_currency / line.balance if line.balance else 1
line.compute_all_tax_dirty = True
line.compute_all_tax = {
frozendict(
{
"tax_repartition_line_id": tax["tax_repartition_line_id"],
"group_tax_id": tax["group"] and tax["group"].id or False,
"account_id": tax["account_id"] or line.account_id.id,
"currency_id": line.currency_id.id,
"analytic_distribution": (
(tax["analytic"] or not tax["use_in_tax_closing"])
and line.move_id.state == "draft"
)
and line.analytic_distribution,
"tax_ids": [(6, 0, tax["tax_ids"])],
"tax_tag_ids": [(6, 0, tax["tag_ids"])],
"partner_id": line.move_id.partner_id.id or line.partner_id.id,
"move_id": line.move_id.id,
"display_type": line.display_type,
}
): {
"name": tax["name"]
+ (" " + _("(Discount)") if line.display_type == "epd" else ""),
"balance": tax["amount"] / rate,
"amount_currency": tax["amount"],
"tax_base_amount": tax["base"]
/ rate
* (-1 if line.tax_tag_invert else 1),
}
for tax in compute_all_currency["taxes"]
if tax["amount"]
}
if not line.tax_repartition_line_id:
line.compute_all_tax[frozendict({"id": line.id})] = {
"tax_tag_ids": [(6, 0, compute_all_currency["base_tags"])],
}

if not hasattr(AccountMoveLine, "_compute_all_tax_origin"):
AccountMoveLine._compute_all_tax_origin = AccountMoveLine._compute_all_tax
AccountMoveLine._compute_all_tax = _compute_all_tax_new
39 changes: 26 additions & 13 deletions account_avatax_oca/models/account_tax.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,26 +82,39 @@ def compute_all(
fixed_multiplicator,
)
avatax_invoice = self.env.context.get("avatax_invoice")
current_aml = False
if "current_aml" in self.env.context:
current_aml = self.env["account.move.line"].browse(
self.env.context.get("current_aml")
)
if not (
current_aml.display_type == "product"
and current_aml.account_type != "asset_receivable"
):
avatax_invoice = False
if avatax_invoice:
# Find the Avatax amount in the invoice Lines
# Looks up the line for the current product, price_unit, and quantity
# Note that the price_unit used must consider discount
base = res["total_excluded"]
digits = 6
avatax_amount = None
for line in avatax_invoice.invoice_line_ids:
price_unit = line.currency_id._convert(
price_unit,
avatax_invoice.company_id.currency_id,
avatax_invoice.company_id,
avatax_invoice.date,
)
if (
line.product_id == product
and float_compare(line.quantity, quantity, digits) == 0
):
avatax_amount = copysign(line.avatax_amt_line, base)
break
if current_aml:
avatax_amount = copysign(current_aml.avatax_amt_line, base)
else:
for line in avatax_invoice.invoice_line_ids:
price_unit = line.currency_id._convert(
price_unit,
avatax_invoice.company_id.currency_id,
avatax_invoice.company_id,
avatax_invoice.date,
)
if (
line.product_id == product
and float_compare(line.quantity, quantity, digits) == 0
):
avatax_amount = copysign(line.avatax_amt_line, base)
break
if avatax_amount is None:
avatax_amount = 0.0
raise exceptions.UserError(
Expand Down

0 comments on commit 34336f0

Please sign in to comment.