diff --git a/setup/vendor_bill_final_price_check/odoo/addons/vendor_bill_final_price_check b/setup/vendor_bill_final_price_check/odoo/addons/vendor_bill_final_price_check new file mode 120000 index 00000000..ecee2b44 --- /dev/null +++ b/setup/vendor_bill_final_price_check/odoo/addons/vendor_bill_final_price_check @@ -0,0 +1 @@ +../../../../vendor_bill_final_price_check \ No newline at end of file diff --git a/setup/vendor_bill_final_price_check/setup.py b/setup/vendor_bill_final_price_check/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/vendor_bill_final_price_check/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/vendor_bill_final_price_check/README.rst b/vendor_bill_final_price_check/README.rst new file mode 100644 index 00000000..dff0f2d2 --- /dev/null +++ b/vendor_bill_final_price_check/README.rst @@ -0,0 +1,59 @@ +============================= +Vendor Bill Final Price Check +============================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-qrtl%2Faxls--oca-lightgray.png?logo=github + :target: https://github.com/qrtl/axls-oca/tree/16.0/vendor_bill_final_price_check + :alt: qrtl/axls-oca + +|badge1| |badge2| |badge3| + +This module does the following- + - Add confirm_final_price and is_change_price field in account.move + - Add menuitem for account manager to allow confirm for the bills that change the price. + +This module restricts the user to confirm the vendor bills if the price in account.move.line is changed. + +Currently odoo having issue to correct valuation layer and reset to draft button on bill also hidden after price is changed and confirm bills. +So,the purpose of this module is to make sure that if there's a price change on the move line, the change is a final price. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Quartile Limited + +Maintainers +~~~~~~~~~~~ + +This module is part of the `qrtl/axls-oca `_ project on GitHub. + +You are welcome to contribute. diff --git a/vendor_bill_final_price_check/__init__.py b/vendor_bill_final_price_check/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/vendor_bill_final_price_check/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/vendor_bill_final_price_check/__manifest__.py b/vendor_bill_final_price_check/__manifest__.py new file mode 100644 index 00000000..f26023af --- /dev/null +++ b/vendor_bill_final_price_check/__manifest__.py @@ -0,0 +1,13 @@ +# Copyright 2023 Quartile Limited +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Vendor Bill Final Price Check", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Quartile Limited, Odoo Community Association (OCA)", + "website": "https://www.quartile.co", + "depends": ["purchase_stock"], + "data": ["views/account_move_views.xml"], + "installable": True, +} diff --git a/vendor_bill_final_price_check/models/__init__.py b/vendor_bill_final_price_check/models/__init__.py new file mode 100644 index 00000000..0d5ab6a2 --- /dev/null +++ b/vendor_bill_final_price_check/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_move +from . import account_move_line diff --git a/vendor_bill_final_price_check/models/account_move.py b/vendor_bill_final_price_check/models/account_move.py new file mode 100644 index 00000000..66a4e75b --- /dev/null +++ b/vendor_bill_final_price_check/models/account_move.py @@ -0,0 +1,18 @@ +# Copyright 2023 Quartile Limited +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class AccountMove(models.Model): + _inherit = "account.move" + + confirm_final_price = fields.Boolean(tracking=True) + is_update_svl = fields.Boolean( + compute="_compute_svl_check", store=True, readonly=False + ) + + @api.depends("date") + def _compute_svl_check(self): + for line in self.filtered(lambda move: move.state != "posted").invoice_line_ids: + line._check_svl_create() diff --git a/vendor_bill_final_price_check/models/account_move_line.py b/vendor_bill_final_price_check/models/account_move_line.py new file mode 100644 index 00000000..3f6fc943 --- /dev/null +++ b/vendor_bill_final_price_check/models/account_move_line.py @@ -0,0 +1,77 @@ +# Copyright 2023 Quartile Limited +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, models +from odoo.exceptions import ValidationError +from odoo.tools.float_utils import float_is_zero + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + def _create_in_invoice_svl(self): + svl = super(AccountMoveLine, self)._create_in_invoice_svl() + if svl and not self.move_id.confirm_final_price: + raise ValidationError( + _("This document will create new SVL and need to confirm by Manager.") + ) + return svl + + def _check_svl_create(self): + svl_vals_list = [] + for line in self: + if line.move_id.move_type not in ("in_invoice", "in_refund", "in_receipt"): + return + + if not line.purchase_line_id: + return + + if line.product_id and line.product_id.cost_method != "standard": + # Reference _create_in_invoice_svl function to check this document + # will create new svl for updating is_update_svl flag for showing list of Bills + # to allow price change for manager. + line = line.with_company(line.company_id) + move = line.move_id.with_company(line.move_id.company_id) + po_line = line.purchase_line_id + uom = line.product_uom_id or line.product_id.uom_id + + quantity = po_line.qty_received - (po_line.qty_invoiced - line.quantity) + quantity = max(min(line.quantity, quantity), 0) + if float_is_zero(quantity, precision_rounding=uom.rounding): + continue + + layers = line._get_stock_valuation_layers(move) + if not layers: + continue + + price_unit = ( + -line.price_unit + if move.move_type == "in_refund" + else line.price_unit + ) + price_unit = price_unit * (1 - (line.discount or 0.0) / 100.0) + if line.tax_ids: + prec = 1e6 + price_unit *= prec + price_unit = line.tax_ids.with_context(round=False).compute_all( + price_unit, + currency=move.currency_id, + quantity=1.0, + is_refund=move.move_type == "in_refund", + fixed_multiplicator=move.direction_sign, + )["total_excluded"] + price_unit /= prec + layers_price_unit = line._get_stock_valuation_layers_price_unit(layers) + layers_to_correct = line._get_stock_layer_price_difference( + layers, layers_price_unit, price_unit + ) + svl_vals_list += line._prepare_in_invoice_svl_vals(layers_to_correct) + + if svl_vals_list: + self.move_id.write({"is_update_svl": True}) + else: + self.move_id.write({"is_update_svl": False}) + + def write(self, vals): + self._check_svl_create() + return super().write(vals) diff --git a/vendor_bill_final_price_check/readme/DESCRIPTION.rst b/vendor_bill_final_price_check/readme/DESCRIPTION.rst new file mode 100644 index 00000000..8ffefea6 --- /dev/null +++ b/vendor_bill_final_price_check/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This module does the following- + - Add confirm_final_price and is_update_svl field in account.move + - Add menuitem for account manager to allow confirm for the bills that change the price. + +This module restricts the user to confirm the vendor bills if the price in account.move.line is changed. + +Currently odoo having issue to correct valuation layer and reset to draft button on bill also hidden after price is changed and confirm bills. +So,the purpose of this module is to make sure that if there's a price change on the move line, the change is a final price. diff --git a/vendor_bill_final_price_check/static/description/icon.png b/vendor_bill_final_price_check/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/vendor_bill_final_price_check/static/description/icon.png differ diff --git a/vendor_bill_final_price_check/static/description/index.html b/vendor_bill_final_price_check/static/description/index.html new file mode 100644 index 00000000..cc9facbf --- /dev/null +++ b/vendor_bill_final_price_check/static/description/index.html @@ -0,0 +1,417 @@ + + + + + + +Vendor Bill Final Price Check + + + +
+

Vendor Bill Final Price Check

+ + +

Beta License: AGPL-3 qrtl/axls-oca

+
+
This module does the following-
+
    +
  • Add confirm_final_price and is_change_price field in account.move
  • +
  • Add menuitem for account manager to allow confirm for the bills that change the price.
  • +
+
+
+

This module restricts the user to confirm the vendor bills if the price in account.move.line is changed.

+

Currently odoo having issue to correct valuation layer and reset to draft button on bill also hidden after price is changed and confirm bills. +So,the purpose of this module is to make sure that if there’s a price change on the move line, the change is a final price.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Quartile Limited
  • +
+
+
+

Maintainers

+

This module is part of the qrtl/axls-oca project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/vendor_bill_final_price_check/views/account_move_views.xml b/vendor_bill_final_price_check/views/account_move_views.xml new file mode 100644 index 00000000..341d6615 --- /dev/null +++ b/vendor_bill_final_price_check/views/account_move_views.xml @@ -0,0 +1,35 @@ + + + + account.move.form + account.move + + + + + + + + + + Bills to allow price change + account.move + tree,kanban,form + + + [('move_type', 'in', ['in_invoice', 'in_refund', 'in_receipt']),('confirm_final_price', '=', False),('is_update_svl', '=', True)] + + +