Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

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