CircularesController.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  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. 'urls' => $request->urls
  295. ]);
  296. return response()->json([
  297. 'mensaje' => 'Circular creada exitosamente',
  298. 'idCircular' => DB::getPdo()->lastInsertId()
  299. ], 201);
  300. } catch (\Exception $e) {
  301. return response()->json(['mensaje' => 'Error al crear la circular: ' . $e->getMessage()], 500);
  302. }
  303. }
  304. public function actualizar(Request $request)
  305. {
  306. $carpetaBase = config('custom.s3_carpeta_base');
  307. try {
  308. $periodoService = new PeriodoService();
  309. $carpetaPeriodo = $periodoService->obtenerPeriodoActivoNombre();
  310. $rutaBucket = 'circulares/';
  311. $archivosAdjuntos = [];
  312. // Obtener los adjuntos anteriores desde la BD
  313. $adjuntosAnteriores = DB::table('circulares')
  314. ->where('idCircular', $request->idCircular)
  315. ->value('jsonAdjuntos');
  316. $adjuntosAnteriores = $adjuntosAnteriores ? json_decode($adjuntosAnteriores, true) : [];
  317. // Si se mandan nuevos archivos base64, los procesamos
  318. if ($request->has('bases64') && !empty($request->bases64)) {
  319. foreach ($request->bases64 as $file) {
  320. // Extraer extensión
  321. $fileInfo = explode(';', $file['base64'])[0];
  322. $fileExtension = explode('/', $fileInfo)[1];
  323. switch ($fileExtension) {
  324. case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
  325. $fileExtension = 'docx';
  326. break;
  327. case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
  328. $fileExtension = 'xlsx';
  329. break;
  330. case 'vnd.openxmlformats-officedocument.presentationml.presentation':
  331. $fileExtension = 'pptx';
  332. break;
  333. }
  334. // Generar nombre
  335. $fileName = $file['id'] . '-' . $file['nombre'] . '.' . $fileExtension;
  336. $pathS3 = $carpetaBase . '/' . $carpetaPeriodo . '/' . $rutaBucket . $fileName;
  337. // Subir nuevo archivo
  338. $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
  339. $fileData = str_replace(' ', '+', $fileData);
  340. $contenidoArchivo = base64_decode($fileData);
  341. Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
  342. $archivosAdjuntos[] = [
  343. 'id' => $file['id'],
  344. 'nombre' => $file['nombre'],
  345. 'ruta' => Storage::disk('s3')->url($pathS3)
  346. ];
  347. }
  348. $archivosAdjuntos = array_merge($adjuntosAnteriores, $archivosAdjuntos);
  349. } else {
  350. // Se mantienen los adjuntos anteriores si no se mandaron nuevos archivos
  351. $archivosAdjuntos = $adjuntosAnteriores;
  352. }
  353. // Actualizar la circular
  354. DB::table('circulares')
  355. ->updateOrInsert(
  356. ['idCircular' => $request->idCircular],
  357. [
  358. 'titulo' => $request->titulo,
  359. 'audiencia' => $request->audiencia,
  360. 'idReceptores' => $request->idReceptores,
  361. 'contenido' => $request->contenido,
  362. 'jsonAdjuntos' => json_encode($archivosAdjuntos),
  363. 'importancia' => $request->importancia,
  364. 'fechaPublicacion' => $request->fechaPublicacion,
  365. 'fechaCaducidad' => $request->fechaCaducidad,
  366. 'urls' => $request->urls,
  367. 'idUsuario' => $request->idUsuario
  368. ]
  369. );
  370. return response()->json(['mensaje' => 'Circular actualizada exitosamente'], 200);
  371. } catch (\Exception $e) {
  372. return response()->json(['mensaje' => 'Error al actualizar la circular: ' . $e->getMessage()], 500);
  373. }
  374. }
  375. public function eliminarArchivo(Request $request)
  376. {
  377. try {
  378. // Validar parámetros
  379. if (!$request->has('idCircular') || !$request->has('idArchivo')) {
  380. return response()->json(['mensaje' => 'Faltan parámetros'], 400);
  381. }
  382. $idCircular = $request->idCircular;
  383. $idArchivo = $request->idArchivo;
  384. // Obtener adjuntos actuales
  385. $adjuntos = DB::table('circulares')
  386. ->where('idCircular', $idCircular)
  387. ->value('jsonAdjuntos');
  388. $adjuntos = $adjuntos ? json_decode($adjuntos, true) : [];
  389. // Buscar el adjunto por idArchivo
  390. $index = array_search($idArchivo, array_column($adjuntos, 'id'));
  391. if ($index === false) {
  392. return response()->json(['mensaje' => 'Adjunto no encontrado'], 404);
  393. }
  394. $archivo = $adjuntos[$index];
  395. // Obtener la key de S3 desde la url
  396. $parsedUrl = parse_url($archivo['ruta'], PHP_URL_PATH);
  397. $key = ltrim(str_replace('pledu-dv-aeci/', '', $parsedUrl), '/');
  398. // Eliminar de S3 si existe
  399. if (Storage::disk('s3')->exists($key)) {
  400. Storage::disk('s3')->delete($key);
  401. }
  402. // Eliminar del array y actualizar BD
  403. array_splice($adjuntos, $index, 1);
  404. DB::table('circulares')
  405. ->where('idCircular', $idCircular)
  406. ->update(['jsonAdjuntos' => json_encode($adjuntos)]);
  407. return response()->json(['mensaje' => 'Archivo eliminado correctamente'], 200);
  408. } catch (\Exception $e) {
  409. return response()->json(['mensaje' => 'Error al eliminar el archivo: ' . $e->getMessage()], 500);
  410. }
  411. }
  412. public function habilitar($id)
  413. {
  414. $id = base64_decode($id);
  415. try {
  416. //code...
  417. DB::table('circulares')
  418. ->updateOrInsert(
  419. ['idCircular' => $id],
  420. ['estado' => 'Activo']
  421. );
  422. return response()->json(['mensaje' => 'Circular habilitada exitosamente'], 201);
  423. } catch (\Exception $e) {
  424. //throw $th;
  425. return response()->json(['mensaje' => 'Error al habilitar la circular: ' . $e->getMessage()], 500);
  426. }
  427. }
  428. public function eliminar($id)
  429. {
  430. $id = base64_decode($id);
  431. try {
  432. //code...
  433. DB::table('circulares')
  434. ->updateOrInsert(
  435. ['idCircular' => $id],
  436. ['estado' => 'Eliminado']
  437. );
  438. return response()->json(['mensaje' => 'Circular deshabilitada exitosamente'], 201);
  439. } catch (\Exception $e) {
  440. //throw $th;
  441. return response()->json(['mensaje' => 'Error al habilitar la circular: ' . $e->getMessage()], 500);
  442. }
  443. }
  444. public function getUsuariosCircular(Request $request)
  445. {
  446. if ($request->Audiencia == 'AL') {
  447. if ($request->Destino == 'NivelEducativo') {
  448. $iDUsuario = DB::table('usuarios')
  449. ->leftJoin('vista_grados_niveles', 'vista_grados_niveles.nombreGrado', '=', 'usuarios.grado')
  450. ->leftJoin('vista_usuarios_grupos1', 'usuarios.idUsuario', '=', 'vista_usuarios_grupos1.idUsuario')
  451. ->where('usuarios.idEscuela', 'COLEGIOABC')
  452. ->where('usuarios.tipoUsuario', 'AL')
  453. ->where('vista_grados_niveles.idNivel', $request->id)
  454. ->select('usuarios.idUsuario')
  455. ->get();
  456. return response()->json([
  457. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  458. ], 200);
  459. } else if ($request->Destino == 'Grado') {
  460. $iDUsuario = DB::table('usuarios')
  461. ->where('idEscuela', 'COLEGIOABC')
  462. ->where('tipoUsuario', 'AL')
  463. ->where('grado', $request->id)
  464. ->select('idUsuario')
  465. ->get();
  466. return response()->json([
  467. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  468. ], 200);
  469. } else if ($request->Destino == 'Grupo') {
  470. $iDUsuario = DB::table('grupos_usuarios')
  471. ->where('idEscuela', 'COLEGIOABC')
  472. ->where('idGrupo', $request->id)
  473. ->select('idUsuario')
  474. ->get();
  475. return response()->json([
  476. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  477. ], 200);
  478. } else if ($request->Destino == 'Materias') {
  479. $iDUsuario = DB::table('usuarios')
  480. ->leftJoin('vista_usuarios_grupos1', 'vista_usuarios_grupos1.idUsuario', '=', 'usuarios.idUsuario')
  481. ->leftJoin('vista_materias_grados_grupos', function ($join) {
  482. $join->on('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'usuarios.grado')
  483. ->orOn('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'vista_usuarios_grupos1.idGrupo');
  484. })
  485. ->where('usuarios.idEscuela', 'COLEGIOABC')
  486. ->where('usuarios.tipoUsuario', 'AL')
  487. ->where('vista_materias_grados_grupos.idMateria', $request->id)
  488. ->select('usuarios.idUsuario')
  489. ->get();
  490. $iDUsuario = $iDUsuario->unique('idUsuario');
  491. return response()->json([
  492. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  493. ], 200);
  494. } else if ($request->Destino == 'todos') {
  495. $iDUsuario = DB::table('usuarios')
  496. ->where('idEscuela', 'COLEGIOABC')
  497. ->where('tipoUsuario', 'AL')
  498. ->select('idUsuario')
  499. ->get();
  500. return response()->json([
  501. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  502. ], 200);
  503. }
  504. } else if ($request->Audiencia == 'PF') {
  505. if ($request->Destino == 'NivelEducativo') {
  506. $iDUsuario = DB::table('usuarios')
  507. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  508. ->leftJoin('vista_usuarios_grupos1', 'usuarios.idUsuario', '=', 'vista_usuarios_grupos1.idUsuario')
  509. ->leftJoin('vista_grados_niveles', 'vista_grados_niveles.nombreGrado', '=', 'usuarios.grado')
  510. ->where('usuarios.idEscuela', 'COLEGIOABC')
  511. ->where('usuarios.tipoUsuario', 'AL')
  512. ->where('vista_grados_niveles.idNivel', $request->id)
  513. ->select('usuarios_padres.idPadre')
  514. ->get();
  515. return response()->json([
  516. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  517. ], 200);
  518. } else if ($request->Destino == 'Grado') {
  519. $iDUsuario = DB::table('usuarios')
  520. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  521. ->where('usuarios.idEscuela', 'COLEGIOABC')
  522. ->where('usuarios.tipoUsuario', 'AL')
  523. ->where('usuarios.grado', $request->id)
  524. ->select('usuarios_padres.idPadre')
  525. ->get();
  526. return response()->json([
  527. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  528. ], 200);
  529. } else if ($request->Destino == 'Grupo') {
  530. $iDUsuario = DB::table('usuarios')
  531. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  532. ->leftJoin('grupos_usuarios', 'grupos_usuarios.idUsuario', '=', 'usuarios.idUsuario')
  533. ->where('usuarios.idEscuela', 'COLEGIOABC')
  534. ->where('usuarios.tipoUsuario', 'AL')
  535. ->where('grupos_usuarios.idGrupo', $request->id)
  536. ->select('usuarios_padres.idPadre')
  537. ->get();
  538. return response()->json([
  539. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  540. ], 200);
  541. } else if ($request->Destino == 'Materias') {
  542. $iDUsuario = DB::table('usuarios')
  543. ->leftJoin('usuarios_padres', 'usuarios_padres.idUsuario', '=', 'usuarios.idUsuario')
  544. ->leftJoin('vista_usuarios_grupos1', 'vista_usuarios_grupos1.idUsuario', '=', 'usuarios.idUsuario')
  545. ->leftJoin('vista_materias_grados_grupos', function ($join) {
  546. $join->on('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'usuarios.grado')
  547. ->orOn('vista_materias_grados_grupos.idGradoGrupoRelacionado', '=', 'vista_usuarios_grupos1.idGrupo');
  548. })
  549. ->where('usuarios.idEscuela', 'COLEGIOABC')
  550. ->where('usuarios.tipoUsuario', 'AL')
  551. ->where('vista_materias_grados_grupos.idMateria', $request->id)
  552. ->select('usuarios_padres.idPadre')
  553. ->get();
  554. return response()->json([
  555. 'idUsuario' => $iDUsuario->pluck('idPadre')->toArray()
  556. ], 200);
  557. } else if ($request->Destino == 'todos') {
  558. $iDUsuario = DB::table('usuarios')
  559. ->where('idEscuela', 'COLEGIOABC')
  560. ->where('tipoUsuario', 'PF')
  561. ->select('idUsuario')
  562. ->get();
  563. return response()->json([
  564. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  565. ], 200);
  566. }
  567. } else if ($request->Audiencia == 'AD') {
  568. if ($request->Destino == 'todos') {
  569. $iDUsuario = DB::table('usuarios')
  570. ->where('idEscuela', 'COLEGIOABC')
  571. ->where('tipoUsuario', 'AD')
  572. ->select('idUsuario')
  573. ->get();
  574. return response()->json([
  575. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  576. ], 200);
  577. }
  578. } else if ($request->Audiencia == 'PR') {
  579. if ($request->Destino == 'NivelEducativo') {
  580. $iDUsuario = DB::table('usuarios')
  581. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  582. ->leftJoin('vista_grados_niveles', 'vista_grados_niveles.nombreGrado', '=', 'vista_usuarios_materias.idGradoGrupoRelacionado')
  583. ->where('usuarios.idEscuela', 'COLEGIOABC')
  584. ->where('usuarios.tipoUsuario', 'PR')
  585. ->where('vista_grados_niveles.idNivel', $request->id)
  586. ->select('usuarios.idUsuario')
  587. ->get();
  588. return response()->json([
  589. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  590. ], 200);
  591. } else if ($request->Destino == 'Grado') {
  592. $iDUsuario = DB::table('usuarios')
  593. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  594. ->where('usuarios.idEscuela', 'COLEGIOABC')
  595. ->where('usuarios.tipoUsuario', 'PR')
  596. ->where('vista_usuarios_materias.idGradoGrupoRelacionado', $request->id)
  597. ->select('usuarios.idUsuario')
  598. ->get();
  599. return response()->json([
  600. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  601. ], 200);
  602. } else if ($request->Destino == 'Grupo') {
  603. $iDUsuario = DB::table('usuarios')
  604. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  605. ->where('usuarios.idEscuela', 'COLEGIOABC')
  606. ->where('usuarios.tipoUsuario', 'PR')
  607. ->where('vista_usuarios_materias.idGradoGrupoRelacionado', $request->id)
  608. ->select('usuarios.idUsuario')
  609. ->get();
  610. return response()->json([
  611. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  612. ], 200);
  613. } else if ($request->Destino == 'Materias') {
  614. $iDUsuario = DB::table('usuarios')
  615. ->leftJoin('vista_usuarios_materias', 'vista_usuarios_materias.idProfesor', '=', 'usuarios.idUsuario')
  616. ->where('usuarios.idEscuela', 'COLEGIOABC')
  617. ->where('usuarios.tipoUsuario', 'PR')
  618. ->where('vista_usuarios_materias.idMateria', $request->id)
  619. ->select('usuarios.idUsuario')
  620. ->get();
  621. return response()->json([
  622. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  623. ], 200);
  624. } else if ($request->Destino == 'todos') {
  625. $iDUsuario = DB::table('usuarios')
  626. ->where('idEscuela', 'COLEGIOABC')
  627. ->where('tipoUsuario', 'PR')
  628. ->select('idUsuario')
  629. ->get();
  630. return response()->json([
  631. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  632. ], 200);
  633. }
  634. } else if ($request->Audiencia == 'TD') {
  635. if ($request->Destino == 'todos') {
  636. $iDUsuario = DB::table('usuarios')
  637. ->where('idEscuela', 'COLEGIOABC')
  638. ->select('idUsuario')
  639. ->get();
  640. return response()->json([
  641. 'idUsuario' => $iDUsuario->pluck('idUsuario')->toArray()
  642. ], 200);
  643. }
  644. }
  645. }
  646. public function crearDestinoCircular(Request $request)
  647. {
  648. $destinoCircular = DB::table('circulares_usuarios_colegioabc')->Insert([
  649. "idCircular" => $request->idCircular,
  650. "idUsuario" => $request->idUsuario,
  651. "fechaLectura" => null,
  652. "medioLectura" => null,
  653. ]);
  654. return response()->json([
  655. 'mensaje' => 'Destino creado exitosamente',
  656. 'Usuario' => $request->idUsuario
  657. ], 201);
  658. }
  659. public function actualizarVisto(Request $request)
  660. {
  661. $validator = Validator::make($request->all(), [
  662. 'idCircular' => 'required|integer',
  663. 'idUsuario' => 'required|string',
  664. ]);
  665. if ($validator->fails()) {
  666. return response()->json(['error' => $validator->errors()], 400);
  667. }
  668. $idCircular = $request->input('idCircular');
  669. $idUsuario = $request->input('idUsuario');
  670. $record = DB::table('circulares_usuarios_colegioabc')
  671. ->where('idCircular', $idCircular)
  672. ->where('idUsuario', $idUsuario)
  673. ->first();
  674. if ($record->fechaLectura !== null || $record->medioLectura !== null) {
  675. return response()->json(['mensaje' => 'Este ya se ha visto'], 200);
  676. }
  677. DB::table('circulares_usuarios_colegioabc')
  678. ->where('idCircular', $idCircular)
  679. ->where('idUsuario', $idUsuario)
  680. ->update([
  681. 'fechaLectura' => now(),
  682. 'medioLectura' => 'Web'
  683. ]);
  684. return response()->json(['mensaje' => 'Record updated successfully'], 200);
  685. }
  686. }