Skip to content

Commit

Permalink
[REF] pre-commit
Browse files Browse the repository at this point in the history
  • Loading branch information
RLeeOSI committed Nov 7, 2024
1 parent 629a8d9 commit 34fcd09
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 31 deletions.
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]>
14 changes: 8 additions & 6 deletions osi_downpayment_taxes/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,16 +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": [
"account_accountant",
"sale",
],
"data": [],
"application": False,
"installable": True,
"auto_install": False
"auto_install": False,
}
60 changes: 35 additions & 25 deletions osi_downpayment_taxes/wizards/sale_make_invoice_advance.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,60 @@
from odoo import models, api, fields, _
from odoo.tools import frozendict

class SaleAdvancePaymentInv(models.TransientModel):
_inherit = 'sale.advance.payment.inv'
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
"""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':
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 skiping 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.
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.
# 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,
})
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.

Expand Down

0 comments on commit 34fcd09

Please sign in to comment.