From 8e16f780b24be19dd29f6b3eb3032ef72be17354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com> Date: Wed, 8 Jun 2022 08:08:11 +0200 Subject: [PATCH] [ADD] new calculations for hedge and collarettes --- models/sale_intervention.py | 39 +++++++++++++++++++++++++++++--- views/sale_intervention_view.xml | 4 ++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/models/sale_intervention.py b/models/sale_intervention.py index 31127df..ab4e554 100644 --- a/models/sale_intervention.py +++ b/models/sale_intervention.py @@ -105,6 +105,11 @@ class SaleIntervention(models.Model): readonly=True, states={"draft": [("readonly", False)], "sent": [("readonly", False)]}, ) + collarette_calc = fields.Boolean( + string="Calculer prix en m.l ?", + readonly=True, + states={"draft": [("readonly", False)], "sent": [("readonly", False)]}, + ) # Mulch Fields mulch_id = fields.Many2one( @@ -570,6 +575,7 @@ class SaleIntervention(models.Model): ) @api.depends( + "project_id.intervention_ids.intervention_length", "project_subvention_id", "intervention_length", "plant_qty", @@ -650,50 +656,77 @@ class SaleIntervention(models.Model): # Then we create ordered lists with : # products, quantities and partners + + # Service + # For service we need to take into account the sumed length + # of all interventions of the same type + + # Get all interventions of same type in the same project + interventions = self.project_id.intervention_ids.filtered( + lambda r: r.intervention_type_id == rec.intervention_type_id + ) + service_qty = ( + sum(interventions.mapped("intervention_length")) + if rec.intervention_uom_name == "m" + else multiplicator + ) products = [ service_product_id, ] quantities = [ - multiplicator, + service_qty, ] partners = [ partner, ] + + # Collarette + coll_qty = rec.collarette_qty or 0 if rec.is_collarette: + # In case collarette price is calculated per meter iso unit + if rec.intervention_uom_name == "m" and rec.collarette_calc: + coll_qty = rec.intervention_length products.append(collarette_product_id) - quantities.append(rec.collarette_qty or 0) + quantities.append(coll_qty or 0) partners.append(partner) + # Mulch if rec.mulch_id: products.append(rec.mulch_id) quantities.append(rec.mulch_qty or 0) partners.append(partner) + # Mulch 2 if rec.mulch2_id: products.append(rec.mulch2_id) quantities.append(rec.mulch2_qty or 0) partners.append(partner) + # Staples if rec.mulch_has_staples or rec.mulch2_has_staples: products.append(staples_product_id) quantities.append(rec.mulch_qty * 2 or 0) partners.append(partner) + # High Protections if rec.high_protection_id: products.append(rec.high_protection_id) quantities.append(rec.high_protection_qty or 0) partners.append(partner) + # Stakes if rec.stake_id: products.append(rec.stake_id) quantities.append(rec.stake_qty or 0) partners.append(partner) + # Low Protections if rec.low_protection_id: products.append(rec.low_protection_id) quantities.append(rec.low_protection_qty or 0) partners.append(partner) + # Markers if rec.marker_id: products.append(rec.marker_id) quantities.append(rec.marker_qty or 0) @@ -735,7 +768,7 @@ class SaleIntervention(models.Model): rec.price = ( multiplicator * (rec.plant_price + rec.service_price) - + rec.collarette_qty * rec.collarette_price + + coll_qty * rec.collarette_price + rec.mulch_qty * (rec.mulch_price + 2 * rec.staple1_price) + rec.mulch2_qty * (rec.mulch2_price + 2 * rec.staple2_price) + rec.high_protection_qty * rec.high_protection_price diff --git a/views/sale_intervention_view.xml b/views/sale_intervention_view.xml index 97123a4..115121d 100644 --- a/views/sale_intervention_view.xml +++ b/views/sale_intervention_view.xml @@ -86,6 +86,10 @@ name="collarette_qty" attrs="{'invisible': [('is_collarette', '!=', True)]}" /> + <field + name="collarette_calc" + attrs="{'invisible': [('is_collarette', '!=', True), ('intervention_uom_name', '!=', 'm')]}" + /> </group> <group name="marker"> <field -- GitLab