Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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