選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Admin.php 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. <?php
  2. namespace App\Controllers;
  3. use App\Entities\PrestadorSolicitudModel;
  4. use App\Models\EncuestaModel;
  5. use App\Models\PreguntaModel;
  6. use App\Models\PrestadorModel;
  7. use App\Models\PrestadorSolicitudModel as ModelsPrestadorSolicitudModel;
  8. use App\Models\SurveyUserModel;
  9. use App\Models\UserModel;
  10. use PHPUnit\Framework\MockObject\Stub\ReturnReference;
  11. class Admin extends BaseController
  12. {
  13. public function home()
  14. {
  15. $data = [
  16. 'title' => 'Inicio',
  17. 'solicitudes' => model(PrestadorSolicitudModel::class)->countSolicitudes(),
  18. 'prestadoresActivos' => model(PrestadorModel::class)->countPrestadoresActivos(),
  19. ];
  20. return view('Admin/index', $data);
  21. }
  22. // PRESTADORES
  23. public function prestadores()
  24. {
  25. $prestadores = model(PrestadorModel::class)->getPrestadoresActivos();
  26. // dd($prestadores[0]);
  27. return view('Admin/prestadores', ['prestadores' => $prestadores]);
  28. }
  29. // SOLICITUDES
  30. public function solicitudes()
  31. {
  32. $data = [
  33. 'title' => 'Solicitudes',
  34. 'solicitudes' => model(PrestadorSolicitudModel::class)->getPrestadorSolicitud(),
  35. ];
  36. return view('Admin/solicitudes', $data);
  37. }
  38. public function revisarSolicitud($id)
  39. {
  40. $model = model(ModelsPrestadorSolicitudModel::class);
  41. if (!$datos = $model->find($id)) {
  42. return redirect()->route('admin_solicitudes')->with('msg', array(
  43. 'type' => 'danger',
  44. 'body' => 'Solicitud no encontrada'
  45. ));
  46. }
  47. $data = [
  48. 'id' => $id,
  49. 'email' => user()->email,
  50. 'escuelas' => model(EscuelaModel::class)->getEscuelas(),
  51. 'departamentos' => model(DepartamentoModel::class)->getDepartamentos(),
  52. 'datos' => $datos,
  53. 'revisar' => true,
  54. ];
  55. return view('Prestador/formulario_inicial', $data);
  56. }
  57. public function aprobarSolicitud($id)
  58. {
  59. $solicitudModel = model(ModelsPrestadorSolicitudModel::class);
  60. // Validar que la solicitud existe
  61. if (!$solicitud = $solicitudModel->find($id)) {
  62. return redirect()->route('admin_solicitudes')->with('msg', array(
  63. 'type' => 'danger',
  64. 'body' => 'Solicitud no encontrada'
  65. ));
  66. }
  67. // Verificar que status de la solicitud == 0
  68. if ($solicitud['status'] != 0) {
  69. return redirect()->route('admin_solicitudes')->with('msg', array(
  70. 'type' => 'danger',
  71. 'body' => 'El status de esta solicitud no permite que sea aprobada'
  72. ));
  73. }
  74. // Encontrar usuario que mandó la solicitud
  75. if (!$user = model(UserModel::class)->findUserWithSolicitud($id)) {
  76. return redirect()->route('admin_solicitudes')->with('msg', array(
  77. 'type' => 'danger',
  78. 'body' => 'Ningún usuario tiene esa solicitud registrada.'
  79. ));
  80. }
  81. // Revisar que ususario no tenga asignado ningún registro de prestador
  82. if ($user->idprestador) {
  83. return redirect()->route('admin_solicitudes')->with('msg', array(
  84. 'type' => 'danger',
  85. 'body' => 'Este usuario ya ha sido aprobado.'
  86. ));
  87. }
  88. // Crear registro en la tabla prestador
  89. $prestadorModel = model(PrestadorModel::class);
  90. $solicitud = $this->completarSolicitud($solicitud);
  91. if (!$prestadorModel->save($solicitud)) {
  92. return redirect()->route('admin_solicitudes')->with('msg', array(
  93. 'type' => 'danger',
  94. 'body' => 'Error al guardar nuevo registro de prestador.'
  95. ));
  96. }
  97. // Asignar id de la tabla prestador al usuario aprobado
  98. $idprestador = $prestadorModel->getInsertID();
  99. $user->idprestador = $idprestador;
  100. model(UserModel::class)->save($user);
  101. // Cambiar status de la solicitud y eliminar datos con 'X'
  102. $this->eliminarDatosSolicitud($solicitudModel, $solicitud);
  103. // enviar correo
  104. $email = service('email');
  105. $sent = $email
  106. ->setTo($solicitud['email'])
  107. ->setSubject('COPARMEX: Solicitud aprobada')
  108. ->setMessage(view('admin/emails/solicitudAprobada'))
  109. ->setMailType('html')
  110. ->send();
  111. return redirect()->route('admin_solicitudes')->with('msg', array(
  112. 'type' => 'success',
  113. 'body' => 'Solicitud aprobada. Se activo la cuenta del prestador.'
  114. ));
  115. }
  116. public function rechazarSolicitud($id)
  117. {
  118. // Validar que la solicitud existe
  119. $solicitudModel = model(ModelsPrestadorSolicitudModel::class);
  120. if (!$solicitud = $solicitudModel->find($id)) {
  121. return redirect()->route('admin_solicitudes')->with('msg', array(
  122. 'type' => 'danger',
  123. 'body' => 'Solicitud no encontrada'
  124. ));
  125. }
  126. // Verificar que status de la solicitud == 0
  127. if ($solicitud['status'] != 0) {
  128. return redirect()->route('admin_solicitudes')->with('msg', array(
  129. 'type' => 'danger',
  130. 'body' => 'El status de esta solicitud no permite que sea rechazada'
  131. ));
  132. }
  133. // cambiar status de solicitud (2)
  134. $solicitud['status'] = 2;
  135. $solicitudModel->save($solicitud);
  136. // enviar correo
  137. $email = service('email');
  138. $motivo = $this->request->getPost('motivo');
  139. $sent = $email
  140. ->setTo($solicitud['email'])
  141. ->setSubject('COPARMEX: Solicitud rechazada')
  142. ->setMessage(view('admin/emails/solicitudRechazada', ['motivo' => $motivo]))
  143. ->setMailType('html')
  144. ->send();
  145. return redirect()->route('admin_solicitudes')->with('msg', array(
  146. 'type' => 'success',
  147. 'body' => 'Solicitud fue rechazada'
  148. ));
  149. }
  150. private function completarSolicitud($solicitud)
  151. {
  152. // Agregar campos para completar el registro de prestador
  153. $solicitud['idusuario_actual'] = user_id();
  154. switch ($solicitud['turno']) {
  155. case 1:
  156. $solicitud['turno'] = 'MATUTINO';
  157. break;
  158. case 2:
  159. $solicitud['turno'] = 'VESPERTINO';
  160. break;
  161. case 3:
  162. $solicitud['turno'] = 'MIXTO';
  163. break;
  164. }
  165. $solicitud['tipo'] = ($solicitud['tipo'] == 1) ? 'SERVICIO SOCIAL' : 'PRACTICAS PROFESIONALES';
  166. return $solicitud;
  167. }
  168. private function eliminarDatosSolicitud($model, $solicitud)
  169. {
  170. $id = $solicitud['id'];
  171. foreach ($solicitud as $key => $value) {
  172. $solicitud[$key] = 'X';
  173. }
  174. $solicitud['id'] = (int)$id;
  175. $solicitud['status'] = 1;
  176. $solicitud['email'] = 'x@x.com';
  177. $solicitud['horas_servicio'] = 0;
  178. $model->save($solicitud);
  179. }
  180. // ENCUESTAS
  181. public function encuestas()
  182. {
  183. $data = [
  184. 'title' => 'Encuestas',
  185. 'encuestas' => model(EncuestaModel::class)->getEncuestas(),
  186. ];
  187. return view('Admin/encuestas.php', $data);
  188. }
  189. public function encuesta($id)
  190. {
  191. $data = [
  192. 'id' => $id,
  193. 'encuesta' => model(EncuestaModel::class)->getEncuestas($id, true),
  194. 'preguntas' => model(PreguntaModel::class)->getPreguntas($id),
  195. ];
  196. return view('Admin/encuesta', $data);
  197. }
  198. public function nuevaEncuesta()
  199. {
  200. // Guardar encuesta
  201. if ($this->request->getMethod() === 'post') {
  202. $encuesta = model(EncuestaModel::class);
  203. $data = $this->request->getPost();
  204. // agregar id del usuario actual
  205. $data['user_id'] = user_id();
  206. // Validar datos
  207. if (!$encuesta->save($data)) {
  208. return redirect()->back()->withInput()->with('errors', $encuesta->errors());
  209. }
  210. return redirect()->route('admin_encuestas')->with('msg', array(
  211. 'type' => 'success',
  212. 'body' => 'Encuesta creada correctamente.'
  213. ));
  214. }
  215. $data = [
  216. 'title' => 'Nueva encuesta',
  217. ];
  218. return view('Admin/formularioEncuesta', $data);
  219. }
  220. public function editarEncuesta($id)
  221. {
  222. $encuesta = model(EncuestaModel::class);
  223. if ($this->request->getMethod() === 'post') {
  224. $data = $this->request->getPost();
  225. if (!$encuesta->update($id, $data)) {
  226. return redirect()->back()->withInput()->with('errors', $encuesta->errors());
  227. }
  228. return redirect()->route('admin_encuestas')->with('msg', array(
  229. 'type' => 'success',
  230. 'body' => 'Encuesta editada correctamente',
  231. ));
  232. }
  233. $data = [
  234. 'id' => $id,
  235. 'title' => 'Modificar encuesta',
  236. 'datos' => $encuesta->getEncuestas($id),
  237. ];
  238. return view('Admin/formularioEncuesta', $data);
  239. }
  240. public function eliminarEncuesta($id)
  241. {
  242. if (!model(EncuestaModel::class)->delete($id)) {
  243. return redirect()->route('admin_encuestas')->with('msg', array(
  244. 'type' => 'error',
  245. 'body' => 'Error al eliminar la encuesta.'
  246. ));
  247. }
  248. return redirect()->route('admin_encuestas')->with('msg', array(
  249. 'type' => 'success',
  250. 'body' => 'Encuesta eliminada correctamente.'
  251. ));
  252. }
  253. public function respuestas()
  254. {
  255. $respuestas = model(SurveyUserModel::class)->getEncuestasContestadas();
  256. $data = [
  257. 'respuestas' => $respuestas,
  258. ];
  259. return view('Admin/respuestas', $data);
  260. }
  261. public function respuestasEncuesta($surveyId)
  262. {
  263. echo 'todas las respuestas de esta encuesta';
  264. }
  265. public function respuesta($surveyId, $userId)
  266. {
  267. if (!$respuestas = model(RespuestaModel::class)->getRespuestas($surveyId, $userId)) {
  268. return redirect()->route('admin_respuestas')->with('msg', array(
  269. 'type' => 'danger',
  270. 'body' => 'No se encontraron respuestas de este usuario.',
  271. ));
  272. }
  273. // Agrupar respuestas de opción múltipe
  274. $respuestas = array_reduce($respuestas, function (array $accumulator, array $element) {
  275. $accumulator[$element['question_id']][] = $element;
  276. return $accumulator;
  277. }, []);
  278. // Datos de prestador
  279. $prestadorId = model(UserModel::class)->find($userId)->idprestador;
  280. $prestador = model(PrestadorModel::class)->find($prestadorId);
  281. $data = [
  282. 'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'],
  283. 'prestador' => $prestador,
  284. 'respuestas' => $respuestas,
  285. ];
  286. return view('Admin/respuestaIndividual', $data);
  287. }
  288. // PREGUNTAS
  289. public function nuevaPregunta($id)
  290. {
  291. if ($this->request->getMethod() === 'post') {
  292. $pregunta = model(PreguntaModel::class);
  293. $data = $this->request->getPost();
  294. // Relacionar encuesta($id) con pregunta(survey_id)
  295. $data['survey_id'] = $id;
  296. $data['order_by'] = 1;
  297. // Validar y guardar datos
  298. if (!$pregunta->save($data)) {
  299. return redirect()->back()->withInput()->with('errors', $pregunta->errors());
  300. }
  301. $url = 'admin/encuesta/' . $id;
  302. return redirect()->to($url)->with('msg', array(
  303. 'type' => 'success',
  304. 'body' => 'Pregunta registrada correctamente',
  305. ));
  306. }
  307. $data = [
  308. 'title' => 'Nueva pregunta',
  309. 'id' => $id,
  310. ];
  311. return view('Admin/formularioPregunta', $data);
  312. }
  313. public function editarPregunta($id)
  314. {
  315. $pregunta = model(PreguntaModel::class);
  316. if ($this->request->getMethod() === 'post') {
  317. $data = $this->request->getPost();
  318. if (!$pregunta->update($id, $data)) {
  319. return redirect()->back()->withInput()->with('errors', $pregunta->errors());
  320. }
  321. $encuestaId = $pregunta->find($id)['survey_id'];
  322. $url = 'admin/encuesta/' . $encuestaId;
  323. return redirect()->to($url)->with('msg', array(
  324. 'type' => 'success',
  325. 'body' => 'Pregunta registrada correctamente',
  326. ));
  327. }
  328. $data = [
  329. 'preguntaId' => $id,
  330. 'title' => 'Editar pregunta',
  331. 'datos' => $pregunta->find($id),
  332. ];
  333. return view('Admin/formularioPregunta', $data);
  334. }
  335. public function eliminarPregunta(int $id)
  336. {
  337. $model = model('PreguntaModel');
  338. if (!$pregunta = $model->find($id)) {
  339. throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
  340. }
  341. $encuestaId = $pregunta['survey_id'];
  342. $model->delete($id);
  343. $url = 'admin/encuesta/' . $encuestaId;
  344. return redirect()->to($url)->with('msg', array(
  345. 'type' => 'success',
  346. 'body' => 'Pregunta eliminada correctamente',
  347. ));
  348. }
  349. public function preguntaPost()
  350. {
  351. $data = $this->request->getPost();
  352. $data['survey_id'] = 1;
  353. $data['order_by'] = 1;
  354. var_dump($data);
  355. }
  356. // GRUPOS
  357. public function createGroup()
  358. {
  359. // $authorize = service('authorization');
  360. // $id = $authorize->createGroup('Prestador', 'Prestadores de Servicio Social o Prácticas Profesionales');
  361. // echo $id;
  362. }
  363. }