480 Zeilen
15 KiB
PHP
480 Zeilen
15 KiB
PHP
<?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;
|
|
}
|
|
}
|