From 59b38f2abe4bc144febb965ec4f7ac46f0e4ede3 Mon Sep 17 00:00:00 2001 From: RisvanaCybro Date: Mon, 3 Jun 2024 15:23:38 +0530 Subject: [PATCH] Jun 03: [FIX] Bug Fixed 'sale_discount_total' --- sale_discount_total/__manifest__.py | 20 ++--- sale_discount_total/doc/RELEASE_NOTES.md | 7 +- sale_discount_total/models/__init__.py | 2 +- sale_discount_total/models/account_invoice.py | 75 +++++++++++-------- .../models/discount_approval.py | 2 +- .../models/{sale.py => sale_order.py} | 1 - sale_discount_total/reports/invoice_report.py | 6 +- ...ice_view.xml => account_invoice_views.xml} | 16 +--- sale_discount_total/views/invoice_report.xml | 3 +- ...s_config_view.xml => res_config_views.xml} | 3 +- .../views/sale_order_report.xml | 3 +- .../views/sale_order_templates.xml | 13 ++++ .../{sale_view.xml => sale_order_view.xml} | 4 +- 13 files changed, 83 insertions(+), 72 deletions(-) rename sale_discount_total/models/{sale.py => sale_order.py} (99%) rename sale_discount_total/views/{account_invoice_view.xml => account_invoice_views.xml} (62%) rename sale_discount_total/views/{res_config_view.xml => res_config_views.xml} (96%) create mode 100644 sale_discount_total/views/sale_order_templates.xml rename sale_discount_total/views/{sale_view.xml => sale_order_view.xml} (98%) diff --git a/sale_discount_total/__manifest__.py b/sale_discount_total/__manifest__.py index a4d5f2fd1..1b2ffb458 100644 --- a/sale_discount_total/__manifest__.py +++ b/sale_discount_total/__manifest__.py @@ -22,7 +22,7 @@ { 'name': 'Sale Discount on Total Amount', - 'version': '14.0.1.1.0', + 'version': '14.0.1.2.0', 'category': 'Sales Management', 'live_test_url': 'https://www.youtube.com/watch?v=CigmHe9iC4s&feature=youtu.be', 'summary': "Discount on Total in Sale and Invoice With Discount Limit and Approval", @@ -32,20 +32,22 @@ 'description': """ Sale Discount for Total Amount -======================= +============================== Module to manage discount on total amount in Sale. as an specific amount or percentage """, - 'depends': ['sale', - 'account', 'delivery' - ], + 'depends': [ + 'sale', + 'account', + 'delivery' + ], 'data': [ - 'views/sale_view.xml', - 'views/account_invoice_view.xml', + 'views/sale_order_view.xml', + 'views/account_invoice_views.xml', 'views/invoice_report.xml', 'views/sale_order_report.xml', - 'views/res_config_view.xml', - + 'views/res_config_views.xml', + 'views/sale_order_templates.xml', ], 'images': ['static/description/banner.png'], 'license': 'AGPL-3', diff --git a/sale_discount_total/doc/RELEASE_NOTES.md b/sale_discount_total/doc/RELEASE_NOTES.md index 10e852416..31705a170 100644 --- a/sale_discount_total/doc/RELEASE_NOTES.md +++ b/sale_discount_total/doc/RELEASE_NOTES.md @@ -1,4 +1,4 @@ -## Module +## Module #### 08.10.2020 #### Version 14.0.1.0.0 @@ -10,5 +10,8 @@ Initial commit for Sale Discount On Total Amount #### FIX discount roundoff - +#### 02.02.2024 +#### Version 14.0.1.2.0 +#### FIX +discount roundoff in website diff --git a/sale_discount_total/models/__init__.py b/sale_discount_total/models/__init__.py index 695e03083..97cb06139 100644 --- a/sale_discount_total/models/__init__.py +++ b/sale_discount_total/models/__init__.py @@ -19,7 +19,7 @@ # If not, see . # ############################################################################# -from . import sale +from . import sale_order from . import account_invoice from . import discount_approval diff --git a/sale_discount_total/models/account_invoice.py b/sale_discount_total/models/account_invoice.py index 971600e3b..7d6fab87d 100644 --- a/sale_discount_total/models/account_invoice.py +++ b/sale_discount_total/models/account_invoice.py @@ -60,14 +60,11 @@ class AccountInvoice(models.Model): total = 0.0 total_currency = 0.0 currencies = set() - for line in move.line_ids: if line.currency_id: currencies.add(line.currency_id) - if move.is_invoice(include_receipts=True): # === Invoices === - if not line.exclude_from_invoice_tab: # Untaxed amount. total_untaxed += line.balance @@ -80,7 +77,8 @@ class AccountInvoice(models.Model): total_tax_currency += line.amount_currency total += line.balance total_currency += line.amount_currency - elif line.account_id.user_type_id.type in ('receivable', 'payable'): + elif line.account_id.user_type_id.type in ( + 'receivable', 'payable'): # Residual amount. total_to_pay += line.balance total_residual += line.amount_residual @@ -96,51 +94,67 @@ class AccountInvoice(models.Model): else: sign = -1 if move.discount_type == 'percent': - move.amount_discount = sum((line.quantity * line.price_unit * line.discount) / 100 for line in move.invoice_line_ids) + move.amount_discount = sum( + (line.quantity * line.price_unit * line.discount) / 100 for + line in move.invoice_line_ids) else: move.amount_discount = move.discount_rate - move.amount_untaxed = sign * (total_untaxed_currency if len(currencies) == 1 else total_untaxed) - move.amount_tax = sign * (total_tax_currency if len(currencies) == 1 else total_tax) - move.amount_total = sign * (total_currency if len(currencies) == 1 else total) - move.amount_residual = -sign * (total_residual_currency if len(currencies) == 1 else total_residual) + move.amount_untaxed = sign * (total_untaxed_currency if len( + currencies) == 1 else total_untaxed) + move.amount_tax = sign * ( + total_tax_currency if len(currencies) == 1 else total_tax) + move.amount_total = sign * ( + total_currency if len(currencies) == 1 else total) + move.amount_residual = -sign * (total_residual_currency if len( + currencies) == 1 else total_residual) move.amount_untaxed_signed = -total_untaxed move.amount_tax_signed = -total_tax - move.amount_total_signed = abs(total) if move.move_type == 'entry' else -total + move.amount_total_signed = abs( + total) if move.move_type == 'entry' else -total move.amount_residual_signed = total_residual - - currency = len(currencies) == 1 and currencies.pop() or move.company_id.currency_id - + currency = len( + currencies) == 1 and currencies.pop() or move.company_id.currency_id # Compute 'payment_state'. new_pmt_state = 'not_paid' if move.move_type != 'entry' else False - - if move.is_invoice(include_receipts=True) and move.state == 'posted': - + if move.is_invoice( + include_receipts=True) and move.state == 'posted': if currency.is_zero(move.amount_residual): - if all(payment.is_matched for payment in move._get_reconciled_payments()): + if all(payment.is_matched for payment in + move._get_reconciled_payments()): new_pmt_state = 'paid' else: new_pmt_state = move._get_invoice_in_payment_state() - elif currency.compare_amounts(total_to_pay, total_residual) != 0: + elif currency.compare_amounts(total_to_pay, + total_residual) != 0: new_pmt_state = 'partial' - - if new_pmt_state == 'paid' and move.move_type in ('in_invoice', 'out_invoice', 'entry'): + if new_pmt_state == 'paid' and move.move_type in ( + 'in_invoice', 'out_invoice', 'entry'): reverse_type = move.move_type == 'in_invoice' and 'in_refund' or move.move_type == 'out_invoice' and 'out_refund' or 'entry' reverse_moves = self.env['account.move'].search( - [('reversed_entry_id', '=', move.id), ('state', '=', 'posted'), ('move_type', '=', reverse_type)]) - + [('reversed_entry_id', '=', move.id), + ('state', '=', 'posted'), + ('move_type', '=', reverse_type)]) # We only set 'reversed' state in cas of 1 to 1 full reconciliation with a reverse entry; otherwise, we use the regular 'paid' state - reverse_moves_full_recs = reverse_moves.mapped('line_ids.full_reconcile_id') - if reverse_moves_full_recs.mapped('reconciled_line_ids.move_id').filtered(lambda x: x not in ( - reverse_moves + reverse_moves_full_recs.mapped('exchange_move_id'))) == move: + reverse_moves_full_recs = reverse_moves.mapped( + 'line_ids.full_reconcile_id') + if reverse_moves_full_recs.mapped( + 'reconciled_line_ids.move_id').filtered( + lambda x: x not in ( + reverse_moves + reverse_moves_full_recs.mapped( + 'exchange_move_id'))) == move: new_pmt_state = 'reversed' - move.payment_state = new_pmt_state - discount_type = fields.Selection([('percent', 'Percentage'), ('amount', 'Amount')], string='Discount Type', - readonly=True, states={'draft': [('readonly', False)]}, default='percent') - discount_rate = fields.Float('Discount Amount', digits=(16, 2), readonly=True, + discount_type = fields.Selection( + [('percent', 'Percentage'), ('amount', 'Amount')], + string='Discount Type', + readonly=True, states={'draft': [('readonly', False)]}, + default='percent') + discount_rate = fields.Float('Discount Amount', digits=(16, 2), + readonly=True, states={'draft': [('readonly', False)]}) - amount_discount = fields.Monetary(string='Discount', store=True, readonly=True, compute='_compute_amount', + amount_discount = fields.Monetary(string='Discount', store=True, + readonly=True, compute='_compute_amount', track_visibility='always') @api.onchange('discount_type', 'discount_rate', 'invoice_line_ids') @@ -163,7 +177,6 @@ class AccountInvoice(models.Model): line._onchange_price_subtotal() inv._compute_invoice_taxes_by_group() - # def button_dummy(self): self.supply_rate() diff --git a/sale_discount_total/models/discount_approval.py b/sale_discount_total/models/discount_approval.py index 160d6ecb4..9102d149e 100644 --- a/sale_discount_total/models/discount_approval.py +++ b/sale_discount_total/models/discount_approval.py @@ -20,7 +20,7 @@ # ############################################################################# -from odoo import api, fields, models +from odoo import fields, models class sale_discount(models.Model): diff --git a/sale_discount_total/models/sale.py b/sale_discount_total/models/sale_order.py similarity index 99% rename from sale_discount_total/models/sale.py rename to sale_discount_total/models/sale_order.py index 76cbc8cf5..5e2a44398 100644 --- a/sale_discount_total/models/sale.py +++ b/sale_discount_total/models/sale_order.py @@ -87,7 +87,6 @@ class SaleOrder(models.Model): return invoice_vals def button_dummy(self): - self.supply_rate() return True diff --git a/sale_discount_total/reports/invoice_report.py b/sale_discount_total/reports/invoice_report.py index 17c1b865c..b121dca80 100644 --- a/sale_discount_total/reports/invoice_report.py +++ b/sale_discount_total/reports/invoice_report.py @@ -29,7 +29,5 @@ class AccountInvoiceReport(models.Model): discount = fields.Float('Discount', readonly=True) def _select(self): - res = super(AccountInvoiceReport,self)._select() - select_str = res + """, line.discount AS discount """ - return select_str - + res = super(AccountInvoiceReport, self)._select() + return res + """, line.discount AS discount """ diff --git a/sale_discount_total/views/account_invoice_view.xml b/sale_discount_total/views/account_invoice_views.xml similarity index 62% rename from sale_discount_total/views/account_invoice_view.xml rename to sale_discount_total/views/account_invoice_views.xml index 4a5af2d16..c41ff94e5 100644 --- a/sale_discount_total/views/account_invoice_view.xml +++ b/sale_discount_total/views/account_invoice_views.xml @@ -1,7 +1,7 @@ - + discount.account.invoice account.move @@ -11,7 +11,7 @@ [16, 2] - +
@@ -25,17 +25,5 @@ - - - - - - - - - - - - diff --git a/sale_discount_total/views/invoice_report.xml b/sale_discount_total/views/invoice_report.xml index 0f68f0c18..62b1c5962 100644 --- a/sale_discount_total/views/invoice_report.xml +++ b/sale_discount_total/views/invoice_report.xml @@ -1,7 +1,7 @@ - + - diff --git a/sale_discount_total/views/res_config_view.xml b/sale_discount_total/views/res_config_views.xml similarity index 96% rename from sale_discount_total/views/res_config_view.xml rename to sale_discount_total/views/res_config_views.xml index c9f7d5fc8..70fe39d73 100644 --- a/sale_discount_total/views/res_config_view.xml +++ b/sale_discount_total/views/res_config_views.xml @@ -1,5 +1,6 @@ + res.config.settings.view.form.inherit.sale.discount res.config.settings @@ -7,7 +8,6 @@ -
@@ -26,7 +26,6 @@
-
diff --git a/sale_discount_total/views/sale_order_report.xml b/sale_discount_total/views/sale_order_report.xml index 2b3e3f526..ffad44723 100644 --- a/sale_discount_total/views/sale_order_report.xml +++ b/sale_discount_total/views/sale_order_report.xml @@ -1,7 +1,7 @@ - + - \ No newline at end of file diff --git a/sale_discount_total/views/sale_order_templates.xml b/sale_discount_total/views/sale_order_templates.xml new file mode 100644 index 000000000..daeaf1323 --- /dev/null +++ b/sale_discount_total/views/sale_order_templates.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/sale_discount_total/views/sale_view.xml b/sale_discount_total/views/sale_order_view.xml similarity index 98% rename from sale_discount_total/views/sale_view.xml rename to sale_discount_total/views/sale_order_view.xml index d6087d7a0..6a63b3859 100644 --- a/sale_discount_total/views/sale_view.xml +++ b/sale_discount_total/views/sale_order_view.xml @@ -1,7 +1,7 @@ - + discount.sale.order.form sale.order @@ -40,7 +40,6 @@
- @@ -48,6 +47,5 @@ -