From bb02ffd551774a145eb3bbc00b92f342c4bebbed Mon Sep 17 00:00:00 2001 From: Lindsay Date: Wed, 16 Oct 2024 08:30:51 +0200 Subject: [PATCH] [IMP] Add the possibility to have more than 1 vehicle by PO Initially, there was only one vehicle for one PO. Now, if the vehicle is set on the PO, all the PO lines are related to this vehicle But if the vehicle is not set on the PO, the user can decide to have different vehicles on every line. Use case is a grouped purchase of several items for several vehicles. --- fleet_vehicle_purchase/models/__init__.py | 1 + .../models/fleet_vehicle.py | 12 +++++-- .../models/purchase_order.py | 10 ------ .../models/purchase_order_line.py | 36 +++++++++++++++++++ .../views/purchase_order.xml | 11 ++++++ 5 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 fleet_vehicle_purchase/models/purchase_order_line.py diff --git a/fleet_vehicle_purchase/models/__init__.py b/fleet_vehicle_purchase/models/__init__.py index f84e673b..2e882ded 100644 --- a/fleet_vehicle_purchase/models/__init__.py +++ b/fleet_vehicle_purchase/models/__init__.py @@ -1,2 +1,3 @@ from . import purchase_order +from . import purchase_order_line from . import fleet_vehicle diff --git a/fleet_vehicle_purchase/models/fleet_vehicle.py b/fleet_vehicle_purchase/models/fleet_vehicle.py index 1950083b..75e42626 100644 --- a/fleet_vehicle_purchase/models/fleet_vehicle.py +++ b/fleet_vehicle_purchase/models/fleet_vehicle.py @@ -15,8 +15,16 @@ class FleetVehicle(models.Model): @api.depends("purchase_order_ids") def _compute_purchase_order_count(self): - for record in self: - record.purchase_order_count = len(record.purchase_order_ids) + orders = self.env["purchase.order"].read_group( + [("fleet_vehicle_id", "in", self.ids)], + ["fleet_vehicle_id"], + ["fleet_vehicle_id"], + ) + mapped_data = { + po["fleet_vehicle_id"][0]: po["fleet_vehicle_id_count"] for po in orders + } + for rec in self: + rec.purchase_order_count = mapped_data.get(rec.id, 0) def action_view_purchase_orders(self): self.ensure_one() diff --git a/fleet_vehicle_purchase/models/purchase_order.py b/fleet_vehicle_purchase/models/purchase_order.py index 187c0111..e9d7f306 100644 --- a/fleet_vehicle_purchase/models/purchase_order.py +++ b/fleet_vehicle_purchase/models/purchase_order.py @@ -9,13 +9,3 @@ class PurchaseOrder(models.Model): _inherit = "purchase.order" fleet_vehicle_id = fields.Many2one("fleet.vehicle", string="Vehicle") - - -class PurchaseOrderLine(models.Model): - - _inherit = "purchase.order.line" - - def _prepare_account_move_line(self, move=False): - result = super()._prepare_account_move_line(move) - result["vehicle_id"] = self.order_id.fleet_vehicle_id.id - return result diff --git a/fleet_vehicle_purchase/models/purchase_order_line.py b/fleet_vehicle_purchase/models/purchase_order_line.py new file mode 100644 index 00000000..7fd8bf73 --- /dev/null +++ b/fleet_vehicle_purchase/models/purchase_order_line.py @@ -0,0 +1,36 @@ +# Copyright 2024 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class PurchaseOrderLine(models.Model): + _inherit = "purchase.order.line" + + fleet_vehicle_id = fields.Many2one( + comodel_name="fleet.vehicle", + compute="_compute_fleet_vehicle_id", + store=True, + readonly=False, + ) + fleet_vehicle_from_po = fields.Boolean( + compute="_compute_fleet_vehicle_from_po", store=True + ) + + @api.depends("fleet_vehicle_from_po") + def _compute_fleet_vehicle_id(self): + for rec in self: + if rec.fleet_vehicle_from_po: + rec.fleet_vehicle_id = rec.order_id.fleet_vehicle_id + + @api.depends("order_id", "order_id.fleet_vehicle_id") + def _compute_fleet_vehicle_from_po(self): + for rec in self: + rec.fleet_vehicle_from_po = bool(rec.order_id.fleet_vehicle_id) + + def _prepare_account_move_line(self, move=False): + self.ensure_one() + result = super()._prepare_account_move_line(move) + if self.fleet_vehicle_id: + result["vehicle_id"] = self.fleet_vehicle_id.id + return result diff --git a/fleet_vehicle_purchase/views/purchase_order.xml b/fleet_vehicle_purchase/views/purchase_order.xml index 29d30b07..212775b5 100644 --- a/fleet_vehicle_purchase/views/purchase_order.xml +++ b/fleet_vehicle_purchase/views/purchase_order.xml @@ -11,6 +11,17 @@ + + + +