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