You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

443 lines
13KB

  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 respuesta($surveyId, $userId)
  262. {
  263. if (!$respuestas = model(RespuestaModel::class)->getRespuestas($surveyId, $userId)) {
  264. return redirect()->route('admin_respuestas')->with('msg', array(
  265. 'type' => 'danger',
  266. 'body' => 'No se encontraron respuestas de este usuario.',
  267. ));
  268. }
  269. // Agrupar respuestas de opción múltipe
  270. $respuestas = array_reduce($respuestas, function (array $accumulator, array $element) {
  271. $accumulator[$element['question_id']][] = $element;
  272. return $accumulator;
  273. }, []);
  274. // Datos de prestador
  275. $prestadorId = model(UserModel::class)->find($userId)->idprestador;
  276. $prestador = model(PrestadorModel::class)->find($prestadorId);
  277. $data = [
  278. 'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'],
  279. 'prestador' => $prestador,
  280. 'respuestas' => $respuestas,
  281. ];
  282. return view('Admin/respuesta', $data);
  283. }
  284. // PREGUNTAS
  285. public function nuevaPregunta($id)
  286. {
  287. if ($this->request->getMethod() === 'post') {
  288. $pregunta = model(PreguntaModel::class);
  289. $data = $this->request->getPost();
  290. // Relacionar encuesta($id) con pregunta(survey_id)
  291. $data['survey_id'] = $id;
  292. $data['order_by'] = 1;
  293. // Validar y guardar datos
  294. if (!$pregunta->save($data)) {
  295. return redirect()->back()->withInput()->with('errors', $pregunta->errors());
  296. }
  297. $url = 'admin/encuesta/' . $id;
  298. return redirect()->to($url)->with('msg', array(
  299. 'type' => 'success',
  300. 'body' => 'Pregunta registrada correctamente',
  301. ));
  302. }
  303. $data = [
  304. 'title' => 'Nueva pregunta',
  305. 'id' => $id,
  306. ];
  307. return view('Admin/formularioPregunta', $data);
  308. }
  309. public function editarPregunta($id)
  310. {
  311. $pregunta = model(PreguntaModel::class);
  312. if ($this->request->getMethod() === 'post') {
  313. $data = $this->request->getPost();
  314. if (!$pregunta->update($id, $data)) {
  315. return redirect()->back()->withInput()->with('errors', $pregunta->errors());
  316. }
  317. $encuestaId = $pregunta->find($id)['survey_id'];
  318. $url = 'admin/encuesta/' . $encuestaId;
  319. return redirect()->to($url)->with('msg', array(
  320. 'type' => 'success',
  321. 'body' => 'Pregunta registrada correctamente',
  322. ));
  323. }
  324. $data = [
  325. 'preguntaId' => $id,
  326. 'title' => 'Editar pregunta',
  327. 'datos' => $pregunta->find($id),
  328. ];
  329. return view('Admin/formularioPregunta', $data);
  330. }
  331. public function eliminarPregunta(int $id)
  332. {
  333. $model = model('PreguntaModel');
  334. if (!$pregunta = $model->find($id)) {
  335. throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
  336. }
  337. $encuestaId = $pregunta['survey_id'];
  338. $model->delete($id);
  339. $url = 'admin/encuesta/' . $encuestaId;
  340. return redirect()->to($url)->with('msg', array(
  341. 'type' => 'success',
  342. 'body' => 'Pregunta eliminada correctamente',
  343. ));
  344. }
  345. public function preguntaPost()
  346. {
  347. $data = $this->request->getPost();
  348. $data['survey_id'] = 1;
  349. $data['order_by'] = 1;
  350. var_dump($data);
  351. }
  352. // GRUPOS
  353. public function createGroup()
  354. {
  355. // $authorize = service('authorization');
  356. // $id = $authorize->createGroup('Prestador', 'Prestadores de Servicio Social o Prácticas Profesionales');
  357. // echo $id;
  358. }
  359. }