|
- <?php
-
- namespace App\Controllers;
-
- use App\Entities\PrestadorSolicitudModel;
- use App\Models\EncuestaModel;
- use App\Models\PreguntaModel;
- use App\Models\PrestadorModel;
- use App\Models\PrestadorSolicitudModel as ModelsPrestadorSolicitudModel;
- use App\Models\SurveyUserModel;
- use App\Models\UserModel;
- use PHPUnit\Framework\MockObject\Stub\ReturnReference;
-
- class Admin extends BaseController
- {
- public function home()
- {
- $data = [
- 'title' => 'Inicio',
- 'solicitudes' => model(PrestadorSolicitudModel::class)->countSolicitudes(),
- 'prestadoresActivos' => model(PrestadorModel::class)->countPrestadoresActivos(),
- ];
- return view('Admin/index', $data);
- }
-
- // PRESTADORES
- public function prestadores()
- {
- $prestadores = model(PrestadorModel::class)->getPrestadoresActivos();
- // dd($prestadores[0]);
- return view('Admin/prestadores', ['prestadores' => $prestadores]);
- }
-
- // SOLICITUDES
- public function solicitudes()
- {
-
- $data = [
- 'title' => 'Solicitudes',
- 'solicitudes' => model(PrestadorSolicitudModel::class)->getPrestadorSolicitud(),
- ];
- return view('Admin/solicitudes', $data);
- }
-
- public function revisarSolicitud($id)
- {
-
- $model = model(ModelsPrestadorSolicitudModel::class);
-
- if (!$datos = $model->find($id)) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'Solicitud no encontrada'
- ));
- }
-
- $data = [
- 'id' => $id,
- 'email' => user()->email,
- 'escuelas' => model(EscuelaModel::class)->getEscuelas(),
- 'departamentos' => model(DepartamentoModel::class)->getDepartamentos(),
- 'datos' => $datos,
- 'revisar' => true,
- ];
-
- return view('Prestador/formulario_inicial', $data);
- }
-
-
- public function aprobarSolicitud($id)
- {
- $solicitudModel = model(ModelsPrestadorSolicitudModel::class);
-
- // Validar que la solicitud existe
- if (!$solicitud = $solicitudModel->find($id)) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'Solicitud no encontrada'
- ));
- }
-
- // Verificar que status de la solicitud == 0
- if ($solicitud['status'] != 0) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'El status de esta solicitud no permite que sea aprobada'
- ));
- }
-
- // Encontrar usuario que mandó la solicitud
- if (!$user = model(UserModel::class)->findUserWithSolicitud($id)) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'Ningún usuario tiene esa solicitud registrada.'
- ));
- }
-
- // Revisar que ususario no tenga asignado ningún registro de prestador
- if ($user->idprestador) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'Este usuario ya ha sido aprobado.'
- ));
- }
-
- // Crear registro en la tabla prestador
- $prestadorModel = model(PrestadorModel::class);
- $solicitud = $this->completarSolicitud($solicitud);
- if (!$prestadorModel->save($solicitud)) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'Error al guardar nuevo registro de prestador.'
- ));
- }
-
-
- // Asignar id de la tabla prestador al usuario aprobado
- $idprestador = $prestadorModel->getInsertID();
- $user->idprestador = $idprestador;
- model(UserModel::class)->save($user);
-
- // Cambiar status de la solicitud y eliminar datos con 'X'
- $this->eliminarDatosSolicitud($solicitudModel, $solicitud);
-
- // enviar correo
- $email = service('email');
-
- $sent = $email
- ->setTo($solicitud['email'])
- ->setSubject('COPARMEX: Solicitud aprobada')
- ->setMessage(view('admin/emails/solicitudAprobada'))
- ->setMailType('html')
- ->send();
-
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'success',
- 'body' => 'Solicitud aprobada. Se activo la cuenta del prestador.'
- ));
- }
-
- public function rechazarSolicitud($id)
- {
- // Validar que la solicitud existe
- $solicitudModel = model(ModelsPrestadorSolicitudModel::class);
- if (!$solicitud = $solicitudModel->find($id)) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'Solicitud no encontrada'
- ));
- }
-
- // Verificar que status de la solicitud == 0
- if ($solicitud['status'] != 0) {
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'El status de esta solicitud no permite que sea rechazada'
- ));
- }
-
- // cambiar status de solicitud (2)
- $solicitud['status'] = 2;
- $solicitudModel->save($solicitud);
-
- // enviar correo
- $email = service('email');
- $motivo = $this->request->getPost('motivo');
-
- $sent = $email
- ->setTo($solicitud['email'])
- ->setSubject('COPARMEX: Solicitud rechazada')
- ->setMessage(view('admin/emails/solicitudRechazada', ['motivo' => $motivo]))
- ->setMailType('html')
- ->send();
-
-
- return redirect()->route('admin_solicitudes')->with('msg', array(
- 'type' => 'success',
- 'body' => 'Solicitud fue rechazada'
- ));
- }
-
- private function completarSolicitud($solicitud)
- {
- // Agregar campos para completar el registro de prestador
- $solicitud['idusuario_actual'] = user_id();
- switch ($solicitud['turno']) {
- case 1:
- $solicitud['turno'] = 'MATUTINO';
- break;
- case 2:
- $solicitud['turno'] = 'VESPERTINO';
- break;
- case 3:
- $solicitud['turno'] = 'MIXTO';
- break;
- }
- $solicitud['tipo'] = ($solicitud['tipo'] == 1) ? 'SERVICIO SOCIAL' : 'PRACTICAS PROFESIONALES';
-
- return $solicitud;
- }
-
- private function eliminarDatosSolicitud($model, $solicitud)
- {
- $id = $solicitud['id'];
- foreach ($solicitud as $key => $value) {
- $solicitud[$key] = 'X';
- }
- $solicitud['id'] = (int)$id;
- $solicitud['status'] = 1;
- $solicitud['email'] = 'x@x.com';
- $solicitud['horas_servicio'] = 0;
-
- $model->save($solicitud);
- }
-
- // ENCUESTAS
- public function encuestas()
- {
- $data = [
- 'title' => 'Encuestas',
- 'encuestas' => model(EncuestaModel::class)->getEncuestas(),
- ];
- return view('Admin/encuestas.php', $data);
- }
-
- public function encuesta($id)
- {
- $data = [
- 'id' => $id,
- 'encuesta' => model(EncuestaModel::class)->getEncuestas($id, true),
- 'preguntas' => model(PreguntaModel::class)->getPreguntas($id),
-
- ];
- return view('Admin/encuesta', $data);
- }
-
- public function nuevaEncuesta()
- {
- // Guardar encuesta
- if ($this->request->getMethod() === 'post') {
- $encuesta = model(EncuestaModel::class);
-
- $data = $this->request->getPost();
- // agregar id del usuario actual
- $data['user_id'] = user_id();
-
- // Validar datos
- if (!$encuesta->save($data)) {
- return redirect()->back()->withInput()->with('errors', $encuesta->errors());
- }
-
- return redirect()->route('admin_encuestas')->with('msg', array(
- 'type' => 'success',
- 'body' => 'Encuesta creada correctamente.'
- ));
- }
- $data = [
- 'title' => 'Nueva encuesta',
- ];
- return view('Admin/formularioEncuesta', $data);
- }
-
- public function editarEncuesta($id)
- {
- $encuesta = model(EncuestaModel::class);
-
- if ($this->request->getMethod() === 'post') {
-
- $data = $this->request->getPost();
-
- if (!$encuesta->update($id, $data)) {
- return redirect()->back()->withInput()->with('errors', $encuesta->errors());
- }
- return redirect()->route('admin_encuestas')->with('msg', array(
- 'type' => 'success',
- 'body' => 'Encuesta editada correctamente',
- ));
- }
-
- $data = [
- 'id' => $id,
- 'title' => 'Modificar encuesta',
- 'datos' => $encuesta->getEncuestas($id),
- ];
-
- return view('Admin/formularioEncuesta', $data);
- }
-
- public function eliminarEncuesta($id)
- {
- if (!model(EncuestaModel::class)->delete($id)) {
- return redirect()->route('admin_encuestas')->with('msg', array(
- 'type' => 'error',
- 'body' => 'Error al eliminar la encuesta.'
- ));
- }
- return redirect()->route('admin_encuestas')->with('msg', array(
- 'type' => 'success',
- 'body' => 'Encuesta eliminada correctamente.'
- ));
- }
-
- public function respuestas()
- {
- $respuestas = model(SurveyUserModel::class)->getEncuestasContestadas();
-
- $data = [
- 'respuestas' => $respuestas,
- ];
- return view('Admin/respuestas', $data);
- }
-
- public function respuestasEncuesta($surveyId)
- {
- if (!$respuestas = model(RespuestaModel::class)->getRespuestasAll($surveyId)) {
- return redirect()->route('admin_respuestas')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'No se encontraron respuestas de para esta encuesta.',
- ));
- }
-
- // Agrupar respuestas por usuario
- $respuestas = array_reduce($respuestas, function (array $accumulator, array $element) {
- $accumulator[$element['user_id']][] = $element;
- return $accumulator;
- }, []);
-
- // reset array keys
- $respuestas = array_values($respuestas);
-
- // Agrupar respuestas de opción múltiple
- foreach ($respuestas as &$respuesta) {
- $respuesta = array_reduce($respuesta, function (array $accumulator, array $element) {
- $accumulator[$element['question_id']][] = $element;
- return $accumulator;
- }, []);
- $respuesta = array_values($respuesta);
- }
- unset($respuesta);
-
- $data = [
- 'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'],
- 'preguntas' => model(PreguntaModel::class)->getPreguntas($surveyId),
- 'respuestas' => $respuestas,
- ];
- // dd($respuestas);
- return view('Admin/respuestasGenerales', $data);
- }
-
- public function respuesta($surveyId, $userId)
- {
- if (!$respuestas = model(RespuestaModel::class)->getRespuestas($surveyId, $userId)) {
- return redirect()->route('admin_respuestas')->with('msg', array(
- 'type' => 'danger',
- 'body' => 'No se encontraron respuestas de este usuario.',
- ));
- }
-
-
- // Agrupar respuestas de opción múltipe
- $respuestas = array_reduce($respuestas, function (array $accumulator, array $element) {
- $accumulator[$element['question_id']][] = $element;
- return $accumulator;
- }, []);
-
- // Datos de prestador
- $prestadorId = model(UserModel::class)->find($userId)->idprestador;
- $prestador = model(PrestadorModel::class)->find($prestadorId);
-
-
- $data = [
- 'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'],
- 'prestador' => $prestador,
- 'respuestas' => $respuestas,
- ];
-
-
- return view('Admin/respuestaIndividual', $data);
- }
-
- // PREGUNTAS
-
- public function nuevaPregunta($id)
- {
- if ($this->request->getMethod() === 'post') {
- $pregunta = model(PreguntaModel::class);
-
- $data = $this->request->getPost();
-
- // Relacionar encuesta($id) con pregunta(survey_id)
- $data['survey_id'] = $id;
- $data['order_by'] = 1;
-
-
- // Validar y guardar datos
- if (!$pregunta->save($data)) {
- return redirect()->back()->withInput()->with('errors', $pregunta->errors());
- }
-
- $url = 'admin/encuesta/' . $id;
- return redirect()->to($url)->with('msg', array(
- 'type' => 'success',
- 'body' => 'Pregunta registrada correctamente',
- ));
- }
-
- $data = [
- 'title' => 'Nueva pregunta',
- 'id' => $id,
- ];
-
- return view('Admin/formularioPregunta', $data);
- }
-
-
- public function editarPregunta($id)
- {
- $pregunta = model(PreguntaModel::class);
-
- if ($this->request->getMethod() === 'post') {
-
- $data = $this->request->getPost();
- if (!$pregunta->update($id, $data)) {
- return redirect()->back()->withInput()->with('errors', $pregunta->errors());
- }
-
- $encuestaId = $pregunta->find($id)['survey_id'];
-
- $url = 'admin/encuesta/' . $encuestaId;
- return redirect()->to($url)->with('msg', array(
- 'type' => 'success',
- 'body' => 'Pregunta registrada correctamente',
- ));
- }
-
- $data = [
- 'preguntaId' => $id,
- 'title' => 'Editar pregunta',
- 'datos' => $pregunta->find($id),
- ];
- return view('Admin/formularioPregunta', $data);
- }
-
- public function eliminarPregunta(int $id)
- {
- $model = model('PreguntaModel');
-
- if (!$pregunta = $model->find($id)) {
- throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
- }
-
- $encuestaId = $pregunta['survey_id'];
- $model->delete($id);
-
- $url = 'admin/encuesta/' . $encuestaId;
-
- return redirect()->to($url)->with('msg', array(
- 'type' => 'success',
- 'body' => 'Pregunta eliminada correctamente',
- ));
- }
-
- public function preguntaPost()
- {
- $data = $this->request->getPost();
- $data['survey_id'] = 1;
- $data['order_by'] = 1;
-
- var_dump($data);
- }
-
- // GRUPOS
- public function createGroup()
- {
- // $authorize = service('authorization');
- // $id = $authorize->createGroup('Prestador', 'Prestadores de Servicio Social o Prácticas Profesionales');
- // echo $id;
- }
- }
|