diff --git a/unpublish_product/__init__.py b/unpublish_product/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/unpublish_product/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/unpublish_product/__manifest__.py b/unpublish_product/__manifest__.py new file mode 100644 index 00000000000..196425a765d --- /dev/null +++ b/unpublish_product/__manifest__.py @@ -0,0 +1,12 @@ +{ + "name": "auto unpublish product", + "version": "1.0.0", + "depends": ["base", "product", "website_sale", "stock"], + "author": "Mehul Kotak", + "category": "Task-3", + "description": "eCommerce", + "license": "LGPL-3", + "auto_install": True, + "installable": True, + "data": ["views/res_config_settings_view.xml"], +} diff --git a/unpublish_product/models/__init__.py b/unpublish_product/models/__init__.py new file mode 100644 index 00000000000..5eaaa9ba3ea --- /dev/null +++ b/unpublish_product/models/__init__.py @@ -0,0 +1,3 @@ +from . import res_config_settings +from . import product_template +from . import stock_quant diff --git a/unpublish_product/models/product_template.py b/unpublish_product/models/product_template.py new file mode 100644 index 00000000000..934caeb6b22 --- /dev/null +++ b/unpublish_product/models/product_template.py @@ -0,0 +1,19 @@ +from odoo import models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + def check_and_unpublish(self): + enabled = ( + self.env["ir.config_parameter"] + .sudo() + .get_param("unpublish_product.auto_unpublish_out_of_stock") + ) + + if not enabled: + return + + for template in self: + if all(variant.free_qty <= 0 for variant in template.product_variant_ids): + template.website_published = False diff --git a/unpublish_product/models/res_config_settings.py b/unpublish_product/models/res_config_settings.py new file mode 100644 index 00000000000..902574846a9 --- /dev/null +++ b/unpublish_product/models/res_config_settings.py @@ -0,0 +1,10 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + auto_unpublish_out_of_stock = fields.Boolean( + string="Auto Unpublish Out-of-Stock Products", + config_parameter="unpublish_product.auto_unpublish_out_of_stock", + ) diff --git a/unpublish_product/models/stock_quant.py b/unpublish_product/models/stock_quant.py new file mode 100644 index 00000000000..4d2b3d71666 --- /dev/null +++ b/unpublish_product/models/stock_quant.py @@ -0,0 +1,13 @@ +from odoo import models + + +class StockQuant(models.Model): + _inherit = "stock.quant" + + def write(self, vals): + res = super().write(vals) + + products = self.mapped("product_id.product_tmpl_id") + products.check_and_unpublish() + + return res diff --git a/unpublish_product/views/res_config_settings_view.xml b/unpublish_product/views/res_config_settings_view.xml new file mode 100644 index 00000000000..5ce94c70132 --- /dev/null +++ b/unpublish_product/views/res_config_settings_view.xml @@ -0,0 +1,17 @@ + + + + res.config.settings.view.form.inherit + res.config.settings + + + + + + + + + + + +