CodeIgniter 4 Boilerplate Catalogo de Productos CFDI V4.0
CodeIgniter4 Boilerplateproducts CRUD MVC contiene categoría de captura y producto CRUD por empresa, contiene nombre, inventario de administrador, facturas de campos SAT
Agrega SAT Catalogos Factory y usa variables globales desde la conexión DNS con SQLite
como se ve en la parte inferior
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
//ADD use PhpCfdi\SatCatalogos\Factory;
/**
* Class BaseController
*
* BaseController provides a convenient place for loading components
* and performing functions that are needed by all your controllers.
* Extend this class in any new controllers:
* class Home extends BaseController
*
* For security be sure to declare any new methods as protected or private.
*/
abstract class BaseController extends Controller
{
/**
* Instance of the main Request object.
*
* @var CLIRequest|IncomingRequest
*/
protected $request;
/**
* An array of helpers to be loaded automatically upon
* class instantiation. These helpers will be available
* to all other controllers that extend BaseController.
*
* @var array
*/
protected $helpers = [];
public $catalogosSAT;
public $unidadesSAT;
/**
* Be sure to declare properties for any property fetch you initialized.
* The creation of dynamic property is deprecated in PHP 8.2.
*/
// protected $session;
/**
* Constructor.
*/
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
// Do Not Edit This Line
parent::initController($request, $response, $logger);
// Preload any models, libraries, etc, here.
// E.g.: $this->session = \Config\Services::session();
date_default_timezone_set("America/Mazatlan");
//ADD
$dsn = "sqlite:".ROOTPATH."writable/database/catalogossat.db";
$factory = new Factory();
$satCatalogos = $factory->catalogosFromDsn($dsn);
$this->catalogosSAT = $satCatalogos;
}
}
Crear carpeta y descargar Catálogos SAT de Base de Datos
En ciertas ocasiones es necesario correr algunos procesos en nuestro sistema web que demoran un poco mas de tiempo y por la configuración inicial del framework este proceso no finaliza.
Para ello es necesario poder modificar los parámetros de tiempo de ejecución para darle un poco mas de tiempo al programa y finalice correctamente los procesos.
En las primeras versiones de Codeigniter 4 podíamos cambiar el tiempo de ejecución en app/Config/App.php modificando las siguientes variables
/**
* --------------------------------------------------------------------------
* Session Expiration
* --------------------------------------------------------------------------
*
* The number of SECONDS you want the session to last.
* Setting to 0 (zero) means expire when the browser is closed.
*
* @deprecated use Config\Session::$expiration instead.
*/
public int $sessionExpiration = 72000;
/**
* --------------------------------------------------------------------------
* Session Time to Update
* --------------------------------------------------------------------------
*
* How many seconds between CI regenerating the session ID.
*
* @deprecated use Config\Session::$timeToUpdate instead.
*/
public int $sessionTimeToUpdate = 300000;
/**
* --------------------------------------------------------------------------
* CSRF Expire
* --------------------------------------------------------------------------
*
* The number in seconds the token should expire.
*
* @deprecated Use `Config\Security` $expire property instead of using this property.
*/
public int $CSRFExpire = 720000;
Pero ahora en las versiones nuevas tenemos que modificar en el archivo app/Config/Session.php ya las variables son las siguientes:
/**
* --------------------------------------------------------------------------
* Session Expiration
* --------------------------------------------------------------------------
*
* The number of SECONDS you want the session to last.
* Setting to 0 (zero) means expire when the browser is closed.
*/
public int $expiration = 720000;
/**
* --------------------------------------------------------------------------
* Session Time to Update
* --------------------------------------------------------------------------
*
* How many seconds between CI regenerating the session ID.
*/
public int $timeToUpdate = 300000;
Ya con eso podemos alargar el tiempo de ejecucion del sistema, pero vamos a sacrificar que el sistema deje de estar disponible para otra tarea mientras se este ejecutando tal proceso
Una de las ventajas de trabajar en el framework de codeigniter 4 son las migraciones, es decir, en lugar de crear la tabla directamente creamos los archivos de migración y cuando actualicemos los fuentes desde nuestra maquina al servidor basta con correr un php spark migrate y los campos y tablas nuevas se actualizan instantáneamente en servidor de base de datos de nuestro servidor.
En los archivos de base de datos o de migración de de dos tipos que son los siguientes
Migration
Seeds
Los archivos de migración en resumen es para poner tablas y campos nuevos mientras que los archivos seeds son para insertar datos a la tabla, en nuestro caso permisos, menus ETC
Según teníamos entendido que los seeders se ejecutaban también con el comando de php spark migrate, pero al parecer no se ejecuto en el servidor el motivo era por que tenia errores, pero no los mostro el comando.
Lo que se tuvo que hacer fue correr el siguiente comando
php spark db:seed
A continuación nos solicitara el nombre del archivo seed
CodeIgniter v4.5.1 Command Line Tool - Server Time: 2024-06-24 09:19:25 UTC-07:00
Nombre de semilla :
Le ponemos el nombre de la semilla en nuestro caso es nuestro archivo se llama PermissionNotaCreditoSeeder.phpl a clase se llama igual solo que sin la extension .php quedaria de la siguiente forma y le damos enter en caso de que el archivo contenga un error nos los mostrara, en nuestro caso como todo nos salió bien nos arrojo este mensaje
El contenido del archivo seed era el siguiente
<?php
namespace App\Database\Seeds;
use CodeIgniter\Config\Services;
use CodeIgniter\Database\Seeder;
use Myth\Auth\Entities\User;
use Myth\Auth\Models\UserModel;
use julio101290\boilerplate\Models\MenuModel;
class PermissionNotaCreditoSeeder extends Seeder {
/**
* @var Authorize
*/
protected $authorize;
/**
* @var Db
*/
protected $db;
/**
* @var Users
*/
protected $users;
//protected $menu;
public function __construct() {
$this->authorize = Services::authorization();
$this->db = \Config\Database::connect();
$this->users = new UserModel();
}
public function run() {
$this->authorize->createPermission('listaNotaCredito-permission', 'Permiso para la lista de notas de crédito');
$this->authorize->addPermissionToGroup('listaNotaCredito-permission', 'admin');
$this->authorize->addPermissionToUser('listaNotaCredito-permission', 1);
}
}
Las extensiones para trabajar en los proyectos actuales de MedicalSoft, Punto de venta ETC, son las siguientes
extension=curl
extension=ffi
extension=ftp
extension=fileinfo
extension=gd
extension=gettext
extension=gmp
extension=intl
extension=imap
extension=mbstring
;extension=exif ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
;extension=oci8_19 ; Use with Oracle Database 19 Instant Client
extension=odbc
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=pgsql
extension=shmop
extension=php_pdo_sqlsrv_82_nts_x64.dll
; The MIBS data available in the PHP distribution must be installed.
; See https://www.php.net/manual/en/snmp.installation.php
;extension=snmp
extension=soap
;extension=sockets
;extension=sodium
extension=sqlite3
;extension=tidy
extension=xsl
extension=zip
Para registrar los movimientos requerimos especificar que tipo de movimiento es como puede ser entradas por compra, salidas por venta, entrada por devolución de cliente, saluda por devolución a proveedor
Para ello crearemos el siguiente catalogo de Tipos de movimiento con los siguientes campos
Empresa
Descripción
tipo
Es traspaso
Primero creamos el archivo de migración App/Database/2023-08-17222335_Tipos_movimientos_inventario.php con el siguiente código
Ahora para poder timbrar facturas CFDI necesitamos tener un catalogo de series electrónicas.
En el catalogo de series electrónicas vamos a necesitar los siguientes datos
Empresa
Sucursal
Tipo Serie (venta,pago,devolucion,bonificacion)
Serie
Desde Fecha
Hasta Fecha
Desde Folio
Hasta Folio
Ambiente Timbrado
Token pruebas
Token producción
Primero creamos el archivo de migración App/Database/migrations/2023-10-17120916_Seriesfacturaelectronica.php para la creación de la tabla en la base de datos
Es de vital importancia tener los catálogos en una base de datos para de esta manera poder hacer las facturas/complementos, y también mantenerlo actualizado
Para ello se ha hecho este script para descargar en una base de datos SQLite
Se reviso y descarga todo lo necesario como por ejemplo códigos postales, clave de unidad, clave de producto / servicio, catálogos de la carta porte 3.0, catálogos de nomina, monedas, usos de CFDI , paises, monedas.
Para crear el archivo de base de datos solo creamos el siguiente archivo
La DIOT es la declaración informativa de operaciones con Terceros, la cual es una obligación fiscal prevista más del IVA donde se da a conocer el estado de las operaciones para con terceros (como su nombre lo dice) o lo que es lo mismo con los proveedores.
Si eres persona física o moral que tributa en el Régimen Simplificado de Confianza; o persona física con ingresos por actividades empresariales, profesionales y/o arrendamiento, cuyos ingresos totales del ejercicio inmediato anterior no excedieron de 4 millones de pesos o iniciaste actividades en el ejercicio y estimas que tus ingresos no excederán de la cantidad señalada, quedarás relevado de cumplir con la presentación de la Información de Operaciones con Terceros (DIOT) a que se refiere el artículo 32, fracción VIII de la Ley del IVA.
Hemos desarrollado un programa para generar la DIOT en base a un layout
Incluimos un layout de ejemplo en cual pueden obtener desde la aplicación
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.