From 0738693e30238f99f484510e13dd2903d053c2c9 Mon Sep 17 00:00:00 2001 From: odoo Date: Mon, 25 May 2026 15:56:53 +0530 Subject: [PATCH] [IMP] sale_zero_stock: restrict zero stock approval access to administrators Implemented access control so only Sales Administrators can modify the Zero Stock Approval field in Sale Orders. If the approval is not enabled, Sales Users cannot confirm orders with unavailable stock. Helps enforce proper authorization prevents unauthorized zero-stock sales, and improves inventory management accuracy. --- sale_zero_stock/__init__.py | 1 + sale_zero_stock/__manifest__.py | 10 ++++++++++ sale_zero_stock/models/__init__.py | 1 + sale_zero_stock/models/sale_zero_stock.py | 23 +++++++++++++++++++++++ sale_zero_stock/views/sale_zero_stock.xml | 12 ++++++++++++ 5 files changed, 47 insertions(+) create mode 100644 sale_zero_stock/__init__.py create mode 100644 sale_zero_stock/__manifest__.py create mode 100644 sale_zero_stock/models/__init__.py create mode 100644 sale_zero_stock/models/sale_zero_stock.py create mode 100644 sale_zero_stock/views/sale_zero_stock.xml diff --git a/sale_zero_stock/__init__.py b/sale_zero_stock/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/sale_zero_stock/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_zero_stock/__manifest__.py b/sale_zero_stock/__manifest__.py new file mode 100644 index 00000000000..784778e4745 --- /dev/null +++ b/sale_zero_stock/__manifest__.py @@ -0,0 +1,10 @@ +{ + "name": "sale_zero_stock", + "depends": ["sale"], + "category": "sale", + "installable": True, + "application": True, + "data": ["views/sale_zero_stock.xml"], + "author": "RADHR", + "license": "LGPL-3", +} diff --git a/sale_zero_stock/models/__init__.py b/sale_zero_stock/models/__init__.py new file mode 100644 index 00000000000..06ba4c532b6 --- /dev/null +++ b/sale_zero_stock/models/__init__.py @@ -0,0 +1 @@ +from . import sale_zero_stock diff --git a/sale_zero_stock/models/sale_zero_stock.py b/sale_zero_stock/models/sale_zero_stock.py new file mode 100644 index 00000000000..ece5cdae3f4 --- /dev/null +++ b/sale_zero_stock/models/sale_zero_stock.py @@ -0,0 +1,23 @@ +from odoo import fields, models, api +from odoo.exceptions import UserError + + +class SaleZeroStock(models.Model): + _inherit = "sale.order" + + zero_stock_approval = fields.Boolean(string="Zero Stock Approval") + access_user = fields.Boolean(compute="_compute_has_access") + + @api.depends_context("uid") + def _compute_has_access(self): + + has_user_access = self.env.user._is_admin() + for record in self: + record.access_user = not has_user_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/views/sale_zero_stock.xml b/sale_zero_stock/views/sale_zero_stock.xml new file mode 100644 index 00000000000..62d06ab0874 --- /dev/null +++ b/sale_zero_stock/views/sale_zero_stock.xml @@ -0,0 +1,12 @@ + + + sale.zero.stock.view.form + sale.order + + + + + + + + \ No newline at end of file