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
Ya vimos como usar AutoCrud para crear los catálogos, en esta ocasión tambien usamos autocrud, aun así dejaremos el código fuente completo de este modulo
Creamos el archivo modelo al app/models/CustumersModel.php con el siguiente contenido
Para la traducción en ingles creamos el archivo app/languaje/es/custumers.php con el siguiente contenido
<?php
$custumers["logDescription"] = "The custumers was saved with the following data:";
$custumers["logUpdate"] = "The custumers was updated with the following data:";
$custumers["logDeleted"] = "The custumers was deleted with the following data:";
$custumers["msg_delete"] = "The custumers was deleted correctly:";
$custumers["add"] = "Add Custumers";
$custumers["edit"] = "Edit custumers";
$custumers["createEdit"] = "Create / Edit";
$custumers["title"] = "custumers management";
$custumers["subtitle"] = "custumers list";
$custumers["fields"]["firstname"] = "Firstname";
$custumers["fields"]["lastname"] = "Lastname";
$custumers["fields"]["taxID"] = "TaxID";
$custumers["fields"]["email"] = "Email";
$custumers["fields"]["direction"] = "Direction";
$custumers["fields"]["birthdate"] = "Birthdate";
$custumers["fields"]["created_at"] = "Created_at";
$custumers["fields"]["updated_at"] = "Updated_at";
$custumers["fields"]["deleted_at"] = "Deleted_at";
$custumers["fields"]["actions"] = "Actions";
$custumers["msg"]["msg_insert"] = "The custumers has been correctly added.";
$custumers["msg"]["msg_update"] = "The custumers has been correctly modified.";
$custumers["msg"]["msg_delete"] = "The custumers has been correctly deleted.";
$custumers["msg"]["msg_get"] = "The Custumers has been successfully get.";
$custumers["msg"]["msg_get_fail"] = "The custumers not found or already deleted.";
return $custumers;
Para nuestra traduccion en español creamos el archivo app/languaje/es/custumers.php
<?php
$custumers["logDescription"] = "El registro en clientes fue guardado con los siguientes datos:";
$custumers["logUpdate"] = "El registro en clientes fue actualizado con los siguientes datos:";
$custumers["logDeleted"] = "El registro en clientes fue eliminado con los siguientes datos:";
$custumers["msg_delete"] = "El Registro en clientes fue eliminado correctamente:";
$custumers["add"] = "Agregar Cliente";
$custumers["edit"] = "Editar Cliente";
$custumers["createEdit"] = "Crear / Editar";
$custumers["title"] = "Admon. Clientes";
$custumers["subtitle"] = "Lista de Clientes";
$custumers["fields"]["firstname"] = "Nombre";
$custumers["fields"]["lastname"] = "Apellido";
$custumers["fields"]["taxID"] = "RFC";
$custumers["fields"]["email"] = "Correo Electronico";
$custumers["fields"]["direction"] = "Direccion";
$custumers["fields"]["birthdate"] = "Fecha de nacimiento";
$custumers["fields"]["created_at"] = "Fecha de creacion";
$custumers["fields"]["updated_at"] = "Ultima modificacion";
$custumers["fields"]["deleted_at"] = "Fecha de eliminacion";
$custumers["fields"]["actions"] = "Acciones";
$custumers["msg"]["msg_insert"] = "Registro agregado correctamente.";
$custumers["msg"]["msg_update"] = "Registro modificado correctamente.";
$custumers["msg"]["msg_delete"] = "Registro eliminado correctamente.";
$custumers["msg"]["msg_get"] = "Registro obtenido correctamente.";
$custumers["msg"]["msg_get_fail"] = "Registro no encontrado o eliminado.";
return $custumers;
Creamos nuestro archivo de migración en app/databases/migrations/2023-04-21063335_Custumers.php con el siguiente contenido
Ya vimos como crear módulos y catalogo ahora mostraremos como automatizar esa parte del proceso de desarrollo para ser un poco mas eficientes para ello escribimos un código que escribe el código repetitivo
Creamos el archivo app/controller/AutoCrudController.php con el siguiente código
-- phpMyAdmin SQL Dump
-- version 5.0.4
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 21-04-2023 a las 20:19:25
-- 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: `ci4jcpos`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `categorias`
--
CREATE TABLE `categorias` (
`id` int(11) NOT NULL,
`descripcion` varchar(128) COLLATE utf8mb4_spanish2_ci DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci;
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `categorias`
--
ALTER TABLE `categorias`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `categorias`
--
ALTER TABLE `categorias`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
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 */;
Corremos la siguiente URL en el navegador para crear todo el catalogo
Para la tabla donde se guardara la información corremos el siguiente código SQL en PHPMYADMIN en nuestra base de datos, en publicaciones posteriores les dejare los archivos de migración para que no tengan la necesidad de correr archivos SQL y sirva para diferentes motores de base de datos
-- phpMyAdmin SQL Dump
-- version 5.0.4
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 18-04-2023 a las 00:56:17
-- 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: `wheelsoft`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `mailsettings`
--
CREATE TABLE `mailsettings` (
`id` int(11) NOT NULL,
`email` varchar(512) DEFAULT NULL,
`host` varchar(128) DEFAULT NULL,
`smtpDebug` varchar(16) DEFAULT NULL,
`SMTPAuth` varchar(16) DEFAULT NULL,
`port` varchar(16) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`smptSecurity` varchar(64) DEFAULT NULL,
`pass` varchar(128) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Volcado de datos para la tabla `mailsettings`
--
INSERT INTO `mailsettings` (`id`, `email`, `host`, `smtpDebug`, `SMTPAuth`, `port`, `created_at`, `deleted_at`, `updated_at`, `smptSecurity`, `pass`) VALUES
(1, 'mail@domain.com', 'mail.host5.com', '1', '1', '587', NULL, NULL, NULL, 'tls', 'password');
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `mailsettings`
--
ALTER TABLE `mailsettings`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `mailsettings`
--
ALTER TABLE `mailsettings`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
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 app/controllers/SettingsMailController.php con el siguiente contenido
<?php
namespace julio101290\boilerplate\Controllers\Users;
namespace App\Controllers;
use CodeIgniter\API\ResponseTrait;
use CodeIgniter\Controller;
use App\Models\SettingsMailModel;
use App\Models\LogModel;
use julio101290\boilerplate\Controllers\BaseController;
use julio101290\boilerplate\Entities\Collection;
use julio101290\boilerplate\Models\GroupModel;
use CodeIgniter\Config\Services;
use App\Models\RegisterModel;
use App\Controllers\RegisterController;
use PHPMailer\PHPMailer;
/**
* Class UserController.
*/
class SettingsMailController extends BaseController
{
use ResponseTrait;
/** @var \agungsugiarto\boilerplate\Models\GroupModel */
protected $group;
protected $settingsMail;
protected $log;
protected $register;
protected $registerController;
protected $custumer;
/** @var \agungsugiarto\boilerplate\Models\UserModel */
protected $users;
public function __construct()
{
$this->group = new GroupModel();
$this->log = new LogModel();
$this->settingsMail = new SettingsMailModel();
$autorize = $this->authorize = Services::authorization();
helper('menu');
}
public function index()
{
$datos = $this->settingsMail->where("id", 1)->first();
$data["title"] = "Correo Electronicos";
$data["subtitle"] = "Configuraciones de Correo Electronico";
$data["data"] = $datos;
return view('mailSettings', $data);
}
/**
public function sendMailPDF($uuid)
{
//DATOS CORREO
$datos = $this->settingsMail->where("id", 1)->first();
//DATOS REGISTRO
$register = $this->register->select("*")->where("uuid", $uuid)->first();
$custumer = $this->custumer->select("*")->where("id", $register["custumer"])->first();
$mailsTarjets = "";
$correo = $datos["email"];
$SMTPDebug = $datos["smtpDebug"];
$host = $datos["host"];
if ($datos["SMTPAuth"] == 1) {
$SMTPAuth = true;
} else {
$SMTPAuth = false;
}
$puerto = $datos["port"];
$clave = $datos["pass"];
$SMTPSeguridad = $datos["smptSecurity"];
// Load Composer's autoloader
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer\PHPMailer();
try {
//Server settings
$mail->SMTPDebug = $SMTPDebug; // Enable verbose debug output
$mail->isSMTP(); // Send using SMTP
$mail->Host = $host; // Set the SMTP server to send through
$mail->SMTPAuth = $SMTPAuth; // Enable SMTP authentication
$mail->Username = $correo; // SMTP username
$mail->Password = $clave; // SMTP password
$mail->SMTPSecure = $SMTPSeguridad; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
$mail->Port = $puerto;
$nombreEmpresa = "";
// TCP port to connect to
//Recipients
$mail->setFrom($correo, $nombreEmpresa);
if ($custumer["email1"] != "") {
try {
$mailAddress = $mail->addAddress($custumer["email1"], '');
if (!$mailAddress) {
echo "Error con el correo Electronico";
return;
}
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
if ($custumer["email2"] != "") {
try {
$mailAddress = $mail->addAddress($custumer["email2"], '');
if (!$mailAddress) {
echo "Error con el correo Electronico";
return;
}
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
if ($custumer["email3"] != "") {
try {
$mailAddress = $mail->addAddress($custumer["email3"], '');
if (!$mailAddress) {
echo "Error con el correo Electronico";
return;
}
if (!$mailAddress) {
echo "Error con el correo Electronico";
return;
}
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
if ($custumer["email4"] != "") {
try {
$mailAddress = $mail->addAddress($custumer["email4"], '');
if (!$mailAddress) {
echo "Error con el correo Electronico";
return;
}
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
if ($custumer["email5"] != "") {
try {
$mailAddress = $mail->addAddress($custumer["email5"], '');
if (!$mailAddress) {
echo "Error con el correo Electronico";
return;
}
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
// Add a recipient
//$mail->addReplyTo('info@example.com', 'Information');
//mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
// Attachments
$attachment = $this->registerController->report($uuid, 1);
$mail->AddStringAttachment($attachment, 'registro' . $register["codeCustumer"] . '.pdf', 'base64', 'application/pdf');
// Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = "Envio de Registro";
$mail->Body = "Adjuntamos el registro de verificación de neumaticos";
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
try {
$send = $mail->send();
} catch (Exception $ex) {
echo $ex->getMessage();
return;
}
if ($send) {
echo 'Correo Enviado Correctamente';
} else {
echo 'Error al enviar el correo';
}
} catch (Exception $e) {
echo "Error al enviar el correo: {$e->ErrorInfo}";
}
}
*/
public function guardar()
{
helper('auth');
$userName = user()->username;
$idUser = user()->id;
//GUARDA CONFIGURACIONES
$this->settingsMail->update(1, $_POST);
// return redirect()->to("/admin/hospital");
return redirect()->back()->with('sweet-success', 'Actualizado Correctamente');
// return redirect()->back()->with('sweet-success','Guardado Correctamente');
}
}
Creamos el archivo app/views/mailSettings.php con el siguiente contenido
Ya tenemos nuestros menús creados ahora sigue meter los catálogos de configuración, el primero seria el catalogo de empresas en el cual se van a capturar los datos de la empresa como nombre, razón social, domicilio logo y datos de facturación del SAT, estos datos saldrán en las impresiones de cotizaciones, ventas y reportes.
Primero para hacer los datatables mas fácil instalamos el paquete de hermawan/codeigniter4-datatables esto solo lo haremos una vez y nos servira para los demás catálogos para instalarlo corremos el siguiente código en nuestro proyecto
composer require hermawan/codeigniter4-datatables
Luego en app/config/autoload.php en la variable $psr4 agregamos el namespace
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Hermawan\DataTables' => APPPATH .'ThirdParty/codeigniter4-datatables/src', // <-- namespace for this library
];
Ahora para obtener todos los catálogos del SAT instalamos el paquete de phpcfdi/sat-catalogos
composer require phpcfdi/sat-catalogos
El archivo de app/controller/BaseController.php quedaria de la siguiente forma para poder utilizar los catalogos del SAT en todo momento.
<?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;
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;
/**
* 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();
$dsn = "sqlite:".ROOTPATH."writable\database\catalogossat.db";
$factory = new Factory();
$satCatalogos = $factory->catalogosFromDsn($dsn);
$this->catalogosSAT = $satCatalogos;
}
}
Si se dan cuenta nosotros tenemos un archivo en writable/database/catalogossat.db para generar el archivo de base de datos SQLITE con los datos que proporciona el SAT tenemos el siguiente script en PHP, cortesía de nuestro amigo Rene
En los archivos de lenguaje para ingles creamos el archivo app/Language/en/empresas.php con el siguiente contenido
<?php
$empresas["logDescription"] = "The companie was saved with the following data:";
$empresas["logUpdate"] = "The companie was updated with the following data:";
$empresas["logDeleted"] = "The companie was deleted with the following data:";
$empresas["msg_delete"] = "The companie was deleted correctly:";
$empresas["add"] = "Add companie";
$empresas["edit"] = "Edit companie";
$empresas["createEdit"] = "Create / Edith";
$empresas["title"] = "companie management";
$empresas["subtitle"] = "companie list";
$empresas["fields"]["nombre"] = "Name";
$empresas["fields"]["direccion"] = "direction";
$empresas["fields"]["rfc"] = "RFC";
$empresas["fields"]["logo"] = "logo";
$empresas["fields"]["certificado"] = "certificate";
$empresas["fields"]["archivoKey"] = "KeyFile";
$empresas["fields"]["contraCertificado"] = "Password Certificate";
$empresas["fields"]["regimenFiscal"] = "Tax Regime";
$empresas["fields"]["regimenFiscalOpcion"] = "Select tax regime";
$empresas["fields"]["razonSocial "] = "Business name";
$empresas["fields"]["codigoPostal "] = "Postal Code ";
$empresas["fields"]["CURP"] = "CURP";
$empresas["fields"]["Created_at"] = "Created At";
$empresas["fields"]["Update_At"] = "Update At";
$empresas["msg"]["msg_save"] = "The companie has been correctly saved.";
$empresas["msg"]["msg_insert"] = "The companie has been correctly added.";
$empresas["msg"]["msg_update"] = "The companie has been correctly modified.";
$empresas["msg"]["msg_delete"] = "The companie has been correctly deleted.";
$empresas["msg"]["msg_get"] = "The companie has been successfully get.";
$empresas["msg"]["msg_get_fail"] = "The vehicle not found or already deleted.";
$empresas["imagenesFormato"] = "The image must be in PNG format!";
$empresas["imagenesPeso"] = "The image must not be larger than 2MB!";
$empresas["imagenesPesoMaximo"] = "Maximum weight of the photo 1MB";
$empresas["certExtensionIncorrect"] = "Extensión certificate incorrect";
$empresas["keyFileExtensionIncorrect"] = "Extensión key file incorrect";
$empresas["pngFileExtensionIncorrect"] = "This image not is PNG";
return $empresas;
En los archivos de lenguaje para ingles creamos el archivo app/Language/es/empresas.php con el siguiente contenido
<?php
$empresas["logDescription"] = "El Empresa ha sido guardado con los siguientes datos:";
$empresas["logUpdate"] = "EL Empresa ha sido actualizado con los siguientes datos";
$empresas["logDeleted"] = "El Empresa ha sido eliminado con los siguientes datos:";
$empresas["add"] = "Agregar Empresa";
$empresas["edit"] = "Editar Empresa";
$empresas["createEdit"] = "Crear / Editar";
$empresas["title"] = "Administración de Empresas";
$empresas["subtitle"] = "Lista de Empresas";
$empresas["fields"]["nombre"] = "Nombre";
$empresas["fields"]["direccion"] = "Direccion";
$empresas["fields"]["rfc"] = "RFC";
$empresas["fields"]["logo"] = "Logo";
$empresas["fields"]["certificado"] = "Certificado";
$empresas["fields"]["archivoKey"] = "Archivo Key";
$empresas["fields"]["telefono"] = "Telefono";
$empresas["fields"]["contraCertificado"] = "Contra Certificado";
$empresas["fields"]["regimenFiscal"] = "Regimen Fiscal";
$empresas["fields"]["regimenFiscalOpcion"] = "Seleccionar regimen fiscal";
$empresas["fields"]["razonSocial"] = "Razon Social";
$empresas["fields"]["codigoPostal"] = "Código Postal";
$empresas["fields"]["CURP"] = "CURP";
$empresas["fields"]["correoElectronico"] = "Correo Electronico";
$empresas["fields"]["acciones"] = "Acciones";
$empresas["msg"]["msg_save"] = "La Empresa ha sido correctamente guardada.";
$empresas["msg"]["msg_insert"] = "La Empresa ha sido correctamente agregado.";
$empresas["msg"]["msg_update"] = "La Empresa ha sido correctamente actualizado.";
$empresas["msg"]["msg_delete"] = "La Empresa ha sido correctamente eliminado.";
$empresas["msg"]["msg_get"] = "La Empresa ha sido correctamente obtenido.";
$empresas["msg"]["msg_get_fail"] = "No se encontro Empresa o fue eliminado.";
// Validations
$empresas["imagenesFormato"] = "¡La imagen debe estar en formato PNG!";
$empresas["imagenesPeso"] = "¡La imagen no debe pesar más de 2MB!";
$empresas["imagenesPesoMaximo"] = "Peso máximo de la foto 1MB";
$empresas["certExtensionIncorrect"] = "Extensión del certificado incorrecto";
$empresas["keyFileExtensionIncorrect"] = "Extensión del archivo key incorrecto";
$empresas["pngFileExtensionIncorrect"] = "Solo se permiten imagenes con formato png";
return $empresas;
Creamos el siguiente directorio para las imagenes, public/images/logo
Creamos el archivo app/databe/migrations/2023-02-14001801_Empresas.php con el siguiente contenido, este nos servirá para crear la tabla
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.