CircularesController.php 31 KB

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