Cesar Systems

Herramientas Informaticas

CI4MedicalSoft lanzado

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

  1. Altas, Bajas y cambios de Pacientes
  2. Altas, bajas y cambios Medicamentos
  3. altas bajas y cambios de diagnósticos / enfermedades
  4. Registro de Citas Medicas
  5. Registrar consulta médica
  6. Imprimir en PDF prescripción médica
  7. Configuraciones Generales del Hospital

Instalación y 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

Cambio importante con index.php

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:

  • intl
  • libcurl si planea usar la biblioteca HTTP \ CURLRequest

Además, asegúrese de que las siguientes extensiones estén habilitadas en su PHP:

  • json ( habilitado de forma predeterminada – no lo apague )
  • mbstring
  • mysqlnd
  • xml ( habilitado de forma predeterminada: no lo apague )

Demo en https://medicalsoft.cesarsystems.com.mx/ usuario:user contraseña:super-user

Screenshots

Sistema de planeación proyectos y costos

Al momento de realizar cualquier proyecto, ya sea desarrollo de software, construcción , administración de servicios de taller de automóviles, o actividades del día a día es necesario saber administrarnos y desde antes tener el estimado de las horas e insumos que vamos a consumir en las tareas a realizarse.

También es necesario verificar a través de los  diferentes reportes el avance de las actividades del proyecto, así como quien es el responsable de cada actividad.

Posteriormente podremos ver el rendimiento por empleado y ver las horas trabajadas en un periodo de tiempo seleccionado

Con este sistema podremos crear un proyecto, separarlo por etapas, conceptos y actividades, asignarle a la actividad a un empleado, un tiempo o cantidad estimada y conforme se avanza en la actividad se va registrando el tiempo o la cantidad real, se le asigna costo ligando a un producto.

Una vez registrada las actividades podemos imprimir en PDF un presupuesto en la que nos muestra primeramente un resumen del costo por etapa en la primera hoja y en las siguientes nos mostrará todo el proyecto desglosado

También tenemos una tabla dinámica para poder leer la información y organizarla de manera que más cómoda al lector, por ejemplo, en la siguiente imagen vemos el avance por proyecto separado por concepto

Leer consultas Personalizadas en Service Layer SAP

Ahora lo importante, como ejecutar la consulta personalizada para leer la información

Hacer la siguiente petición y entre paréntesis ponemos el código de la consulta

https://localhost:50000/b1s/v1/SQLQueries('sql02')/List

En el body ponemos el JSON con los parámetros

{
 "ParamList": "listaPrecios=6"
}

Quedando de la siguiente forma

Modificar consultas Personalizadas en Service Layer SAP

Como no todo queda a la primera o se tenga que modificar por cualquier razón la consulta personalizada, les dejo el ejemplo básico de como modificar una consulta personalizada

Para modificar la consulta creada anteriormente hacemos la siguiente petición de tipo PATH

https://localhost:50000/b1s/v1/SQLQueries('sql02')

En el body metemos el JSON ya modificado

{
  "SqlCode":"sql02",
  "SqlName":"listPrices",
  "SqlText":"select a.ItemCode
                   ,a.PriceList
                   ,a.Price 
                   ,b.ListName
                   ,z.[ItemName]
            from [ITM1] a
                , [OPLN]	b
                , [OITM] z
            where a.[PriceList] =:listaPrecios
            and a.[Price] <>0
            AND a.[PriceList]  = b.[ListNum]
            AND a.[ItemCode]  = z.[ItemCode]
  ",
  "ParamList" : "listaPrecios"

}

Quedaría de la siguiente forma

Crear Consultas Personalizadas en Service Layer SAP

En el service layer también tenemos la forma para crear nuestras consultas personalizadas, aunque tiene algunas limitaciones pero nos pueden ser muy útiles.

Para ello utilizaremos SQLQueries y el ejemplo básico seria de la siguiente manera

Hacemos la petición POST

https://localhost:50000/b1s/v1/SQLQueries

En el body le metemos el contenido JSON

{
  
  "SqlCode":"sql02",
  "SqlName":"listPrices",
  "SqlText":"select ItemCode,PriceList 
            from [ITM1]  
            where [PriceList] =:listaPrecios ",
  "ParamList" : "listaPrecios"
  
  
}

Al final quedaría de la siguiente forma

Obtener la lista de precios de SAP a través Service Layer

Para traer la el catalogo de listas de precios usaremos la siguiente URL en GET

https://localhost:50000/b1s/v1/PriceLists?$select=PriceListNo,PriceListName&$filter=Active eq 'tYES'  and substringof('TRIT',PriceListNo) or substringof('TRIT',PriceListName)

Como pueden observar usamos la funcion substringof como el equivalente al like de SQL

Quedaría mas o menos de esta forma

Ahora la función quedaría de la siguiente forma

    /* =============================================
      MOSTRAR
      ============================================= */

    static public function ctrMostrar($cookie, $filtro) {


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://localhost:50000/b1s/v1/PriceLists?%24select=PriceListNo%2CPriceListName&%24filter=Active%20eq%20'tYES'%20%20and%20substringof('$filtro'%2CPriceListNo)%20or%20substringof('$filtro'%2CPriceListName)",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_COOKIE => $cookie,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "User-Agent: Thunder Client (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {
            return json_decode($response);
        }


        $response = json_decode($response);

        return $response;
    }

Y bien saben el resto es historia

Obtener lista de usuarios SAP a través de Service Layer

Lo que haremos en esta ocasión en hacer la consulta al service layer para usarlo en un Select2 vía AJAX y PHP primera mente usaremos la siguiente petición de tipo GET URL

https://localhost:50000/b1s/v1/Users?$select=InternalKey,UserCode,Group,UserName&$filter=Group eq 'ug_Regular'  and substringof('Julio',UserName)  or substringof('Julio',UserCode)&$orderby=InternalKey

Como ven usamos la función substringof que seria el equivalente en SQL al like ‘%%’

Quedando mas o menos asi

Ahora transformamos la petición a una función de PHP en la que recibimos la cookie y el filtro para buscar los usuarios

    /* =============================================
      MOSTRAR
      ============================================= */

    static public function ctrMostrar($cookie, $filtro) {


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://localhost:50000/b1s/v1/Users?%24select=InternalKey%2CUserCode%2CGroup%2CUserName&%24filter=Group%20eq%20'ug_Regular'%20%20and%20substringof('$filtro'%2CUserName)%20%20or%20substringof('$filtro'%2CUserCode)&%24orderby=InternalKey",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_COOKIE => $cookie,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "User-Agent: Thunder Client (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {
            return json_decode($response);
        }


        $response = json_decode($response);

        return $response;
    }

Ahora en el archivo de consulta se usaría de la siguiente forma, hacemos el Login, consultamos, hacemos el Logout, y formamos la cadena JSON de la siguiente forma

   $busqueda = $_POST["searchTerm"];

    $conexionSAP = ServiceLayer::login();

    $cookie = "B1SESSION=" . $conexionSAP->SessionId . ";  ROUTEID=.node1";

    $usuariosSAP = ControladorUsuariosSAP::ctrMostrar($cookie, $busqueda);

    $usuariosSAPLista = $usuariosSAP->value;

    $usuariosSAP = ServiceLayer::logout($cookie);

    $jsonVariable = ' { "results": [';

    foreach ($usuariosSAPLista as $keyUsuarios1 => $valueUsuarios1) {


        $jsonVariable .= ' {
      "id": "' . $valueUsuarios1->UserCode . '",
      "text": "' . utf8_encode($valueUsuarios1->UserCode . " - " . $valueUsuarios1->UserName) . '"
    },';
    }

    $jsonVariable = substr($jsonVariable, 0, -1);

    $jsonVariable .= ' ]
}';

    echo ($jsonVariable);

Y listo ya esto obtenemos los datos requeridos

Haciendo Logout en Service Layer en SAP y pasar el código en PHP 8.3

Bien ahora vamos a mostrar como hacer el logout, es decir, cerrar la sesión, vamos hacer la petición tipo GET con la siguiente URL

https://localhost:50000/b1s/v1/Logout

Quedando de la siguiente forma

La función en PHP seria la siguiente

 static public function logout($cookie) {

        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://hanagusa:50000/b1s/v1/Logout",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_COOKIE => $cookie,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "User-Agent: Gisa Web Client (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {
            return $response;
        }
    }

Ya al momento de usarlo en PHP desde el Login has ta el Logout seria de la siguiente forma

$conexionSAP = ServiceLayer::login();

// Construimos la cookie

$cookie = "B1SESSION=" . $conexionSAP->SessionId . ";  ROUTEID=.node1";

$sucursalesSAP = ControladorSucursalSAP::ctrMostrar($cookie);

$sucursalesSAP = $sucursalesSAP->value;

// Cerramos la session enviando la Cookie
$conexionSAP = ServiceLayer::logout($cookie);

Ejemplos Service Layer SAP

A continuación pondremos a su disposición algunos ejemplos de peticiones al Service Layer del SAP así como el código en PHP

  1. Postman en Visual Studio Code
  2. Haciendo Login en Service Layer en SAP y pasar el código en PHP 8.3
  3. Haciendo Logout en Service Layer en SAP y pasar el código en PHP 8.3
  4. Obtener lista de usuarios SAP a través de Service Layer
  5. Obtener la lista de precios de SAP a través Service Layer
  6. Crear Consultas Personalizadas en Service Layer SAP
  7. Modificar consultas Personalizadas en Service Layer SAP
  8. Leer consultas Personalizadas en Service Layer SAP

Haciendo Login en Service Layer en SAP y pasar el código en PHP 8.3

El primer paso para comenzar usar el service layer es lógicamente hacer el login para posteriormente hacer las consultas necesarias

En la extensión Thunder Client abrimos la petición de tipo POST y ponemos la siguiente URL

https://localhost:50000/b1s/v1/Login

Lógicamente en donde dice localhost va la IP de su servidor

En la sección de Body elegimos el contenido JSON y le ponemos el siguiente código con los datos de inicio de sesión

{
    "CompanyDB": "TEST_GUSA",
    "Password": "sap123",
    "UserName": "LMPROGRAM"
}

Quedaría tal y como se ve en la imagen de arriba

Como resultado dará el código que se muestra abajo

{
  "odata.metadata": "https://localhost:50000/b1s/v1/$metadata#B1Sessions/@Element",
  "SessionId": "1d66ff02-6169-11ef-c000-000c2949cf9d-139784632008704-3563",
  "Version": "1000201",
  "SessionTimeout": 30
}

Ahora creamos nuestra función para hacer esa petición desde el código PHP

    static public function login() {


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://localhost:50000/b1s/v1/Login",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "{\n    \"CompanyDB\": \"BASE DE DATOS PRUEBA\",\n    \"Password\": \"PASWORD\",\n    \"UserName\": \"NOMBREUSUARIO\"\n}\n",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "Content-Type: application/json",
                "User-Agent: (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {

            return json_decode($response);
        }
    }

Y listo ya con eso iniciamos sesión desde PHP, y nos regresa las variables necesarias para crear la cookie

Página 9 de 141

Creado con WordPress & Tema de Anders Norén