From d22448f0bd580345a066afc5daf16b9c19f22c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com> Date: Mon, 27 Jun 2022 15:47:07 +0200 Subject: [PATCH] [ADD] suivi projet --- models/sale_intervention.py | 2 +- models/sale_project.py | 66 +++++++++++++++++++++++++++++++-- views/sale_project_view.xml | 73 +++++++++++++++++++++++++++++++++---- 3 files changed, 129 insertions(+), 12 deletions(-) diff --git a/models/sale_intervention.py b/models/sale_intervention.py index 7974887..5b5902e 100644 --- a/models/sale_intervention.py +++ b/models/sale_intervention.py @@ -106,7 +106,7 @@ class SaleIntervention(models.Model): states={"draft": [("readonly", False)], "sent": [("readonly", False)]}, ) collarette_calc = fields.Boolean( - string="Calculer prix en m.l ?", + string="Collerette Haie", readonly=True, states={"draft": [("readonly", False)], "sent": [("readonly", False)]}, ) diff --git a/models/sale_project.py b/models/sale_project.py index f7a9933..77e2af0 100644 --- a/models/sale_project.py +++ b/models/sale_project.py @@ -42,10 +42,37 @@ class SaleProject(models.Model): required=True, ondelete="cascade", ) + # Related fields from sale order state = fields.Selection(related="sale_order_id.state", store=True) partner_id = fields.Many2one( "res.partner", related="sale_order_id.partner_id", store=True, string="Client" ) + sale_tag_ids = fields.Many2many( + related="sale_order_id.tag_ids", string="Étiquettes" + ) + sale_name = fields.Char(related="sale_order_id.name", string="Réf devis") + sale_user_id = fields.Many2one(related="sale_order_id.user_id", string="Vendeur") + sale_amount = fields.Monetary( + related="sale_order_id.amount_total", string="Montant total devis" + ) + sale_invoice_status = fields.Selection( + related="sale_order_id.invoice_status", string="État de la facture" + ) + currency_id = fields.Many2one( + related="sale_order_id.currency_id", + depends=["sale_order_id.currency_id"], + store=True, + string="Monnaie", + readonly=True, + ) + + # Related fields from partner + partner_city = fields.Char(related="partner_id.city", string="Ville Client") + partner_phone = fields.Char(related="partner_id.phone", string="Tél Client") + partner_email = fields.Char(related="partner_id.email", string="Email Client") + partner_geo_sector_id = fields.Many2one( + related="partner_id.geo_sector_id", string="Secteur Client" + ) name = fields.Char("Nom", default=lambda self: _("Nouveau projet")) @@ -110,8 +137,28 @@ class SaleProject(models.Model): readonly=True, states={"draft": [("readonly", False)], "sent": [("readonly", False)]}, ) + # Fields computed from list of interventions intervention_counter = fields.Integer( - compute="_compute_intervention_counter", string="Nombre d'interventions" + compute="_compute_intervention_values", string="Nombre d'interventions" + ) + intervention_total_length = fields.Float( + compute="_compute_intevention_values", string="Longeur interventions" + ) + intervention_total_surface = fields.Integer( + compute="_compute_intevention_values", string="Surface interventions" + ) + intervention_total_plant_qty = fields.Integer( + compute="_compute_intevention_values", string="Nb plants interventions" + ) + intervention_type_ids = fields.Many2many( + comodel_name="product.template", + string="Types d'intervention", + compute="_compute_intervention_values", + ) + intervention_financial_help_ids = fields.Many2many( + comodel_name="sale.financial.help", + string="Aides financières", + compute="_compute_intervention_values", ) sale_order_line_ids = fields.One2many( @@ -132,10 +179,23 @@ class SaleProject(models.Model): # Computed fields / Search Fields # ------------------------------------------------------ @api.depends("intervention_ids") - def _compute_intervention_counter(self): + def _compute_intervention_values(self): for res in self: res.intervention_counter = self.env["sale.intervention"].search_count( - [("project_id", "=", self.id)] + [("project_id", "=", res.id)] + ) + res.intervention_total_length = sum( + res.intervention_ids.mapped("intervention_length") + ) + res.intervention_total_surface = sum(res.intervention_ids.mapped("surface")) + res.intervention_total_plant_qty = sum( + res.intervention_ids.mapped("plant_qty") + ) + res.intervention_type_ids = res.intervention_ids.mapped( + "intervention_type_id" + ) + res.intervention_financial_help_ids = res.intervention_ids.mapped( + "financial_help_ids" ) def _compute_is_sale_project_suivi_empty(self): diff --git a/views/sale_project_view.xml b/views/sale_project_view.xml index 47c4c9a..de631b3 100644 --- a/views/sale_project_view.xml +++ b/views/sale_project_view.xml @@ -105,15 +105,72 @@ <field name="name">Tree view for sale project</field> <field name="model">sale.project</field> <field name="arch" type="xml"> - <tree string="Projet de Création" create="false"> - <field name="name" optional="show" readonly="True" /> - <field name="sale_order_id" optional="show" /> + <tree string="Projet de Création" create="false" editable="bottom"> + <button name="action_project_form" type="object" icon="fa-eye" /> <field name="partner_id" optional="show" /> - <field name="state" invisible="1" /> - <field name="project_subvention_id" optional="show" /> - <field name="user_id" optional="show" /> - <field name="admin_state_id" optional="show" /> - <field name="intervention_ids" optional="hide" /> + <field name="partner_city" optional="hide" /> + <field name="partner_phone" optional="hide" /> + <field name="partner_email" optional="hide" /> + <field name="partner_geo_sector_id" optional="hide" /> + <field name="sale_order_id" optional="show" readonly="True" /> + <field + name="sale_tag_ids" + optional="hide" + widget="many2many_tags" + options="{'color_field': 'color', 'no_create_edit': True}" + /> + <field name="sale_user_id" optional="hide" /> + <field name="state" optional="hide" /> + <field name="sale_amount" optional="hide" widget="monetary" /> + <field name="sale_invoice_status" optional="hide" /> + <field name="name" optional="show" readonly="True" /> + <field + name="project_subvention_id" + optional="show" + options="{'no_create_edit': True}" + /> + <field + name="user_id" + optional="show" + options="{'no_create_edit': True}" + /> + <field + name="admin_state_id" + optional="show" + options="{'no_create_edit': True}" + /> + <field + name="sale_project_suivi_ids" + optional="hide" + widget="many2many_tags" + domain="[('sale_project_admin_state_id', '=', admin_state_id)]" + options="{'no_create_edit': True}" + /> + <field + name="intervention_type_ids" + optional="hide" + widget="many2many_tags" + options="{'no_create_edit': True}" + /> + <field + name="saison_id" + optional="show" + options="{'no_create_edit': True}" + /> + <field + name="sale_project_advancement_ids" + optional="hide" + widget="many2many_tags" + options="{'no_create_edit': True}" + /> + <field + name="intervention_financial_help_ids" + optional="hide" + widget="many2many_tags" + /> + <field name="intervention_total_length" optional="hide" /> + <field name="intervention_total_surface" optional="hide" /> + <field name="intervention_total_plant_qty" optional="hide" /> <button type="object" name="action_interventions" -- GitLab