From e810cd50f12ba6a418d8db87cee9e4d8c3891bc6 Mon Sep 17 00:00:00 2001 From: sngohodoo Date: Thu, 4 Jun 2026 14:21:55 +0530 Subject: [PATCH] [ADD] sale_zero_stock_blockage: don't allow sales without approval There are the case where sales person can't confirm the sale order without proper permission or the approval of the administrator. This helps them to archive that functionality, now an administrator can control which sell order should not be confirm by a sales or other use. Project: [PSIN]INTERNSHIP ONBOARDING Task: DEV - ZERO STOCK BLOCKAGE --- sale_zero_stock_blockage/__init__.py | 1 + sale_zero_stock_blockage/__manifest__.py | 12 ++++++++++ sale_zero_stock_blockage/models/__init__.py | 1 + sale_zero_stock_blockage/models/sale_order.py | 22 +++++++++++++++++++ .../views/sale_order_views.xml | 16 ++++++++++++++ 5 files changed, 52 insertions(+) create mode 100644 sale_zero_stock_blockage/__init__.py create mode 100644 sale_zero_stock_blockage/__manifest__.py create mode 100644 sale_zero_stock_blockage/models/__init__.py create mode 100644 sale_zero_stock_blockage/models/sale_order.py create mode 100644 sale_zero_stock_blockage/views/sale_order_views.xml diff --git a/sale_zero_stock_blockage/__init__.py b/sale_zero_stock_blockage/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/sale_zero_stock_blockage/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_zero_stock_blockage/__manifest__.py b/sale_zero_stock_blockage/__manifest__.py new file mode 100644 index 00000000000..436a978a5c0 --- /dev/null +++ b/sale_zero_stock_blockage/__manifest__.py @@ -0,0 +1,12 @@ +{ + "name": "Sale Zero Stock Blockage", + "application": False, + "installable": True, + "author": "sngoh", + "depends": ["sale"], + "auto_install": True, + "license": "LGPL-3", + "data": [ + "views/sale_order_views.xml", + ], +} diff --git a/sale_zero_stock_blockage/models/__init__.py b/sale_zero_stock_blockage/models/__init__.py new file mode 100644 index 00000000000..6aacb753131 --- /dev/null +++ b/sale_zero_stock_blockage/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order diff --git a/sale_zero_stock_blockage/models/sale_order.py b/sale_zero_stock_blockage/models/sale_order.py new file mode 100644 index 00000000000..50a01d77b5f --- /dev/null +++ b/sale_zero_stock_blockage/models/sale_order.py @@ -0,0 +1,22 @@ +from odoo import api, fields, models +from odoo.exceptions import UserError + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + zero_stock_approval = fields.Boolean(string="Zero Stock Approval") + has_user_access = fields.Boolean(compute="_compute_has_user_access") + + @api.depends_context("uid") + def _compute_has_user_access(self): + has_access = self.env.user._is_admin() + for record in self: + record.has_user_access = not has_access + + def action_confirm(self): + for order in self: + if not order.zero_stock_approval: + raise UserError("Please confirm the zero stock approval") + + return super().action_confirm() diff --git a/sale_zero_stock_blockage/views/sale_order_views.xml b/sale_zero_stock_blockage/views/sale_order_views.xml new file mode 100644 index 00000000000..ccc409bd9fd --- /dev/null +++ b/sale_zero_stock_blockage/views/sale_order_views.xml @@ -0,0 +1,16 @@ + + + + + sale.order.form.inherit.sale.zero.stock.blockage + sale.order + + + + + + + + +