Skip to content

Commit

Permalink
[ADD] Moved generic tax fix to osi_addons repository.
Browse files Browse the repository at this point in the history
  • Loading branch information
b-kannan committed Oct 14, 2024
1 parent ed39899 commit 4ce14d6
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
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
16 changes: 16 additions & 0 deletions osi_downpayment_taxes/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "Sales Downpayment Tax Fixes",
"summary": "Extends Sales Downpayments to fix sales lines made for multiple tax rates",
"version": "17.0.1.0.0",
"author": "Open Source Integrators",
"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
51 changes: 51 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,51 @@
from odoo import models, api, fields, _
from odoo.tools import frozendict

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 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.
# 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]

0 comments on commit 4ce14d6

Please sign in to comment.