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.

399 line
12KB

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