En cualquier sistema es importante tener un log o una bitácora en donde vallamos almacenando lo cambios que vamos realizando en la base de datos, por ejemplo, ir guardando la información que va insertando el usuario a la tabla de clientes, también cuando se elimino y actualizo grabando un timestamp que guarde hasta el segundo exacto de modificación y ya con eso vamos llevando un control
Haremos todo esto en CodeIgniter 4
Empezamos primero creamos la tabla
--
-- Estructura de tabla para la tabla bitacora
CREATE TABLE bitacora (
id bigint(20) NOT NULL,
descripcion text COLLATE utf8_spanish2_ci DEFAULT NULL,
usuario varchar(16) COLLATE utf8_spanish2_ci DEFAULT NULL,
created_at datetime DEFAULT NULL,
deleted_at datetime DEFAULT NULL,
updated_at datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;
--
-- Índices para tablas volcadas
--
-- Indices de la tabla bitacora
ALTER TABLE bitacora
ADD PRIMARY KEY (id);
ALTER TABLE bitacora
MODIFY id bigint(20) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Creamos el archivo modelo BitacoraModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class BitacoraModel extends Model
{
protected $table = 'bitacora';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDeletes = true;
protected $allowedFields = ['id','descripcion', 'usuario'];
protected $useTimestamps = true;
protected $createdField = 'created_at';
protected $deletedField = 'deleted_at';
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
const ORDERABLE = [
1 => 'id',
2 => 'descripcion',
3 => 'usuario',
4 => 'created_at',
];
/**
* Get resource data.
*
* @param string $search
*
* @return \CodeIgniter\Database\BaseBuilder
*/
public function getResource(string $search = '')
{
$builder = $this->builder()
->select('id, descripcion, usuario, created_at');
$condition = empty($search)
? $builder
: $builder->groupStart()
->like('descripcion', $search)
->orLike('Usuario', $search)
->orLike('created_at', $search)
->groupEnd();
return $condition->where('deleted_at', null);
}
Ahora usaremos el modelo para guardar cada vez que se haga un cambio al guardar la configuración del hospital
<?php
namespace agungsugiarto\boilerplate\Controllers\Users;
namespace App\Controllers;
use CodeIgniter\API\ResponseTrait;
use CodeIgniter\Controller;
use App\Models\ConfiguracionesModel;
use App\Models\BitacoraModel;
use agungsugiarto\boilerplate\Controllers\BaseController;
use agungsugiarto\boilerplate\Entities\Collection;
use agungsugiarto\boilerplate\Models\GroupModel;
use CodeIgniter\Config\Services;
class HospitalController extends Controller
{
use ResponseTrait;
/** @var \agungsugiarto\boilerplate\Models\GroupModel */
protected $group;
protected $configuraciones;
protected $bitacora;
public function __construct()
{
$this->group = new GroupModel();
$this->configuraciones = new ConfiguracionesModel();
$this->bitacora = new BitacoraModel();
$autorize = $this->authorize = Services::authorization();
helper('menu');
}
public function index()
{
$datos = $this->configuraciones->where("id",1)->first();
$data["title"] = lang('settings.settings.title');
$data["subtitle"] = lang('settings.settings.title');
$data["data"] = $datos;
return view('configuracionEmpresa/index',$data);
}
public function guardar()
{
helper('auth');
$userName = user()->username ;
$idUser = user()->id ;
$bitacoraDatos["descripcion"] = "Se Modifico las configuracion con los siguientes datos:". json_encode($_POST);
$bitacoraDatos["usuario"] = $userName;
//GUARDA CONFIGURACIONES
$this->configuraciones->update(1,$_POST);
//GUARDAR EN BITACORA
$this->bitacora->save($bitacoraDatos);
// return redirect()->to("/admin/hospital");
return redirect()->back()->with('sweet-success', 'Actualizado Correctamente');
// return redirect()->back()->with('sweet-success','Guardado Correctamente');
}
}
Ya con eso cada vez que se haga un cambio a a configuración nos guardara un registro sobre quien hizo el cambio y también nos servirá para los próximos módulos que se vallan programando.
En la próxima publicación veremos como mostrar los datos en un datatable.
Deja un comentario