Selaa lähdekoodia

Enviar correo al confirmar/rechazar una solicitud

cambio-db
Sergio 2 vuotta sitten
vanhempi
commit
3e24477d40
10 muutettua tiedostoa jossa 163 lisäystä ja 12 poistoa
  1. +2
    -2
      app/Config/Database.php
  2. +1
    -1
      app/Config/Routes.php
  3. +105
    -2
      app/Controllers/Admin.php
  4. +3
    -1
      app/Models/PrestadorModel.php
  5. +6
    -3
      app/Models/PrestadorSolicitudModel.php
  6. +1
    -1
      app/Models/UserModel.php
  7. +4
    -0
      app/Views/Admin/emails/solicitudAprobada.php
  8. +7
    -0
      app/Views/Admin/emails/solicitudRechazada.php
  9. +2
    -0
      app/Views/Admin/solicitudes.php
  10. +32
    -2
      app/Views/Prestador/formulario_inicial.php

+ 2
- 2
app/Config/Database.php Näytä tiedosto

@@ -33,9 +33,9 @@ class Database extends Config
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => '',
'username' => 'root',
'password' => '',
'database' => '',
'database' => 'epic',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,


+ 1
- 1
app/Config/Routes.php Näytä tiedosto

@@ -58,8 +58,8 @@ $routes->group('admin', ['filter' => 'role:Admin'], static function ($routes) {

// 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/rechazar/(:segment)', 'Admin::rechazarSolicitud/$1', ['as' => 'admin_solicitud_rechazar']);
$routes->get('solicitud/(:segment)', 'Admin::revisarSolicitud/$1', ['as' => 'admin_solicitud_revisar']);

// ENCUESTAS


+ 105
- 2
app/Controllers/Admin.php Näytä tiedosto

@@ -57,6 +57,9 @@ class Admin extends BaseController
return view('Prestador/formulario_inicial', $data);
}




public function aprobarSolicitud($id)
{
$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
$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');

// 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(
'type' => 'success',
@@ -100,7 +133,77 @@ class Admin extends BaseController

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


+ 3
- 1
app/Models/PrestadorModel.php Näytä tiedosto

@@ -16,9 +16,11 @@ class PrestadorModel extends Model
'telefono', 'celular', 'email',
'idescuela', 'carrera', 'grado', 'turno',
'tipo', 'fechainicio', 'iddepartamento_actual', 'horas_servicio',
'codigo_estudiante', 'horario',
];

// GUARDAR COMO NOMBRE
// turno, tipo


function getPrestador($id = null)
{


+ 6
- 3
app/Models/PrestadorSolicitudModel.php Näytä tiedosto

@@ -14,6 +14,7 @@ class PrestadorSolicitudModel extends Model
'idescuela', 'carrera', 'grado', 'turno',
'tipo', 'fechainicio', 'iddepartamento_actual', 'horas_servicio',
'codigo_estudiante', 'horario',
'status'
];
// protected $returnType = \App\Entities\PrestadorSolicitud::class;
protected $useTimestamps = true;
@@ -43,8 +44,6 @@ class PrestadorSolicitudModel extends Model
'tipo' => 'required',
'fechainicio' => 'required',
'horas_servicio' => 'required|integer',


];

protected $validationMessages = [
@@ -58,7 +57,11 @@ class PrestadorSolicitudModel extends Model
function getPrestadorSolicitud($id = null)
{
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();
}


+ 1
- 1
app/Models/UserModel.php Näytä tiedosto

@@ -19,7 +19,7 @@ class UserModel extends Model
protected $allowedFields = [
'email', 'password_hash', 'reset_hash', 'reset_at', 'reset_expires', 'activate_hash',
'status', 'status_message', 'active', 'force_pass_reset', 'permissions', 'deleted_at',
'rh_prestador_solicitud_id'
'idprestador', 'rh_prestador_solicitud_id'
];
protected $useTimestamps = true;
protected $validationRules = [


+ 4
- 0
app/Views/Admin/emails/solicitudAprobada.php Näytä tiedosto

@@ -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>

+ 7
- 0
app/Views/Admin/emails/solicitudRechazada.php Näytä tiedosto

@@ -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>

+ 2
- 0
app/Views/Admin/solicitudes.php Näytä tiedosto

@@ -15,6 +15,7 @@
<thead>
<th>Nombre</th>
<th>Email</th>
<th>Status</th>
<th>Revisar</th>
</thead>
<tbody>
@@ -23,6 +24,7 @@
<tr>
<td><?= $solicitud['nombre'] . ' ' . $solicitud['apaterno'] . ' ' . $solicitud['amaterno'] ?></td>
<td><?= $solicitud['email'] ?></td>
<td><?= $solicitud['status'] == 0 ? 'Por aprobar' : 'Rechazada' ?></td>
<td>
<a href="<?= route_to('admin_solicitud_revisar', $solicitud['id']) ?>" class="btn btn-info ">
<i class="nav-icon fas fa-user-check"></i>


+ 32
- 2
app/Views/Prestador/formulario_inicial.php Näytä tiedosto

@@ -48,7 +48,7 @@
<div class="row mb-4">
<div class="col-md-6">
<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 class="col-md-3">
<label class="form-label" for="">Teléfono Fijo</label>
@@ -192,7 +192,9 @@
<!-- BOTONES PARA APROBAR / RECHAZAR SOLICITUD-->
<div class="text-end">
<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>
</div>
<?php else : ?>
@@ -211,4 +213,32 @@
</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() ?>

Loading…
Peruuta
Tallenna