diff --git a/models/sale_project.py b/models/sale_project.py index 77e2af00f5fe206fa9b2efbb8aa1610241d6e43b..710e37d70c812a943cae913ca4d49d5e364600b5 100644 --- a/models/sale_project.py +++ b/models/sale_project.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) from datetime import datetime +from random import randint from odoo import _, api, fields, models @@ -43,7 +44,9 @@ class SaleProject(models.Model): ondelete="cascade", ) # Related fields from sale order - state = fields.Selection(related="sale_order_id.state", store=True) + state = fields.Selection( + related="sale_order_id.state", store=True, string="État de la commande" + ) partner_id = fields.Many2one( "res.partner", related="sale_order_id.partner_id", store=True, string="Client" ) @@ -139,26 +142,42 @@ class SaleProject(models.Model): ) # Fields computed from list of interventions intervention_counter = fields.Integer( - compute="_compute_intervention_values", string="Nombre d'interventions" + compute="_compute_intervention_values", + string="Nombre d'interventions", + compute_sudo="True", ) intervention_total_length = fields.Float( - compute="_compute_intevention_values", string="Longeur interventions" + compute="_compute_intervention_values", + string="Longeur interventions", + group_operator="sum", + store=True, + compute_sudo="True", ) intervention_total_surface = fields.Integer( - compute="_compute_intevention_values", string="Surface interventions" + compute="_compute_intervention_values", + string="Surface interventions", + group_operator="sum", + store=True, + compute_sudo="True", ) intervention_total_plant_qty = fields.Integer( - compute="_compute_intevention_values", string="Nb plants interventions" + compute="_compute_intervention_values", + string="Nb plants interventions", + group_operator="sum", + store=True, + compute_sudo="True", ) intervention_type_ids = fields.Many2many( comodel_name="product.template", string="Types d'intervention", compute="_compute_intervention_values", + compute_sudo="True", ) intervention_financial_help_ids = fields.Many2many( comodel_name="sale.financial.help", string="Aides financières", compute="_compute_intervention_values", + compute_sudo="True", ) sale_order_line_ids = fields.One2many( @@ -340,7 +359,11 @@ class SaleProjectAdvancement(models.Model): _description = "Avancement" _order = "name" + def _get_default_color(self): + return randint(1, 11) + name = fields.Char(string="Avancement", required=True) + color = fields.Integer(string="Color Index", default=_get_default_color) class SaleProjectSaison(models.Model): diff --git a/views/sale_order_view.xml b/views/sale_order_view.xml index 3d2e9604e79cbc9b5dbcebba7de0ccd67baf35cd..90488bc04c7fca5f910b167e932c8f59e3ff61a1 100644 --- a/views/sale_order_view.xml +++ b/views/sale_order_view.xml @@ -41,9 +41,14 @@ string="Projets" > <tree editable="bottom"> + <field name="id" invisible="1" /> <field name="name" optional="show" readonly="True" /> <field name="state" invisible="1" /> - <field name="project_subvention_id" optional="show" /> + <field + name="project_subvention_id" + optional="show" + attrs="{'readonly': [('id','!=', False)]}" + /> <field name="user_id" optional="show" /> <field name="admin_state_id" optional="show" /> <field @@ -130,6 +135,7 @@ <field name="arch" type="xml"> <tree editable="top"> <field name="name" /> + <field name="color" widget="color_picker" /> </tree> </field> </record> diff --git a/views/sale_project_view.xml b/views/sale_project_view.xml index de631b311d650c5916155357dda8bd0d02864492..789ed4507e4ca4cc75fc59cc0262a927951da193 100644 --- a/views/sale_project_view.xml +++ b/views/sale_project_view.xml @@ -29,7 +29,7 @@ <group name="required_infos" string="Projet"> <group> - <field name="project_subvention_id" /> + <field name="project_subvention_id" readonly="True" /> <field name="geo_sector_id" /> <field name="user_id" /> </group> @@ -128,6 +128,7 @@ name="project_subvention_id" optional="show" options="{'no_create_edit': True}" + readonly="True" /> <field name="user_id" @@ -137,14 +138,8 @@ <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}" + widget="badge" + options="{'color_field': 'color', 'no_create_edit': True}" /> <field name="intervention_type_ids" @@ -161,16 +156,28 @@ name="sale_project_advancement_ids" optional="hide" widget="many2many_tags" - options="{'no_create_edit': True}" + options="{'color_field': 'color', '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" /> + <field + name="intervention_total_length" + sum="Longueur" + optional="hide" + /> + <field + name="intervention_total_surface" + sum="Surface" + optional="hide" + /> + <field + name="intervention_total_plant_qty" + sum="Nb de Plants" + optional="hide" + /> <button type="object" name="action_interventions" @@ -185,9 +192,25 @@ <field name="model">sale.project</field> <field name="arch" type="xml"> <search string="Recherche de Projet de Création"> + <field name="name" /> <field name="sale_order_id" /> <field name="project_subvention_id" /> + <field name="partner_id" /> + <field name="partner_geo_sector_id" /> + <field name="user_id" /> + <field name="sale_user_id" /> + <filter + string="Paillage Déroulé" + name="paillage" + domain="[('sale_project_advancement_ids', 'in', %(ap_sale_project.sale_product_advancement_1)d)]" + /> <group expand="0" string="Group By"> + <filter + name="group_by_saison" + string="Saison" + domain="[]" + context="{'group_by':'saison_id'}" + /> <filter name="group_by_order" string="Devis" @@ -205,11 +228,26 @@ name="sale_project_admin_state" context="{'group_by': 'admin_state_id'}" /> + <filter + string="État de la commande" + name="group_by_state" + context="{'group_by': 'state'}" + /> <filter string="Client" name="group_by_partner_id" context="{'group_by': 'partner_id'}" /> + <filter + string="Référent" + name="group_by_user_id" + context="{'group_by': 'user_id'}" + /> + <filter + string="Vendeur" + name="group_by_sale_user_id" + context="{'group_by': 'sale_user_id'}" + /> </group> </search> </field>