فهرست منبع

Notificaciones por lider de dependencia

ElPoteito 2 سال پیش
والد
کامیت
810908bd3e

+ 38 - 0
commands/DependenciaController.php

@@ -4,6 +4,8 @@ namespace app\commands;
 
 use app\components\FirebaseHelper;
 use v1\models\Dependencia;
+use v1\models\DependenciaLider;
+use v1\models\Usuario;
 use yii\console\Controller;
 use yii\helpers\Json;
 
@@ -25,6 +27,14 @@ class DependenciaController extends Controller {
     $firebase = new FirebaseHelper();
     $firestore = $firebase->firestore();
 
+    $refUsuarios = $firestore->collection("usuarios");
+
+    $usuarios = [];
+
+    foreach ($refUsuarios->documents() as $usuario) {
+      $usuarios[$usuario->id()] = $usuario->data();
+    }
+
     $ultimaFecha = null;
     $limite = 100; // 1000;
     $continuar = true;
@@ -65,6 +75,34 @@ class DependenciaController extends Controller {
             $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($modelo->getFirstErrors()));
           }
 
+          if (isset($data["usuarios"])) {
+            foreach ($data["usuarios"] as $usuarioDependencia) {
+              $usuarioModelo = Usuario::findOne(["uid" => $usuarioDependencia["uid"]]);
+              $usuarioRef = isset($usuarios[$usuarioDependencia["uid"]])
+                ? $usuarios[$usuarioDependencia["uid"]] : null;
+  
+              if ($usuarioModelo !== null && $usuarioRef !== null) {
+                $usuarioDependencia = DependenciaLider::find()
+                  ->andWhere([
+                    "idUsuario" => $usuarioModelo->id,
+                    "idDependencia" => $modelo->id
+                  ])
+                  ->one();
+  
+                if ($usuarioDependencia === null) {
+                  $usuarioDependencia = new DependenciaLider();
+  
+                  $usuarioDependencia->idUsuario = $usuarioModelo->id;
+                  $usuarioDependencia->idDependencia = $modelo->id;
+  
+                  if (!$usuarioDependencia->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar un lider de dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
+                  }
+                }
+              }
+            }
+          }
+
           $hoy = new \DateTime();
           $doc->reference()
             ->update([

+ 259 - 189
commands/EventoController.php

@@ -3,6 +3,7 @@
 namespace app\commands;
 
 use app\components\FirebaseHelper;
+use app\models\DependenciaLider;
 use app\models\Notificacion;
 use app\models\NotificacionUsuario;
 use common\data\Respuesta;
@@ -233,7 +234,7 @@ class EventoController extends Controller {
 
             // UsuarioGrupo
             if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
-              for($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
+              for ($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
                 $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][$i]]);
                 if (isset($modelGrupo)) {
                   $usuarioGrupo = UsuarioGrupo::find()
@@ -287,29 +288,29 @@ class EventoController extends Controller {
 
             // Dependencias
             if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
-              if (!empty($usuarioRef["dependencias"])){
+              if (!empty($usuarioRef["dependencias"])) {
                 if (is_array($usuarioRef["dependencias"])) {
-                  for ($i = 0; $i < count($usuarioRef["dependencias"]); $i++){
+                  for ($i = 0; $i < count($usuarioRef["dependencias"]); $i++) {
                     $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"][$i]]);
                     if ($dependenciaModel === null) {
                       $dependenciaRef = $dependencias[$usuarioRef["dependencias"][$i]];
                       $dependenciaModel = new Dependencia();
-    
+
                       $dependenciaModel->firebaseId = $usuarioRef["dependencias"][$i];
                       $dependenciaModel->nombre = $dependenciaRef['nombre'];
                       $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
                       $dependenciaModel->estatus = $dependenciaRef['estatus'];
-    
+
                       $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
                       if ($creado !== false) {
                         $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
                       }
-    
+
                       if (!$dependenciaModel->save()) {
                         $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
                       }
                     }
-    
+
                     //UsuarioDependencia
                     $usuarioDependencia = UsuarioDependencia::find()
                       ->andWhere([
@@ -317,13 +318,13 @@ class EventoController extends Controller {
                         "idDependencia" => $dependenciaModel->id
                       ])
                       ->one();
-    
+
                     if ($usuarioDependencia === null) {
                       $usuarioDependencia = new UsuarioDependencia();
-    
+
                       $usuarioDependencia->idUsuario = $usuarioModelo->id;
                       $usuarioDependencia->idDependencia = $dependenciaModel->id;
-    
+
                       if (!$usuarioDependencia->save()) {
                         $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
                       }
@@ -331,43 +332,43 @@ class EventoController extends Controller {
                   }
                 } else {
                   $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"]]);
-                    if ($dependenciaModel === null) {
-                      $dependenciaRef = $dependencias[$usuarioRef["dependencias"]];
-                      $dependenciaModel = new Dependencia();
-    
-                      $dependenciaModel->firebaseId = $usuarioRef["dependencias"];
-                      $dependenciaModel->nombre = $dependenciaRef['nombre'];
-                      $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
-                      $dependenciaModel->estatus = $dependenciaRef['estatus'];
-    
-                      $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
-                      if ($creado !== false) {
-                        $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
-                      }
-    
-                      if (!$dependenciaModel->save()) {
-                        $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
-                      }
+                  if ($dependenciaModel === null) {
+                    $dependenciaRef = $dependencias[$usuarioRef["dependencias"]];
+                    $dependenciaModel = new Dependencia();
+
+                    $dependenciaModel->firebaseId = $usuarioRef["dependencias"];
+                    $dependenciaModel->nombre = $dependenciaRef['nombre'];
+                    $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
+                    $dependenciaModel->estatus = $dependenciaRef['estatus'];
+
+                    $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
+                    if ($creado !== false) {
+                      $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
                     }
-    
-                    //UsuarioDependencia
-                    $usuarioDependencia = UsuarioDependencia::find()
-                      ->andWhere([
-                        "idUsuario" => $usuarioModelo->id,
-                        "idDependencia" => $dependenciaModel->id
-                      ])
-                      ->one();
-    
-                    if ($usuarioDependencia === null) {
-                      $usuarioDependencia = new UsuarioDependencia();
-    
-                      $usuarioDependencia->idUsuario = $usuarioModelo->id;
-                      $usuarioDependencia->idDependencia = $dependenciaModel->id;
-    
-                      if (!$usuarioDependencia->save()) {
-                        $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
-                      }
+
+                    if (!$dependenciaModel->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
                     }
+                  }
+
+                  //UsuarioDependencia
+                  $usuarioDependencia = UsuarioDependencia::find()
+                    ->andWhere([
+                      "idUsuario" => $usuarioModelo->id,
+                      "idDependencia" => $dependenciaModel->id
+                    ])
+                    ->one();
+
+                  if ($usuarioDependencia === null) {
+                    $usuarioDependencia = new UsuarioDependencia();
+
+                    $usuarioDependencia->idUsuario = $usuarioModelo->id;
+                    $usuarioDependencia->idDependencia = $dependenciaModel->id;
+
+                    if (!$usuarioDependencia->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
+                    }
+                  }
                 }
               }
             }
@@ -597,7 +598,7 @@ class EventoController extends Controller {
 
             // UsuarioGrupo
             if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
-              for($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
+              for ($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
                 $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][$i]]);
                 if (isset($modelGrupo)) {
                   $usuarioGrupo = UsuarioGrupo::find()
@@ -651,29 +652,29 @@ class EventoController extends Controller {
 
             // Dependencias
             if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
-              if (!empty($usuarioRef["dependencias"])){
+              if (!empty($usuarioRef["dependencias"])) {
                 if (is_array($usuarioRef["dependencias"])) {
-                  for ($i = 0; $i < count($usuarioRef["dependencias"]); $i++){
+                  for ($i = 0; $i < count($usuarioRef["dependencias"]); $i++) {
                     $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"][$i]]);
                     if ($dependenciaModel === null) {
                       $dependenciaRef = $dependencias[$usuarioRef["dependencias"][$i]];
                       $dependenciaModel = new Dependencia();
-    
+
                       $dependenciaModel->firebaseId = $usuarioRef["dependencias"][$i];
                       $dependenciaModel->nombre = $dependenciaRef['nombre'];
                       $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
                       $dependenciaModel->estatus = $dependenciaRef['estatus'];
-    
+
                       $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
                       if ($creado !== false) {
                         $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
                       }
-    
+
                       if (!$dependenciaModel->save()) {
                         $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
                       }
                     }
-    
+
                     //UsuarioDependencia
                     $usuarioDependencia = UsuarioDependencia::find()
                       ->andWhere([
@@ -681,13 +682,13 @@ class EventoController extends Controller {
                         "idDependencia" => $dependenciaModel->id
                       ])
                       ->one();
-    
+
                     if ($usuarioDependencia === null) {
                       $usuarioDependencia = new UsuarioDependencia();
-    
+
                       $usuarioDependencia->idUsuario = $usuarioModelo->id;
                       $usuarioDependencia->idDependencia = $dependenciaModel->id;
-    
+
                       if (!$usuarioDependencia->save()) {
                         $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
                       }
@@ -695,43 +696,43 @@ class EventoController extends Controller {
                   }
                 } else {
                   $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"]]);
-                    if ($dependenciaModel === null) {
-                      $dependenciaRef = $dependencias[$usuarioRef["dependencias"]];
-                      $dependenciaModel = new Dependencia();
-    
-                      $dependenciaModel->firebaseId = $usuarioRef["dependencias"];
-                      $dependenciaModel->nombre = $dependenciaRef['nombre'];
-                      $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
-                      $dependenciaModel->estatus = $dependenciaRef['estatus'];
-    
-                      $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
-                      if ($creado !== false) {
-                        $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
-                      }
-    
-                      if (!$dependenciaModel->save()) {
-                        $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
-                      }
+                  if ($dependenciaModel === null) {
+                    $dependenciaRef = $dependencias[$usuarioRef["dependencias"]];
+                    $dependenciaModel = new Dependencia();
+
+                    $dependenciaModel->firebaseId = $usuarioRef["dependencias"];
+                    $dependenciaModel->nombre = $dependenciaRef['nombre'];
+                    $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
+                    $dependenciaModel->estatus = $dependenciaRef['estatus'];
+
+                    $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
+                    if ($creado !== false) {
+                      $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
                     }
-    
-                    //UsuarioDependencia
-                    $usuarioDependencia = UsuarioDependencia::find()
-                      ->andWhere([
-                        "idUsuario" => $usuarioModelo->id,
-                        "idDependencia" => $dependenciaModel->id
-                      ])
-                      ->one();
-    
-                    if ($usuarioDependencia === null) {
-                      $usuarioDependencia = new UsuarioDependencia();
-    
-                      $usuarioDependencia->idUsuario = $usuarioModelo->id;
-                      $usuarioDependencia->idDependencia = $dependenciaModel->id;
-    
-                      if (!$usuarioDependencia->save()) {
-                        $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
-                      }
+
+                    if (!$dependenciaModel->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
                     }
+                  }
+
+                  //UsuarioDependencia
+                  $usuarioDependencia = UsuarioDependencia::find()
+                    ->andWhere([
+                      "idUsuario" => $usuarioModelo->id,
+                      "idDependencia" => $dependenciaModel->id
+                    ])
+                    ->one();
+
+                  if ($usuarioDependencia === null) {
+                    $usuarioDependencia = new UsuarioDependencia();
+
+                    $usuarioDependencia->idUsuario = $usuarioModelo->id;
+                    $usuarioDependencia->idDependencia = $dependenciaModel->id;
+
+                    if (!$usuarioDependencia->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
+                    }
+                  }
                 }
               }
             }
@@ -767,7 +768,8 @@ class EventoController extends Controller {
     try {
       \Yii::$app->db->createCommand("SET TIMEZONE TO 'America/Hermosillo'")
         ->execute();
-    } catch (\Exception $e) { }
+    } catch (\Exception $e) {
+    }
 
     $eventos = (new Query())
       ->select([
@@ -781,116 +783,184 @@ class EventoController extends Controller {
       ->column();
 
     $totalEventos = count($eventos);
-    if($totalEventos === 0) {
+    if ($totalEventos === 0) {
       # ¿Si no hubo eventos en el período de tiempo también hay que avisar?
       return;
     }
 
-      $query2 = (new Query())
-        ->select([
-          "tag",
-          "{{Usuario}}.id",
-          "{{Usuario}}.nombre",
-          "{{Usuario}}.telefono",
-          "case when count({{Resultado}}.accion) > 0 then true else false end as [[Participo]]"
-        ])
-        ->from("Evento")
-        ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
-        ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
-        ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
-        ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
-        ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
-        ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
-        ->andWhere(["{{Usuario}}.eliminado" => null])
-        ->andWhere([">=", "fechaFinal", new Expression("now()-interval '7 days'")])
-        ->groupBy([
-          "{{Usuario}}.nombre",
-          "{{Usuario}}.telefono",
-          "{{Usuario}}.id",
-          "tag"
-        ])
-        ->orderBy([
-          "{{Usuario}}.id" => SORT_ASC,
-          "[[Participo]]" => SORT_DESC,
-        ]);
-
-        $aux = [];
-
-        foreach($query2->each() as $consulta) {
-          if (!isset($aux[$consulta['id']])) {
-            $aux[$consulta['id']] = [
-              "nombreUsuario" => $consulta['nombre'],
-              "telefono" => $consulta['telefono'],
-              "id" => $consulta['id'],
-              "eventosFaltantes" => [],
-              "eventosParticipo" => []
-            ];
-          }
-          $nombreEvento = $eventos[$consulta['tag']];
-          if ($consulta['Participo']) {
-            $aux[$consulta['id']]['eventosParticipo'][] = $nombreEvento;
-          } else {
-            $aux[$consulta['id']]['eventosFaltantes'][] = $nombreEvento;
-          }
-        }
+    $query2 = (new Query())
+      ->select([
+        "tag",
+        "{{Usuario}}.id",
+        "{{Usuario}}.nombre",
+        "{{Usuario}}.telefono",
+        "case when count({{Resultado}}.accion) > 0 then true else false end as [[Participo]]",
+        "{{UsuarioDependencia}}.[[idDependencia]]"
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
+      ->andWhere(["{{Usuario}}.eliminado" => null])
+      ->andWhere([">=", "fechaFinal", new Expression("now()-interval '7 days'")])
+      ->groupBy([
+        "{{Usuario}}.nombre",
+        "{{Usuario}}.telefono",
+        "{{Usuario}}.id",
+        "tag",
+        "{{UsuarioDependencia}}.[[idDependencia]]"
+      ])
+      ->orderBy([
+        "{{Usuario}}.id" => SORT_ASC,
+        "[[Participo]]" => SORT_DESC,
+      ]);
+
+    $aux = [];
+    $auxDependencia = [];
+    foreach ($query2->each() as $consulta) {
+      if (!isset($aux[$consulta['id']])) {
+        $aux[$consulta['id']] = [
+          "nombreUsuario" => $consulta['nombre'],
+          "telefono" => $consulta['telefono'],
+          "id" => $consulta['id'],
+          "idDependencia" => $consulta['idDependencia'],
+          "eventosFaltantes" => [],
+          "eventosParticipo" => []
+        ];
+      }
+      $nombreEvento = $eventos[$consulta['tag']];
+      if ($consulta['Participo']) {
+        $aux[$consulta['id']]['eventosParticipo'][] = $nombreEvento;
+      } else {
+        $aux[$consulta['id']]['eventosFaltantes'][] = $nombreEvento;
+      }
+    }
 
-        $notificacion = new Notificacion();
-        $notificacion->creado = new Expression("now()");
+    foreach ($aux as $consulta) {
+      if (!isset($auxDependencia[$consulta['idDependencia']])) {
+        $auxDependencia[$consulta['idDependencia']] = [
+          "id" => $consulta['idDependencia'],
+          "eventosFaltantes" => 0,
+          "eventosParticipo" => 0
+        ];
+      }
+      $eventosFaltantes = count($consulta['eventosFaltantes']);
+      $auxDependencia[$consulta['idDependencia']]['eventosFaltantes'] += $eventosFaltantes;
+      $eventosParticipo = count($consulta['eventosParticipo']);
+      $auxDependencia[$consulta['idDependencia']]['eventosParticipo'] += $eventosParticipo;
+    }
 
-        if (!$notificacion->save()) {
-          return (new Respuesta($notificacion))
-            ->mensaje("Hubo un problema al generar la notificación");
-        }
-        # TODO: Revisar si es necesario consultar la información del modelo
-        # $notificacion->refresh();
-
-        foreach ($aux as $usuario) {
-          $notificacionUsuario = new NotificacionUsuario();
-          
-          $notificacionUsuario->idNotificacion = $notificacion->id;
-          $notificacionUsuario->idUsuario = $usuario['id'];
-          $notificacionUsuario->nombre = $usuario['nombreUsuario'];
-          $notificacionUsuario->telefono = $usuario['telefono'];
-
-          # Es mejor guardar el valor del count en lugar de evaluarlo multiples veces
-          $totalParticipaciones = count($usuario["eventosParticipo"]);
-
-          $parametros = [
-            [
-              "type" => "text",
-              "text" => "{$totalParticipaciones}/{$totalEventos} eventos"
-            ],
+    $notificacion = new Notificacion();
+    $notificacion->creado = new Expression("now()");
+
+    if (!$notificacion->save()) {
+      return (new Respuesta($notificacion))
+        ->mensaje("Hubo un problema al generar la notificación");
+    }
+    # TODO: Revisar si es necesario consultar la información del modelo
+    # $notificacion->refresh();
+
+    //POR USUARIO
+    foreach ($aux as $usuario) {
+      $notificacionUsuario = new NotificacionUsuario();
+
+      $notificacionUsuario->idNotificacion = $notificacion->id;
+      $notificacionUsuario->idUsuario = $usuario['id'];
+      $notificacionUsuario->nombre = $usuario['nombreUsuario'];
+      $notificacionUsuario->telefono = $usuario['telefono'];
+
+      # Es mejor guardar el valor del count en lugar de evaluarlo multiples veces
+      $totalParticipaciones = count($usuario["eventosParticipo"]);
+
+      $parametros = [
+        [
+          "type" => "text",
+          "text" => "{$totalParticipaciones}/{$totalEventos} eventos"
+        ],
+      ];
+
+      if ($totalParticipaciones === $totalEventos) {
+        $parametros[] = [
+          "type" => "text",
+          "text" => "Gracias por tu"
+        ];
+      } else if ($totalParticipaciones > 0) {
+        $parametros[] = [
+          "type" => "text",
+          "text" => ", gracias por tu participación. Vamos por el 100% de"
+        ];
+      } else {
+        $parametros[] = [
+          "type" => "text",
+          "text" => "Vamos por el 100% de"
+        ];
+      }
+      $notificacionUsuario->parametros = $parametros;
+
+      if (!$notificacionUsuario->save()) {
+        return (new Respuesta($notificacionUsuario))
+          ->mensaje("Hubo un problema al generar la notificación");
+      }
+    }
+
+    //POR LIDER DEPENDENCIA
+    foreach ($auxDependencia as $dependencia) {
+      $dependenciaLider = DependenciaLider::find()
+        ->andWhere(["idDependencia" => $dependencia["id"]]);
+
+      foreach ($dependenciaLider->each() as $lider) {
+        $usuario = Usuario::findOne($lider["idUsuario"]);
+        $notificacionUsuario = new NotificacionUsuario();
+
+        $notificacionUsuario->idNotificacion = $notificacion->id;
+        $notificacionUsuario->idUsuario = $usuario->id;
+        $notificacionUsuario->nombre = $usuario->nombre;
+        $notificacionUsuario->telefono = $usuario->telefono;
+
+        # Es mejor guardar el valor del count en lugar de evaluarlo multiples veces
+        $totalParticipaciones = $dependencia["eventosParticipo"];
+        $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
+
+        $parametros = [
+          [
+            "type" => "text",
+            "text" => "{$totalParticipaciones}/{$totalEventosDependencia} eventos"
+          ],
+        ];
+
+        if ($totalParticipaciones === $totalEventosDependencia) {
+          $parametros[] = [
+            "type" => "text",
+            "text" => "Gracias por tu"
           ];
-          
-          if ($totalParticipaciones === $totalEventos){
-            $parametros[] = [
-              "type" => "text",
-              "text" => "Gracias por tu"
-            ];
-          } else if ($totalParticipaciones > 0) {
-            $parametros[] = [
-              "type" => "text",
-              "text" => ", gracias por tu participación. Vamos por el 100% de"
-            ];
-          } else {
-            $parametros[] = [
-              "type" => "text",
-              "text" => "Vamos por el 100% de"
-            ];
-          }
-          $notificacionUsuario->parametros = $parametros;
+        } else if ($totalParticipaciones > 0) {
+          $parametros[] = [
+            "type" => "text",
+            "text" => ", gracias por tu participación. Vamos por el 100% de"
+          ];
+        } else {
+          $parametros[] = [
+            "type" => "text",
+            "text" => "Vamos por el 100% de"
+          ];
+        }
+        $notificacionUsuario->parametros = $parametros;
 
-          if (!$notificacionUsuario->save()) {
-            return (new Respuesta($notificacionUsuario))
-              ->mensaje("Hubo un problema al generar la notificación");
-          }
+        if (!$notificacionUsuario->save()) {
+          return (new Respuesta($notificacionUsuario))
+            ->mensaje("Hubo un problema al generar la notificación");
         }
+      }
+    }
 
-        $notificacion->estatus = Notificacion::ESTATUS_NUEVO;
+    $notificacion->estatus = Notificacion::ESTATUS_NUEVO;
 
-        $notificacion->save();
+    $notificacion->save();
 
-        $this->stdout("Terminó");
+    $this->stdout("Terminó");
     // file_put_contents("archivo.json", json_encode($aux));
   }
 }

+ 37 - 0
migrations/m230427_164031_dependencia_lideres.php

@@ -0,0 +1,37 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m230427_164031_dependencia_lideres
+ */
+class m230427_164031_dependencia_lideres extends Migration {
+  /**
+   * {@inheritdoc}
+   */
+  public function safeUp() {
+
+    $this->createTable('DependenciaLider', [
+      "idDependencia" => $this->integer(),
+      "idUsuario" => $this->integer(),
+    ]);
+
+    $this->addPrimaryKey('DependenciaLider_PK', 'DependenciaLider', ['idDependencia', 'idUsuario']);
+
+    $this->addForeignKey('DependenciaLider_idDependencia_FK', 'DependenciaLider', 'idDependencia', 'Dependencia', 'id');
+    $this->addForeignKey('DependenciaLider_idUsuario_FK', 'DependenciaLider', 'idUsuario', 'Usuario', 'id');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function safeDown() {
+
+    $this->dropForeignKey('DependenciaLider_idDependencia_FK', 'DependenciaLider');
+    $this->dropForeignKey('DependenciaLider_idUsuario_FK', 'DependenciaLider');
+    
+    $this->dropPrimaryKey('DependenciaLider_PK', 'DependenciaLider');
+    
+    $this->dropTable('DependenciaLider');
+  }
+}

+ 65 - 0
models/DependenciaLider.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace app\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "DependenciaLider".
+ *
+ * @property int $idDependencia
+ * @property int $idUsuario
+ *
+ * @property Dependencia $dependencia
+ * @property Usuario $usuario
+ */
+class DependenciaLider extends \yii\db\ActiveRecord {
+  /**
+   * {@inheritdoc}
+   */
+  public static function tableName() {
+    return 'DependenciaLider';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function rules() {
+    return [
+      [['idDependencia', 'idUsuario'], 'required'],
+      [['idDependencia', 'idUsuario'], 'default', 'value' => null],
+      [['idDependencia', 'idUsuario'], 'integer'],
+      [['idDependencia', 'idUsuario'], 'unique', 'targetAttribute' => ['idDependencia', 'idUsuario']],
+      [['idDependencia'], 'exist', 'skipOnError' => true, 'targetClass' => Dependencia::class, 'targetAttribute' => ['idDependencia' => 'id']],
+      [['idUsuario'], 'exist', 'skipOnError' => true, 'targetClass' => Usuario::class, 'targetAttribute' => ['idUsuario' => 'id']],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function attributeLabels() {
+    return [
+      'idDependencia' => 'Id Dependencia',
+      'idUsuario' => 'Id Usuario',
+    ];
+  }
+
+  /**
+   * Gets query for [[dependencia]].
+   *
+   * @return \yii\db\ActiveQuery
+   */
+  public function getDependencia() {
+    return $this->hasOne(Dependencia::class, ['id' => 'idDependencia']);
+  }
+
+  /**
+   * Gets query for [[usuario]].
+   *
+   * @return \yii\db\ActiveQuery
+   */
+  public function getUsuario() {
+    return $this->hasOne(Usuario::class, ['id' => 'idUsuario']);
+  }
+}

+ 28 - 2
modules/v1/controllers/EventoNotificacionController.php

@@ -37,7 +37,8 @@ class EventoNotificacionController extends JsonController {
         "{{Usuario}}.id",
         "{{Usuario}}.nombre",
         "{{Usuario}}.telefono",
-        "case when count({{Resultado}}.accion) > 0 then true else false end as [[Participo]]"
+        "case when count({{Resultado}}.accion) > 0 then true else false end as [[Participo]]",
+        "{{UsuarioDependencia}}.[[idDependencia]]"
       ])
       ->from("Evento")
       ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
@@ -57,7 +58,8 @@ class EventoNotificacionController extends JsonController {
         "{{Usuario}}.nombre",
         "{{Usuario}}.telefono",
         "{{Usuario}}.id",
-        "tag"
+        "tag",
+        "{{UsuarioDependencia}}.[[idDependencia]]"
       ])
       ->orderBy([
         "{{Usuario}}.id" => SORT_ASC,
@@ -66,12 +68,14 @@ class EventoNotificacionController extends JsonController {
       ]);
 
     $aux = [];
+    $auxDependencia = [];
     foreach ($query2->each() as $consulta) {
       if (!isset($aux[$consulta['id']])) {
         $aux[$consulta['id']] = [
           "nombreUsuario" => $consulta['nombre'],
           "telefono" => $consulta['telefono'],
           "id" => $consulta['id'],
+          "idDependencia" => $consulta['idDependencia'],
           "eventosFaltantes" => [],
           "eventosParticipo" => []
         ];
@@ -84,7 +88,29 @@ class EventoNotificacionController extends JsonController {
       }
     }
 
+    foreach ($aux as $consulta) {
+      if (!isset($auxDependencia[$consulta['idDependencia']])) {
+        $auxDependencia[$consulta['idDependencia']] = [
+          "id" => $consulta['idDependencia'],
+          "eventosFaltantes" => 0,
+          "eventosParticipo" => 0
+        ];
+      }
+      $eventosFaltantes = count($consulta['eventosFaltantes']);
+      $auxDependencia[$consulta['idDependencia']]['eventosFaltantes']+= $eventosFaltantes;
+      $eventosParticipo = count($consulta['eventosParticipo']);
+      $auxDependencia[$consulta['idDependencia']]['eventosParticipo']+= $eventosParticipo;
+      /* if ($consulta['Participo']) {
+        // $auxDependencia[$consulta['idDependencia']]['eventosParticipo'][] = $nombreEvento;
+        $auxDependencia[$consulta['idDependencia']]['eventosParticipo'][] = $aux[$consulta['id']]['eventosParticipo'];
+      } else {
+        // $auxDependencia[$consulta['idDependencia']]['eventosFaltantes'][] = $nombreEvento;
+        $auxDependencia[$consulta['idDependencia']]['eventosFaltantes'][] = $aux[$consulta['id']]['eventosFaltantes'];
+      } */
+    }
+
     return (new Respuesta())
       ->detalle($aux);
+      // ->detalle($auxDependencia);
   }
 }

+ 30 - 0
modules/v1/models/DependenciaLider.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace v1\models;
+
+use app\models\DependenciaLider as ModelsDependenciaLider;
+
+class DependenciaLider extends ModelsDependenciaLider {
+
+  public function fields () {
+    return [
+      'idDependencia',
+      'idUsuario',
+    ];
+  }
+
+  public function extraFields () {
+    return [
+      'dependencia',
+      'usuario'
+    ];
+  }
+
+  public function getDependencia() {
+    return $this->hasOne(Dependencia::class, ['id' => 'idDependencia']);
+  }
+
+  public function getUsuario() {
+    return $this->hasOne(Usuario::class, ['id' => 'idUsuario']);
+  }
+}