CircularesController.php 30 KB

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