Kaynağa Gözat

Ajustes nuevos mensajes laud

ElPoteito 2 yıl önce
ebeveyn
işleme
5a1641cfef

+ 171 - 17
commands/EventoController.php

@@ -10,10 +10,14 @@ use common\data\Respuesta;
 use DateTime;
 use Google\Cloud\Core\Timestamp;
 use Kreait\Firebase\Firestore;
+use Ramsey\Uuid\Uuid;
 use v1\models\Dependencia;
 use v1\models\Evento;
 use v1\models\EventoAccion;
 use v1\models\EventoGrupo;
+use v1\models\EventoResumen;
+use v1\models\EventoResumenDependencia;
+use v1\models\EventoResumenParticipante;
 use v1\models\Grupo;
 use v1\models\Red;
 use v1\models\Resultado;
@@ -225,7 +229,7 @@ class EventoController extends Controller {
               }
               $usuarioModelo->genero = $usuarioRef["genero"];
               $usuarioModelo->verificado = $usuarioRef["verificado"];
-              $usuarioModelo->liderGobal = $usuarioRef["liderGlobal"];
+              $usuarioModelo->liderGlobal = $usuarioRef["liderGlobal"];
               $usuarioModelo->creado = new Expression('now()');
               if ($usuarioRef["estatus"] === false) {
                 $usuarioModelo->eliminado = new Expression('now()');
@@ -795,6 +799,8 @@ class EventoController extends Controller {
       ])
       ->from("Evento")
       ->andWhere([">=", "fechaFinal", new Expression("now() - interval '7 days'")])
+      // ->andWhere([">=", "fechaFinal", '2023-05-22 00:00:00'])
+      // ->andWhere(["<=", "fechaFinal", '2023-05-27 00:00:00'])
       ->groupBy(["tag", "nombre"])
       ->indexBy("tag")
       ->column();
@@ -804,7 +810,13 @@ class EventoController extends Controller {
       ->indexBy("id")
       ->column();
 
+    $grupos = Grupo::find()
+      ->select("nombre")
+      ->indexBy("id")
+      ->column();
+
     $totalEventos = count($eventos);
+    $this->stdout("{$totalEventos}");
     if ($totalEventos === 0) {
       # ¿Si no hubo eventos en el período de tiempo también hay que avisar?
       return;
@@ -817,7 +829,8 @@ class EventoController extends Controller {
         "{{Usuario}}.nombre",
         "{{Usuario}}.telefono",
         "case when count({{Resultado}}.accion) > 0 then true else false end as [[Participo]]",
-        "{{UsuarioDependencia}}.[[idDependencia]]"
+        "{{UsuarioDependencia}}.[[idDependencia]]",
+        "{{UsuarioGrupo}}.[[idGrupo]]"
       ])
       ->from("Evento")
       ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
@@ -828,18 +841,45 @@ class EventoController extends Controller {
       ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
       ->andWhere(["{{Usuario}}.eliminado" => null])
       ->andWhere([">=", "fechaFinal", new Expression("now()-interval '7 days'")])
+      // ->andWhere([">=", "fechaFinal", '2023-05-22 00:00:00'])
+      // ->andWhere(["<=", "fechaFinal", '2023-05-27 00:00:00'])
       ->groupBy([
         "{{Usuario}}.nombre",
         "{{Usuario}}.telefono",
         "{{Usuario}}.id",
         "tag",
-        "{{UsuarioDependencia}}.[[idDependencia]]"
+        "{{UsuarioDependencia}}.[[idDependencia]]",
+        "{{UsuarioGrupo}}.[[idGrupo]]"
       ])
       ->orderBy([
         "{{Usuario}}.id" => SORT_ASC,
         "[[Participo]]" => SORT_DESC,
       ]);
 
+    $eventoResumen = new EventoResumen();
+    $eventoResumen->creado = new Expression("now()");
+
+    $uuidEventoResumen = '';
+    do {
+      $uuidEventoResumen = (Uuid::uuid4())
+        ->toString();
+
+      $er = EventoResumen::find()
+        ->andWhere(["uuid" => $uuidEventoResumen]);
+    } while ($er->exists());
+
+    $eventoResumen->uuid = $uuidEventoResumen;
+    $eventoResumen->inicio = new Expression("now()-interval '7 days'");
+    $eventoResumen->fin = new Expression("now()");
+
+    if (!$eventoResumen->save()) {
+      $errores = json_encode($eventoResumen->getFirstErrors());
+      $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+      return;
+    }
+
+    $eventoResumen->refresh();
+
     $aux = [];
     $auxDependencia = [];
     foreach ($query2->each() as $consulta) {
@@ -849,6 +889,7 @@ class EventoController extends Controller {
           "telefono" => $consulta['telefono'],
           "id" => $consulta['id'],
           "idDependencia" => $consulta['idDependencia'],
+          "idGrupo" => $consulta['idGrupo'],
           "eventosFaltantes" => [],
           "eventosParticipo" => []
         ];
@@ -879,8 +920,9 @@ class EventoController extends Controller {
     $notificacion->creado = new Expression("now()");
 
     if (!$notificacion->save()) {
-      return (new Respuesta($notificacion))
-        ->mensaje("Hubo un problema al generar la notificación");
+      $errores = json_encode($notificacion->getFirstErrors());
+      $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+      return;
     } // */
     # TODO: Revisar si es necesario consultar la información del modelo
     # $notificacion->refresh();
@@ -924,19 +966,53 @@ class EventoController extends Controller {
       $notificacionUsuario->parametros = $parametros;
 
       if (!$notificacionUsuario->save()) {
-        return (new Respuesta($notificacionUsuario))
-          ->mensaje("Hubo un problema al generar la notificación");
+        $errores = json_encode($notificacionUsuario->getFirstErrors());
+        $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+        return;
       }
     }
 
     //POR LIDER DEPENDENCIA
     foreach ($auxDependencia as $id => $dependencia) {
+
+      $evResDependencia = new EventoResumenDependencia();
+
+      $uuidEventoResumenDependencia = '';
+      $consultaERD = EventoResumenDependencia::find()
+        ->andWhere([
+          "AND",
+          ["=", "idEventoResumen", $eventoResumen->id],
+          ["=", "idDependencia", $id],
+        ])
+        ->exists();
+
+      if ($consultaERD) {
+        continue;
+      }
+      do {
+        $uuidEventoResumenDependencia = (Uuid::uuid4())
+          ->toString();
+
+        $erd = EventoResumenDependencia::find()
+          ->andWhere(["clave" => $uuidEventoResumenDependencia]);
+      } while ($erd->exists());
+
+      $evResDependencia->clave = $uuidEventoResumenDependencia;
+      $evResDependencia->idEventoResumen = $eventoResumen->id;
+      $evResDependencia->idDependencia = $id;
+
+      if (!$evResDependencia->save()) {
+        $errores = json_encode($evResDependencia->getFirstErrors());
+        $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+        return;
+      }
+      
       $dependenciaLider = DependenciaLider::find()
         ->andWhere(["idDependencia" => $id]);
 
       $nombreDependencia = "";
       if (isset($dependencias[$id])) {
-        $nombreDependencia = $dependencias[$id];
+        $nombreDependencia = trim($dependencias[$id]);
       }
 
       foreach ($dependenciaLider->each() as $lider) {
@@ -947,15 +1023,36 @@ class EventoController extends Controller {
         $notificacionUsuario->idUsuario = $usuario->id;
         $notificacionUsuario->nombre = $usuario->nombre;
         $notificacionUsuario->telefono = $usuario->telefono;
-        $notificacionUsuario->plantilla = Notificacion::PLANTILLA_LIDER_EVENTO;
+        $notificacionUsuario->plantilla = Notificacion::PLANTILLA_LIDER_EVENTO_URL;
 
         $totalParticipaciones = $dependencia["eventosParticipo"];
         $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
 
+        $usuariosDependencia = Usuario::find()
+          ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
+          ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $id])
+          ->andWhere(["{{Usuario}}.eliminado" => null]);
+
+        // $mensajeUsuariosDependencia = "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos. Puede consultar los resultados en https://laud-red.web.app/resumen-lider-dependencia?id={$evResDependencia->clave}";
+        $mensajeUsuariosDependencia = "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos. ";
+
+        $contador = 0;
+        foreach ($usuariosDependencia->each() as $ud) {
+          $contador++;
+          $nomrbeUsuario = trim($aux[$ud["id"]]["nombreUsuario"]);
+          $totalEventosUsuarioParticipa = count($aux[$ud["id"]]["eventosParticipo"]);
+          $mensajeUsuariosDependencia .= "*{$nomrbeUsuario}*: {$totalEventosUsuarioParticipa}/{$totalEventos}";
+          if ($contador < count($usuariosDependencia->all())) {
+            $mensajeUsuariosDependencia .= ", ";
+          }
+        }
+
+        $mensajeUsuariosDependencia .= ". Puede consultar los resultados en https://laud-red.web.app/resumen-lider-dependencia?id={$evResDependencia->clave}";
+
         $parametros = [
           [
             "type" => "text",
-            "text" => "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos"
+            "text" => $mensajeUsuariosDependencia
           ],
         ];
 
@@ -967,7 +1064,7 @@ class EventoController extends Controller {
         } else if ($totalParticipaciones > 0) {
           $parametros[] = [
             "type" => "text",
-            "text" => " gracias por tu participación. Vamos por el 100% de"
+            "text" => "Gracias por tu participación. Vamos por el 100% de"
           ];
         } else {
           $parametros[] = [
@@ -978,8 +1075,10 @@ class EventoController extends Controller {
         $notificacionUsuario->parametros = $parametros;
 
         if (!$notificacionUsuario->save()) {
-          return (new Respuesta($notificacionUsuario))
-            ->mensaje("Hubo un problema al generar la notificación");
+          $this->stdout("Error");
+          $errores = json_encode($notificacionUsuario->getFirstErrors());
+          $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+          return;
         }
       }
     }
@@ -991,15 +1090,67 @@ class EventoController extends Controller {
     foreach ($liderGlobal->each() as $lider) {
       $mensaje = "";
       $participaciones = 0;
+      $totalParticipaciones = 0;
+      $totalEventosDependencia = 0;
+      $contadorDependencias = 0;
       foreach ($auxDependencia as $id => $dependencia) {
+
+        $contadorDependencias++;
+        $usuariosDependencia = Usuario::find()
+          ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
+          ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $id])
+          ->andWhere(["{{Usuario}}.eliminado" => null]);
+
         $nombreDependencia = "";
         if (isset($dependencias[$id])) {
-          $nombreDependencia = $dependencias[$id];
+          $nombreDependencia = trim($dependencias[$id]);
 
           $totalParticipaciones = $dependencia["eventosParticipo"];
           $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
 
-          $mensaje .= "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos || ";
+          $mensaje .= "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos";
+          // $contadorUsuarios = 0;
+          foreach ($usuariosDependencia->each() as $ud) {
+            $nomrbeUsuario = trim($aux[$ud["id"]]["nombreUsuario"]);
+            $totalEventosUsuarioParticipa = count($aux[$ud["id"]]["eventosParticipo"]);
+            $checkEventoParticipante = EventoResumenParticipante::find()
+              ->andWhere([
+                "idEventoResumen" => $eventoResumen->id,
+                "idDependencia" => $id,
+                "idUsuario" => $ud->id
+              ])
+              ->exists();
+            
+            if ($checkEventoParticipante) {
+              continue;
+            }
+            $eventoParticipante = new EventoResumenParticipante();
+
+            $eventoParticipante->idEventoResumen = $eventoResumen->id;
+            $eventoParticipante->idDependencia = $id;
+            $eventoParticipante->nombreDependencia = $nombreDependencia;
+            $eventoParticipante->idGrupo = $aux[$ud["id"]]["idGrupo"];
+            $eventoParticipante->nombreGrupo = trim($grupos[$aux[$ud["id"]]["idGrupo"]]);
+            $eventoParticipante->idUsuario = $ud->id;
+            $eventoParticipante->nombre = $nomrbeUsuario;
+            $eventoParticipante->totalEventos = $totalEventos;
+            $eventoParticipante->participacion = trim($totalEventosUsuarioParticipa);
+
+            if (!$eventoParticipante->save()) {
+              $errores = json_encode($eventoParticipante->getFirstErrors());
+              $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+              return;
+            }
+            /* $contadorUsuarios++;
+            $mensaje .= "*{$nomrbeUsuario}*: {$totalEventosUsuarioParticipa}/{$totalEventos}";
+            if ($contadorUsuarios < count($usuariosDependencia->all())){
+              $mensaje .= " || ";
+            } */
+          }
+          // $mensaje .= ")";
+          if ($contadorDependencias < count($auxDependencia)){
+            $mensaje .= ", ";
+          }
           $participaciones += $totalParticipaciones;
         }
       }
@@ -1015,6 +1166,8 @@ class EventoController extends Controller {
       // $totalParticipaciones = $dependencia["eventosParticipo"];
       // $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
 
+      $mensaje .= ". Aquí puede mirar el resumen de actividades https://laud-red.web.app/resumen-evento?id={$eventoResumen->uuid}";
+
       $parametros = [
         [
           "type" => "text",
@@ -1042,8 +1195,9 @@ class EventoController extends Controller {
       $notificacionUsuario->parametros = $parametros;
 
       if (!$notificacionUsuario->save()) {
-        return (new Respuesta($notificacionUsuario))
-          ->mensaje("Hubo un problema al generar la notificación");
+        $errores = json_encode($notificacionUsuario->getFirstErrors());
+        $this->stdout('Hubo un problema al generar la notificación: '.$errores);
+        return;
       }
     }
 

+ 3 - 0
commands/NotificacionController.php

@@ -38,6 +38,9 @@ class NotificacionController extends Controller {
         ->andWhere(["idNotificacion" => $notificacion->id]);
 
       foreach ($notificacionUsuario->each() as $nu) {
+        // if ($nu->telefono !== '6624473145' && $nu->telefono !== '6621564051' && $nu->telefono !== '6621115643'){
+        //   continue;
+        // }
         $this->stdout("Enviando mensaje a ".$nu->telefono."\n");
         /** @var \app\models\NotificacionUsuario $nu */
         // $msgTo = "526624473145";

+ 3 - 0
models/Notificacion.php

@@ -26,6 +26,9 @@ class Notificacion extends \yii\db\ActiveRecord {
   const PLANTILLA_EVENTO = "laud_resumen_eventos";
   const PLANTILLA_LIDER_EVENTO = "laud_resumen_eventos_dependencia";
   const PLANTILLA_LIDER_GLOBAL = "laud_resumen_dependencias_lider_global";
+  
+  const PLANTILLA_LIDER_EVENTO_URL = "laud_lider_dependencia_url";
+  const PLANTILLA_LIDER_GLOBAL_URL = "laud_lider_global_url";
 
   /**
    * {@inheritdoc}