diff --git a/sale_order_batch/models/sale_order.py b/sale_order_batch/models/sale_order.py index 3d93837..8205447 100644 --- a/sale_order_batch/models/sale_order.py +++ b/sale_order_batch/models/sale_order.py @@ -5,9 +5,12 @@ from odoo.exceptions import UserError class SaleOrder(models.Model): _inherit = "sale.order" - batch_id = fields.Many2one("sale.order.batch") + batch_id = fields.Many2one("sale.order.batch", copy=False) def action_add_to_batch(self): + """ + TODO: Add Wizard to choose between batches if more than one existis. Picking the first one for now. + """ batch = self.env["sale.order.batch"].search([("state", "=", "open")], limit=1) if not batch: batch = self.env["sale.order.batch"].create() @@ -24,3 +27,24 @@ class SaleOrder(models.Model): if invalid_orders: raise UserError(_(f"Sale Order not in State Draft or Sent: {', '.join(invalid_orders)}")) return super().write(vals) + + 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_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, + # 'target': '', + } diff --git a/sale_order_batch/models/sale_order_batch.py b/sale_order_batch/models/sale_order_batch.py index 90fd699..bb2069a 100644 --- a/sale_order_batch/models/sale_order_batch.py +++ b/sale_order_batch/models/sale_order_batch.py @@ -42,6 +42,7 @@ class SaleOrderBatch(models.Model): sale_order_ids = fields.One2many("sale.order", "batch_id") sale_order_count = fields.Integer(compute="_compute_sale_order_count") sale_order_line_ids = fields.Many2many("sale.order.line", compute="_compute_sale_order_line_ids", store=True) + amount_total = fields.Float(compute="_compute_amount_total", string="Total") product_ids = fields.Many2many("product.product", compute="_compute_product_ids") product_count = fields.Integer(compute="_compute_product_count") @@ -68,6 +69,11 @@ class SaleOrderBatch(models.Model): for sale_order in self: sale_order.sale_order_line_ids = sale_order.sale_order_ids.mapped("order_line") + @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: @@ -97,6 +103,13 @@ class SaleOrderBatch(models.Model): result = {"type": "ir.actions.act_window_close"} return result + def action_confirm(self): + for batch in self: + orders = batch.with_context(bypass_batch=True).sale_order_ids + orders.action_confirm() + batch.state = "closed" + return True + @api.model_create_multi def create(self, vals_list): for vals in vals_list: @@ -111,5 +124,4 @@ class SaleOrderBatch(models.Model): vals["name"] = self.env["ir.sequence"].next_by_code("sale.order.batch", sequence_date=seq_date) or _( "New" ) - return super().create(vals_list) diff --git a/sale_order_batch/views/sale_order_batch_views.xml b/sale_order_batch/views/sale_order_batch_views.xml index 51ac901..e324f84 100644 --- a/sale_order_batch/views/sale_order_batch_views.xml +++ b/sale_order_batch/views/sale_order_batch_views.xml @@ -5,10 +5,11 @@ sale.order.batch - - + + + @@ -19,6 +20,15 @@
+
@@ -51,12 +61,35 @@ name="sale_order_ids" widget="many2many_tags" domain="[('state','in',['draft','sent']),('batch_id','=',False)]" + attrs="{'readonly': [('state','=','closed')]}" /> - + + + + + + + + + + + + + + + + + + + +
+ + +
@@ -72,12 +105,8 @@ - + @@ -87,18 +116,6 @@ ir.actions.act_window sale.order.batch tree,form - [] - {'search_default_filter_property_open': 1} + {'search_default_filter_batch_open': 1} - - - Action Open Orders - ir.actions.act_window - sale.order - tree,form - [('batch_id','=',self.acti)] - {'search_default_filter_property_open': 1} - - - diff --git a/sale_order_batch/views/sale_order_views.xml b/sale_order_batch/views/sale_order_views.xml index 0851fb4..04be557 100644 --- a/sale_order_batch/views/sale_order_views.xml +++ b/sale_order_batch/views/sale_order_views.xml @@ -1,13 +1,40 @@ - + sale.order.form.inherit.batch sale.order - + + + {'invisible': ['|',('batch_id','!=',False),('state', 'not in', ['sent'])]} + + + {'invisible': ['|',('batch_id','!=',False),('state', 'not in', ['draft'])]}