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 1267712..0000000 Binary files a/sale_order_batch/static/description/icon.png and /dev/null differ 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 1267712..0000000 Binary files a/sale_order_batch_stock/static/description/icon.png and /dev/null differ 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, -)