CircularesController.php 31 KB

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