From 051ed172b330f493560255064a802ceca3b695d4 Mon Sep 17 00:00:00 2001 From: arat-odoo Date: Wed, 25 Jun 2025 19:34:10 +0530 Subject: [PATCH] [ADD] zero stock blockage: added zero stock block approval functionality created zero stock blockage module and sale.order model extends into model. and crated checkbox for approval zero stock,also give read only access to sales person and full access to sales manager. --- zero_stock_blockage/__init__.py | 1 + zero_stock_blockage/__manifest__.py | 14 +++++++++++ zero_stock_blockage/models/__init__.py | 1 + zero_stock_blockage/models/sale_order.py | 25 +++++++++++++++++++ .../views/zero_stock_blockage_views.xml | 14 +++++++++++ 5 files changed, 55 insertions(+) create mode 100644 zero_stock_blockage/__init__.py create mode 100644 zero_stock_blockage/__manifest__.py create mode 100644 zero_stock_blockage/models/__init__.py create mode 100644 zero_stock_blockage/models/sale_order.py create mode 100644 zero_stock_blockage/views/zero_stock_blockage_views.xml diff --git a/zero_stock_blockage/__init__.py b/zero_stock_blockage/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/zero_stock_blockage/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/zero_stock_blockage/__manifest__.py b/zero_stock_blockage/__manifest__.py new file mode 100644 index 00000000000..5722dc549bf --- /dev/null +++ b/zero_stock_blockage/__manifest__.py @@ -0,0 +1,14 @@ +{ + "name": "ZERO STOCK BLOCKAGE", + "version": "1.0", + "summary": "Restrict Sales Order Confirmation if stock is zero", + "description": "Adds approval mechanism for sales orders with zero stock.", + "category": "Sales", + "application": True, + "depends": ["base", "sale"], + "data": [ + "views/zero_stock_blockage_views.xml", + ], + "license": "LGPL-3", + "installable": True, +} diff --git a/zero_stock_blockage/models/__init__.py b/zero_stock_blockage/models/__init__.py new file mode 100644 index 00000000000..6aacb753131 --- /dev/null +++ b/zero_stock_blockage/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order diff --git a/zero_stock_blockage/models/sale_order.py b/zero_stock_blockage/models/sale_order.py new file mode 100644 index 00000000000..488210cccbc --- /dev/null +++ b/zero_stock_blockage/models/sale_order.py @@ -0,0 +1,25 @@ +from odoo import fields, models, api +from odoo.exceptions import UserError + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + zero_stock_approval = fields.Boolean(string="Approval", default="false") + + def action_confirm(self): + result = super().action_confirm() + for order in self: + if not order.zero_stock_approval: + raise UserError( + "This sale order cannot be confirmed without zero stock approval" + ) + return result + + @api.model + def fields_get(self, allfields=None, attributes=None): + res = super().fields_get(allfields, attributes) + if not self.env.user.has_group("sales_team.group_sale_manager"): + if "zero_stock_approval" in res: + res["zero_stock_approval"]["readonly"] = True + return res diff --git a/zero_stock_blockage/views/zero_stock_blockage_views.xml b/zero_stock_blockage/views/zero_stock_blockage_views.xml new file mode 100644 index 00000000000..24d865d1b90 --- /dev/null +++ b/zero_stock_blockage/views/zero_stock_blockage_views.xml @@ -0,0 +1,14 @@ + + + + sale.order.form.zero.stock + sale.order + + + + + + + +