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

[ADD] Moved generic tax fix to osi_addons repository. #959

Merged
merged 2 commits into from
Nov 7, 2024
Merged
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
23 changes: 23 additions & 0 deletions osi_downpayment_taxes/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

========
Overview
========

* Correct rounding issues on taxes calculated on down payments


=======
Credits
=======

* Open Source Integrators <http://www.opensourceintegrators.com>


Contributors
------------

* Tirth Patel <[email protected]>
* Raphael Lee <[email protected]>
1 change: 1 addition & 0 deletions osi_downpayment_taxes/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import wizards
18 changes: 18 additions & 0 deletions osi_downpayment_taxes/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "Sales Downpayment Tax Fixes",
"summary": "Extends Sales Downpayments to fix sales lines made for multiple tax rates",
"version": "17.0.1.0.0",
"license": "LGPL-3",
"author": "Open Source Integrators",
"maintainer": "Open Source Integrators",
"website": "https://github.com/ursais/osi-addons",
"category": "Accounting",
"depends": [
"account_accountant",
"sale",
],
"data": [],
"application": False,
"installable": True,
"auto_install": False,
}
1 change: 1 addition & 0 deletions osi_downpayment_taxes/wizards/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import sale_make_invoice_advance
61 changes: 61 additions & 0 deletions osi_downpayment_taxes/wizards/sale_make_invoice_advance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from odoo import models


class SaleAdvancePaymentInv(models.TransientModel):
_inherit = "sale.advance.payment.inv"

def _prepare_down_payment_lines_values(self, order):
"""Modify the original method to remove tax based down payment lines values
this means we always create only one DownPayment SO Line.
"""
self.ensure_one()

if self.advance_payment_method == "percentage":
percentage = self.amount / 100
else:
percentage = (
self.fixed_amount / order.amount_total if order.amount_total else 1
)

# Remove SO Lines that aare already linked with previous DownPayment Lines,
# and DP lines too.
base_downpayment_lines_values = self._prepare_base_downpayment_line_values(
order
)

order_lines = order.order_line.filtered(
lambda sol: not sol.display_type and not sol.is_downpayment
)

# We are skipping the tax calculation for the order_lines and splitting DP lines
# by Tax. We are also ignoring any tax present on the DP Product itself,
# maybe revisit this if needed. This ensures the amount in DP is correctly
# reflected from the SO Lines for which DP is created.
# Using price_total which includes price+tax-disc
order_amount_incl_tax = 0.0
for order_line in order_lines:
# The Delivery Product somehow has taxed amount in its price_total
# even when there is no tax applied.
if order_line.is_delivery and not order_line.tax_id:
order_amount_incl_tax += order_line.price_subtotal
else:
order_amount_incl_tax += order_line.price_total
# order_amount_incl_tax = sum(order_lines.mapped('price_total'))

analytic_distribution_order_lines = {}
for sol in order_lines.filtered(lambda ol: ol.analytic_distribution):
analytic_distribution_order_lines.update(sol.analytic_distribution)
base_downpayment_lines_values.update(
{
"price_unit": order.currency_id.round(
order_amount_incl_tax * percentage
),
"product_uom_qty": 0.0,
"discount": 0.0,
"analytic_distribution": analytic_distribution_order_lines,
}
)

# We skip the logic to split the lines based on taxes present on SO lines.

return [base_downpayment_lines_values]
Loading