CircularesController.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Services\PeriodoService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Storage;
  8. use Illuminate\Support\Facades\Validator;
  9. class CircularesController extends Controller
  10. {
  11. protected $nombrePeriodoActivo;
  12. public function __construct(PeriodoService $periodoService)
  13. {
  14. try {
  15. $this->nombrePeriodoActivo = $periodoService->obtenerPeriodoActivoNombre();
  16. } catch (\Exception $e) {
  17. $this->nombrePeriodoActivo = null;
  18. }
  19. }
  20. public function findOne($id)
  21. {
  22. $id = base64_decode($id);
  23. $circular = DB::table('circulares')->where('idCircular', $id)->first();
  24. return response()->json($circular, 200);
  25. }
  26. public function getByUser($id)
  27. {
  28. $circular = DB::table('vista_circulares_cu')->where('idUsuario', $id)->get();
  29. return response()->json($circular, 200);
  30. }
  31. public function estadisticas($id)
  32. {
  33. // $id = base64_decode($id);
  34. $circular = DB::table('circulares_usuarios_colegioabc')
  35. ->join('usuarios as u', 'circulares_usuarios_colegioabc.idUsuario', '=', 'u.idUsuario')
  36. ->select(
  37. 'circulares_usuarios_colegioabc.idUsuario',
  38. 'circulares_usuarios_colegioabc.fechaLectura',
  39. 'circulares_usuarios_colegioabc.medioLectura',
  40. DB::raw("CONCAT(u.primerNombre, ' ', COALESCE(u.segundoNombre, ''), ' ', u.apellidoPaterno, ' ', COALESCE(u.apellidoMaterno, '')) AS nombreCompleto")
  41. )
  42. ->where('circulares_usuarios_colegioabc.idCircular', $id)
  43. ->get();
  44. $vistos = DB::table('circulares_usuarios_colegioabc')
  45. ->select('idUsuario', 'fechaLectura', 'medioLectura')
  46. ->where('idCircular', $id)
  47. ->whereNotNull('fechaLectura')
  48. ->get();
  49. $total = $circular->count();
  50. $vistosa = $vistos->count();
  51. $porcentaje = ($vistosa * 100) / $total;
  52. $porcentaje = number_format($porcentaje, 2, '.', '');
  53. return response()->json([
  54. 'data' => $circular,
  55. 'total' => $total,
  56. 'vistos' => $vistosa,
  57. 'porcentaje' => '%' . $porcentaje
  58. ], 200);
  59. }
  60. public function download($id)
  61. {
  62. // $id = base64_decode($id);
  63. $fileUrl = $id ? asset('storage/circulares/' . $id) : null;
  64. return response()->json($fileUrl, 200);
  65. }
  66. public function mostrar()
  67. {
  68. $circularList = DB::table('circulares')
  69. ->where('idEscuela', 'COLEGIOABC')
  70. ->orderBy('estado', 'asc')
  71. ->get();
  72. foreach ($circularList as $circular) {
  73. if (isset($circular->audiencia)) {
  74. $audiencia = null;
  75. if ($circular->audiencia == 'AL') {
  76. $audiencia = 'Alumnos';
  77. } else if ($circular->audiencia == 'PF') {
  78. $audiencia = 'Padres de Familia';
  79. } else if ($circular->audiencia == 'PR') {
  80. $audiencia = 'Profesores';
  81. } else if ($circular->audiencia == 'AD') {
  82. $audiencia = 'Administrativos';
  83. }
  84. if (isset($circular->idReceptores)) {
  85. $nombreReceptor = null;
  86. $nivel = DB::table('niveles')->where('idNivel', $circular->idReceptores)->first(['nombreNivel']);
  87. if ($nivel) {
  88. $nombreReceptor = $nivel->nombreNivel;
  89. }
  90. if (!$nombreReceptor) {
  91. $grupo = DB::table('grupos')->where('idGrupo', $circular->idReceptores)->first(['nombreGrupo']);
  92. if ($grupo) {
  93. $nombreReceptor = $grupo->nombreGrupo;
  94. }
  95. }
  96. if (!$nombreReceptor) {
  97. $materia = DB::table('materias')->where('idMateria', $circular->idReceptores)->first(['nombreMateria']);
  98. if ($materia) {
  99. $nombreReceptor = $materia->nombreMateria;
  100. }
  101. }
  102. if (!$nombreReceptor) {
  103. $nombreReceptor = $circular->idReceptores;
  104. }
  105. if ($circular->idReceptores == 'AL' || $circular->idReceptores == 'PF' || $circular->idReceptores == 'PR' || $circular->idReceptores == 'AD') {
  106. $nombreReceptor = 'Todos';
  107. }
  108. if ($nombreReceptor) {
  109. $circular->rolName = $nombreReceptor . ' - ' . $audiencia;
  110. }
  111. }
  112. }
  113. }
  114. return response()->json($circularList, 200);
  115. }
  116. public function extraInfo($id)
  117. {
  118. $id = base64_decode($id);
  119. $circular = DB::table('vista_circulares_usuarios')
  120. ->where('idCircular', $id)
  121. ->first();
  122. return response()->json($circular, 200);
  123. }
  124. public function ultimasCirc()
  125. {
  126. $circularList = DB::table('circulares')
  127. ->where('idEscuela', 'COLEGIOABC')
  128. ->where('estado', 'Activo')
  129. ->orderBy('fechaCreacion', 'desc')
  130. ->get();
  131. foreach ($circularList as $circular) {
  132. if (isset($circular->audiencia)) {
  133. $audiencia = null;
  134. if ($circular->audiencia == 'AL') {
  135. $audiencia = 'Alumnos';
  136. } else if ($circular->audiencia == 'PF') {
  137. $audiencia = 'Padres de Familia';
  138. } else if ($circular->audiencia == 'PR') {
  139. $audiencia = 'Profesores';
  140. } else if ($circular->audiencia == 'AD') {
  141. $audiencia = 'Administrativos';
  142. }
  143. $circular->audiencia = $audiencia;
  144. }
  145. }
  146. foreach ($circularList as $circular) {
  147. if (isset($circular->idReceptores)) {
  148. $nombreReceptor = null;
  149. $nivel = DB::table('niveles')->where('idNivel', $circular->idReceptores)->first(['nombreNivel']);
  150. if ($nivel) {
  151. $nombreReceptor = $nivel->nombreNivel;
  152. }
  153. if (!$nombreReceptor) {
  154. $grupo = DB::table('grupos')->where('idGrupo', $circular->idReceptores)->first(['nombreGrupo']);
  155. if ($grupo) {
  156. $nombreReceptor = $grupo->nombreGrupo;
  157. }
  158. }
  159. if (!$nombreReceptor) {
  160. $materia = DB::table('materias')->where('idMateria', $circular->idReceptores)->first(['nombreMateria']);
  161. if ($materia) {
  162. $nombreReceptor = $materia->nombreMateria;
  163. }
  164. }
  165. if (!$nombreReceptor) {
  166. $nombreReceptor = $circular->idReceptores;
  167. }
  168. if ($circular->idReceptores == 'AL' || $circular->idReceptores == 'PF' || $circular->idReceptores == 'PR' || $circular->idReceptores == 'AD') {
  169. $nombreReceptor = 'Todos';
  170. }
  171. if ($nombreReceptor) {
  172. $circular->idReceptores = $nombreReceptor;
  173. }
  174. }
  175. }
  176. return response()->json($circularList, 200);
  177. }
  178. // public function crear(Request $request)
  179. // {
  180. // try {
  181. // // Rutas para almacenar los archivos
  182. // $storagePath = 'public/circulares/';
  183. // $archivosAdjuntos = [];
  184. // // Procesar cada archivo en base64
  185. // if ($request->has('bases64')) {
  186. // foreach ($request->bases64 as $file) {
  187. // // Extraer la extensión del archivo
  188. // $fileInfo = explode(';', $file['base64'])[0];
  189. // $fileExtension = explode('/', $fileInfo)[1];
  190. // switch ($fileExtension) {
  191. // case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
  192. // $fileExtension = 'docx';
  193. // break;
  194. // case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
  195. // $fileExtension = 'xlsx';
  196. // break;
  197. // case 'vnd.openxmlformats-officedocument.presentationml.presentation':
  198. // $fileExtension = 'pptx';
  199. // break;
  200. // default;
  201. // }
  202. // // Decodificar el archivo base64
  203. // $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
  204. // $fileData = str_replace(' ', '+', $fileData);
  205. // // Nombre del archivo con la extensión correcta
  206. // $fileName = $file['id'] . '.' . $fileExtension;
  207. // // Guardar el archivo
  208. // //
  209. // Storage::put($storagePath . $fileName, base64_decode($fileData));
  210. // $archivosAdjuntos[] = [
  211. // 'nombre' => $file['nombre'],
  212. // 'ruta' => Storage::url($storagePath . $fileName)
  213. // ];
  214. // }
  215. // }
  216. // // Insertar la circular en la base de datos
  217. // DB::table('circulares')->insert([
  218. // 'idEscuela' => 'COLEGIOABC',
  219. // 'estado' => 'Activo',
  220. // 'titulo' => $request->titulo,
  221. // 'audiencia' => $request->audiencia,
  222. // 'idReceptores' => $request->idReceptores,
  223. // 'contenido' => $request->contenido,
  224. // 'jsonAdjuntos' => json_encode($request->jsonAdjuntos),
  225. // 'importancia' => $request->importancia,
  226. // 'fechaCreacion' => $request->fechaCreacion,
  227. // 'fechaPublicacion' => $request->fechaPublicacion,
  228. // 'fechaCaducidad' => $request->fechaCaducidad,
  229. // 'idUsuario' => $request->idUsuario
  230. // ]);
  231. // return response()->json([
  232. // 'mensaje' => 'Circular creada exitosamente',
  233. // 'idCircular' => DB::getPdo()->lastInsertId()
  234. // ], 201);
  235. // } catch (\Exception $e) {
  236. // return response()->json(['mensaje' => 'Error al crear la circular: ' . $e->getMessage()], 500);
  237. // }
  238. // }
  239. public function crear(Request $request)
  240. {
  241. $carpetaBase = config('custom.s3_carpeta_base');
  242. try {
  243. $periodoService = new PeriodoService();
  244. $carpetaPeriodo = $periodoService->obtenerPeriodoActivoNombre();
  245. $rutaBucket = 'circulares/';
  246. $archivosAdjuntos = [];
  247. // Procesar cada archivo en base64
  248. if ($request->has('bases64')) {
  249. foreach ($request->bases64 as $file) {
  250. // Extraer la extensión MIME y convertir si es necesario
  251. $fileInfo = explode(';', $file['base64'])[0];
  252. $fileExtension = explode('/', $fileInfo)[1];
  253. switch ($fileExtension) {
  254. case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
  255. $fileExtension = 'docx';
  256. break;
  257. case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
  258. $fileExtension = 'xlsx';
  259. break;
  260. case 'vnd.openxmlformats-officedocument.presentationml.presentation':
  261. $fileExtension = 'pptx';
  262. break;
  263. }
  264. // Decodificar el archivo base64
  265. $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
  266. $fileData = str_replace(' ', '+', $fileData);
  267. $contenidoArchivo = base64_decode($fileData);
  268. // Generar nombre del archivo
  269. $fileName = $file['id'] . '-' . $file['nombre'] . '.' . $fileExtension;
  270. $pathS3 = $carpetaBase. '/' . $carpetaPeriodo . '/' .$rutaBucket . $fileName;
  271. // Esto sube al s3
  272. Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
  273. $archivosAdjuntos[] = [
  274. 'id' => $file['id'],
  275. 'nombre' => $file['nombre'],
  276. 'ruta' => Storage::disk('s3')->url($pathS3)
  277. ];
  278. }
  279. }
  280. // Insertar la circular en la base de datos
  281. DB::table('circulares')->insert([
  282. 'idEscuela' => 'COLEGIOABC',
  283. 'estado' => 'Activo',
  284. 'titulo' => $request->titulo,
  285. 'audiencia' => $request->audiencia,
  286. 'idReceptores' => $request->idReceptores,
  287. 'contenido' => $request->contenido,
  288. 'jsonAdjuntos' => json_encode($archivosAdjuntos),
  289. 'importancia' => $request->importancia,
  290. 'fechaCreacion' => $request->fechaCreacion,
  291. 'fechaPublicacion' => $request->fechaPublicacion,
  292. 'fechaCaducidad' => $request->fechaCaducidad,
  293. 'idUsuario' => $request->idUsuario
  294. ]);
  295. return response()->json([
  296. 'mensaje' => 'Circular creada exitosamente',
  297. 'idCircular' => DB::getPdo()->lastInsertId()
  298. ], 201);
  299. } catch (\Exception $e) {
  300. return response()->json(['mensaje' => 'Error al crear la circular: ' . $e->getMessage()], 500);
  301. }
  302. }
  303. public function actualizar(Request $request)
  304. {
  305. try {
  306. $rutaBucket = 'circulares/';
  307. $archivosAdjuntos = [];
  308. // Obtener los adjuntos anteriores desde la BD
  309. $adjuntosAnteriores = DB::table('circulares')
  310. ->where('idCircular', $request->idCircular)
  311. ->value('jsonAdjuntos');
  312. $adjuntosAnteriores = $adjuntosAnteriores ? json_decode($adjuntosAnteriores, true) : [];
  313. // Si se mandan nuevos archivos base64, los procesamos
  314. if ($request->has('bases64') && !empty($request->bases64)) {
  315. foreach ($request->bases64 as $file) {
  316. // Extraer extensión
  317. $fileInfo = explode(';', $file['base64'])[0];
  318. $fileExtension = explode('/', $fileInfo)[1];
  319. switch ($fileExtension) {
  320. case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
  321. $fileExtension = 'docx';
  322. break;
  323. case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
  324. $fileExtension = 'xlsx';
  325. break;
  326. case 'vnd.openxmlformats-officedocument.presentationml.presentation':
  327. $fileExtension = 'pptx';
  328. break;
  329. }
  330. // Generar nombre
  331. $fileName = $file['id'] . '-' . $file['nombre'] . '.' . $fileExtension;
  332. $pathS3 = $rutaBucket . $fileName;
  333. // Subir nuevo archivo
  334. $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
  335. $fileData = str_replace(' ', '+', $fileData);
  336. $contenidoArchivo = base64_decode($fileData);
  337. Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
  338. $archivosAdjuntos[] = [
  339. 'id' => $file['id'],
  340. 'nombre' => $file['nombre'],
  341. 'ruta' => Storage::disk('s3')->url($pathS3)
  342. ];
  343. }
  344. $archivosAdjuntos = array_merge($adjuntosAnteriores, $archivosAdjuntos);
  345. } else {
  346. // Se mantienen los adjuntos anteriores si no se mandaron nuevos archivos
  347. $archivosAdjuntos = $adjuntosAnteriores;
  348. }
  349. // Actualizar la circular
  350. DB::table('circulares')
  351. ->updateOrInsert(
  352. ['idCircular' => $request->idCircular],
  353. [
  354. 'titulo' => $request->titulo,
  355. 'audiencia' => $request->audiencia,
  356. 'idReceptores' => $request->idReceptores,
  357. 'contenido' => $request->contenido,
  358. 'jsonAdjuntos' => json_encode($archivosAdjuntos),
  359. 'importancia' => $request->importancia,
  360. 'fechaPublicacion' => $request->fechaPublicacion,
  361. 'fechaCaducidad' => $request->fechaCaducidad,
  362. 'idUsuario' => $request->idUsuario
  363. ]
  364. );
  365. return response()->json(['mensaje' => 'Circular actualizada exitosamente'], 200);
  366. } catch (\Exception $e) {
  367. return response()->json(['mensaje' => 'Error al actualizar la circular: ' . $e->getMessage()], 500);
  368. }
  369. }
  370. public function eliminarArchivo(Request $request)
  371. {
  372. try {
  373. // Validar parámetros
  374. if (!$request->has('idCircular') || !$request->has('idArchivo')) {
  375. return response()->json(['mensaje' => 'Faltan parámetros'], 400);
  376. }
  377. $idCircular = $request->idCircular;
  378. $idArchivo = $request->idArchivo;
  379. // Obtener adjuntos actuales
  380. $adjuntos = DB::table('circulares')
  381. ->where('idCircular', $idCircular)
  382. ->value('jsonAdjuntos');
  383. $adjuntos = $adjuntos ? json_decode($adjuntos, true) : [];
  384. // Buscar el adjunto por idArchivo
  385. $index = array_search($idArchivo, array_column($adjuntos, 'id'));
  386. if ($index === false) {
  387. return response()->json(['mensaje' => 'Adjunto no encontrado'], 404);
  388. }
  389. $archivo = $adjuntos[$index];
  390. // Obtener la key de S3 desde la url
  391. $parsedUrl = parse_url($archivo['ruta'], PHP_URL_PATH);
  392. $key = ltrim(str_replace('pledu-dv-aeci/', '', $parsedUrl), '/');
  393. // Eliminar de S3 si existe
  394. if (Storage::disk('s3')->exists($key)) {
  395. Storage::disk('s3')->delete($key);
  396. }
  397. // Eliminar del array y actualizar BD
  398. array_splice($adjuntos, $index, 1);
  399. DB::table('circulares')
  400. ->where('idCircular', $idCircular)
  401. ->update(['jsonAdjuntos' => json_encode($adjuntos)]);
  402. return response()->json(['mensaje' => 'Archivo eliminado correctamente'], 200);
  403. } catch (\Exception $e) {
  404. return response()->json(['mensaje' => 'Error al eliminar el archivo: ' . $e->getMessage()], 500);
  405. }
  406. }
  407. public function habilitar($id)
  408. {
  409. $id = base64_decode($id);
  410. try {
  411. //code...
  412. DB::table('circulares')
  413. ->updateOrInsert(
  414. ['idCircular' => $id],
  415. ['estado' => 'Activo']
  416. );
  417. return response()->json(['mensaje' => 'Circular habilitada exitosamente'], 201);
  418. } catch (\Exception $e) {
  419. //throw $th;
  420. return response()->json(['mensaje' => 'Error al habilitar la circular: ' . $e->getMessage()], 500);
  421. }
  422. }
  423. public function eliminar($id)
  424. {
  425. $id = base64_decode($id);
  426. try {
  427. //code...
  428. DB::table('circulares')
  429. ->updateOrInsert(
  430. ['idCircular' => $id],
  431. ['estado' => 'Eliminado']
  432. );
  433. return response()->json(['mensaje' => 'Circular deshabilitada exitosamente'], 201);
  434. } catch (\Exception $e) {
  435. //throw $th;
  436. return response()->json(['mensaje' => 'Error al habilitar la circular: ' . $e->getMessage()], 500);
  437. }
  438. }
  439. public function getUsuariosCircular(Request $request)
  440. {
  441. if ($request->Audiencia == 'AL') {
  442. if ($request->Destino == 'NivelEducativo') {
  443. $iDUsuario = DB::table('usuarios')
  444. ->leftJoin('vista_grados_niveles', 'vista_grados_niveles.nombreGrado', '=', 'usuarios.grado')
  445. ->leftJoin('vista_usuarios_Grupos1', 'usuarios.idUsuario', '=', 'vista_usuarios_Grupos1.idUsuario')
  446. ->where('usuarios.idEscuela', 'COLEGIOABC')
  447. ->where('usuarios.tipoUsuario', 'AL')
  448. ->where('vista_grados_niveles.idNivel', $request->id)
  449. ->select('usuarios.idUsuario')
  450. ->get();
  451. return response()->json([
  452. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  453. ], 200);
  454. } else if ($request->Destino == 'Grado') {
  455. $iDUsuario = DB::table('usuarios')
  456. ->where('idEscuela', 'COLEGIOABC')
  457. ->where('tipoUsuario', 'AL')
  458. ->where('grado', $request->id)
  459. ->select('idUsuario')
  460. ->get();
  461. return response()->json([
  462. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  463. ], 200);
  464. } else if ($request->Destino == 'Grupo') {
  465. $iDUsuario = DB::table('grupos_usuarios')
  466. ->where('idEscuela', 'COLEGIOABC')
  467. ->where('idGrupo', $request->id)
  468. ->select('idUsuario')
  469. ->get();
  470. return response()->json([
  471. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  472. ], 200);
  473. } else if ($request->Destino == 'Materias') {
  474. $iDUsuario = DB::table('usuarios')
  475. ->leftJoin('vista_usuarios_Grupos1', 'vista_usuarios_Grupos1.idUsuario', '=', 'usuarios.idUsuario')
  476. ->leftJoin('vista_materias_grados_grupos', function ($join) {
  477. $join->on('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'usuarios.grado')
  478. ->orOn('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'vista_usuarios_Grupos1.idGrupo');
  479. })
  480. ->where('usuarios.idEscuela', 'COLEGIOABC')
  481. ->where('usuarios.tipoUsuario', 'AL')
  482. ->where('vista_materias_grados_grupos.idMateria', $request->id)
  483. ->select('usuarios.idUsuario')
  484. ->get();
  485. $iDUsuario = $iDUsuario->unique('idUsuario');
  486. return response()->json([
  487. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  488. ], 200);
  489. } else if ($request->Destino == 'todos') {
  490. $iDUsuario = DB::table('usuarios')
  491. ->where('idEscuela', 'COLEGIOABC')
  492. ->where('tipoUsuario', 'AL')
  493. ->select('idUsuario')
  494. ->get();
  495. return response()->json([
  496. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  497. ], 200);
  498. }
  499. } else if ($request->Audiencia == 'PF') {
  500. if ($request->Destino == 'NivelEducativo') {
  501. $iDUsuario = DB::table('usuarios')
  502. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  503. ->leftJoin('vista_usuarios_Grupos1', 'usuarios.idUsuario', '=', 'vista_usuarios_Grupos1.idUsuario')
  504. ->leftJoin('vista_grados_niveles', 'vista_grados_niveles.nombreGrado', '=', 'usuarios.grado')
  505. ->where('usuarios.idEscuela', 'COLEGIOABC')
  506. ->where('usuarios.tipoUsuario', 'AL')
  507. ->where('vista_grados_niveles.idNivel', $request->id)
  508. ->select('usuarios_padres.idPadre')
  509. ->get();
  510. return response()->json([
  511. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  512. ], 200);
  513. } else if ($request->Destino == 'Grado') {
  514. $iDUsuario = DB::table('usuarios')
  515. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  516. ->where('usuarios.idEscuela', 'COLEGIOABC')
  517. ->where('usuarios.tipoUsuario', 'AL')
  518. ->where('usuarios.grado', $request->id)
  519. ->select('usuarios_padres.idPadre')
  520. ->get();
  521. return response()->json([
  522. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  523. ], 200);
  524. } else if ($request->Destino == 'Grupo') {
  525. $iDUsuario = DB::table('usuarios')
  526. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  527. ->leftJoin('grupos_usuarios', 'grupos_usuarios.idUsuario', '=', 'usuarios.idUsuario')
  528. ->where('usuarios.idEscuela', 'COLEGIOABC')
  529. ->where('usuarios.tipoUsuario', 'AL')
  530. ->where('grupos_usuarios.idGrupo', $request->id)
  531. ->select('usuarios_padres.idPadre')
  532. ->get();
  533. return response()->json([
  534. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  535. ], 200);
  536. } else if ($request->Destino == 'Materias') {
  537. $iDUsuario = DB::table('usuarios')
  538. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  539. ->leftJoin('vista_usuarios_Grupos1', 'vista_usuarios_Grupos1.idUsuario', '=', 'usuarios.idUsuario')
  540. ->leftJoin('vista_materias_grados_grupos', function ($join) {
  541. $join->on('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'usuarios.grado')
  542. ->orOn('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'vista_usuarios_Grupos1.idGrupo');
  543. })
  544. ->where('usuarios.idEscuela', 'COLEGIOABC')
  545. ->where('usuarios.tipoUsuario', 'AL')
  546. ->where('vista_materias_grados_grupos.idMateria', $request->id)
  547. ->select('usuarios_padres.idPadre')
  548. ->get();
  549. return response()->json([
  550. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  551. ], 200);
  552. } else if ($request->Destino == 'todos') {
  553. $iDUsuario = DB::table('usuarios')
  554. ->where('idEscuela', 'COLEGIOABC')
  555. ->where('tipoUsuario', 'PF')
  556. ->select('idUsuario')
  557. ->get();
  558. return response()->json([
  559. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  560. ], 200);
  561. }
  562. } else if ($request->Audiencia == 'AD') {
  563. if ($request->Destino == 'todos') {
  564. $iDUsuario = DB::table('usuarios')
  565. ->where('idEscuela', 'COLEGIOABC')
  566. ->where('tipoUsuario', 'AD')
  567. ->select('idUsuario')
  568. ->get();
  569. return response()->json([
  570. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  571. ], 200);
  572. }
  573. } else if ($request->Audiencia == 'PR') {
  574. if ($request->Destino == 'NivelEducativo') {
  575. $iDUsuario = DB::table('usuarios')
  576. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  577. ->leftJoin('vista_grados_niveles', 'vista_grados_niveles.nombreGrado', '=', 'vista_usuarios_materias.idGradoGrupoRelacionado')
  578. ->where('usuarios.idEscuela', 'COLEGIOABC')
  579. ->where('usuarios.tipoUsuario', 'PR')
  580. ->where('vista_grados_niveles.idNivel', $request->id)
  581. ->select('usuarios.idUsuario')
  582. ->get();
  583. return response()->json([
  584. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  585. ], 200);
  586. } else if ($request->Destino == 'Grado') {
  587. $iDUsuario = DB::table('usuarios')
  588. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  589. ->where('usuarios.idEscuela', 'COLEGIOABC')
  590. ->where('usuarios.tipoUsuario', 'PR')
  591. ->where('vista_usuarios_materias.idGradoGrupoRelacionado', $request->id)
  592. ->select('usuarios.idUsuario')
  593. ->get();
  594. return response()->json([
  595. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  596. ], 200);
  597. } else if ($request->Destino == 'Grupo') {
  598. $iDUsuario = DB::table('usuarios')
  599. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  600. ->where('usuarios.idEscuela', 'COLEGIOABC')
  601. ->where('usuarios.tipoUsuario', 'PR')
  602. ->where('vista_usuarios_materias.idGradoGrupoRelacionado', $request->id)
  603. ->select('usuarios.idUsuario')
  604. ->get();
  605. return response()->json([
  606. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  607. ], 200);
  608. } else if ($request->Destino == 'Materias') {
  609. $iDUsuario = DB::table('usuarios')
  610. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  611. ->where('usuarios.idEscuela', 'COLEGIOABC')
  612. ->where('usuarios.tipoUsuario', 'PR')
  613. ->where('vista_usuarios_materias.idMateria', $request->id)
  614. ->select('usuarios.idUsuario')
  615. ->get();
  616. return response()->json([
  617. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  618. ], 200);
  619. } else if ($request->Destino == 'todos') {
  620. $iDUsuario = DB::table('usuarios')
  621. ->where('idEscuela', 'COLEGIOABC')
  622. ->where('tipoUsuario', 'PR')
  623. ->select('idUsuario')
  624. ->get();
  625. return response()->json([
  626. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  627. ], 200);
  628. }
  629. }
  630. }
  631. public function crearDestinoCircular(Request $request)
  632. {
  633. $destinoCircular = DB::table('circulares_usuarios_colegioabc')->Insert([
  634. "idCircular" => $request->idCircular,
  635. "idUsuario" => $request->idUsuario,
  636. "fechaLectura" => null,
  637. "medioLectura" => null,
  638. ]);
  639. return response()->json([
  640. 'mensaje' => 'Destino creado exitosamente',
  641. 'Usuario' => $request->idUsuario
  642. ], 201);
  643. }
  644. public function actualizarVisto(Request $request)
  645. {
  646. $validator = Validator::make($request->all(), [
  647. 'idCircular' => 'required|integer',
  648. 'idUsuario' => 'required|string',
  649. ]);
  650. if ($validator->fails()) {
  651. return response()->json(['error' => $validator->errors()], 400);
  652. }
  653. $idCircular = $request->input('idCircular');
  654. $idUsuario = $request->input('idUsuario');
  655. $record = DB::table('circulares_usuarios_colegioabc')
  656. ->where('idCircular', $idCircular)
  657. ->where('idUsuario', $idUsuario)
  658. ->first();
  659. if ($record->fechaLectura !== null || $record->medioLectura !== null) {
  660. return response()->json(['mensaje' => 'Este ya se ha visto'], 200);
  661. }
  662. DB::table('circulares_usuarios_colegioabc')
  663. ->where('idCircular', $idCircular)
  664. ->where('idUsuario', $idUsuario)
  665. ->update([
  666. 'fechaLectura' => now(),
  667. 'medioLectura' => 'Web'
  668. ]);
  669. return response()->json(['mensaje' => 'Record updated successfully'], 200);
  670. }
  671. }