From 62ddb94e4f7b1cfcb24a67a251e6351e07b7804c Mon Sep 17 00:00:00 2001 From: Het Mehta Date: Tue, 31 Mar 2026 10:39:50 +0530 Subject: [PATCH] [ADD] pricelist: add book price in account invoicing and sales quotation The book price is required to provide better pricing transparency during sales and invoicing processes. By introducing this field, users can compare the original book price with the applied sale price directly in quotations and invoices, helping them in decision-making and ensuring pricing consistency. --- .vscode/settings.json | 4 ++++ estate_pricelist_imp/__init__.py | 1 + estate_pricelist_imp/__manifest__.py | 19 +++++++++++++++ estate_pricelist_imp/models/__init__.py | 1 + .../models/account_move_line.py | 15 ++++++++++++ .../models/sale_order_line.py | 24 +++++++++++++++++++ .../views/estate_account_pricelist.xml | 13 ++++++++++ .../views/estate_pricelist.xml | 13 ++++++++++ 8 files changed, 90 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 estate_pricelist_imp/__init__.py create mode 100644 estate_pricelist_imp/__manifest__.py create mode 100644 estate_pricelist_imp/models/__init__.py create mode 100644 estate_pricelist_imp/models/account_move_line.py create mode 100644 estate_pricelist_imp/models/sale_order_line.py create mode 100644 estate_pricelist_imp/views/estate_account_pricelist.xml create mode 100644 estate_pricelist_imp/views/estate_pricelist.xml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..13bb971d627 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "xml.symbols.enabled": false, + "python.languageServer": "None" +} \ No newline at end of file diff --git a/estate_pricelist_imp/__init__.py b/estate_pricelist_imp/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/estate_pricelist_imp/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/estate_pricelist_imp/__manifest__.py b/estate_pricelist_imp/__manifest__.py new file mode 100644 index 00000000000..2e6cfc12490 --- /dev/null +++ b/estate_pricelist_imp/__manifest__.py @@ -0,0 +1,19 @@ +{ + "name": "Sales Pricelist", + "version": "19.0.0", + "category": "Tutorials", + "depends": ["sale", "account"], + "author": "hemeh", + "application": True, + "summary": "Estate Account", + "description": """ + Estate Pricelist Sales. + """, + "data": [ + "views/estate_pricelist.xml", + "views/estate_account_pricelist.xml", + ], + "website": "https://odoo.com", + "license": "LGPL-3", + "installable": True, +} diff --git a/estate_pricelist_imp/models/__init__.py b/estate_pricelist_imp/models/__init__.py new file mode 100644 index 00000000000..153b3062ece --- /dev/null +++ b/estate_pricelist_imp/models/__init__.py @@ -0,0 +1 @@ +from . import account_move_line, sale_order_line diff --git a/estate_pricelist_imp/models/account_move_line.py b/estate_pricelist_imp/models/account_move_line.py new file mode 100644 index 00000000000..980341ba53d --- /dev/null +++ b/estate_pricelist_imp/models/account_move_line.py @@ -0,0 +1,15 @@ +from odoo import api, fields, models + + +class EstateAccountPrice(models.Model): + _inherit = 'account.move.line' + _description = "Invoicing Book Price" + book_price = fields.Monetary(compute="_compute_book_price", readonly=True) + + @api.depends('sale_line_ids.book_price') + def _compute_book_price(self): + for rec in self: + if rec.sale_line_ids: + rec.book_price = rec.sale_line_ids[0].book_price + else: + rec.book_price = 0.0 diff --git a/estate_pricelist_imp/models/sale_order_line.py b/estate_pricelist_imp/models/sale_order_line.py new file mode 100644 index 00000000000..f087bf5e6d5 --- /dev/null +++ b/estate_pricelist_imp/models/sale_order_line.py @@ -0,0 +1,24 @@ +from odoo import api, fields, models + + +class SaleOrderLine(models.Model): + _inherit = 'sale.order.line' + + book_price = fields.Monetary(compute="_compute_book_price", readonly=True) + + @api.depends('product_uom_qty', 'product_id', 'order_id.pricelist_id') + def _compute_book_price(self): + for line in self: + if not line.product_id: + line.book_price = 0.0 + continue + + pricelist = line.order_id.pricelist_id + + if pricelist: + line.book_price = pricelist._get_product_price( + product=line.product_id, + quantity=line.product_uom_qty, + ) + else: + line.book_price = line.product_id.list_price diff --git a/estate_pricelist_imp/views/estate_account_pricelist.xml b/estate_pricelist_imp/views/estate_account_pricelist.xml new file mode 100644 index 00000000000..89758ae4ff4 --- /dev/null +++ b/estate_pricelist_imp/views/estate_account_pricelist.xml @@ -0,0 +1,13 @@ + + + + account.move.line.form.inherit.book.price + account.move + + + + + + + + diff --git a/estate_pricelist_imp/views/estate_pricelist.xml b/estate_pricelist_imp/views/estate_pricelist.xml new file mode 100644 index 00000000000..69382a46d74 --- /dev/null +++ b/estate_pricelist_imp/views/estate_pricelist.xml @@ -0,0 +1,13 @@ + + + + sale.order.form.inherit.book.price + sale.order + + + + + + + +