Ya tenemos la base del proyecto, ahora lo que sigue es darle forma creando los menús

Desarrollador web apasionado y gusto por la buena musica
Ya tenemos la base del proyecto, ahora lo que sigue es darle forma creando los menús

Dejamos este tutorial en el cual veremos como hacer de la manera mas fácil un sistema de punto de venta similar al JCPOS
Lo que tendrá el sistema será lo siguiente
En esta serie de publicaciones vamos a hacer un sistema de punto de venta con el Framework de PHP CodeIgniter 4
El sistema será igual al JCPOS que ya veníamos haciendo pero con todas las ventajas que ofrece CodeIgniter
Primero crearemos el proyecto con Composer
composer create-project codeigniter4/appstarter ci4jcposCreamos nuestra base de datos en phpmyadmin con el nombre ci4jcpos
CREATE SCHEMA ci4jcpos DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish2_ciAhora instalamos la plantilla boilerplate el cual nos instalara la plantilla adminlte3 con el administrador de usuario auth, lo instalamos corriendo el siguiente comando dentro del proyecto
En mi caso yo deje en así app/config/database.php
public array $default = [
'DSN' => '',
'hostname' => '127.0.0.1',
'username' => 'root',
'password' => '',
'database' => 'ci4jcpos',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
composer require julio101290/boilerplateAhora siguiente las instrucciones del paquete https://packagist.org/packages/julio101290/boilerplate corremos el comando migrate para auth
php spark auth:publish
Publish Migration? [y, n]: y
created: Database/Migrations/2017-11-20-223112_create_auth_tables.php
Remember to run `spark migrate -all` to migrate the database.
Publish Models? [y, n]: n
Publish Entities? [y, n]: n
Publish Controller? [y, n]: n
Publish Views? [y, n]: n
Publish Filters? [y, n]: n
Publish Config file? [y, n]: y
created: Config/Auth.php
Publish Language file? [y, n]: nEn app/config/auth.php modifcamos la matriz/arreglo de $views y la dejamos asi
public $views = [
'login' => 'julio101290\boilerplate\Views\Authentication\login',
'register' => 'julio101290\boilerplate\Views\Authentication\register',
'forgot' => 'julio101290\boilerplate\Views\Authentication\forgot',
'reset' => 'julio101290\boilerplate\Views\Authentication\reset',
'emailForgot' => 'julio101290\boilerplate\Views\Authentication\emails\forgot',
'emailActivation' => 'julio101290\boilerplate\Views\Authentication\emails\activation',
];En app/config/filters.php en la matriz aliases agregamos los siguientes valores, ojo, no quitar los que estaban, solo agregar los que hacen falta
public $aliases = [
'login' => \Myth\Auth\Filters\LoginFilter::class,
'role' => \julio101290\boilerplate\Filters\RoleFilter::class,
'permission' => \julio101290\boilerplate\Filters\PermissionFilter::class,
];Instalamos boilerplate con el siguiente comando
php spark boilerplate:installEn App/config/validation.php agregamos lo siguiente en la matriz de $$rulesSet
public $$ruleSets = [
\Myth\Auth\Authentication\Passwords\ValidationRules::class,
];En App/entities/users.php en la matriz $cast lo dejamos así
protected $casts = [
'username' => 'string',
'email' => 'string',
'firstname' => 'string',
'lastname' => 'string',
'active' => 'boolean',
'force_pass_reset' => 'boolean',
];En app/controller/home.php lo dejamos así para que entre directamente al administrador
<?php
namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
return redirect()->to("/admin");
}
}
En app/config/constants.php al final del archivo le agregamos la siguiente constante para que nos permita debugear, una vez que este en producción se tiene que quitar
define("ENVIRONMENT","development");
En app/config/app.php le quita a la variable $indexPage el valor dejandolo en blanco, la variable defaultLocale y supportedLocales la dejamos con el valor “es”
public string $indexPage = '';
public string $defaultLocale = 'es';
public array $supportedLocales = ['en'];
En el archivo app/config/boilerplate.php asignamos el nombre de la app y en $i18n que es para el lenguaje de los datatables lo dejamos como Spanish

JCPOS es un sistema de punto de venta (POS) de código abierto desarrollado en PHP. Recientemente, JCPOS se ha migrado a CodeIgniter 4, lo que ha mejorado significativamente su rendimiento y escalabilidad. En este artículo, exploraremos los detalles de la migración de JCPOS a CodeIgniter 4 y sus beneficios.
Antes de profundizar en la migración de JCPOS a CodeIgniter 4, es importante comprender qué es CodeIgniter y por qué es una opción popular para desarrolladores de PHP.
CodeIgniter es un framework PHP de código abierto que se utiliza para desarrollar aplicaciones web dinámicas y sitios web. Es popular debido a su facilidad de uso, velocidad y seguridad. Además, CodeIgniter tiene una gran comunidad de desarrolladores que proporciona soporte y actualizaciones regulares.
La migración de JCPOS a CodeIgniter 4 implica actualizar el código de JCPOS para que sea compatible con la última versión del framework. CodeIgniter 4 presenta varias mejoras y cambios significativos en comparación con su versión anterior, CodeIgniter 3. Algunas de estas mejoras incluyen:
Para migrar JCPOS a CodeIgniter 4, los desarrolladores tuvieron que actualizar el código de JCPOS para utilizar las nuevas características y métodos de CodeIgniter 4. Esto incluyó cambios en la estructura del directorio, en la configuración del archivo y en el uso de nuevos métodos y características de CodeIgniter 4.
Una vez completada la migración, JCPOS obtuvo varios beneficios significativos. En primer lugar, el rendimiento y la velocidad de JCPOS se mejoraron considerablemente gracias a la utilización de características avanzadas de PHP 7 y a la optimización de la arquitectura de CodeIgniter 4. Esto significa que el sistema puede manejar más transacciones y usuarios simultáneamente, lo que es especialmente importante en entornos de punto de venta de alta demanda.
Además, la migración a CodeIgniter 4 proporcionó una mayor flexibilidad y escalabilidad a JCPOS. La arquitectura modular de CodeIgniter 4 permite que los desarrolladores de JCPOS agreguen fácilmente nuevas funcionalidades y características al sistema sin afectar negativamente al rendimiento o la estabilidad. Esto significa que JCPOS puede adaptarse y crecer para satisfacer las necesidades cambiantes de sus usuarios.
En conclusión, la migración de JCPOS a CodeIgniter 4 ha mejorado significativamente el rendimiento, la escalabilidad y la flexibilidad del sistema. Los desarrolladores de JCPOS han aprovechado las características avanzadas y la arquitectura modular de CodeIgniter 4 para optimizar el sistema y garantizar su compatibilidad con las últimas tecnologías y tendencias en el desarrollo web.
JCPOS: Una solución de punto de venta en constante evolución
En una reciente transmisión en vivo, el equipo de desarrollo detrás de JCPOS discutió los últimos cambios y mejoras en su solución de punto de venta. JCPOS es un sistema de punto de venta que ha estado en desarrollo desde el 2020, y ha evolucionado constantemente desde entonces para satisfacer las necesidades de sus usuarios.
Uno de los cambios más notables que el equipo ha realizado es el cambio de nombre de JC post a JCPOS. Esto se hizo para mantener la coherencia en el nombre a lo largo de los años, y evitar confusiones al cambiar el nombre cada año.
Otro de los cambios que se discutió en la transmisión fue la reciente publicación del repositorio de JCPOS en Github. Ahora está disponible para que cualquier persona interesada lo pueda descargar y explorar el código fuente. Además, se hizo hincapié en que los usuarios pueden contribuir al proyecto si encuentran algún problema o tienen alguna sugerencia.
El equipo también habló de algunos cambios específicos que han realizado en JCPOS, como la corrección de un problema en la bitácora que no estaba ordenando los botones de manera correcta. También se discutió la implementación de descuentos en las ventas, para asegurarse de que funcionen correctamente. Además, se está trabajando en la corrección de detalles menores, como la ordenación de la lista de ventas.
El equipo de JCPOS también habló sobre su intención de usar Composer para gestionar las dependencias del proyecto, lo que les permitirá mantenerse actualizados con las últimas versiones de las librerías que utilizan. También se mencionó la adición de impuestos a los productos, lo que permitirá la implementación de facturación electrónica en el futuro.
Finalmente, el equipo mencionó a sus patrocinadores y clientes, agradeciendo su apoyo y mencionando que los nombres de los patrocinadores se agregarán al repositorio en el futuro. También se proporcionó información sobre cómo patrocinar el proyecto.
En resumen, JCPOS es un proyecto de punto de venta en constante evolución. El equipo detrás de JCPOS está trabajando constantemente para mejorar la solución, escuchar las necesidades de los usuarios y mantenerse actualizado con las últimas tecnologías y herramientas de desarrollo. Si estás interesado en probar JCPOS o contribuir al proyecto, ¡asegúrate de visitar su repositorio en Github!
Nuevo cambio en el cual se podrán mover cn el mouse los modales
Modal Draggable se refiere a la capacidad de arrastrar y mover un cuadro de diálogo modal (o ventana emergente) en una interfaz de usuario. Una ventana modal es un tipo de ventana emergente que requiere que el usuario realice una acción antes de poder interactuar con el resto de la aplicación o sitio web. A menudo se utilizan para solicitar información importante o para mostrar mensajes críticos al usuario.
La función Modal Draggable permite que el usuario arrastre la ventana modal a cualquier lugar en la pantalla para evitar que obstruya información importante o para hacer más fácil su uso en pantallas pequeñas. Esta función se implementa en algunos frameworks y librerías de JavaScript para la creación de interfaces de usuario, como Bootstrap, Materialize y jQuery UI.
Para activarlo en modales ya hechos solo basta con poner el siguiente código, ejemplo
$(function () {
$("#modal-edit-permission").draggable();
$("#modal-create-permission").draggable();
});
Código fuente
https://github.com/julio101290/boilerplate/
Desde Packist
https://packagist.org/packages/julio101290/boilerplate
Saludos y espero que les sirva
Se realizo un pequeño cambio en el proyecto boilerplate para CodeIgniter 4, en el cual las tablas podrán ser responsivas
Si ya están usando este proyecto solo hay que actualizar via composer
composer updateY en la llamada del datatable agregar responsive:true por ejemplo
var tableUser = $('#table-user').DataTable({
processing: true,
serverSide: true,
responsive: true,
autoWidth: false,
order: [[1, 'asc']],Y el resultado será el siguiente

Saludos y espero que les sea útil
Al momento de hacer la factura en su versión 4.0 hay clientes que en su razón social tienen la tilde invertida ` en la constancia de situación fiscal y aunque se copie tal cual no funciona y al timbrar la factura sale error de que no coincide el RFC con el nombre del receptor
La solucion que funciono para nosotros fue cambiar la tilde invertida por comilla simple ‘
Y con eso ya facturo correctamente
Que es boilerplate? normalmente en el ámbito de desarrollo de aplicaciones se le llama boilerplate a todo ese código repetitivo que usamos en un proyecto, o mas bien lo que siempre usamos en todos los proyectos, como login, menús, permisos.
A continuación les dejo un boilerplate para CodeIgniter el cual hice una bifurcación para adaptarlo a nuestras necesidades.
Este paquete para CodeIgniter 4 sirve como plataforma básica para crear rápidamente una aplicación administrativa. Incluye creación y gestión de perfiles, gestión de usuarios, roles, permisos y un menú generado dinámicamente.
Características
Este proyecto aún está en sus primeras etapas de desarrollo… ¡no dude en contribuir!
El autor original es agungsugiarto/boilerplate https://github.com/agungsugiarto/boilerplate, solo hicimos un fork para adaptarlo a nuevas necesidades como traducirlo al español y hacerlo funcional en xampp/lampp
El fuente con los cambios mas recientes de fork estan en github https://github.com/julio101290/boilerplate
Instalación
composer require julio101290/boilerplate2. Establezca CI_ENVIRONMENT, baseURL, página de índice y configuración de la base de datos en su archivo .env según su base de datos existente (si no tiene un archivo .env, puede copiar primero desde el archivo env: cp env .env primero). Si la base de datos no existe, primero cree la base de datos.
# .env file
CI_ENVIRONMENT = development
app.baseURL = 'http://localhost:8080'
app.indexPage = ''
database.default.hostname = localhost
database.default.database = boilerplate
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi3. Correr el comando para publicar de auth
php spark auth:publish
Publish Migration? [y, n]: y
created: Database/Migrations/2017-11-20-223112_create_auth_tables.php
Remember to run `spark migrate -all` to migrate the database.
Publish Models? [y, n]: n
Publish Entities? [y, n]: n
Publish Controller? [y, n]: n
Publish Views? [y, n]: n
Publish Filters? [y, n]: n
Publish Config file? [y, n]: y
created: Config/Auth.php
Publish Language file? [y, n]: nNOTA: Todo lo relacionado con cómo configurar la autenticación puede encontrar en Myth/Auth.
¿Ya está listo? ¡¡No tan rapido!! 😉 Después de publicar Config/Auth.php, debe cambiar las $views públicas con estas líneas a continuación:
public $views = [
'login' => 'julio101290\boilerplate\Views\Authentication\login',
'register' => 'julio101290\boilerplate\Views\Authentication\register',
'forgot' => 'julio101290\boilerplate\Views\Authentication\forgot',
'reset' => 'julio101290\boilerplate\Views\Authentication\reset',
'emailForgot' => 'julio101290\boilerplate\Views\Authentication\emails\forgot',
'emailActivation' => 'julio101290\boilerplate\Views\Authentication\emails\activation',
];Abra app\Config\Filters.php, busque $aliases y agregue estas líneas a continuación:
public $aliases = [
'login' => \Myth\Auth\Filters\LoginFilter::class,
'role' => \julio101290\boilerplate\Filters\RoleFilter::class,
'permission' => \julio101290\boilerplate\Filters\PermissionFilter::class,
];4. Ejecute publish, migrate y seed del boilerplate
php spark boilerplate:installAbra app\Config\validation.php, busque $ruleSets y agregue estas líneas a continuación:
public $$ruleSets = [
\Myth\Auth\Authentication\Passwords\ValidationRules::class,
];Abra app\entities\Users.php, busque $casts y agregue estas líneas a continuación:
protected $casts = [
'username' => 'string',
'email' => 'string',
'firstname' => 'string',
'lastname' => 'string',
'active' => 'boolean',
'force_pass_reset' => 'boolean',
];Ejecute el servidor de desarrollo:
php spark serveAbrir en el navegador http://localhost:8080/admin
Default user and password
+----+--------+-------------+
| No | User | Password |
+----+--------+-------------+
| 1 | admin | super-admin |
| 2 | user | super-user |
+----+--------+-------------+Configuraciones
Plantilla de configuración
Puede configurar el controlador de tablero predeterminado y el tema de back-end en app\Config\Boilerplate.php
class Boilerplate extends BaseConfig
{
public $appName = 'Boilerplate';
public $dashboard = [
'namespace' => 'julio101290\boilerplate\Controllers',
'controller' => 'DashboardController::index',
'filter' => 'permission:back-office',
];
// App/Config/Boilerplate.phpUso
Puede encontrar cómo funciona con las rutas de código de lectura, el controlador y las vistas, etc. Finalmente… ¡Feliz codificación!
Contribuciones
Las contribuciones son muy bienvenidas.
Licencia
Este paquete es software gratuito distribuido bajo los términos de la licencia MIT.
Un buen negocio o empresa con un numero de empleados considerable siempre va a necesitar un buen sistema de nomina sobre todo para sacar reportes, generar archivos de dispersión de nomina para pagarle a través del banco y sobre todo para generar el timbrado.
Durante las siguientes publicaciones mostraremos como desarrollar un sistema de nomina completo en CodeIgniter 4.x
Primero crearemos la base del proyecto
Creamos el proyecto via composer con el siguiente codigo
composer create-project codeigniter4/appstarter Nomina2023Creamos la tabla nomina2023 en mariaDB/MySQL o en el motor de su preferencia
en app/config/database.php cambiamos la configuración de la base de datos default lo dejamos de la siguiente forma, igual si ustedes le quieren poner alguna contraseña por seguridad pueden ponersela
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'nomina2023',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
en app/config/app.php modificamos las siguientes variables
public $indexPage = '';
public $defaultLocale = 'es';
public $supportedLocales = ['es'];Para debugear ponemos este codigo al final del archivo app/config/constants.php
define("ENVIRONMENT","development");
Ahora procedemos a instalar boilerplate el cual nos servirá para instalar la plantilla adminLTE3 con un administrador de usuario/roles/permisos/login
Primero instalamos via composer con el siguiente comando
composer require agungsugiarto/boilerplateInstalamos Auth que es lo que permitirá logearnos administrar usuarios, permisos y roles
php spark auth:publish
Publish Migration? [y, n]: y
created: Database/Migrations/2017-11-20-223112_create_auth_tables.php
Remember to run `spark migrate -all` to migrate the database.
Publish Models? [y, n]: n
Publish Entities? [y, n]: n
Publish Controller? [y, n]: n
Publish Views? [y, n]: n
Publish Filters? [y, n]: n
Publish Config file? [y, n]: y
created: Config/Auth.php
Publish Language file? [y, n]: nen app/config/auth.php remplazamos el siguiente codigo
public $views = [
'login' => 'agungsugiarto\boilerplate\Views\Authentication\login',
'register' => 'agungsugiarto\boilerplate\Views\Authentication\register',
'forgot' => 'agungsugiarto\boilerplate\Views\Authentication\forgot',
'reset' => 'agungsugiarto\boilerplate\Views\Authentication\reset',
'emailForgot' => 'agungsugiarto\boilerplate\Views\Authentication\emails\forgot',
'emailActivation' => 'agungsugiarto\boilerplate\Views\Authentication\emails\activation',
];en app/config/filters.php agregamos los siguientes alias
public $aliases = [
'login' => \Myth\Auth\Filters\LoginFilter::class,
'role' => \agungsugiarto\boilerplate\Filters\RoleFilter::class,
'permission' => \agungsugiarto\boilerplate\Filters\PermissionFilter::class,
]Instalamos, migramos y sembramos boilerplate con el siguiente comando
php spark boilerplate:installEn controller/home.php lo dejamos de la siguiente manera para que siempre nos retorne al admin
<?php
namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
return redirect()->to('/admin');
}
}
En app/config/Boilerplate.php modificamos public $i18n = ‘Indonesian’; a public $i18n = ‘Spanish’; para cambiar el idioma del datable, para el nombre del programa cambiamos public $appName = ‘Boilerplate’; por public $appName = ‘Nomina 2023’;
Tambien modificamos el brand a nuestro antojo yo lo modifique de esta manera
//--------------------------------------------------------------------------
// Theme boilerplate
//
// BG: blue, indigo, purple, pink, red, orange, yellow, green, teal, cyan,
// gray, gray-dark, black
// Type: dark, light
// Shadow: 0-4
//
//--------------------------------------------------------------------------
public $theme = [
'body-sm' => false,
'navbar' => [
'bg' => 'white',
'type' => 'light',
'border' => true,
'user' => [
'visible' => true,
'shadow' => 0,
],
],
'sidebar' => [
'type' => 'dark',
'shadow' => 4,
'border' => false,
'compact' => true,
'links' => [
'bg' => 'blue',
'shadow' => 1,
],
'brand' => [
'bg' => 'gray-dark',
'logo' => [
'icon' => 'favicon.ico', // path to image | this example icon on public root folder.
'text' => '<strong>Nomina</strong>2023',
'shadow' => 2,
],
],
'user' => [
'visible' => true,
'shadow' => 2,
],
],
'footer' => [
'fixed' => false,
'vendorname' => 'CesarSytems',
'vendorlink' => 'https://cesarsystems.com.mx/',
],
];iniciamos el programa con el siguiente comando
php spark serveLos usuarios y contraseña por default son los siguientes
+----+--------+-------------+
| No | User | Password |
+----+--------+-------------+
| 1 | admin | super-admin |
| 2 | user | super-user |
+----+--------+-------------+
Creado con WordPress & Tema de Anders Norén