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

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