您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

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