diff --git a/models/res_partner.py b/models/res_partner.py index f4a8c8c02f778606f22bb470516cd2e78b83d499..e4aa9604dfdaab818316b92d910dbc42d07ceccf 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import api, fields, models class ScopPartner(models.Model): @@ -67,6 +67,40 @@ class ScopPartner(models.Model): direccte_id = fields.Many2one("res.partner.ministere", string="DDETS rattachée") + ministry_state = fields.Selection( + [ + ("published", "Publié"), + ("removed", "Radié"), + ], + string="Etat liste ministère", + compute="_compute_ministry_state", + store=True + ) + ministry_publication_date = fields.Date( + string="Date de parution au JO" + ) + + # ------------------------------------------------------ + # Computed fields + # ------------------------------------------------------ + @api.depends( + "liste_ministere_ids", + "liste_ministere_ids.status", + "liste_ministere_ids.state_ddets", + ) + def _compute_ministry_state(self): + for partner in self: + if partner.liste_ministere_ids: + closed_lm = partner.liste_ministere_ids.filtered( + lambda l: l.status in ["6_transmis", "7_cloture"] + ).sorted("date_decision_ddets", reverse=True) + if not closed_lm: + partner.ministry_state = False + elif closed_lm[0].state_ddets == "3_validated": + partner.ministry_state = "published" + elif closed_lm[0].state_ddets == "4_removed": + partner.ministry_state = "removed" + # ------------------------------------------------------ # Actions # ------------------------------------------------------ diff --git a/models/scop_liste_ministere.py b/models/scop_liste_ministere.py index 777f315c4177bbfce745c370d6465f53765c73d8..b1493185d753a16972d1c4d924dd5530d8d44c33 100644 --- a/models/scop_liste_ministere.py +++ b/models/scop_liste_ministere.py @@ -103,16 +103,17 @@ class ScopListeMinistere(models.Model): default="1_ouvert", ) # TODO: voir si on active ces champs - # state_ddets = fields.Selection( - # [ - # ("1_waiting", "En attente"), - # ("2_notice", "Mise en demeure"), - # ("3_validated", "Validé"), - # ("4_removed", "Radié"), - # ], - # string="Statut DDETS", - # tracking=1, - # ) + state_ddets = fields.Selection( + [ + ("1_waiting", "En attente"), + ("2_notice", "Mise en demeure"), + ("3_validated", "Validé"), + ("4_removed", "Radié"), + ], + string="Statut DDETS", + tracking=1, + ) + date_decision_ddets = fields.Date("Date de décision DDETS") type_lm = fields.Selection( string="Type de dossier (select)", @@ -1441,6 +1442,12 @@ class ScopListeMinistere(models.Model): "context": ctx, } + def get_published_coop(self): + return self.mapped("partner_id").filtered(lambda p: p.ministry_state == "published") + + def get_removed_coop(self): + return self.mapped("partner_id").filtered(lambda p: p.ministry_state == "removed") + # ------------------------------------------------------ # Special endpoint # ------------------------------------------------------ diff --git a/static/src/js/liste_ministere_dashboard.js b/static/src/js/liste_ministere_dashboard.js index 2836813d741bb69c94559ece1404dc09d2cac9c5..25b03570957e06979be1f7158299d4fa0c684899 100644 --- a/static/src/js/liste_ministere_dashboard.js +++ b/static/src/js/liste_ministere_dashboard.js @@ -8,12 +8,13 @@ odoo.define("cgscop_liste_ministere.liste_ministere_dashboard", function (requir const Controller = qweb.Controller.extend({ events: _.extend({}, qweb.Controller.prototype.events, { "click .show-lm-folder": "_onClickShowList", + "click .show-lm-noticed": "_onClickShowNoticed", + "click .show-coop": "_onClickShowCoop", }), // -------------------------------------------------------------------------- // Handlers // -------------------------------------------------------------------------- - _onClickShowList: function (e) { e.preventDefault(); const type_lm = e.currentTarget.dataset.type_lm; @@ -36,6 +37,44 @@ odoo.define("cgscop_liste_ministere.liste_ministere_dashboard", function (requir this.do_action(action); }, + _onClickShowNoticed: function (e) { + e.preventDefault(); + var action = { + type: "ir.actions.act_window", + res_model: "scop.liste.ministere", + view_mode: "tree,pivot,graph,form", + views: [ + [false, "list"], + [false, "pivot"], + [false, "graph"], + [false, "form"], + ], + domain: [["state_ddets", "=", "2_notice"]], + target: "current", + name: "Dossiers Liste Ministère - Mises en demeure", + }; + this.do_action(action); + }, + + _onClickShowCoop: function (e) { + e.preventDefault(); + const ministry_state = e.currentTarget.dataset.ministry_state; + const treeview = parseInt(e.currentTarget.dataset.treeview); + var action = { + type: "ir.actions.act_window", + res_model: "res.partner", + view_mode: "tree,form", + views: [ + [treeview, "list"], + [false, "form"], + ], + domain: [["is_cooperative", "=", true], ["ministry_state", "=", ministry_state]], + target: "current", + name: "Coopératives", + }; + this.do_action(action); + }, + // -------------------------------------------------------------------------- // Commons // -------------------------------------------------------------------------- diff --git a/views/scop_liste_ministere.xml b/views/scop_liste_ministere.xml index 78598036f93cb6504969c784a71508cc5116c158..f27b2927f510ccdae675b704c1ec45577c45ca60 100644 --- a/views/scop_liste_ministere.xml +++ b/views/scop_liste_ministere.xml @@ -495,6 +495,8 @@ options="{'no_create': 1, 'no_edit': 1}" /> <field name="ddets_notice_date" /> + <field name="state_ddets" /> + <field name="date_decision_ddets" /> </group> <group string="Qualité du dossier"> <div class="mb-2"> @@ -1300,11 +1302,10 @@ <!-- Coop sur la liste --> <div class="col-3"> <div class="card text-center py-2 border-0 shadow-sm"> - <a href="#"> + <a href="#" class="show-coop" data-ministry_state="published" data-treeview="%(cgscop_partner.view_partner_cooperative_tree)d"> <div class="card-text text-success"> <div class="display-4"> - ## -<!-- <t t-esc="len(lm_state_records) if lm_state_records else 0" />--> + <t t-esc="len(records.get_published_coop())" /> </div> <div> Coopératives sur la liste @@ -1316,11 +1317,10 @@ <!-- Mise en demeure --> <div class="col-3"> <div class="card text-center py-2 border-0 shadow-sm"> - <a href="#"> + <a href="#" class="show-lm-noticed"> <div class="card-text text-warning"> <div class="display-4"> - ## -<!-- <t t-esc="len(lm_state_records) if lm_state_records else 0" />--> + <t t-esc="len(records.filtered(lambda l: l.state_ddets == '2_notice'))" /> </div> <div> Mises en demeure @@ -1332,11 +1332,10 @@ <!-- Radiées --> <div class="col-3"> <div class="card text-center py-2 border-0 shadow-sm"> - <a href="#"> + <a href="#" class="show-coop" data-ministry_state="removed" data-treeview="%(cgscop_partner.view_partner_cooperative_tree)d"> <div class="card-text text-danger"> <div class="display-4"> - ## -<!-- <t t-esc="len(lm_state_records) if lm_state_records else 0" />--> + <t t-esc="len(records.get_removed_coop())" /> </div> <div> Coopératives radiées