From 2b9cfb90fac4a3940e782ea7a860dd760a677f42 Mon Sep 17 00:00:00 2001 From: hapt-odoo Date: Thu, 26 Jun 2025 18:44:00 +0530 Subject: [PATCH 1/2] [ADD] book_pricelist: Created a module to add pricelist Created a float field book_price and added that into the sale. order.line list view --- book_pricelist/__init__.py | 1 + book_pricelist/__manifest__.py | 11 +++++++++++ book_pricelist/models/__init__.py | 1 + book_pricelist/models/sale_order_line.py | 7 +++++++ book_pricelist/views/sale_order_views.xml | 13 +++++++++++++ 5 files changed, 33 insertions(+) create mode 100644 book_pricelist/__init__.py create mode 100644 book_pricelist/__manifest__.py create mode 100644 book_pricelist/models/__init__.py create mode 100644 book_pricelist/models/sale_order_line.py create mode 100644 book_pricelist/views/sale_order_views.xml diff --git a/book_pricelist/__init__.py b/book_pricelist/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/book_pricelist/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/book_pricelist/__manifest__.py b/book_pricelist/__manifest__.py new file mode 100644 index 00000000000..fb5a8919cce --- /dev/null +++ b/book_pricelist/__manifest__.py @@ -0,0 +1,11 @@ +{ + 'name': "Book Pricelist", + 'category': '', + 'version': '0.1', + 'depends': ['sale'], + 'sequence': 1, + 'application': True, + 'installable': True, + 'data': [], + 'license': 'AGPL-3' +} diff --git a/book_pricelist/models/__init__.py b/book_pricelist/models/__init__.py new file mode 100644 index 00000000000..8eb9d1d4046 --- /dev/null +++ b/book_pricelist/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order_line diff --git a/book_pricelist/models/sale_order_line.py b/book_pricelist/models/sale_order_line.py new file mode 100644 index 00000000000..81c6e677b51 --- /dev/null +++ b/book_pricelist/models/sale_order_line.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + book_price = fields.Float() diff --git a/book_pricelist/views/sale_order_views.xml b/book_pricelist/views/sale_order_views.xml new file mode 100644 index 00000000000..13f0a0d068c --- /dev/null +++ b/book_pricelist/views/sale_order_views.xml @@ -0,0 +1,13 @@ + + + + sale.order.inherited.form.pricelist + sale.order + + + + + + + + From 44acce5049dd03c1b0a87b09e4a92353ac17c37f Mon Sep 17 00:00:00 2001 From: hapt-odoo Date: Fri, 27 Jun 2025 15:40:26 +0530 Subject: [PATCH 2/2] [IMP] book_pricelist: added bokk_price compute field in customer invoices In book_pricelist, added compute fields in sale.order.line and account.move.line which calculates the new price baes on currently selected price list, product, and quantity --- book_pricelist/__manifest__.py | 5 ++++- book_pricelist/models/__init__.py | 1 + book_pricelist/models/account_move_line.py | 21 +++++++++++++++++++++ book_pricelist/models/sale_order_line.py | 18 ++++++++++++++++-- book_pricelist/views/account_move_view.xml | 15 +++++++++++++++ book_pricelist/views/sale_order_views.xml | 2 +- 6 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 book_pricelist/models/account_move_line.py create mode 100644 book_pricelist/views/account_move_view.xml diff --git a/book_pricelist/__manifest__.py b/book_pricelist/__manifest__.py index fb5a8919cce..860577ce775 100644 --- a/book_pricelist/__manifest__.py +++ b/book_pricelist/__manifest__.py @@ -6,6 +6,9 @@ 'sequence': 1, 'application': True, 'installable': True, - 'data': [], + 'data': [ + 'views/sale_order_views.xml', + 'views/account_move_view.xml', + ], 'license': 'AGPL-3' } diff --git a/book_pricelist/models/__init__.py b/book_pricelist/models/__init__.py index 8eb9d1d4046..ea3d9579546 100644 --- a/book_pricelist/models/__init__.py +++ b/book_pricelist/models/__init__.py @@ -1 +1,2 @@ from . import sale_order_line +from . import account_move_line diff --git a/book_pricelist/models/account_move_line.py b/book_pricelist/models/account_move_line.py new file mode 100644 index 00000000000..712a7808228 --- /dev/null +++ b/book_pricelist/models/account_move_line.py @@ -0,0 +1,21 @@ +from odoo import fields, models, api + + +class AccountMoveLine(models.Model): + _inherit = 'account.move.line' + + book_price = fields.Float(string='Book Price', compute='_compute_book_price') + + @api.depends('product_id', 'quantity', 'sale_line_ids') + def _compute_book_price(self): + for rec in self: + if rec.product_id: + pricelist = rec.sale_line_ids.order_id.pricelist_id + if pricelist: + rec.book_price = pricelist._get_product_price( + rec.product_id, rec.quantity + ) + else: + rec.book_price = rec.product_id.lst_price + else: + rec.book_price = 0 diff --git a/book_pricelist/models/sale_order_line.py b/book_pricelist/models/sale_order_line.py index 81c6e677b51..6947a2bd453 100644 --- a/book_pricelist/models/sale_order_line.py +++ b/book_pricelist/models/sale_order_line.py @@ -1,7 +1,21 @@ -from odoo import fields, models +from odoo import fields, models, api class SaleOrderLine(models.Model): _inherit = "sale.order.line" - book_price = fields.Float() + book_price = fields.Float(string='Book Price', compute='_compute_book_price') + + @api.depends('product_id', 'product_uom_qty', 'order_id.pricelist_id') + def _compute_book_price(self): + for rec in self: + if not rec.product_id: + rec.book_price = 0 + continue + pricelist = rec.order_id.pricelist_id + if rec.product_id and pricelist: + rec.book_price = pricelist._get_product_price( + rec.product_id, rec.product_uom_qty + ) + else: + rec.book_price = rec.product_id.lst_price diff --git a/book_pricelist/views/account_move_view.xml b/book_pricelist/views/account_move_view.xml new file mode 100644 index 00000000000..9f1f3d2b239 --- /dev/null +++ b/book_pricelist/views/account_move_view.xml @@ -0,0 +1,15 @@ + + + + + account.move.view.form.inherit + account.move + + + + + + + + + diff --git a/book_pricelist/views/sale_order_views.xml b/book_pricelist/views/sale_order_views.xml index 13f0a0d068c..5c2ba39a788 100644 --- a/book_pricelist/views/sale_order_views.xml +++ b/book_pricelist/views/sale_order_views.xml @@ -5,7 +5,7 @@ sale.order - +