mirror of
https://github.com/bringout/oca-financial.git
synced 2026-04-26 17:42:04 +02:00
102 lines
4.1 KiB
Python
102 lines
4.1 KiB
Python
# 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
|
|
# The process is to first install account_avatax_oca
|
|
# and then uninstall account_avatax
|
|
cr.execute(
|
|
"""
|
|
UPDATE ir_model_data
|
|
SET module = 'account_avatax_oca'
|
|
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
|