From c92eefdc5b975d88bc08de4ce7a070efed84e04e Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Thu, 7 Mar 2024 15:15:28 +0100
Subject: [PATCH] [REF] add queue for LM publication and refactor function

---
 __manifest__.py                |  1 +
 models/scop_liste_ministere.py | 73 +++++++++++++++-------------------
 2 files changed, 33 insertions(+), 41 deletions(-)

diff --git a/__manifest__.py b/__manifest__.py
index 2f1eac3..186fe72 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -10,6 +10,7 @@
     "depends": [
         "cgscop_liasse_fiscale",
         "cgscop_facility",
+        "queue_job",
         "mail_tracking",
     ],
     "data": [
diff --git a/models/scop_liste_ministere.py b/models/scop_liste_ministere.py
index 1fe5334..e979ad6 100644
--- a/models/scop_liste_ministere.py
+++ b/models/scop_liste_ministere.py
@@ -1435,66 +1435,57 @@ class ScopListeMinistere(models.Model):
         self.lm_maj_prestataires()
 
     # STATUSBAR
-    def action_publish_extranet(self):
+    def _publish_extranet(self, composer=False):
         """
         This function opens a window to compose an email, with the edi
         liste Ministere template message loaded by default
+
         """
         self.ensure_one()
         if not self.recipient_ids:
             raise UserError(_("Email manquant. Ce dossier ne peut être publié."))
-        template = self.env.ref(
-            "cgscop_liste_ministere.email_template_liste_ministere_publish"
+        template_id = self.env.ref(
+            "cgscop_liste_ministere.email_template_liste_ministere_publish",
+            raise_if_not_found=True
         )
-        template_id = template if template else False
+        if not self.status == "1_ouvert":
+            raise UserError(_("Ce dossier est déjà publié ou validé."))
+
         self.update_data_lm()
-        return self.with_context(lm_publish_action=True).action_open_mail(template_id)
+        self.update({"status": "2_publie"})
 
-    def action_publish_extranet_mass(self):
-        ir_model_data = self.env["ir.model.data"]
-        try:
-            composer_form_view_id = ir_model_data.get_object_reference(
-                "mail", "email_compose_message_wizard_form"
-            )[1]
-        except ValueError:
-            composer_form_view_id = False
-        template = self.env.ref(
-            "cgscop_liste_ministere.email_template_liste_ministere_publish"
-        )
-        template_id = template.id if template else False
+        if composer:
+            return self.with_context(lm_publish_action=True).action_open_mail(template_id)
+        else:
+            template_id.send_mail(self.id)
 
+    def action_publish_extranet(self):
+        """
+        Ouvre le composer pour publier un dossier sur l'extranet avec envoi d'email
+        """
+        self.ensure_one()
+        return self._publish_extranet(composer=True)
+
+    def action_publish_extranet_mass(self):
+        """
+        Sélectionne les dossiers ouverts et dont les emails sont renseignés
+        Met en file d'attente la publication sur l'extranet pour chacun des dossiers
+        avec envoi du mail
+        """
         # Get lm to publish
         lm_ids = self.filtered(lambda lm: lm.status == "1_ouvert" and lm.recipient_ids)
         if lm_ids:
             for lm in lm_ids:
-                lm.update_data_lm()
-            return {
-                "type": "ir.actions.act_window",
-                "view_mode": "form",
-                "res_model": "mail.compose.message",
-                "view_id": composer_form_view_id,
-                "target": "new",
-                "context": {
-                    "default_composition_mode": "mass_mail"
-                    if len(self.ids) > 1
-                    else "comment",
-                    "default_res_id": self.ids[0],
-                    "default_model": "scop.liste.ministere",
-                    "default_use_template": bool(template_id),
-                    "default_template_id": template_id,
-                    "active_ids": lm_ids.ids,
-                    "lm_publish_action": True,
-                },
-            }
+                lm.with_delay(
+                    description=("Publication LM : %s" % lm.name))._publish_extranet()
         else:
-            message = (
-                "Les dossiers sélectionnés ont déjà été "
-                "publiés ou n'ont pas d'adesse mail"
-            )
             return {
                 "type": "ir.actions.act_window.message",
                 "title": _("Publication des dossiers"),
-                "message": _(message),
+                "message": _(
+                    "Les dossiers sélectionnés ont déjà été "
+                    "publiés ou n'ont pas d'adresse mail"
+                ),
             }
 
     def action_publish_without_extranet(self):
-- 
GitLab