Parcourir la source

Controladores de sincronizado

ElPoteito il y a 2 ans
Parent
commit
31f4f0ea8e
3 fichiers modifiés avec 383 ajouts et 53 suppressions
  1. 92 0
      commands/DependenciaController.php
  2. 96 53
      commands/EventoController.php
  3. 195 0
      commands/UsuarioController.php

+ 92 - 0
commands/DependenciaController.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace app\commands;
+
+use app\components\FirebaseHelper;
+use v1\models\Dependencia;
+use yii\console\Controller;
+use yii\helpers\Json;
+
+class DependenciaController extends Controller {
+
+  public function stdoutln($cadena) {
+    return $this->stdout($cadena . "\n");
+  }
+
+  public function cambiarFecha($string) {
+    $formato = "D M d Y H:i:s P";
+    $fecha = \DateTime::createFromFormat($formato, $string);
+
+    return $fecha;
+  }
+
+  public function actionSincronizar() {
+
+    $firebase = new FirebaseHelper();
+    $firestore = $firebase->firestore();
+
+    $ultimaFecha = null;
+    $limite = 100; // 1000;
+    $continuar = true;
+
+    do {
+      $this->stdout("Sincronizando ...");
+      $ref = $firestore->collection("dependencias")
+        ->where("sincronizado", "==", null)
+        ->orderBy("timestamp", "ASC")
+        ->limit($limite);
+
+      if ($ultimaFecha !== null) {
+        $ref = $ref->startAt([$ultimaFecha]);
+      }
+
+      $c = 0; # Contador de registros procesados
+      foreach ($ref->documents() as $doc) {
+        $this->stdoutln($doc->id());
+        $c++;
+        $data = $doc->data();
+        $ultimaFecha = $data["timestamp"];
+        $modelo = Dependencia::findOne(["firebaseId" => $doc->id()]);
+        if ($modelo === null) {
+          $modelo = new Dependencia();
+        }
+        try {
+          $modelo->nombre = $data["nombre"];
+          $modelo->descripcion = $data["descripcion"];
+          $modelo->estatus = $data["estatus"];
+          $modelo->firebaseId = $doc->id();
+
+          $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
+          if ($creado !== false) {
+            $modelo->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
+          }
+
+          if (!$modelo->save()) {
+            $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($modelo->getFirstErrors()));
+          }
+
+          $hoy = new \DateTime();
+          $doc->reference()
+            ->update([
+              ["path" => "sincronizado", "value" => "OK"],
+              ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
+            ]);
+          $this->stdoutln("Sincronizado correcto");
+        } catch (\Exception $e) {
+          $this->stdoutln("Exception: {$e->getMessage()}\n");
+          $doc->reference()
+            ->update([
+              ["path" => "sincronizado", "value" => "ERROR"],
+              ["path" => "sincronizadoError", "value" => $e->getMessage()],
+              ["path" => "sincronizadoErrorLine", "value" => $e->getLine()],
+            ]);
+        }
+      }
+
+      # Si los registros procesados son menores al límite, terminar
+      if ($c < $limite) {
+        $continuar = false;
+      }
+    } while ($continuar);
+  }
+}

+ 96 - 53
commands/EventoController.php

@@ -226,23 +226,25 @@ class EventoController extends Controller {
 
             // UsuarioGrupo
             if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
-              $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][0]]);
-              if (isset($modelGrupo)) {
-                $usuarioGrupo = UsuarioGrupo::find()
-                  ->andWhere([
-                    "idUsuario" => $usuarioModelo->id,
-                    "idGrupo" => $modelGrupo->id
-                  ])
-                  ->one();
-
-                if ($usuarioGrupo === null) {
-                  $usuarioGrupo = new UsuarioGrupo();
-
-                  $usuarioGrupo->idUsuario = $usuarioModelo->id;
-                  $usuarioGrupo->idGrupo = $modelGrupo->id;
-
-                  if (!$usuarioGrupo->save()) {
-                    $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
+              for($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
+                $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][$i]]);
+                if (isset($modelGrupo)) {
+                  $usuarioGrupo = UsuarioGrupo::find()
+                    ->andWhere([
+                      "idUsuario" => $usuarioModelo->id,
+                      "idGrupo" => $modelGrupo->id
+                    ])
+                    ->one();
+
+                  if ($usuarioGrupo === null) {
+                    $usuarioGrupo = new UsuarioGrupo();
+
+                    $usuarioGrupo->idUsuario = $usuarioModelo->id;
+                    $usuarioGrupo->idGrupo = $modelGrupo->id;
+
+                    if (!$usuarioGrupo->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
+                    }
                   }
                 }
               }
@@ -278,46 +280,87 @@ class EventoController extends Controller {
 
             // Dependencias
             if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
-              if (!empty($usuarioRef["dependencias"]) && is_array($usuarioRef["dependencias"])){
-                foreach ($usuarioRef["dependencias"] as $dependencia) {
-                  $dependenciaModel = Dependencia::findOne(["firebaseId" => $dependencia]);
-                  if ($dependenciaModel === null) {
-                    $dependenciaRef = $dependencias[$dependencia];
-                    $dependenciaModel = new Dependencia();
-  
-                    $dependenciaModel->firebaseId = $dependencia;
-                    $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 (!empty($usuarioRef["dependencias"])){
+                if (is_array($usuarioRef["dependencias"])) {
+                  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()));
+                      }
                     }
-  
-                    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()));
+                      }
                     }
                   }
-  
-                  //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()));
+                } 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()));
+                      }
+                    }
+    
+                    //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()));
+                      }
                     }
-                  }
                 }
               }
             }

+ 195 - 0
commands/UsuarioController.php

@@ -0,0 +1,195 @@
+<?php
+
+namespace app\commands;
+
+use app\components\FirebaseHelper;
+use v1\models\Dependencia;
+use v1\models\Grupo;
+use v1\models\Usuario;
+use v1\models\UsuarioDependencia;
+use v1\models\UsuarioGrupo;
+use yii\console\Controller;
+use yii\db\Expression;
+use yii\helpers\Json;
+
+class UsuarioController extends Controller {
+
+  public function stdoutln($cadena) {
+    return $this->stdout($cadena . "\n");
+  }
+
+  public function cambiarFecha($string) {
+    $formato = "D M d Y H:i:s P";
+    $fecha = \DateTime::createFromFormat($formato, $string);
+
+    return $fecha;
+  }
+
+  public function actionSincronizar() {
+
+    $firebase = new FirebaseHelper();
+    $firestore = $firebase->firestore();
+
+    $ultimaFecha = null;
+    $limite = 100; // 1000;
+    $continuar = true;
+
+    do {
+      $this->stdout("Sincronizando ...");
+      $ref = $firestore->collection("usuarios")
+        ->where("sincronizado", "==", null)
+        ->orderBy("timestamp", "ASC")
+        ->limit($limite);
+
+      if ($ultimaFecha !== null) {
+        $ref = $ref->startAt([$ultimaFecha]);
+      }
+
+      $c = 0; # Contador de registros procesados
+      foreach ($ref->documents() as $doc) {
+        $this->stdoutln($doc->id());
+        $c++;
+        $data = $doc->data();
+        $ultimaFecha = $data["timestamp"];
+        $modelo = Usuario::findOne(["uid" => $doc->id()]);
+        if ($modelo === null) {
+          $modelo = new Usuario();
+        }
+        try {
+          $modelo->uid = $data["uid"];
+          $modelo->nombre = $data["nombre"];
+          if (isset($data["email"])) {
+            $modelo->email = $data["email"];
+          }
+          $modelo->telefono = $data["telefono"];
+          $modelo->facebook = $data["facebook"];
+          if (isset($data["facebookVerificado"])) {
+            $modelo->facebookVerificado = $data["facebookVerificado"];
+          }
+          $modelo->instagram = $data["instagram"];
+          if (isset($data["instagramVerificado"])) {
+            $modelo->instagramVerificado = $data["instagramVerificado"];
+          }
+          $modelo->twitter = $data["twitter"];
+          if (isset($data["twitterVerificado"])) {
+            $modelo->twitterVerificado = $data["twitterVerificado"];
+          }
+          $modelo->genero = $data["genero"];
+          $modelo->verificado = $data["verificado"];
+
+          if (!$modelo->save()) {
+            $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($modelo->getFirstErrors()));
+          }
+
+          $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
+          if ($creado !== false) {
+            $modelo->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
+          }
+
+          if (!$modelo->save()) {
+            $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($modelo->getFirstErrors()));
+          }
+
+          if (isset($data["grupos"])) {
+            for($i = 0; $i < count($data["grupos"]); $i++){
+              
+              $modeloGrupo = Grupo::findOne(["firebaseId" => $data["grupos"][$i]]);
+
+              if (isset($modeloGrupo)) {
+                $usuarioGrupo = UsuarioGrupo::find()
+                  ->andWhere([
+                    "idUsuario" => $modelo->id,
+                    "idGrupo" => $modeloGrupo->id
+                  ])
+                  ->one();
+
+                if ($usuarioGrupo === null) {
+                  $usuarioGrupo = new UsuarioGrupo();
+
+                  $usuarioGrupo->idUsuario = $modelo->id;
+                  $usuarioGrupo->idGrupo = $modeloGrupo->id;
+
+                  if (!$usuarioGrupo->save()) {
+                    $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
+                  }
+                }
+              }
+            }
+          }
+
+          if (isset($data["dependencias"])) {
+            if (is_array($data["dependencias"])) {
+              for($i = 0; $i < count($data["dependencias"]); $i++){
+                
+                $modeloDependencia = Grupo::findOne(["firebaseId" => $data["dependencias"][$i]]);
+  
+                if (isset($modeloDependencia)) {
+                  $usuarioDependencia = UsuarioDependencia::find()
+                    ->andWhere([
+                      "idUsuario" => $modelo->id,
+                      "idDependencia" => $modeloDependencia->id
+                    ])
+                    ->one();
+  
+                  if ($usuarioDependencia === null) {
+                    $usuarioDependencia = new UsuarioDependencia();
+  
+                    $usuarioDependencia->idUsuario = $modelo->id;
+                    $usuarioDependencia->idDependencia = $modeloDependencia->id;
+  
+                    if (!$usuarioDependencia->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
+                    }
+                  }
+                }
+              }
+            } else {
+              $modeloDependencia = Grupo::findOne(["firebaseId" => $data["dependencias"]]);
+  
+                if (isset($modeloDependencia)) {
+                  $usuarioDependencia = UsuarioDependencia::find()
+                    ->andWhere([
+                      "idUsuario" => $modelo->id,
+                      "idDependencia" => $modeloDependencia->id
+                    ])
+                    ->one();
+  
+                  if ($usuarioDependencia === null) {
+                    $usuarioDependencia = new UsuarioDependencia();
+  
+                    $usuarioDependencia->idUsuario = $modelo->id;
+                    $usuarioDependencia->idDependencia = $modeloDependencia->id;
+  
+                    if (!$usuarioDependencia->save()) {
+                      $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
+                    }
+                  }
+                }
+            }
+          }
+
+          $hoy = new \DateTime();
+          $doc->reference()
+            ->update([
+              ["path" => "sincronizado", "value" => "OK"],
+              ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
+            ]);
+          $this->stdoutln("Sincronizado correcto");
+        } catch (\Exception $e) {
+          $this->stdoutln("Exception: {$e->getMessage()}\n");
+          $doc->reference()
+            ->update([
+              ["path" => "sincronizado", "value" => "ERROR"],
+              ["path" => "sincronizadoError", "value" => $e->getMessage()],
+              ["path" => "sincronizadoErrorLine", "value" => $e->getLine()],
+            ]);
+        }
+      }
+
+      # Si los registros procesados son menores al límite, terminar
+      if ($c < $limite) {
+        $continuar = false;
+      }
+    } while ($continuar);
+  }
+}