CircularesController.php 33 KB

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