Me complace avisar que ya tenemos las primeras versiones del software medico en el que hemos estado trabajando, aun puede que salgan detalles pero se van corrigiendo
¿Qué es CodeIgniter 4 medicalSoft?
CodeIgniter 4 medicalSoft es un software básico para la correcta administración/manejo del catálogo de pacientes, historial médico, control de fechas, impresión de recetas.
Características
Altas, Bajas y cambios de Pacientes
Altas, bajas y cambios Medicamentos
altas bajas y cambios de diagnósticos / enfermedades
Registro de Citas Medicas
Registrar consulta médica
Imprimir en PDF prescripción médica
Configuraciones Generales del Hospital
Instalacióny actualizaciones
composer create-project julio101290/ci4medical-soft y luego composer update cada vez que haya una nueva versión del marco.
Al actualizar, consulte las notas de la versión para ver si hay algún cambio que deba aplicar a la carpeta de su aplicación. Los archivos afectados se pueden copiar o combinar desde el vendor/codeigniter4/framework/app.
Copie env a .env y personalícelo para su aplicación, específicamente la baseURL y cualquier configuración de la base de datos.
Base de datos
Puede encontrar el archivo de base de datos en la base de datos en la carpeta base de datos / medicalsoft2022.sql
Pronto crearemos los archivos de migración para construir las tablas sin tener que ejecutar el archivo .sql
Además conforme se vayan haciendose cambios vamos a generar una aplicación instalable para windows para que la instalación sea lo más fácil posible.
Primero ejecutamos el instalador
En la ruta la dejamos tal como está y le damos click en el botón siguiente
Activamos la casilla para que se genere el acceso directo al escritorio
Verificamos que la información esté correcta
Una vez que se le da click se empezará a instalar
Una vez terminado nos sale la ventana de login, en caso de salir la pantalla en blanco cerrar la ventana y volverla abrir, el usuario es admin y la contraseña es super-admin
Una vez ingresado al sistema nos mostrará la pantalla principal y podremos empezar a usar el sistema MedicalSoft
index.php ya no está en la raíz del proyecto! Se ha movido dentro de la carpeta, public para una mejor seguridad y separación de componentes.
Esto significa que debe configurar su servidor web para que “se dirija” a su proyecto carpeta public y no a la raíz del proyecto. Una mejor práctica sería configurar un host virtual para que apunte allí. Una mala práctica sería apuntar su servidor web a la raíz del proyecto y esperar ingresar public/…, como el resto de tu lógica y el El marco está expuesto.
Por favor lea la guía del usuario para obtener una mejor explicación de cómo funciona CI4!
Requisitos del servidor
Se requiere PHP versión 7.4 o superior, con las siguientes extensiones instaladas:
Ya creamos el CRUD para pacientes, ahora será necesario crear un CRUD para los medicamentos.
Primero creamos la tabla medicamentos, les dejo la exportación desde phpmyadmin
-- phpMyAdmin SQL Dump
-- version 5.0.4
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 06-01-2023 a las 20:37:36
-- Versión del servidor: 10.4.17-MariaDB
-- Versión de PHP: 7.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de datos: `medicalsoft`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `medicamentos`
--
CREATE TABLE `medicamentos` (
`id` int(11) NOT NULL,
`descripcion` varchar(256) COLLATE utf8_spanish2_ci NOT 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 `medicamentos`
--
ALTER TABLE `medicamentos`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `medicamentos`
--
ALTER TABLE `medicamentos`
MODIFY `id` int(11) 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 MedicamentosModel.php en app/models/
Ya vimos como guardar los datos de la bitácora, ahora veremos como usar el datatable con server side para mostrar los datos de guardados en la bitácora
Primero creamos el archivo BitacoraModel.php de la siguiente forma en la carpeta app/model/ aunque a estas altura ya debemos tenerlo
Para convertir fácilmente el resultado de la consulta SQL del QUERYBUILDER a formato json que usa datatable instalamos en la terminal el siguiente componente de hermawan usando composer
composer require hermawan/codeigniter4-datatables
Creamos el archivo BitacoraController.php con los siguientes, si observamos en la función index vemos que solo con una linea se crea el json
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
use \App\Models\BitacoraModel;
use CodeIgniter\API\ResponseTrait;
class BitacoraController extends BaseController {
use ResponseTrait;
protected $bitacora;
public function __construct() {
$this->bitacora = new BitacoraModel();
helper('menu');
}
public function index() {
if ($this->request->isAJAX()) {
/*
$start = $this->request->getGet('start');
$length = $this->request->getGet('length');
$search = $this->request->getGet('search[value]');
$order = BitacoraModel::ORDERABLE[$this->request->getGet('order[0][column]')];
$dir = $this->request->getGet('order[0][dir]');
*/
$datos = $this->bitacora->select('id,descripcion,usuario,created_at');
// $resultado = $this->bitacora->findAll();
// $this->bitacora->getResource()->countAllResults(),
// $this->bitacora->getResource($search)->countAllResults()
return \Hermawan\DataTables\DataTable::of($datos)->toJson();
}
$titulos["title"] = lang('log.title');
$titulos["subtitle"] = lang('log.subtitle');
//$data["data"] = $datos;
return view('bitacora',$titulos);
}
public function tabla() {
if ($this->request->isAJAX()) {
$start = $this->request->getGet('start');
$length = $this->request->getGet('length');
$search = $this->request->getGet('search[value]');
$order = BitacoraModel::ORDERABLE[$this->request->getGet('order[0][column]')];
$dir = $this->request->getGet('order[0][dir]');
return $this->respond(Collection::datatable(
$this->bitacora->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(),
$this->bitacora->getResource()->countAllResults(),
$this->bitacora->getResource($search)->countAllResults()
));
}
}
}
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 */;
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.
Usamos cookies en nuestro sitio web para brindarle la experiencia más relevante recordando sus preferencias y visitas repetidas. Al hacer clic en "Aceptar", acepta el uso de TODAS las cookies.
This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.