@@ -33,9 +33,9 @@ class Database extends Config | |||||
public $default = [ | public $default = [ | ||||
'DSN' => '', | 'DSN' => '', | ||||
'hostname' => 'localhost', | 'hostname' => 'localhost', | ||||
'username' => '', | |||||
'username' => 'root', | |||||
'password' => '', | 'password' => '', | ||||
'database' => '', | |||||
'database' => 'epic', | |||||
'DBDriver' => 'MySQLi', | 'DBDriver' => 'MySQLi', | ||||
'DBPrefix' => '', | 'DBPrefix' => '', | ||||
'pConnect' => false, | 'pConnect' => false, | ||||
@@ -58,8 +58,8 @@ $routes->group('admin', ['filter' => 'role:Admin'], static function ($routes) { | |||||
// SOLICITUDES | // SOLICITUDES | ||||
$routes->get('solicitudes/', 'Admin::solicitudes', ['as' => 'admin_solicitudes']); | $routes->get('solicitudes/', 'Admin::solicitudes', ['as' => 'admin_solicitudes']); | ||||
$routes->post('solicitud/rechazar/(:segment)', 'Admin::rechazarSolicitud/$1', ['as' => 'admin_solicitud_rechazar']); | |||||
$routes->get('solicitud/aprobar/(:segment)', 'Admin::aprobarSolicitud/$1', ['as' => 'admin_solicitud_aprobar']); | $routes->get('solicitud/aprobar/(:segment)', 'Admin::aprobarSolicitud/$1', ['as' => 'admin_solicitud_aprobar']); | ||||
$routes->get('solicitud/rechazar/(:segment)', 'Admin::rechazarSolicitud/$1', ['as' => 'admin_solicitud_rechazar']); | |||||
$routes->get('solicitud/(:segment)', 'Admin::revisarSolicitud/$1', ['as' => 'admin_solicitud_revisar']); | $routes->get('solicitud/(:segment)', 'Admin::revisarSolicitud/$1', ['as' => 'admin_solicitud_revisar']); | ||||
// ENCUESTAS | // ENCUESTAS | ||||
@@ -57,6 +57,9 @@ class Admin extends BaseController | |||||
return view('Prestador/formulario_inicial', $data); | return view('Prestador/formulario_inicial', $data); | ||||
} | } | ||||
public function aprobarSolicitud($id) | public function aprobarSolicitud($id) | ||||
{ | { | ||||
$solicitudModel = model(ModelsPrestadorSolicitudModel::class); | $solicitudModel = model(ModelsPrestadorSolicitudModel::class); | ||||
@@ -85,12 +88,42 @@ class Admin extends BaseController | |||||
)); | )); | ||||
} | } | ||||
// 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 | // Crear registro en la tabla prestador | ||||
$prestadorModel = model(PrestadorModel::class); | $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 | // 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'); | |||||
// Cambiar status de la solicitud | |||||
$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( | return redirect()->route('admin_solicitudes')->with('msg', array( | ||||
'type' => 'success', | 'type' => 'success', | ||||
@@ -100,7 +133,77 @@ class Admin extends BaseController | |||||
public function rechazarSolicitud($id) | public function rechazarSolicitud($id) | ||||
{ | { | ||||
echo 'rechazandp solicitud ' . $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 | // ENCUESTAS | ||||
@@ -16,9 +16,11 @@ class PrestadorModel extends Model | |||||
'telefono', 'celular', 'email', | 'telefono', 'celular', 'email', | ||||
'idescuela', 'carrera', 'grado', 'turno', | 'idescuela', 'carrera', 'grado', 'turno', | ||||
'tipo', 'fechainicio', 'iddepartamento_actual', 'horas_servicio', | 'tipo', 'fechainicio', 'iddepartamento_actual', 'horas_servicio', | ||||
'codigo_estudiante', 'horario', | |||||
]; | ]; | ||||
// GUARDAR COMO NOMBRE | |||||
// turno, tipo | |||||
function getPrestador($id = null) | function getPrestador($id = null) | ||||
{ | { | ||||
@@ -14,6 +14,7 @@ class PrestadorSolicitudModel extends Model | |||||
'idescuela', 'carrera', 'grado', 'turno', | 'idescuela', 'carrera', 'grado', 'turno', | ||||
'tipo', 'fechainicio', 'iddepartamento_actual', 'horas_servicio', | 'tipo', 'fechainicio', 'iddepartamento_actual', 'horas_servicio', | ||||
'codigo_estudiante', 'horario', | 'codigo_estudiante', 'horario', | ||||
'status' | |||||
]; | ]; | ||||
// protected $returnType = \App\Entities\PrestadorSolicitud::class; | // protected $returnType = \App\Entities\PrestadorSolicitud::class; | ||||
protected $useTimestamps = true; | protected $useTimestamps = true; | ||||
@@ -43,8 +44,6 @@ class PrestadorSolicitudModel extends Model | |||||
'tipo' => 'required', | 'tipo' => 'required', | ||||
'fechainicio' => 'required', | 'fechainicio' => 'required', | ||||
'horas_servicio' => 'required|integer', | 'horas_servicio' => 'required|integer', | ||||
]; | ]; | ||||
protected $validationMessages = [ | protected $validationMessages = [ | ||||
@@ -58,7 +57,11 @@ class PrestadorSolicitudModel extends Model | |||||
function getPrestadorSolicitud($id = null) | function getPrestadorSolicitud($id = null) | ||||
{ | { | ||||
if (!$id) { | if (!$id) { | ||||
return $this->where('status', 0)->findAll(); | |||||
return $this | |||||
->where('status', 0) | |||||
->orWhere('status', 2) | |||||
->orderBy('id ASC, status DESC') | |||||
->findAll(); | |||||
} | } | ||||
return $this->where('id', $id)->first(); | return $this->where('id', $id)->first(); | ||||
} | } | ||||
@@ -19,7 +19,7 @@ class UserModel extends Model | |||||
protected $allowedFields = [ | protected $allowedFields = [ | ||||
'email', 'password_hash', 'reset_hash', 'reset_at', 'reset_expires', 'activate_hash', | 'email', 'password_hash', 'reset_hash', 'reset_at', 'reset_expires', 'activate_hash', | ||||
'status', 'status_message', 'active', 'force_pass_reset', 'permissions', 'deleted_at', | 'status', 'status_message', 'active', 'force_pass_reset', 'permissions', 'deleted_at', | ||||
'rh_prestador_solicitud_id' | |||||
'idprestador', 'rh_prestador_solicitud_id' | |||||
]; | ]; | ||||
protected $useTimestamps = true; | protected $useTimestamps = true; | ||||
protected $validationRules = [ | protected $validationRules = [ | ||||
@@ -0,0 +1,4 @@ | |||||
<h2>Tu cuenta no ha sido aprobada</h2> | |||||
<p>Ya puedes <a href="<?= site_url() ?>">iniciar sesión</a> y acceder a tu cuenta.</p> |
@@ -0,0 +1,7 @@ | |||||
<h1>Tu cuenta no ha sido aprobada</h1> | |||||
<p>No se ha validado tu cuenta por el siguiente motivo:</p> | |||||
<p><?= $motivo ?></p> | |||||
<p>Si consideras que ha sido un error, puedes <a href="<?= site_url() ?>">iniciar sesión</a> y corregir tus datos para enviarlos nuevamente.</p> |
@@ -15,6 +15,7 @@ | |||||
<thead> | <thead> | ||||
<th>Nombre</th> | <th>Nombre</th> | ||||
<th>Email</th> | <th>Email</th> | ||||
<th>Status</th> | |||||
<th>Revisar</th> | <th>Revisar</th> | ||||
</thead> | </thead> | ||||
<tbody> | <tbody> | ||||
@@ -23,6 +24,7 @@ | |||||
<tr> | <tr> | ||||
<td><?= $solicitud['nombre'] . ' ' . $solicitud['apaterno'] . ' ' . $solicitud['amaterno'] ?></td> | <td><?= $solicitud['nombre'] . ' ' . $solicitud['apaterno'] . ' ' . $solicitud['amaterno'] ?></td> | ||||
<td><?= $solicitud['email'] ?></td> | <td><?= $solicitud['email'] ?></td> | ||||
<td><?= $solicitud['status'] == 0 ? 'Por aprobar' : 'Rechazada' ?></td> | |||||
<td> | <td> | ||||
<a href="<?= route_to('admin_solicitud_revisar', $solicitud['id']) ?>" class="btn btn-info "> | <a href="<?= route_to('admin_solicitud_revisar', $solicitud['id']) ?>" class="btn btn-info "> | ||||
<i class="nav-icon fas fa-user-check"></i> | <i class="nav-icon fas fa-user-check"></i> | ||||
@@ -48,7 +48,7 @@ | |||||
<div class="row mb-4"> | <div class="row mb-4"> | ||||
<div class="col-md-6"> | <div class="col-md-6"> | ||||
<label class="form-label" for="">E-mail*</label> | <label class="form-label" for="">E-mail*</label> | ||||
<input name="email" type="email" class="form-control <?php if (session('errors.email')) : ?>is-invalid<?php endif ?>" readonly value="<?= $email ?>" <?= isset($revisar) ? 'disabled' : '' ?>> | |||||
<input name="email" type="email" class="form-control <?php if (session('errors.email')) : ?>is-invalid<?php endif ?>" readonly value="<?= isset($datos['email']) ? $datos['email'] : $email ?>" <?= isset($revisar) ? 'disabled' : '' ?>> | |||||
</div> | </div> | ||||
<div class="col-md-3"> | <div class="col-md-3"> | ||||
<label class="form-label" for="">Teléfono Fijo</label> | <label class="form-label" for="">Teléfono Fijo</label> | ||||
@@ -192,7 +192,9 @@ | |||||
<!-- BOTONES PARA APROBAR / RECHAZAR SOLICITUD--> | <!-- BOTONES PARA APROBAR / RECHAZAR SOLICITUD--> | ||||
<div class="text-end"> | <div class="text-end"> | ||||
<a href="" class="btn btn-primary">Regresar a lista</a> | <a href="" class="btn btn-primary">Regresar a lista</a> | ||||
<a href="<?= route_to('admin_solicitud_rechazar', $id) ?>" class="btn btn-danger">Rechazar solicitud</a> | |||||
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#rechazarModal"> | |||||
Launch demo modal | |||||
</button> | |||||
<a href="<?= route_to('admin_solicitud_aprobar', $id) ?>" class="btn btn-success">Aprobar solicitud</a> | <a href="<?= route_to('admin_solicitud_aprobar', $id) ?>" class="btn btn-success">Aprobar solicitud</a> | ||||
</div> | </div> | ||||
<?php else : ?> | <?php else : ?> | ||||
@@ -211,4 +213,32 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<?php if (isset($revisar)) : ?> | |||||
<!-- Modal --> | |||||
<div class="modal fade" id="rechazarModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> | |||||
<div class="modal-dialog"> | |||||
<div class="modal-content"> | |||||
<div class="modal-header"> | |||||
<h5 class="modal-title" id="exampleModalLabel">Rechazar Solicitud</h5> | |||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> | |||||
</div> | |||||
<form action="<?= route_to('admin_solicitud_rechazar', $id) ?>" method="POST"> | |||||
<?= csrf_field() ?> | |||||
<div class="modal-body"> | |||||
<div class="mb-3"> | |||||
<label for="motivo" class="form-label">Motivo <span class="text-muted">(Este mensaje se le mostrará al solicitante)</span></label> | |||||
<textarea class="form-control" id="motivo" name="motivo" rows="3" required></textarea> | |||||
</div> | |||||
</div> | |||||
<div class="modal-footer"> | |||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button> | |||||
<button type="submit" class="btn btn-danger">Rechazar Solicitud</button> | |||||
</div> | |||||
</form> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<?php endif ?> | |||||
<?= $this->endSection() ?> | <?= $this->endSection() ?> |