EventoController.php 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232
  1. <?php
  2. namespace app\commands;
  3. use app\components\FirebaseHelper;
  4. use app\models\DependenciaLider;
  5. use app\models\Notificacion;
  6. use app\models\NotificacionUsuario;
  7. use common\data\Respuesta;
  8. use DateTime;
  9. use Google\Cloud\Core\Timestamp;
  10. use Kreait\Firebase\Firestore;
  11. use Ramsey\Uuid\Uuid;
  12. use v1\models\Dependencia;
  13. use v1\models\Evento;
  14. use v1\models\EventoAccion;
  15. use v1\models\EventoGrupo;
  16. use v1\models\EventoResumen;
  17. use v1\models\EventoResumenDependencia;
  18. use v1\models\EventoResumenParticipante;
  19. use v1\models\Grupo;
  20. use v1\models\Red;
  21. use v1\models\Resultado;
  22. use v1\models\Usuario;
  23. use v1\models\UsuarioDependencia;
  24. use v1\models\UsuarioGrupo;
  25. use yii\console\Controller;
  26. use yii\db\Expression;
  27. use yii\db\Query;
  28. use yii\helpers\Json;
  29. class EventoController extends Controller {
  30. public function stdoutln($cadena) {
  31. return $this->stdout($cadena . "\n");
  32. }
  33. public function cambiarFecha($string) {
  34. $formato = "D M d Y H:i:s P";
  35. $fecha = \DateTime::createFromFormat($formato, $string);
  36. return $fecha;
  37. }
  38. public function actionSincronizar() {
  39. $firebase = new FirebaseHelper();
  40. $firestore = $firebase->firestore();
  41. $refGrupos = $firestore->collection("grupos");
  42. $refUsuarios = $firestore->collection("usuarios");
  43. $refDependencias = $firestore->collection("dependencias");
  44. $grupos = [];
  45. $usuarios = [];
  46. $dependencias = [];
  47. foreach ($refGrupos->documents() as $grupo) {
  48. $grupos[$grupo->id()] = $grupo->data();
  49. }
  50. foreach ($refUsuarios->documents() as $usuario) {
  51. $usuarios[$usuario->id()] = $usuario->data();
  52. }
  53. foreach ($refDependencias->documents() as $dependencia) {
  54. $dependencias[$dependencia->id()] = $dependencia->data();
  55. }
  56. $ultimaFecha = null;
  57. $limite = 100; // 1000;
  58. $continuar = true;
  59. do {
  60. $this->stdout("Sincronizando ...");
  61. $ref = $firestore->collection("eventos")
  62. ->where("sincronizado", "==", null)
  63. ->orderBy("timestamp", "ASC")
  64. ->limit($limite);
  65. if ($ultimaFecha !== null) {
  66. $ref = $ref->startAt([$ultimaFecha]);
  67. }
  68. $c = 0; # Contador de registros procesados
  69. foreach ($ref->documents() as $doc) {
  70. $this->stdoutln($doc->id());
  71. $c++;
  72. $data = $doc->data();
  73. $ultimaFecha = $data["timestamp"];
  74. $modelo = Evento::findOne(["firebaseId" => $doc->id()]);
  75. if ($modelo === null) {
  76. $modelo = new Evento();
  77. }
  78. try {
  79. $modelo->nombre = $data["nombre"];
  80. $modelo->descripcion = $data["descripcion"];
  81. $modelo->ciudad = $data["ciudad"];
  82. $modelo->redSocial = $data["redSocial"];
  83. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
  84. if ($creado !== false) {
  85. $modelo->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
  86. }
  87. $fechaInicio = $this->cambiarFecha($data["fechaInicio"]);
  88. if ($fechaInicio !== false) {
  89. $modelo->fechaInicio = $fechaInicio->format(\DateTime::RFC3339_EXTENDED);
  90. }
  91. $fechaFinal = $this->cambiarFecha($data["fechaFinal"]);
  92. if ($fechaFinal !== false) {
  93. $modelo->fechaFinal = $fechaFinal->format(\DateTime::RFC3339_EXTENDED);
  94. }
  95. $modelo->fotoEvento = $data["fotoEvento"];
  96. $modelo->url = $data["pathFirebase"];
  97. if (isset($data["tag"])) {
  98. $modelo->tag = $data["tag"];
  99. }
  100. $modelo->firebaseId = $doc->id();
  101. if (!$modelo->save()) {
  102. $this->stdoutln('Ocurrió un error al guardar un evento. ' . Json::encode($modelo->getFirstErrors()));
  103. continue;
  104. }
  105. if (isset($data["redes"])) {
  106. foreach ($data["redes"] as $red) {
  107. $eventoRed = Red::find()
  108. ->andWhere([
  109. "idEvento" => $modelo->id,
  110. "url" => $red["url"]
  111. ])
  112. ->one();
  113. if ($eventoRed === null) {
  114. $eventoRed = new Red();
  115. $eventoRed->idEvento = $modelo->id;
  116. $eventoRed->key = $red["key"];
  117. $eventoRed->url = $red["url"];
  118. $eventoRed->redSocial = $red["redSocial"];
  119. if (!$eventoRed->save()) {
  120. $this->stdoutln('Ocurrió un error al guardar una red. ' . Json::encode($eventoRed->getFirstErrors()));
  121. continue;
  122. }
  123. }
  124. }
  125. }
  126. foreach ($data["accion"] as $accion) {
  127. $eventoAccion = EventoAccion::find()
  128. ->andWhere([
  129. "idEvento" => $modelo->id,
  130. "accion" => $accion
  131. ])
  132. ->one();
  133. if ($eventoAccion === null) {
  134. $eventoAccion = new EventoAccion();
  135. $eventoAccion->idEvento = $modelo->id;
  136. $eventoAccion->accion = $accion;
  137. if (!$eventoAccion->save()) {
  138. $this->stdoutln('Ocurrió un error al guardar un evento-accion. ' . Json::encode($eventoAccion->getFirstErrors()));
  139. continue;
  140. }
  141. }
  142. }
  143. //Grupos dentro de los eventos
  144. foreach ($data["grupos"] as $grupoEvento) {
  145. $grupoModelo = Grupo::findOne(["firebaseId" => $grupoEvento]);
  146. if ($grupoModelo === null && isset($grupos[$grupoEvento])) {
  147. $grupoModelo = new Grupo();
  148. $grupoModelo->creado = new Expression('now()');
  149. $grupoModelo->nombre = $grupos[$grupoEvento]["nombre"];
  150. $grupoModelo->descripcion = $grupos[$grupoEvento]["descripcion"];
  151. $grupoModelo->firebaseId = $grupoEvento;
  152. if (!$grupoModelo->save()) {
  153. $this->stdoutln('Ocurrió un error al guardar un grupo. ' . Json::encode($grupoModelo->getFirstErrors()));
  154. }
  155. }
  156. if ($grupoModelo !== null) {
  157. $eventoGrupo = EventoGrupo::find()
  158. ->andWhere([
  159. "idEvento" => $modelo->id,
  160. "idGrupo" => $grupoModelo->id
  161. ])
  162. ->one();
  163. if ($eventoGrupo === null) {
  164. $eventoGrupo = new EventoGrupo();
  165. $eventoGrupo->idEvento = $modelo->id;
  166. $eventoGrupo->idGrupo = $grupoModelo->id;
  167. if (!$eventoGrupo->save()) {
  168. $this->stdoutln('Ocurrió un error al guardar un evento-grupo. ' . Json::encode($eventoGrupo->getFirstErrors()));
  169. }
  170. }
  171. }
  172. }
  173. foreach ($data["usuarios"] as $usuarioEvento) {
  174. $usuarioModelo = Usuario::findOne(["uid" => $usuarioEvento["uid"]]);
  175. $usuarioRef = isset($usuarios[$usuarioEvento["uid"]])
  176. ? $usuarios[$usuarioEvento["uid"]] : null;
  177. // Usuarios
  178. if ($usuarioModelo === null && $usuarioRef !== null) {
  179. $usuarioModelo = new Usuario();
  180. $usuarioModelo->uid = $usuarioRef["uid"];
  181. $usuarioModelo->nombre = $usuarioRef["nombre"];
  182. if (isset($usuarioRef["email"])) {
  183. $usuarioModelo->email = $usuarioRef["email"];
  184. }
  185. $usuarioModelo->telefono = $usuarioRef["telefono"];
  186. $usuarioModelo->facebook = $usuarioRef["facebook"];
  187. if (isset($usuarioRef["facebookVerificado"])) {
  188. $usuarioModelo->facebookVerificado = $usuarioRef["facebookVerificado"];
  189. }
  190. $usuarioModelo->instagram = $usuarioRef["instagram"];
  191. if (isset($usuarioRef["instagramVerificado"])) {
  192. $usuarioModelo->instagramVerificado = $usuarioRef["instagramVerificado"];
  193. }
  194. $usuarioModelo->twitter = $usuarioRef["twitter"];
  195. if (isset($usuarioRef["twitterVerificado"])) {
  196. $usuarioModelo->twitterVerificado = $usuarioRef["twitterVerificado"];
  197. }
  198. $usuarioModelo->genero = $usuarioRef["genero"];
  199. $usuarioModelo->verificado = $usuarioRef["verificado"];
  200. $usuarioModelo->liderGlobal = $usuarioRef["liderGlobal"];
  201. $usuarioModelo->creado = new Expression('now()');
  202. if ($usuarioRef["estatus"] === false) {
  203. $usuarioModelo->eliminado = new Expression('now()');
  204. }
  205. if (!$usuarioModelo->save()) {
  206. $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($usuarioModelo->getFirstErrors()));
  207. }
  208. }
  209. // UsuarioGrupo
  210. if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
  211. for ($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
  212. $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][$i]]);
  213. if (isset($modelGrupo)) {
  214. $usuarioGrupo = UsuarioGrupo::find()
  215. ->andWhere([
  216. "idUsuario" => $usuarioModelo->id,
  217. "idGrupo" => $modelGrupo->id
  218. ])
  219. ->one();
  220. if ($usuarioGrupo === null) {
  221. $usuarioGrupo = new UsuarioGrupo();
  222. $usuarioGrupo->idUsuario = $usuarioModelo->id;
  223. $usuarioGrupo->idGrupo = $modelGrupo->id;
  224. if (!$usuarioGrupo->save()) {
  225. $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
  226. }
  227. }
  228. }
  229. }
  230. }
  231. // Resultados
  232. if ($usuarioModelo !== null && isset($data["resultado"])) {
  233. $resultados = $data["resultado"];
  234. if (isset($resultados[$usuarioModelo->uid])) {
  235. foreach ($resultados[$usuarioModelo->uid] as $_accion) {
  236. $resultadoModelo = Resultado::find()
  237. ->andWhere([
  238. "idUsuario" => $usuarioModelo->id,
  239. "idEvento" => $modelo->id,
  240. "accion" => $_accion
  241. ])
  242. ->exists();
  243. if (!$resultadoModelo) {
  244. $resultadoModelo = new Resultado();
  245. $resultadoModelo->idUsuario = $usuarioModelo->id;
  246. $resultadoModelo->idEvento = $modelo->id;
  247. $resultadoModelo->accion = $_accion;
  248. if (!$resultadoModelo->save()) {
  249. $this->stdoutln('Ocurrió un error al guardar un resultado. ' . Json::encode($resultadoModelo->getFirstErrors()));
  250. }
  251. }
  252. }
  253. }
  254. }
  255. // Dependencias
  256. if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
  257. if (!empty($usuarioRef["dependencias"])) {
  258. if (is_array($usuarioRef["dependencias"])) {
  259. for ($i = 0; $i < count($usuarioRef["dependencias"]); $i++) {
  260. $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"][$i]]);
  261. if ($dependenciaModel === null) {
  262. $dependenciaRef = $dependencias[$usuarioRef["dependencias"][$i]];
  263. $dependenciaModel = new Dependencia();
  264. $dependenciaModel->firebaseId = $usuarioRef["dependencias"][$i];
  265. $dependenciaModel->nombre = $dependenciaRef['nombre'];
  266. $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
  267. $dependenciaModel->estatus = $dependenciaRef['estatus'];
  268. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
  269. if ($creado !== false) {
  270. $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
  271. }
  272. if (!$dependenciaModel->save()) {
  273. $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
  274. }
  275. }
  276. //UsuarioDependencia
  277. $usuarioDependencia = UsuarioDependencia::find()
  278. ->andWhere([
  279. "idUsuario" => $usuarioModelo->id,
  280. "idDependencia" => $dependenciaModel->id
  281. ])
  282. ->one();
  283. if ($usuarioDependencia === null) {
  284. $usuarioDependencia = new UsuarioDependencia();
  285. $usuarioDependencia->idUsuario = $usuarioModelo->id;
  286. $usuarioDependencia->idDependencia = $dependenciaModel->id;
  287. if (!$usuarioDependencia->save()) {
  288. $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
  289. }
  290. }
  291. }
  292. } else {
  293. $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"]]);
  294. if ($dependenciaModel === null) {
  295. $dependenciaRef = $dependencias[$usuarioRef["dependencias"]];
  296. $dependenciaModel = new Dependencia();
  297. $dependenciaModel->firebaseId = $usuarioRef["dependencias"];
  298. $dependenciaModel->nombre = $dependenciaRef['nombre'];
  299. $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
  300. $dependenciaModel->estatus = $dependenciaRef['estatus'];
  301. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
  302. if ($creado !== false) {
  303. $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
  304. }
  305. if (!$dependenciaModel->save()) {
  306. $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
  307. }
  308. }
  309. //UsuarioDependencia
  310. $usuarioDependencia = UsuarioDependencia::find()
  311. ->andWhere([
  312. "idUsuario" => $usuarioModelo->id,
  313. "idDependencia" => $dependenciaModel->id
  314. ])
  315. ->one();
  316. if ($usuarioDependencia === null) {
  317. $usuarioDependencia = new UsuarioDependencia();
  318. $usuarioDependencia->idUsuario = $usuarioModelo->id;
  319. $usuarioDependencia->idDependencia = $dependenciaModel->id;
  320. if (!$usuarioDependencia->save()) {
  321. $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
  322. }
  323. }
  324. }
  325. }
  326. }
  327. }
  328. $hoy = new \DateTime();
  329. $doc->reference()
  330. ->update([
  331. ["path" => "sincronizado", "value" => "OK"],
  332. ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
  333. ]);
  334. $this->stdoutln("Sincronizado correcto");
  335. } catch (\Exception $e) {
  336. $this->stdoutln("Exception: {$e->getMessage()}\n");
  337. $doc->reference()
  338. ->update([
  339. ["path" => "sincronizado", "value" => "ERROR"],
  340. ["path" => "sincronizadoError", "value" => $e->getMessage()],
  341. ["path" => "sincronizadoErrorLine", "value" => $e->getLine()],
  342. ]);
  343. }
  344. }
  345. # Si los registros procesados son menores al límite, terminar
  346. if ($c < $limite) {
  347. $continuar = false;
  348. }
  349. } while ($continuar);
  350. }
  351. public function actionSincronizarAcumulado() {
  352. $firebase = new FirebaseHelper();
  353. $firestore = $firebase->firestore();
  354. $refGrupos = $firestore->collection("grupos");
  355. $refUsuarios = $firestore->collection("usuarios");
  356. $refDependencias = $firestore->collection("dependencias");
  357. $grupos = [];
  358. $usuarios = [];
  359. $dependencias = [];
  360. foreach ($refGrupos->documents() as $grupo) {
  361. $grupos[$grupo->id()] = $grupo->data();
  362. }
  363. foreach ($refUsuarios->documents() as $usuario) {
  364. $usuarios[$usuario->id()] = $usuario->data();
  365. }
  366. foreach ($refDependencias->documents() as $dependencia) {
  367. $dependencias[$dependencia->id()] = $dependencia->data();
  368. }
  369. $ultimaFecha = null;
  370. $limite = 100; // 1000;
  371. $continuar = true;
  372. $fechaActual = new DateTime();
  373. $finFirebase = new Timestamp($fechaActual);
  374. $this->stdout("fechaFin: {$finFirebase} \n");
  375. $semanaPasada = new DateTime('-1 week');
  376. $inicioFirebase = new Timestamp($semanaPasada);
  377. $this->stdout("fechaFin: {$finFirebase} \n");
  378. do {
  379. $this->stdout("Sincronizando ...");
  380. $ref = $firestore->collection("eventos")
  381. ->where("timestamp", ">=", $inicioFirebase)
  382. ->where("timestamp", "<=", $finFirebase)
  383. ->orderBy("timestamp", "DESC")
  384. ->limit($limite);
  385. $documentos = $ref->documents()->size();
  386. $this->stdout("Total documentos: {$documentos} \n");
  387. if ($ultimaFecha !== null) {
  388. $ref = $ref->startAt([$ultimaFecha]);
  389. }
  390. $c = 0; # Contador de registros procesados
  391. foreach ($ref->documents() as $doc) {
  392. $this->stdoutln($doc->id());
  393. $c++;
  394. $data = $doc->data();
  395. $ultimaFecha = $data["timestamp"];
  396. $modelo = Evento::findOne(["firebaseId" => $doc->id()]);
  397. if ($modelo === null) {
  398. $modelo = new Evento();
  399. }
  400. try {
  401. $modelo->nombre = $data["nombre"];
  402. $modelo->descripcion = $data["descripcion"];
  403. $modelo->ciudad = $data["ciudad"];
  404. $modelo->redSocial = $data["redSocial"];
  405. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
  406. if ($creado !== false) {
  407. $modelo->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
  408. }
  409. $fechaInicio = $this->cambiarFecha($data["fechaInicio"]);
  410. if ($fechaInicio !== false) {
  411. $modelo->fechaInicio = $fechaInicio->format(\DateTime::RFC3339_EXTENDED);
  412. }
  413. $fechaFinal = $this->cambiarFecha($data["fechaFinal"]);
  414. if ($fechaFinal !== false) {
  415. $modelo->fechaFinal = $fechaFinal->format(\DateTime::RFC3339_EXTENDED);
  416. }
  417. $modelo->fotoEvento = $data["fotoEvento"];
  418. $modelo->url = $data["pathFirebase"];
  419. if (isset($data["tag"])) {
  420. $modelo->tag = $data["tag"];
  421. }
  422. $modelo->firebaseId = $doc->id();
  423. if (!$modelo->save()) {
  424. $this->stdoutln('Ocurrió un error al guardar un evento. ' . Json::encode($modelo->getFirstErrors()));
  425. continue;
  426. }
  427. if (isset($data["redes"])) {
  428. foreach ($data["redes"] as $red) {
  429. $eventoRed = Red::find()
  430. ->andWhere([
  431. "idEvento" => $modelo->id,
  432. "url" => $red["url"]
  433. ])
  434. ->one();
  435. if ($eventoRed === null) {
  436. $eventoRed = new Red();
  437. $eventoRed->idEvento = $modelo->id;
  438. $eventoRed->key = $red["key"];
  439. $eventoRed->url = $red["url"];
  440. $eventoRed->redSocial = $red["redSocial"];
  441. if (!$eventoRed->save()) {
  442. $this->stdoutln('Ocurrió un error al guardar una red. ' . Json::encode($eventoRed->getFirstErrors()));
  443. continue;
  444. }
  445. }
  446. }
  447. }
  448. foreach ($data["accion"] as $accion) {
  449. $eventoAccion = EventoAccion::find()
  450. ->andWhere([
  451. "idEvento" => $modelo->id,
  452. "accion" => $accion
  453. ])
  454. ->one();
  455. if ($eventoAccion === null) {
  456. $eventoAccion = new EventoAccion();
  457. $eventoAccion->idEvento = $modelo->id;
  458. $eventoAccion->accion = $accion;
  459. if (!$eventoAccion->save()) {
  460. $this->stdoutln('Ocurrió un error al guardar un evento-accion. ' . Json::encode($eventoAccion->getFirstErrors()));
  461. continue;
  462. }
  463. }
  464. }
  465. //Grupos dentro de los eventos
  466. foreach ($data["grupos"] as $grupoEvento) {
  467. $grupoModelo = Grupo::findOne(["firebaseId" => $grupoEvento]);
  468. if ($grupoModelo === null && isset($grupos[$grupoEvento])) {
  469. $grupoModelo = new Grupo();
  470. $grupoModelo->creado = new Expression('now()');
  471. $grupoModelo->nombre = $grupos[$grupoEvento]["nombre"];
  472. $grupoModelo->descripcion = $grupos[$grupoEvento]["descripcion"];
  473. $grupoModelo->firebaseId = $grupoEvento;
  474. if (!$grupoModelo->save()) {
  475. $this->stdoutln('Ocurrió un error al guardar un grupo. ' . Json::encode($grupoModelo->getFirstErrors()));
  476. }
  477. }
  478. if ($grupoModelo !== null) {
  479. $eventoGrupo = EventoGrupo::find()
  480. ->andWhere([
  481. "idEvento" => $modelo->id,
  482. "idGrupo" => $grupoModelo->id
  483. ])
  484. ->one();
  485. if ($eventoGrupo === null) {
  486. $eventoGrupo = new EventoGrupo();
  487. $eventoGrupo->idEvento = $modelo->id;
  488. $eventoGrupo->idGrupo = $grupoModelo->id;
  489. if (!$eventoGrupo->save()) {
  490. $this->stdoutln('Ocurrió un error al guardar un evento-grupo. ' . Json::encode($eventoGrupo->getFirstErrors()));
  491. }
  492. }
  493. }
  494. }
  495. foreach ($data["usuarios"] as $usuarioEvento) {
  496. $usuarioModelo = Usuario::findOne(["uid" => $usuarioEvento["uid"]]);
  497. $usuarioRef = isset($usuarios[$usuarioEvento["uid"]])
  498. ? $usuarios[$usuarioEvento["uid"]] : null;
  499. // Usuarios
  500. if ($usuarioModelo === null && $usuarioRef !== null) {
  501. $usuarioModelo = new Usuario();
  502. $usuarioModelo->uid = $usuarioRef["uid"];
  503. $usuarioModelo->nombre = $usuarioRef["nombre"];
  504. if (isset($usuarioRef["email"])) {
  505. $usuarioModelo->email = $usuarioRef["email"];
  506. }
  507. $usuarioModelo->telefono = $usuarioRef["telefono"];
  508. $usuarioModelo->facebook = $usuarioRef["facebook"];
  509. if (isset($usuarioRef["facebookVerificado"])) {
  510. $usuarioModelo->facebookVerificado = $usuarioRef["facebookVerificado"];
  511. }
  512. $usuarioModelo->instagram = $usuarioRef["instagram"];
  513. if (isset($usuarioRef["instagramVerificado"])) {
  514. $usuarioModelo->instagramVerificado = $usuarioRef["instagramVerificado"];
  515. }
  516. $usuarioModelo->twitter = $usuarioRef["twitter"];
  517. if (isset($usuarioRef["twitterVerificado"])) {
  518. $usuarioModelo->twitterVerificado = $usuarioRef["twitterVerificado"];
  519. }
  520. $usuarioModelo->genero = $usuarioRef["genero"];
  521. $usuarioModelo->verificado = $usuarioRef["verificado"];
  522. $usuarioModelo->creado = new Expression('now()');
  523. if ($usuarioRef["estatus"] === false) {
  524. $usuarioModelo->eliminado = new Expression('now()');
  525. }
  526. if (!$usuarioModelo->save()) {
  527. $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($usuarioModelo->getFirstErrors()));
  528. }
  529. }
  530. // UsuarioGrupo
  531. if ($usuarioModelo !== null && isset($usuarioRef["grupos"]) && isset($usuarioRef["grupos"][0])) {
  532. for ($i = 0; $i < count($usuarioRef["grupos"]); $i++) {
  533. $modelGrupo = Grupo::findOne(['firebaseId' => $usuarioRef["grupos"][$i]]);
  534. if (isset($modelGrupo)) {
  535. $usuarioGrupo = UsuarioGrupo::find()
  536. ->andWhere([
  537. "idUsuario" => $usuarioModelo->id,
  538. "idGrupo" => $modelGrupo->id
  539. ])
  540. ->one();
  541. if ($usuarioGrupo === null) {
  542. $usuarioGrupo = new UsuarioGrupo();
  543. $usuarioGrupo->idUsuario = $usuarioModelo->id;
  544. $usuarioGrupo->idGrupo = $modelGrupo->id;
  545. if (!$usuarioGrupo->save()) {
  546. $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
  547. }
  548. }
  549. }
  550. }
  551. }
  552. // Resultados
  553. if ($usuarioModelo !== null && isset($data["resultado"])) {
  554. $resultados = $data["resultado"];
  555. if (isset($resultados[$usuarioModelo->uid])) {
  556. foreach ($resultados[$usuarioModelo->uid] as $_accion) {
  557. $resultadoModelo = Resultado::find()
  558. ->andWhere([
  559. "idUsuario" => $usuarioModelo->id,
  560. "idEvento" => $modelo->id,
  561. "accion" => $_accion
  562. ])
  563. ->exists();
  564. if (!$resultadoModelo) {
  565. $resultadoModelo = new Resultado();
  566. $resultadoModelo->idUsuario = $usuarioModelo->id;
  567. $resultadoModelo->idEvento = $modelo->id;
  568. $resultadoModelo->accion = $_accion;
  569. if (!$resultadoModelo->save()) {
  570. $this->stdoutln('Ocurrió un error al guardar un resultado. ' . Json::encode($resultadoModelo->getFirstErrors()));
  571. }
  572. }
  573. }
  574. }
  575. }
  576. // Dependencias
  577. if ($usuarioModelo !== null && isset($usuarioRef["dependencias"]) && isset($usuarioRef["dependencias"][0])) {
  578. if (!empty($usuarioRef["dependencias"])) {
  579. if (is_array($usuarioRef["dependencias"])) {
  580. for ($i = 0; $i < count($usuarioRef["dependencias"]); $i++) {
  581. $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"][$i]]);
  582. if ($dependenciaModel === null) {
  583. $dependenciaRef = $dependencias[$usuarioRef["dependencias"][$i]];
  584. $dependenciaModel = new Dependencia();
  585. $dependenciaModel->firebaseId = $usuarioRef["dependencias"][$i];
  586. $dependenciaModel->nombre = $dependenciaRef['nombre'];
  587. $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
  588. $dependenciaModel->estatus = $dependenciaRef['estatus'];
  589. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
  590. if ($creado !== false) {
  591. $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
  592. }
  593. if (!$dependenciaModel->save()) {
  594. $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
  595. }
  596. }
  597. //UsuarioDependencia
  598. $usuarioDependencia = UsuarioDependencia::find()
  599. ->andWhere([
  600. "idUsuario" => $usuarioModelo->id,
  601. "idDependencia" => $dependenciaModel->id
  602. ])
  603. ->one();
  604. if ($usuarioDependencia === null) {
  605. $usuarioDependencia = new UsuarioDependencia();
  606. $usuarioDependencia->idUsuario = $usuarioModelo->id;
  607. $usuarioDependencia->idDependencia = $dependenciaModel->id;
  608. if (!$usuarioDependencia->save()) {
  609. $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
  610. }
  611. }
  612. }
  613. } else {
  614. $dependenciaModel = Dependencia::findOne(["firebaseId" => $usuarioRef["dependencias"]]);
  615. if ($dependenciaModel === null) {
  616. $dependenciaRef = $dependencias[$usuarioRef["dependencias"]];
  617. $dependenciaModel = new Dependencia();
  618. $dependenciaModel->firebaseId = $usuarioRef["dependencias"];
  619. $dependenciaModel->nombre = $dependenciaRef['nombre'];
  620. $dependenciaModel->descripcion = $dependenciaRef['descripcion'];
  621. $dependenciaModel->estatus = $dependenciaRef['estatus'];
  622. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $dependenciaRef["timestamp"]);
  623. if ($creado !== false) {
  624. $dependenciaModel->creado = $creado->format(\DateTime::RFC3339_EXTENDED);
  625. }
  626. if (!$dependenciaModel->save()) {
  627. $this->stdoutln('Ocurrió un error al guardar una dependencia. ' . Json::encode($dependenciaModel->getFirstErrors()));
  628. }
  629. }
  630. //UsuarioDependencia
  631. $usuarioDependencia = UsuarioDependencia::find()
  632. ->andWhere([
  633. "idUsuario" => $usuarioModelo->id,
  634. "idDependencia" => $dependenciaModel->id
  635. ])
  636. ->one();
  637. if ($usuarioDependencia === null) {
  638. $usuarioDependencia = new UsuarioDependencia();
  639. $usuarioDependencia->idUsuario = $usuarioModelo->id;
  640. $usuarioDependencia->idDependencia = $dependenciaModel->id;
  641. if (!$usuarioDependencia->save()) {
  642. $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
  643. }
  644. }
  645. }
  646. }
  647. }
  648. }
  649. $hoy = new \DateTime();
  650. $doc->reference()
  651. ->update([
  652. ["path" => "sincronizado", "value" => "OK"],
  653. ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
  654. ]);
  655. $this->stdoutln("Sincronizado correcto");
  656. } catch (\Exception $e) {
  657. $this->stdoutln("Exception: {$e->getMessage()}\n");
  658. $doc->reference()
  659. ->update([
  660. ["path" => "sincronizado", "value" => "ERROR"],
  661. ["path" => "sincronizadoError", "value" => $e->getMessage()],
  662. ["path" => "sincronizadoErrorLine", "value" => $e->getLine()],
  663. ]);
  664. }
  665. }
  666. # Si los registros procesados son menores al límite, terminar
  667. if ($c < $limite) {
  668. $continuar = false;
  669. }
  670. } while ($continuar);
  671. }
  672. public function actionParticipacion() {
  673. try {
  674. \Yii::$app->db->createCommand("SET TIMEZONE TO 'America/Hermosillo'")
  675. ->execute();
  676. } catch (\Exception $e) {
  677. }
  678. $eventos = (new Query())
  679. ->select([
  680. "nombre",
  681. "tag"
  682. ])
  683. ->from("Evento")
  684. ->andWhere([">=", "fechaFinal", new Expression("now() - interval '7 days'")])
  685. // ->andWhere([">=", "fechaFinal", '2023-05-22 00:00:00'])
  686. // ->andWhere(["<=", "fechaFinal", '2023-05-27 00:00:00'])
  687. ->groupBy(["tag", "nombre"])
  688. ->indexBy("tag")
  689. ->column();
  690. $dependencias = Dependencia::find()
  691. ->select("nombre")
  692. ->indexBy("id")
  693. ->column();
  694. $grupos = Grupo::find()
  695. ->select("nombre")
  696. ->indexBy("id")
  697. ->column();
  698. $totalEventos = count($eventos);
  699. $this->stdout("{$totalEventos}");
  700. if ($totalEventos === 0) {
  701. # ¿Si no hubo eventos en el período de tiempo también hay que avisar?
  702. return;
  703. }
  704. $query2 = (new Query())
  705. ->select([
  706. "tag",
  707. "{{Usuario}}.id",
  708. "{{Usuario}}.nombre",
  709. "{{Usuario}}.telefono",
  710. "case when count({{Resultado}}.accion) > 0 then true else false end as [[Participo]]",
  711. "{{UsuarioDependencia}}.[[idDependencia]]",
  712. "{{UsuarioGrupo}}.[[idGrupo]]"
  713. ])
  714. ->from("Evento")
  715. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  716. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  717. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  718. ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
  719. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
  720. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  721. ->andWhere(["{{Usuario}}.eliminado" => null])
  722. ->andWhere([">=", "fechaFinal", new Expression("now()-interval '7 days'")])
  723. // ->andWhere(["{{Usuario}}.id" => 70])
  724. // ->andWhere([">=", "fechaFinal", '2023-07-10 00:00:00'])
  725. // ->andWhere(["<=", "fechaFinal", '2023-07-16 23:59:59'])
  726. ->groupBy([
  727. "{{Usuario}}.nombre",
  728. "{{Usuario}}.telefono",
  729. "{{Usuario}}.id",
  730. "tag",
  731. "{{UsuarioDependencia}}.[[idDependencia]]",
  732. "{{UsuarioGrupo}}.[[idGrupo]]"
  733. ])
  734. ->orderBy([
  735. "{{Usuario}}.id" => SORT_ASC,
  736. "[[Participo]]" => SORT_DESC,
  737. ]);
  738. $eventoResumen = new EventoResumen();
  739. $eventoResumen->creado = new Expression("now()");
  740. $uuidEventoResumen = '';
  741. do {
  742. $uuidEventoResumen = (Uuid::uuid4())
  743. ->toString();
  744. $er = EventoResumen::find()
  745. ->andWhere(["uuid" => $uuidEventoResumen]);
  746. } while ($er->exists());
  747. $eventoResumen->uuid = $uuidEventoResumen;
  748. $eventoResumen->inicio = new Expression("now()-interval '7 days'");
  749. $eventoResumen->fin = new Expression("now()");
  750. if (!$eventoResumen->save()) {
  751. $errores = json_encode($eventoResumen->getFirstErrors());
  752. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  753. return;
  754. }
  755. $eventoResumen->refresh();
  756. $aux = [];
  757. $auxDependencia = [];
  758. foreach ($query2->each() as $consulta) {
  759. if (!isset($aux[$consulta['id']])) {
  760. $aux[$consulta['id']] = [
  761. "nombreUsuario" => $consulta['nombre'],
  762. "telefono" => $consulta['telefono'],
  763. "id" => $consulta['id'],
  764. "idDependencia" => $consulta['idDependencia'],
  765. "idGrupo" => $consulta['idGrupo'],
  766. "eventosFaltantes" => [],
  767. "eventosParticipo" => []
  768. ];
  769. }
  770. $nombreEvento = $eventos[$consulta['tag']];
  771. if ($consulta['Participo']) {
  772. if (!\in_array($nombreEvento, $aux[$consulta['id']]['eventosParticipo'])){
  773. $aux[$consulta['id']]['eventosParticipo'][] = $nombreEvento;
  774. }
  775. } else {
  776. $aux[$consulta['id']]['eventosFaltantes'][] = $nombreEvento;
  777. }
  778. }
  779. foreach ($aux as $consulta) {
  780. if (!isset($auxDependencia[$consulta['idDependencia']])) {
  781. $auxDependencia[$consulta['idDependencia']] = [
  782. "id" => $consulta['idDependencia'],
  783. "eventosFaltantes" => 0,
  784. "eventosParticipo" => 0
  785. ];
  786. }
  787. $eventosFaltantes = count($consulta['eventosFaltantes']);
  788. $auxDependencia[$consulta['idDependencia']]['eventosFaltantes'] += $eventosFaltantes;
  789. $eventosParticipo = count($consulta['eventosParticipo']);
  790. $auxDependencia[$consulta['idDependencia']]['eventosParticipo'] += $eventosParticipo;
  791. }
  792. $notificacion = new Notificacion();
  793. $notificacion->creado = new Expression("now()");
  794. if (!$notificacion->save()) {
  795. $errores = json_encode($notificacion->getFirstErrors());
  796. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  797. return;
  798. } // */
  799. # TODO: Revisar si es necesario consultar la información del modelo
  800. # $notificacion->refresh();
  801. //POR USUARIO
  802. foreach ($aux as $usuario) {
  803. $notificacionUsuario = new NotificacionUsuario();
  804. $notificacionUsuario->idNotificacion = $notificacion->id;
  805. $notificacionUsuario->idUsuario = $usuario['id'];
  806. $notificacionUsuario->nombre = $usuario['nombreUsuario'];
  807. $notificacionUsuario->telefono = $usuario['telefono'];
  808. $notificacionUsuario->plantilla = Notificacion::PLANTILLA_EVENTO;
  809. # Es mejor guardar el valor del count en lugar de evaluarlo multiples veces
  810. $totalParticipaciones = count($usuario["eventosParticipo"]);
  811. $parametros = [
  812. [
  813. "type" => "text",
  814. "text" => "{$totalParticipaciones}/{$totalEventos} eventos"
  815. ],
  816. ];
  817. if ($totalParticipaciones === $totalEventos) {
  818. $parametros[] = [
  819. "type" => "text",
  820. "text" => "Gracias por tu"
  821. ];
  822. } else if ($totalParticipaciones > 0) {
  823. $parametros[] = [
  824. "type" => "text",
  825. "text" => ", gracias por tu participación. Vamos por el 100% de"
  826. ];
  827. } else {
  828. $parametros[] = [
  829. "type" => "text",
  830. "text" => "Vamos por el 100% de"
  831. ];
  832. }
  833. $notificacionUsuario->parametros = $parametros;
  834. if (!$notificacionUsuario->save()) {
  835. $errores = json_encode($notificacionUsuario->getFirstErrors());
  836. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  837. return;
  838. }
  839. }
  840. //POR LIDER DEPENDENCIA
  841. foreach ($auxDependencia as $id => $dependencia) {
  842. $evResDependencia = new EventoResumenDependencia();
  843. $uuidEventoResumenDependencia = '';
  844. $consultaERD = EventoResumenDependencia::find()
  845. ->andWhere([
  846. "AND",
  847. ["=", "idEventoResumen", $eventoResumen->id],
  848. ["=", "idDependencia", $id],
  849. ])
  850. ->exists();
  851. if ($consultaERD) {
  852. continue;
  853. }
  854. do {
  855. $uuidEventoResumenDependencia = (Uuid::uuid4())
  856. ->toString();
  857. $erd = EventoResumenDependencia::find()
  858. ->andWhere(["clave" => $uuidEventoResumenDependencia]);
  859. } while ($erd->exists());
  860. $evResDependencia->clave = $uuidEventoResumenDependencia;
  861. $evResDependencia->idEventoResumen = $eventoResumen->id;
  862. $evResDependencia->idDependencia = $id;
  863. if (!$evResDependencia->save()) {
  864. $errores = json_encode($evResDependencia->getFirstErrors());
  865. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  866. return;
  867. }
  868. $dependenciaLider = DependenciaLider::find()
  869. ->andWhere(["idDependencia" => $id]);
  870. $nombreDependencia = "";
  871. if (isset($dependencias[$id])) {
  872. $nombreDependencia = trim($dependencias[$id]);
  873. }
  874. foreach ($dependenciaLider->each() as $lider) {
  875. $usuario = Usuario::findOne($lider["idUsuario"]);
  876. $notificacionUsuario = new NotificacionUsuario();
  877. $notificacionUsuario->idNotificacion = $notificacion->id;
  878. $notificacionUsuario->idUsuario = $usuario->id;
  879. $notificacionUsuario->nombre = $usuario->nombre;
  880. $notificacionUsuario->telefono = $usuario->telefono;
  881. $notificacionUsuario->plantilla = Notificacion::PLANTILLA_LIDER_EVENTO_URL;
  882. $totalParticipaciones = $dependencia["eventosParticipo"];
  883. $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
  884. $usuariosDependencia = Usuario::find()
  885. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
  886. ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $id])
  887. ->andWhere(["{{Usuario}}.eliminado" => null]);
  888. // $mensajeUsuariosDependencia = "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos. Puede consultar los resultados en https://laud-red.web.app/resumen-lider-dependencia?id={$evResDependencia->clave}";
  889. $mensajeUsuariosDependencia = "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos. ";
  890. $contador = 0;
  891. foreach ($usuariosDependencia->each() as $ud) {
  892. if(!isset($aux[$ud["id"]])) {
  893. continue;
  894. }
  895. $contador++;
  896. $nomrbeUsuario = trim($aux[$ud["id"]]["nombreUsuario"]);
  897. $totalEventosUsuarioParticipa = count($aux[$ud["id"]]["eventosParticipo"]);
  898. $mensajeUsuariosDependencia .= "*{$nomrbeUsuario}*: {$totalEventosUsuarioParticipa}/{$totalEventos}";
  899. if ($contador < count($usuariosDependencia->all())) {
  900. $mensajeUsuariosDependencia .= ", ";
  901. }
  902. }
  903. $mensajeUsuariosDependencia .= ". Puede consultar los resultados en https://laud-red.web.app/resumen-lider-dependencia?id={$evResDependencia->clave}";
  904. $parametros = [
  905. [
  906. "type" => "text",
  907. "text" => $mensajeUsuariosDependencia
  908. ],
  909. ];
  910. if ($totalParticipaciones === $totalEventosDependencia) {
  911. $parametros[] = [
  912. "type" => "text",
  913. "text" => "Gracias por tu"
  914. ];
  915. } else if ($totalParticipaciones > 0) {
  916. $parametros[] = [
  917. "type" => "text",
  918. "text" => "Gracias por tu participación. Vamos por el 100% de"
  919. ];
  920. } else {
  921. $parametros[] = [
  922. "type" => "text",
  923. "text" => "Vamos por el 100% de"
  924. ];
  925. }
  926. $notificacionUsuario->parametros = $parametros;
  927. if (!$notificacionUsuario->save()) {
  928. $this->stdout("Error");
  929. $errores = json_encode($notificacionUsuario->getFirstErrors());
  930. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  931. return;
  932. }
  933. }
  934. }
  935. //LIDER GLOBAL
  936. $liderGlobal = Usuario::find()
  937. ->andWhere(["liderGlobal" => true]);
  938. foreach ($liderGlobal->each() as $lider) {
  939. $mensaje = "";
  940. $participaciones = 0;
  941. $totalParticipaciones = 0;
  942. $totalEventosDependencia = 0;
  943. $contadorDependencias = 0;
  944. foreach ($auxDependencia as $id => $dependencia) {
  945. $contadorDependencias++;
  946. $usuariosDependencia = Usuario::find()
  947. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
  948. ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $id])
  949. ->andWhere(["{{Usuario}}.eliminado" => null]);
  950. $nombreDependencia = "";
  951. if (isset($dependencias[$id])) {
  952. $nombreDependencia = trim($dependencias[$id]);
  953. $totalParticipaciones = $dependencia["eventosParticipo"];
  954. $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
  955. $mensaje .= "*{$nombreDependencia}* fue {$totalParticipaciones}/{$totalEventosDependencia} eventos";
  956. // $contadorUsuarios = 0;
  957. foreach ($usuariosDependencia->each() as $ud) {
  958. if(!isset($aux[$ud["id"]])) {
  959. continue;
  960. }
  961. $nomrbeUsuario = trim($aux[$ud["id"]]["nombreUsuario"]);
  962. $totalEventosUsuarioParticipa = count($aux[$ud["id"]]["eventosParticipo"]);
  963. $checkEventoParticipante = EventoResumenParticipante::find()
  964. ->andWhere([
  965. "idEventoResumen" => $eventoResumen->id,
  966. "idDependencia" => $id,
  967. "idUsuario" => $ud->id
  968. ])
  969. ->exists();
  970. if ($checkEventoParticipante) {
  971. continue;
  972. }
  973. $eventoParticipante = new EventoResumenParticipante();
  974. $eventoParticipante->idEventoResumen = $eventoResumen->id;
  975. $eventoParticipante->idDependencia = $id;
  976. $eventoParticipante->nombreDependencia = $nombreDependencia;
  977. $eventoParticipante->idGrupo = $aux[$ud["id"]]["idGrupo"];
  978. $eventoParticipante->nombreGrupo = trim($grupos[$aux[$ud["id"]]["idGrupo"]]);
  979. $eventoParticipante->idUsuario = $ud->id;
  980. $eventoParticipante->nombre = $nomrbeUsuario;
  981. $eventoParticipante->totalEventos = $totalEventos;
  982. $eventoParticipante->participacion = trim($totalEventosUsuarioParticipa);
  983. if (!$eventoParticipante->save()) {
  984. $errores = json_encode($eventoParticipante->getFirstErrors());
  985. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  986. return;
  987. }
  988. /* $contadorUsuarios++;
  989. $mensaje .= "*{$nomrbeUsuario}*: {$totalEventosUsuarioParticipa}/{$totalEventos}";
  990. if ($contadorUsuarios < count($usuariosDependencia->all())){
  991. $mensaje .= " || ";
  992. } */
  993. }
  994. // $mensaje .= ")";
  995. if ($contadorDependencias < count($auxDependencia)){
  996. $mensaje .= ", ";
  997. }
  998. $participaciones += $totalParticipaciones;
  999. }
  1000. }
  1001. $notificacionUsuario = new NotificacionUsuario();
  1002. $notificacionUsuario->idNotificacion = $notificacion->id;
  1003. $notificacionUsuario->idUsuario = $lider->id;
  1004. $notificacionUsuario->nombre = $lider->nombre;
  1005. $notificacionUsuario->telefono = $lider->telefono;
  1006. $notificacionUsuario->plantilla = Notificacion::PLANTILLA_LIDER_GLOBAL;
  1007. // $totalParticipaciones = $dependencia["eventosParticipo"];
  1008. // $totalEventosDependencia = $dependencia["eventosParticipo"] + $dependencia["eventosFaltantes"];
  1009. $mensaje .= ". Aquí puede mirar el resumen de actividades https://laud-red.web.app/resumen-evento?id={$eventoResumen->uuid}";
  1010. $parametros = [
  1011. [
  1012. "type" => "text",
  1013. "text" => $mensaje
  1014. ],
  1015. ];
  1016. if ($participaciones === $totalEventosDependencia) {
  1017. $parametros[] = [
  1018. "type" => "text",
  1019. "text" => "Gracias por tu"
  1020. ];
  1021. } else if ($participaciones > 0) {
  1022. $parametros[] = [
  1023. "type" => "text",
  1024. "text" => "Gracias por tu participación. Vamos por el 100% de"
  1025. ];
  1026. } else {
  1027. $parametros[] = [
  1028. "type" => "text",
  1029. "text" => "Vamos por el 100% de"
  1030. ];
  1031. }
  1032. $notificacionUsuario->parametros = $parametros;
  1033. if (!$notificacionUsuario->save()) {
  1034. $errores = json_encode($notificacionUsuario->getFirstErrors());
  1035. $this->stdout('Hubo un problema al generar la notificación: '.$errores);
  1036. return;
  1037. }
  1038. }
  1039. $notificacion->estatus = Notificacion::ESTATUS_NUEVO;
  1040. $domingo = 0;
  1041. $d = new \DateTime('now', new \DateTimeZone('America/Hermosillo'));
  1042. $fecha = strtotime('now');
  1043. $dia = intval($d->format("w"));
  1044. if ($dia !== $domingo) {
  1045. $d = new \DateTime('next Sunday', new \DateTimeZone('America/Hermosillo'));
  1046. }
  1047. $d->setTime(18, 0, 0, 0);
  1048. $siguienteDomingo = $d->format(\DateTime::ISO8601);
  1049. $notificacion->envio = $siguienteDomingo;
  1050. $notificacion->save();
  1051. $this->stdout("Terminó");
  1052. // file_put_contents("archivo.json", json_encode($aux));
  1053. }
  1054. }