From cb2d42f3ea1c55002ae9c50b389d2fc16d53ef88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20G=C3=B6ttsch?= Date: Tue, 12 May 2026 15:31:59 +0200 Subject: [PATCH] [RM] sale_order_batch: moved to madmooose/odooapps --- sale_order_batch/README.rst | 77 ---- sale_order_batch/__init__.py | 2 - sale_order_batch/__manifest__.py | 20 - sale_order_batch/data/ir_sequence_data.xml | 12 - sale_order_batch/models/__init__.py | 4 - sale_order_batch/models/sale_order.py | 75 --- sale_order_batch/models/sale_order_batch.py | 263 ----------- .../models/sale_order_batch_product.py | 103 ----- sale_order_batch/models/sale_order_line.py | 57 --- sale_order_batch/readme/CONTRIBUTORS.rst | 1 - sale_order_batch/readme/DESCRIPTION.rst | 3 - sale_order_batch/readme/HISTORY.rst | 11 - sale_order_batch/security/ir.model.access.csv | 6 - sale_order_batch/security/ir_rules.xml | 11 - sale_order_batch/static/description/icon.png | Bin 12282 -> 0 bytes .../static/description/index.html | 435 ------------------ sale_order_batch/views/sale_menus.xml | 25 - .../views/sale_order_batch_product_views.xml | 49 -- .../views/sale_order_batch_views.xml | 279 ----------- sale_order_batch/views/sale_order_views.xml | 72 --- sale_order_batch/wizard/__init__.py | 1 - .../wizard/sale_order_batch_cancel_wizard.py | 34 -- .../wizard/sale_order_batch_cancel_wizard.xml | 24 - sale_order_batch_stock/README.rst | 65 --- sale_order_batch_stock/__init__.py | 1 - sale_order_batch_stock/__manifest__.py | 12 - sale_order_batch_stock/models/__init__.py | 1 - .../models/sale_order_batch.py | 25 - .../readme/CONTRIBUTORS.rst | 1 - sale_order_batch_stock/readme/DESCRIPTION.rst | 1 - sale_order_batch_stock/readme/HISTORY.rst | 1 - .../static/description/icon.png | Bin 12282 -> 0 bytes .../static/description/index.html | 428 ----------------- .../views/sale_order_batch_views.xml | 22 - .../odoo/addons/sale_order_batch | 1 - setup/sale_order_batch/setup.py | 6 - .../odoo/addons/sale_order_batch_stock | 1 - setup/sale_order_batch_stock/setup.py | 6 - 38 files changed, 2135 deletions(-) delete mode 100644 sale_order_batch/README.rst delete mode 100644 sale_order_batch/__init__.py delete mode 100644 sale_order_batch/__manifest__.py delete mode 100644 sale_order_batch/data/ir_sequence_data.xml delete mode 100644 sale_order_batch/models/__init__.py delete mode 100644 sale_order_batch/models/sale_order.py delete mode 100644 sale_order_batch/models/sale_order_batch.py delete mode 100644 sale_order_batch/models/sale_order_batch_product.py delete mode 100644 sale_order_batch/models/sale_order_line.py delete mode 100644 sale_order_batch/readme/CONTRIBUTORS.rst delete mode 100644 sale_order_batch/readme/DESCRIPTION.rst delete mode 100644 sale_order_batch/readme/HISTORY.rst delete mode 100644 sale_order_batch/security/ir.model.access.csv delete mode 100644 sale_order_batch/security/ir_rules.xml delete mode 100644 sale_order_batch/static/description/icon.png delete mode 100644 sale_order_batch/static/description/index.html delete mode 100644 sale_order_batch/views/sale_menus.xml delete mode 100644 sale_order_batch/views/sale_order_batch_product_views.xml delete mode 100644 sale_order_batch/views/sale_order_batch_views.xml delete mode 100644 sale_order_batch/views/sale_order_views.xml delete mode 100644 sale_order_batch/wizard/__init__.py delete mode 100644 sale_order_batch/wizard/sale_order_batch_cancel_wizard.py delete mode 100644 sale_order_batch/wizard/sale_order_batch_cancel_wizard.xml delete mode 100644 sale_order_batch_stock/README.rst delete mode 100644 sale_order_batch_stock/__init__.py delete mode 100644 sale_order_batch_stock/__manifest__.py delete mode 100644 sale_order_batch_stock/models/__init__.py delete mode 100644 sale_order_batch_stock/models/sale_order_batch.py delete mode 100644 sale_order_batch_stock/readme/CONTRIBUTORS.rst delete mode 100644 sale_order_batch_stock/readme/DESCRIPTION.rst delete mode 100644 sale_order_batch_stock/readme/HISTORY.rst delete mode 100644 sale_order_batch_stock/static/description/icon.png delete mode 100644 sale_order_batch_stock/static/description/index.html delete mode 100644 sale_order_batch_stock/views/sale_order_batch_views.xml delete mode 120000 setup/sale_order_batch/odoo/addons/sale_order_batch delete mode 100644 setup/sale_order_batch/setup.py delete mode 120000 setup/sale_order_batch_stock/odoo/addons/sale_order_batch_stock delete mode 100644 setup/sale_order_batch_stock/setup.py diff --git a/sale_order_batch/README.rst b/sale_order_batch/README.rst deleted file mode 100644 index 748e9e7..0000000 --- a/sale_order_batch/README.rst +++ /dev/null @@ -1,77 +0,0 @@ -================ -Sale Order Batch -================ - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:6686f0672ede8093b17d5d7b165f72f8e49341c7849f9e0d5a162e350fc36d71 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png - :target: https://odoo-community.org/page/development-status - :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png - :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html - :alt: License: LGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-bakeupboys%2Fnfu-lightgray.png?logo=github - :target: https://github.com/bakeupboys/nfu/tree/16.0/sale_order_batch - :alt: bakeupboys/nfu - -|badge1| |badge2| |badge3| - -This module adds the possibility to group Sale orders into batches. Attributes of a Sale Order Batch will be written to all -Sale Order. Wenn attached to a batch they can be processed together. On the other hand they cannot be proccesed individual -anymore as log as they are part of a batch. Only Sale Orders in state Qutotation or Quotation Send can be attached to a batch. - -**Table of contents** - -.. contents:: - :local: - -Changelog -========= - -- 16.0.0.0.1: Initial module. -- 16.0.0.1: Add Multi Company ability -- 16.0.0.2: rename product creation methode -- 16.0.0.3: Make validity_date persistent, add batches to SO views -- 16.0.0.4: Remove validity date -- 16.0.0.5: Move product logic to sale order lines -- 16.0.2.1.0: Add "In Progress" and "Cancelled" state -- 16.0.2.2.0: Add invoice status and menues -- 16.0.2.2.1: Add lst_price to view -- 16.0.2.3.0: Add "Reset to Open" -- 16.0.2.3.1: Remove Sale Order from batch on cancelation - -Bug Tracker -=========== - -Bugs are tracked on `GitHub Issues `_. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. - -Do not contact contributors directly about support or help with technical issues. - -Credits -======= - -Authors -~~~~~~~ - -* BAKEUP - -Contributors -~~~~~~~~~~~~ - -* Niels Göttsch - -Maintainers -~~~~~~~~~~~ - -This module is part of the `bakeupboys/nfu `_ project on GitHub. - -You are welcome to contribute. diff --git a/sale_order_batch/__init__.py b/sale_order_batch/__init__.py deleted file mode 100644 index 9b42961..0000000 --- a/sale_order_batch/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import models -from . import wizard diff --git a/sale_order_batch/__manifest__.py b/sale_order_batch/__manifest__.py deleted file mode 100644 index 24fa8d7..0000000 --- a/sale_order_batch/__manifest__.py +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Sale Order Batch", - "summary": "Group Sale Orders into a batch", - "author": "BAKEUP", - "website": "https://www.bakeup.org", - "category": "Sale", - "version": "16.0.2.3.1", - "depends": ["sale", "product"], - "data": [ - "security/ir.model.access.csv", - "security/ir_rules.xml", - "views/sale_order_batch_views.xml", - "views/sale_order_batch_product_views.xml", - "views/sale_order_views.xml", - "views/sale_menus.xml", - "wizard/sale_order_batch_cancel_wizard.xml", - "data/ir_sequence_data.xml", - ], - "license": "LGPL-3", -} diff --git a/sale_order_batch/data/ir_sequence_data.xml b/sale_order_batch/data/ir_sequence_data.xml deleted file mode 100644 index 4c14e3e..0000000 --- a/sale_order_batch/data/ir_sequence_data.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Sales Order Batch - sale.order.batch - SOB - 5 - - - - diff --git a/sale_order_batch/models/__init__.py b/sale_order_batch/models/__init__.py deleted file mode 100644 index 53efcfd..0000000 --- a/sale_order_batch/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import sale_order -from . import sale_order_batch -from . import sale_order_batch_product -from . import sale_order_line diff --git a/sale_order_batch/models/sale_order.py b/sale_order_batch/models/sale_order.py deleted file mode 100644 index 69a3c7b..0000000 --- a/sale_order_batch/models/sale_order.py +++ /dev/null @@ -1,75 +0,0 @@ -from odoo import _, fields, models -from odoo.exceptions import UserError - - -class SaleOrder(models.Model): - _inherit = "sale.order" - - batch_id = fields.Many2one( - "sale.order.batch", - copy=False, - check_company=True, - domain="[('state','!=','closed')]", - ) - batch_state = fields.Selection( - related="batch_id.state", - string="Batch State", - ) - - def _get_current_batch(self): - """ - Returns the current batch of the sale order. - :return: sale.order.batch - """ - self.ensure_one() - return self.env["sale.order.batch"].search( - [("state", "=", "open"), ("company_id", "=", self.company_id.id)], limit=1 - ) - - def action_add_to_batch(self): - """ - TODO: Add Wizard to choose between batches if more than one existis. - Picking the first one for now. - """ - for sale_order in self: - company = sale_order.company_id - sale_order = sale_order.with_company(company) - if not sale_order.batch_id and sale_order.state in ["draft", "sent"]: - batch = sale_order._get_current_batch() - if not batch: - batch = sale_order.env["sale.order.batch"].create({}) - sale_order.batch_id = batch - - def action_view_sale_order_batch(self): - return { - "name": _("Sale Order Batch"), - "type": "ir.actions.act_window", - "view_type": "form", - "view_mode": "form", - "res_model": "sale.order.batch", - "res_id": self.batch_id.id, - } - - def action_confirm(self): - invalid_orders = [] - if not self.env.context.get("bypass_batch", False): - for order in self: - if order.batch_id: - invalid_orders.append(order.name) - if invalid_orders: - raise UserError( - _(f"Sale Order belongs to a Batch: {', '.join(invalid_orders)}") - ) - return super().action_confirm() - - def action_cancel(self): - self.write({"batch_id": False}) - res = super().action_cancel() - return res - - def write(self, vals): - res = super().write(vals) - if "batch_id" in vals.keys(): - for order in self: - order.order_line._update_batch_product() - return res diff --git a/sale_order_batch/models/sale_order_batch.py b/sale_order_batch/models/sale_order_batch.py deleted file mode 100644 index beb61bb..0000000 --- a/sale_order_batch/models/sale_order_batch.py +++ /dev/null @@ -1,263 +0,0 @@ -from odoo import _, api, fields, models -from odoo.exceptions import UserError - -from odoo.addons.sale.models.sale_order import INVOICE_STATUS - - -STATES = [ - ("open", "Open"), - ("in_progress", "In Progress"), - ("closed", "Closed"), - ("cancel", "Cancelled"), -] -READONLY_FIELD_STATES = {state: [("readonly", True)] for state in {"closed"}} - - -class SaleOrderBatch(models.Model): - """Group serveral Sale Orders into a batch""" - - _name = "sale.order.batch" - _description = "Sales Order Batch" - _inherit = ["mail.thread", "mail.activity.mixin"] - _order = "date_order desc, id desc" - _check_company_auto = True - - name = fields.Char( - string="Order Batch Reference", - required=True, - copy=False, - readonly=True, - index="trigram", - default=lambda self: _("New"), - ) - company_id = fields.Many2one( - comodel_name="res.company", - required=True, - index=True, - default=lambda self: self.env.company, - ) - state = fields.Selection( - selection=STATES, - string="Status", - readonly=True, - copy=False, - index=True, - tracking=1, - default="open", - ) - date_order = fields.Datetime( - string="Order Date", - required=True, - readonly=False, - copy=False, - states=READONLY_FIELD_STATES, - help="Creation date of order batch,\nConfirmation date of confirmed orders.", - default=fields.Datetime.now, - ) - sale_order_ids = fields.One2many("sale.order", "batch_id") - sale_order_count = fields.Integer(compute="_compute_sale_order_count") - sale_order_line_ids = fields.One2many( - "sale.order.line", "batch_id", states=READONLY_FIELD_STATES - ) - invoice_ids = fields.Many2many("account.move", compute="_compute_invoice_ids") - invoice_count = fields.Integer(compute="_compute_invoice_ids") - invoice_status = fields.Selection( - selection=INVOICE_STATUS, compute="_compute_invoice_status", store=True - ) - amount_total = fields.Float(compute="_compute_amount_total", string="Total") - product_ids = fields.One2many("sale.order.batch.product", "batch_id") - product_count = fields.Integer(compute="_compute_product_count") - partner_credit_warning = fields.Text(compute="_compute_partner_credit_warning") - - @api.depends("sale_order_ids") - def _compute_sale_order_count(self): - for batch in self: - batch.sale_order_count = len(batch.sale_order_ids) - - @api.depends("sale_order_ids.invoice_ids") - def _compute_invoice_ids(self): - for batch in self: - invoices = batch.sale_order_ids.mapped("invoice_ids") - batch.invoice_ids = invoices - batch.invoice_count = len(invoices) - - @api.depends("sale_order_ids.invoice_status") - def _compute_invoice_status(self): - for batch in self: - if batch.sale_order_ids and any( - invoice_status == "to invoice" - for invoice_status in batch.sale_order_ids.mapped("invoice_status") - ): - batch.invoice_status = "to invoice" - elif batch.sale_order_ids and all( - invoice_status == "invoiced" - for invoice_status in batch.sale_order_ids.mapped("invoice_status") - ): - batch.invoice_status = "invoiced" - elif batch.sale_order_ids and all( - invoice_status in ("invoiced", "upselling") - for invoice_status in batch.sale_order_ids.mapped("invoice_status") - ): - batch.invoice_status = "upselling" - else: - batch.invoice_status = "no" - - @api.depends("sale_order_ids.amount_total") - def _compute_amount_total(self): - for batch in self: - batch.amount_total = sum(batch.sale_order_ids.mapped("amount_total")) - - @api.depends("product_ids") - def _compute_product_count(self): - for batch in self: - batch.product_count = len(batch.product_ids) - - @api.depends("sale_order_ids.partner_credit_warning") - def _compute_partner_credit_warning(self): - for batch in self: - batch.partner_credit_warning = "" - for order in batch.sale_order_ids: - if order.partner_credit_warning: - batch.partner_credit_warning += order.partner_credit_warning + "\n" - - def action_view_source_sale_orders(self): - self.ensure_one() - result = self.env["ir.actions.act_window"]._for_xml_id("sale.action_orders") - if len(self.sale_order_ids) > 1: - result["domain"] = [("id", "in", self.sale_order_ids.ids)] - elif len(self.sale_order_ids) == 1: - result["views"] = [(self.env.ref("sale.view_order_form", False).id, "form")] - result["res_id"] = self.sale_order_ids.id - else: - result = {"type": "ir.actions.act_window_close"} - return result - - def action_view_products(self): - self.ensure_one() - result = self.env["ir.actions.act_window"]._for_xml_id( - "product.product_normal_action_sell" - ) - if len(self.product_ids) > 1: - result["domain"] = [("id", "in", self.product_ids.ids)] - elif len(self.product_ids) == 1: - result["views"] = [ - (self.env.ref("product.product_product_tree_view", False).id, "form") - ] - result["res_id"] = self.product_ids.id - else: - result = {"type": "ir.actions.act_window_close"} - return result - - def action_view_invoice(self): - invoices = self.mapped("invoice_ids") - action = self.env["ir.actions.actions"]._for_xml_id( - "account.action_move_out_invoice_type" - ) - if len(invoices) > 1: - action["domain"] = [("id", "in", invoices.ids)] - elif len(invoices) == 1: - form_view = [(self.env.ref("account.view_move_form").id, "form")] - if "views" in action: - action["views"] = form_view + [ - (state, view) for state, view in action["views"] if view != "form" - ] - else: - action["views"] = form_view - action["res_id"] = invoices.id - else: - action = {"type": "ir.actions.act_window_close"} - - action["context"] = {"default_move_type": "out_invoice"} - return action - - def action_in_progress(self): - for batch in self: - batch.sale_order_line_ids._validate_analytic_distribution() - orders = batch.sale_order_ids - orders.update({"state": "sent"}) - batch.update({"state": "in_progress"}) - return True - - def action_confirm(self): - for batch in self: - orders = batch.with_context(bypass_batch=True).sale_order_ids - orders.action_confirm() - batch.update({"state": "closed"}) - return True - - def action_cancel(self): - cancel_warning = self._show_cancel_wizard() - if cancel_warning: - self.ensure_one() - return { - "name": _("Cancel %s", self.name), - "view_mode": "form", - "type": "ir.actions.act_window", - "res_model": "sale.order.batch.cancel.wizard", - "target": "new", - "context": {"active_ids": self.ids}, - } - else: - self._action_cancel() - - def _action_cancel(self): - orders = self.mapped("sale_order_ids") - # use _action_cancel to skip the wizzard - orders._action_cancel() - self.write({"state": "cancel"}) - - def _show_cancel_wizard(self): - """Decide whether the sale.order.batch.cancel wizard should be shown to cancel specified orders. - - :return: True if there is any non-draft order in the given orders - :rtype: bool - """ - - if self.env.context.get("disable_cancel_warning"): - return False - batch_orders = self.mapped("sale_order_ids") - return any(order._show_cancel_wizard() for order in batch_orders) - - def action_open(self): - for batch in self: - orders = batch.sale_order_ids - orders.action_draft() - batch.update({"state": "open"}) - return True - - @api.model_create_multi - def create(self, vals_list): - for vals in vals_list: - if "company_id" in vals: - self = self.with_company(vals["company_id"]) - if vals.get("name", _("New")) == _("New"): - vals["name"] = self.env["ir.sequence"].next_by_code( - "sale.order.batch" - ) or _("New") - return super().create(vals_list) - - -class SaleOrderBatchCancelWizard(models.TransientModel): - _name = "sale.order.batch.cancel.wizard" - _description = "Sale Order Batch Cancel Wizard" - - def action_cancel(self): - batches = self.env["sale.order.batch"].browse(self._context["active_ids"]) - for batch in batches: - orders = batch.sale_order_ids - # Warn if any sale order is not in draft - not_draft_orders = orders.filtered(lambda o: o.state != "draft") - if not_draft_orders: - raise UserError( - _( - "You can only cancel batches where all sale orders are in draft state." - ) - ) - # use _action_cancel to skip the wizzard - # ToDo: Implement wizard logic - orders._action_cancel() - batch.update({"state": "cancel"}) - return True - - def action_discard(self): - return {"type": "ir.actions.act_window_close"} diff --git a/sale_order_batch/models/sale_order_batch_product.py b/sale_order_batch/models/sale_order_batch_product.py deleted file mode 100644 index 5a78e45..0000000 --- a/sale_order_batch/models/sale_order_batch_product.py +++ /dev/null @@ -1,103 +0,0 @@ -from odoo import api, fields, models - -from .sale_order_batch import READONLY_FIELD_STATES - - -class SaleOrderBatchProduct(models.Model): - """Show Products available in Sale Order Batch""" - - _name = "sale.order.batch.product" - _description = "Sale Order Batch Product" - - batch_id = fields.Many2one( - comodel_name="sale.order.batch", - string="Batch Reference", - required=True, - ondelete="cascade", - index=True, - copy=False, - readonly=True, - ) - state = fields.Selection(related="batch_id.state") - product_id = fields.Many2one( - comodel_name="product.product", required=True, readonly=True - ) - product_template_id = fields.Many2one( - "product.template", - related="product_id.product_tmpl_id", - string="Product Template", - ) - sale_order_line_ids = fields.One2many( - "sale.order.line", "batch_product_id", states=READONLY_FIELD_STATES - ) - product_uom_category_id = fields.Many2one( - related="product_id.uom_id.category_id", depends=["product_id"] - ) - product_uom_qty = fields.Float( - string="Quantity", - compute="_compute_uom_qty", - precompute=True, - store=True, - digits=[12, 3], - ) - product_uom = fields.Many2one(related="product_id.uom_id") - lst_price = fields.Float( - "Sales Price", - related="product_id.lst_price", - digits="Product Price", - help="""The sale price is managed from the product template. Click on the - 'Configure Variants' button to set the extra attribute prices.""", - ) - product_packaging_id = fields.Many2one( - comodel_name="product.packaging", - string="Packaging", - compute="_compute_product_packaging_id", - store=True, - readonly=False, - precompute=True, - domain="[('sales', '=', True), ('product_id','=',product_id)]", - ) - product_packaging_qty = fields.Float(compute="_compute_product_packaging_qty") - - @api.constrains("product_id", "sale_order_line_ids") - def _check_sale_order_line_products(self): - for product in self: - if any( - line.product_id != product.product_id - for line in product.sale_order_line_ids - ): - raise ValueError("Product must be the same for all Sale Order Lines") - - @api.depends("sale_order_line_ids.product_uom_qty") - def _compute_uom_qty(self): - for product in self: - product.product_uom_qty = sum( - product.sale_order_line_ids.mapped("product_uom_qty") - ) - - @api.depends("product_id", "product_uom_qty", "product_uom") - def _compute_product_packaging_id(self): - for line in self: - # remove packaging if not match the product - if ( - line.product_packaging_id - and line.product_packaging_id.product_id != line.product_id - ): - line.product_packaging_id = False - # suggest always the first packaging - if line.product_id and line.product_uom_qty and line.product_uom: - suggested_packaging = ( - line.product_id.packaging_ids[0] - if line.product_id.packaging_ids - else False - ) - line.product_packaging_id = ( - suggested_packaging or line.product_packaging_id - ) - - @api.depends("product_packaging_id") - def _compute_product_packaging_qty(self): - for product in self: - product.product_packaging_qty = ( - product.product_packaging_id.qty if product.product_packaging_id else 1 - ) diff --git a/sale_order_batch/models/sale_order_line.py b/sale_order_batch/models/sale_order_line.py deleted file mode 100644 index 0af31ae..0000000 --- a/sale_order_batch/models/sale_order_line.py +++ /dev/null @@ -1,57 +0,0 @@ -from odoo import api, fields, models - - -class SaleOrderLine(models.Model): - _inherit = "sale.order.line" - - batch_id = fields.Many2one(related="order_id.batch_id") - batch_product_id = fields.Many2one("sale.order.batch.product", ondelete="restrict") - - def _link_batch_product(self): - lines_with_batch = self.filtered(lambda l: l.batch_id) - for line in lines_with_batch: - batch_id = line.batch_id - batch_product = self.env["sale.order.batch.product"].search( - [ - ("product_id", "=", line.product_id.id), - ("batch_id", "=", batch_id.id), - ], - limit=1, - ) - if not batch_product: - batch_product = self.env["sale.order.batch.product"].create( - {"batch_id": batch_id.id, "product_id": line.product_id.id} - ) - line.batch_product_id = batch_product - - def _unlink_batch_product(self): - lines_to_unlink = self.filtered(lambda l: l.batch_product_id) - batch_products = lines_to_unlink.mapped("batch_product_id") - lines_to_unlink.update({"batch_product_id": False}) - batch_products.filtered(lambda p: len(p.sale_order_line_ids) == 0).unlink() - - def _update_batch_product(self): - lines_with_batch = self.filtered(lambda l: l.batch_id) - lines_without_batch = self - lines_with_batch - lines_with_batch.filtered( - lambda l: l.batch_product_id - and l.batch_product_id.product_id != l.product_id - )._unlink_batch_product() - lines_with_batch._link_batch_product() - lines_without_batch._unlink_batch_product() - - @api.model_create_multi - def create(self, vals_list): - res = super().create(vals_list) - res._link_batch_product() - return res - - def write(self, vals): - res = super().write(vals) - if vals.get("product_id"): - self._update_batch_product() - return res - - def unlink(self): - self._unlink_batch_product() - return super().unlink() diff --git a/sale_order_batch/readme/CONTRIBUTORS.rst b/sale_order_batch/readme/CONTRIBUTORS.rst deleted file mode 100644 index fda28e1..0000000 --- a/sale_order_batch/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Niels Göttsch \ No newline at end of file diff --git a/sale_order_batch/readme/DESCRIPTION.rst b/sale_order_batch/readme/DESCRIPTION.rst deleted file mode 100644 index 35b2b44..0000000 --- a/sale_order_batch/readme/DESCRIPTION.rst +++ /dev/null @@ -1,3 +0,0 @@ -This module adds the possibility to group Sale orders into batches. Attributes of a Sale Order Batch will be written to all -Sale Order. Wenn attached to a batch they can be processed together. On the other hand they cannot be proccesed individual -anymore as log as they are part of a batch. Only Sale Orders in state Qutotation or Quotation Send can be attached to a batch. \ No newline at end of file diff --git a/sale_order_batch/readme/HISTORY.rst b/sale_order_batch/readme/HISTORY.rst deleted file mode 100644 index 592dc2e..0000000 --- a/sale_order_batch/readme/HISTORY.rst +++ /dev/null @@ -1,11 +0,0 @@ -- 16.0.0.0.1: Initial module. -- 16.0.0.1: Add Multi Company ability -- 16.0.0.2: rename product creation methode -- 16.0.0.3: Make validity_date persistent, add batches to SO views -- 16.0.0.4: Remove validity date -- 16.0.0.5: Move product logic to sale order lines -- 16.0.2.1.0: Add "In Progress" and "Cancelled" state -- 16.0.2.2.0: Add invoice status and menues -- 16.0.2.2.1: Add lst_price to view -- 16.0.2.3.0: Add "Reset to Open" -- 16.0.2.3.1: Remove Sale Order from batch on cancelation \ No newline at end of file diff --git a/sale_order_batch/security/ir.model.access.csv b/sale_order_batch/security/ir.model.access.csv deleted file mode 100644 index 14868b2..0000000 --- a/sale_order_batch/security/ir.model.access.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_sale_order_batch_invoicing_payments,sale.order.batch,model_sale_order_batch,account.group_account_invoice,1,1,0,0 -access_sale_order_batch,sale.order.batch,model_sale_order_batch,sales_team.group_sale_salesman,1,1,1,0 -access_sale_order_batch_manager,sale.order.batch.manager,model_sale_order_batch,sales_team.group_sale_manager,1,1,1,1 -access_sale_order_batch_product,sale.order.batch.product,model_sale_order_batch_product,sales_team.group_sale_salesman,1,1,1,1 -sale_order_batch.access_sale_order_batch_cancel_wizard,access_sale_order_batch_cancel_wizard,sale_order_batch.model_sale_order_batch_cancel_wizard,base.group_user,1,1,1,1 diff --git a/sale_order_batch/security/ir_rules.xml b/sale_order_batch/security/ir_rules.xml deleted file mode 100644 index 7abb22e..0000000 --- a/sale_order_batch/security/ir_rules.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Sales Order Batch multi-company - - [('company_id', 'in', company_ids)] - - - diff --git a/sale_order_batch/static/description/icon.png b/sale_order_batch/static/description/icon.png deleted file mode 100644 index 126771222c96d9acfa22f7f2d27f6f4b9ce7feb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12282 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

W$<1~*|NZw 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 diff --git a/sale_order_batch/static/description/index.html b/sale_order_batch/static/description/index.html deleted file mode 100644 index 57dab9b..0000000 --- a/sale_order_batch/static/description/index.html +++ /dev/null @@ -1,435 +0,0 @@ - - - - - -Sale Order Batch - - - -

-

Sale Order Batch

- - -

Beta License: LGPL-3 bakeupboys/nfu

-

This module adds the possibility to group Sale orders into batches. Attributes of a Sale Order Batch will be written to all -Sale Order. Wenn attached to a batch they can be processed together. On the other hand they cannot be proccesed individual -anymore as log as they are part of a batch. Only Sale Orders in state Qutotation or Quotation Send can be attached to a batch.

-

Table of contents

- -
-

Changelog

-
    -
  • 16.0.0.0.1: Initial module.
  • -
  • 16.0.0.1: Add Multi Company ability
  • -
  • 16.0.0.2: rename product creation methode
  • -
  • 16.0.0.3: Make validity_date persistent, add batches to SO views
  • -
  • 16.0.0.4: Remove validity date
  • -
  • 16.0.0.5: Move product logic to sale order lines
  • -
  • 16.0.2.1.0: Add “In Progress” and “Cancelled” state
  • -
  • 16.0.2.2.0: Add invoice status and menues
  • -
  • 16.0.2.2.1: Add lst_price to view
  • -
  • 16.0.2.3.0: Add “Reset to Open”
  • -
  • 16.0.2.3.1: Remove Sale Order from batch on cancelation
  • -
-
-
-

Bug Tracker

-

Bugs are tracked on GitHub Issues. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

-

Do not contact contributors directly about support or help with technical issues.

-
-
-

Credits

-
-

Authors

-
    -
  • BAKEUP
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is part of the bakeupboys/nfu project on GitHub.

-

You are welcome to contribute.

-
-
-
- - diff --git a/sale_order_batch/views/sale_menus.xml b/sale_order_batch/views/sale_menus.xml deleted file mode 100644 index 44413a8..0000000 --- a/sale_order_batch/views/sale_menus.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/sale_order_batch/views/sale_order_batch_product_views.xml b/sale_order_batch/views/sale_order_batch_product_views.xml deleted file mode 100644 index 4f0b7e9..0000000 --- a/sale_order_batch/views/sale_order_batch_product_views.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - sale.order.batch.product.form - sale.order.batch.product - -
-
- -
- -
-
-

- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
diff --git a/sale_order_batch/views/sale_order_batch_views.xml b/sale_order_batch/views/sale_order_batch_views.xml deleted file mode 100644 index bebe390..0000000 --- a/sale_order_batch/views/sale_order_batch_views.xml +++ /dev/null @@ -1,279 +0,0 @@ - - - - sale.order.batch.tree - sale.order.batch - - - - - - - - - - - - - - - sale.order.batch.quotation.tree - sale.order.batch - - - - - - - - - - - - - - sale.order.batch.form - sale.order.batch - -
-
-
- - -
- - - -
-

- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
-
-
- - - sale.order.batch.view.search - sale.order.batch - - - - - - - - - - - Quotation Batches - ir.actions.act_window - sale.order.batch - tree,form,activity - - {'search_default_filter_batch_open': 1} - - - - Order Batches - ir.actions.act_window - sale.order.batch - tree,form,activity - - {'search_default_filter_batch_finished': 1} - - - - Batches to Invoice - ir.actions.act_window - sale.order.batch - tree,form,activity - {'create': False} - [('invoice_status','=','to invoice')] - - -

- No batches to invoice found -

-
-
-
diff --git a/sale_order_batch/views/sale_order_views.xml b/sale_order_batch/views/sale_order_views.xml deleted file mode 100644 index ec67136..0000000 --- a/sale_order_batch/views/sale_order_views.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - sale.order.form.inherit.batch - sale.order - - - - - - - - {'invisible': ['|',('batch_id','!=',False),('state', 'not in', ['sent'])]} - - - {'invisible': ['|',('batch_id','!=',False),('state', 'not in', ['draft'])]} - - - - - - - - - sale.order.tree.inherited.batch - sale.order - - - -
-
-
- - - -
-
- - - sale.order.tree.inherited.batch - sale.order - - - - - - - - -
diff --git a/sale_order_batch/wizard/__init__.py b/sale_order_batch/wizard/__init__.py deleted file mode 100644 index 56c3dec..0000000 --- a/sale_order_batch/wizard/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import sale_order_batch_cancel_wizard diff --git a/sale_order_batch/wizard/sale_order_batch_cancel_wizard.py b/sale_order_batch/wizard/sale_order_batch_cancel_wizard.py deleted file mode 100644 index 56333e3..0000000 --- a/sale_order_batch/wizard/sale_order_batch_cancel_wizard.py +++ /dev/null @@ -1,34 +0,0 @@ -from odoo import api, fields, models - - -class SaleOrderBatchCancelWizard(models.TransientModel): - _name = "sale.order.batch.cancel.wizard" - _description = "Cancel Sale Order Batch Confirmation" - - batch_ids = fields.Many2many( - comodel_name="sale.order.batch", - string="Batches to Cancel", - default=lambda self: self.env["sale.order.batch"].browse( - self.env.context.get("active_ids", []) - ), - ) - - order_ids = fields.Many2many( - comodel_name="sale.order", - string="Orders to Cancel", - compute="_compute_order_ids", - ) - - @api.depends("batch_ids") - def _compute_order_ids(self): - for record in self: - batches = record.batch_ids - record.order_ids = batches.mapped("sale_order_ids") - - def action_cancel(self): - batches = self.batch_ids - batches._action_cancel() - return {"type": "ir.actions.act_window_close"} - - def action_discard(self): - return {"type": "ir.actions.act_window_close"} diff --git a/sale_order_batch/wizard/sale_order_batch_cancel_wizard.xml b/sale_order_batch/wizard/sale_order_batch_cancel_wizard.xml deleted file mode 100644 index 9609fba..0000000 --- a/sale_order_batch/wizard/sale_order_batch_cancel_wizard.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - sale.order.batch.cancel.wizard.form - sale.order.batch.cancel.wizard - -
- - - - - - - - -
-
-
-
-
-
diff --git a/sale_order_batch_stock/README.rst b/sale_order_batch_stock/README.rst deleted file mode 100644 index 53bc29d..0000000 --- a/sale_order_batch_stock/README.rst +++ /dev/null @@ -1,65 +0,0 @@ -============================== -Sale Order Batch Stock Binding -============================== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c32b4440b58e98f3bea5539d78dfa2916d64aebc757c140d78b67b2a2ce288da - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png - :target: https://odoo-community.org/page/development-status - :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png - :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html - :alt: License: LGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-bakeupboys%2Fnfu-lightgray.png?logo=github - :target: https://github.com/bakeupboys/nfu/tree/16.0/sale_order_batch_stock - :alt: bakeupboys/nfu - -|badge1| |badge2| |badge3| - -This module adds Deliverys to Sale ORder Batch Views. - -**Table of contents** - -.. contents:: - :local: - -Changelog -========= - -:0.0.1: Initial module. - -Bug Tracker -=========== - -Bugs are tracked on `GitHub Issues `_. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. - -Do not contact contributors directly about support or help with technical issues. - -Credits -======= - -Authors -~~~~~~~ - -* BAKEUP - -Contributors -~~~~~~~~~~~~ - -* Niels Göttsch - -Maintainers -~~~~~~~~~~~ - -This module is part of the `bakeupboys/nfu `_ project on GitHub. - -You are welcome to contribute. diff --git a/sale_order_batch_stock/__init__.py b/sale_order_batch_stock/__init__.py deleted file mode 100644 index 0650744..0000000 --- a/sale_order_batch_stock/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import models diff --git a/sale_order_batch_stock/__manifest__.py b/sale_order_batch_stock/__manifest__.py deleted file mode 100644 index 950a05a..0000000 --- a/sale_order_batch_stock/__manifest__.py +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Sale Order Batch Stock Binding", - "summary": "Sale Order Batch Stock Bindingh", - "author": "BAKEUP", - "website": "https://www.bakeup.org", - "category": "hidden", - "version": "16.0.0.0.1", - "depends": ["sale_order_batch", "sale_stock"], - "data": ["views/sale_order_batch_views.xml"], - "autoinstall": "True", - "license": "LGPL-3", -} diff --git a/sale_order_batch_stock/models/__init__.py b/sale_order_batch_stock/models/__init__.py deleted file mode 100644 index b2dc7f4..0000000 --- a/sale_order_batch_stock/models/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import sale_order_batch diff --git a/sale_order_batch_stock/models/sale_order_batch.py b/sale_order_batch_stock/models/sale_order_batch.py deleted file mode 100644 index ef245d2..0000000 --- a/sale_order_batch_stock/models/sale_order_batch.py +++ /dev/null @@ -1,25 +0,0 @@ -from odoo import api, fields, models - - -STATES = [("open", "Open"), ("close", "Close")] - - -class SaleOrderBatch(models.Model): - _inherit = "sale.order.batch" - - picking_ids = fields.Many2many( - "stock.picking", compute="_compute_picking_ids", string="Transfers" - ) - delivery_count = fields.Integer( - string="Delivery Orders", compute="_compute_picking_ids" - ) - - @api.depends("sale_order_ids.picking_ids") - def _compute_picking_ids(self): - for batch in self: - pickings = batch.sale_order_ids.mapped("picking_ids") - batch.picking_ids = pickings - batch.delivery_count = len(pickings) - - def action_view_delivery(self): - return self.env["sale.order"]._get_action_view_picking(self.picking_ids) diff --git a/sale_order_batch_stock/readme/CONTRIBUTORS.rst b/sale_order_batch_stock/readme/CONTRIBUTORS.rst deleted file mode 100644 index fda28e1..0000000 --- a/sale_order_batch_stock/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Niels Göttsch \ No newline at end of file diff --git a/sale_order_batch_stock/readme/DESCRIPTION.rst b/sale_order_batch_stock/readme/DESCRIPTION.rst deleted file mode 100644 index 2836d2a..0000000 --- a/sale_order_batch_stock/readme/DESCRIPTION.rst +++ /dev/null @@ -1 +0,0 @@ -This module adds Deliverys to Sale ORder Batch Views. diff --git a/sale_order_batch_stock/readme/HISTORY.rst b/sale_order_batch_stock/readme/HISTORY.rst deleted file mode 100644 index e986fe7..0000000 --- a/sale_order_batch_stock/readme/HISTORY.rst +++ /dev/null @@ -1 +0,0 @@ -:0.0.1: Initial module. \ No newline at end of file diff --git a/sale_order_batch_stock/static/description/icon.png b/sale_order_batch_stock/static/description/icon.png deleted file mode 100644 index 126771222c96d9acfa22f7f2d27f6f4b9ce7feb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12282 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

W$<1~*|NZw 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 diff --git a/sale_order_batch_stock/static/description/index.html b/sale_order_batch_stock/static/description/index.html deleted file mode 100644 index d5c33c1..0000000 --- a/sale_order_batch_stock/static/description/index.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - - -Sale Order Batch Stock Binding - - - -

-

Sale Order Batch Stock Binding

- - -

Beta License: LGPL-3 bakeupboys/nfu

-

This module adds Deliverys to Sale ORder Batch Views.

-

Table of contents

- -
-

Changelog

- --- - - - -
0.0.1:Initial module.
-
-
-

Bug Tracker

-

Bugs are tracked on GitHub Issues. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

-

Do not contact contributors directly about support or help with technical issues.

-
-
-

Credits

-
-

Authors

-
    -
  • BAKEUP
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is part of the bakeupboys/nfu project on GitHub.

-

You are welcome to contribute.

-
-
-
- - diff --git a/sale_order_batch_stock/views/sale_order_batch_views.xml b/sale_order_batch_stock/views/sale_order_batch_views.xml deleted file mode 100644 index 19a9e9e..0000000 --- a/sale_order_batch_stock/views/sale_order_batch_views.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - sale.order.batch.form.stock - sale.order.batch - - - - - - - - diff --git a/setup/sale_order_batch/odoo/addons/sale_order_batch b/setup/sale_order_batch/odoo/addons/sale_order_batch deleted file mode 120000 index 80470a0..0000000 --- a/setup/sale_order_batch/odoo/addons/sale_order_batch +++ /dev/null @@ -1 +0,0 @@ -../../../../sale_order_batch \ No newline at end of file diff --git a/setup/sale_order_batch/setup.py b/setup/sale_order_batch/setup.py deleted file mode 100644 index 28c57bb..0000000 --- a/setup/sale_order_batch/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -) diff --git a/setup/sale_order_batch_stock/odoo/addons/sale_order_batch_stock b/setup/sale_order_batch_stock/odoo/addons/sale_order_batch_stock deleted file mode 120000 index cf5c737..0000000 --- a/setup/sale_order_batch_stock/odoo/addons/sale_order_batch_stock +++ /dev/null @@ -1 +0,0 @@ -../../../../sale_order_batch_stock \ No newline at end of file diff --git a/setup/sale_order_batch_stock/setup.py b/setup/sale_order_batch_stock/setup.py deleted file mode 100644 index 28c57bb..0000000 --- a/setup/sale_order_batch_stock/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import setuptools - -setuptools.setup( - setup_requires=['setuptools-odoo'], - odoo_addon=True, -)