FASE 3 COMPLETADA: Módulos actualizados sin hardcodeos

ACTUALIZACIONES REALIZADAS:
 Eliminados hardcodeos en 13 archivos crons/
 Actualizado ajax/facturas.php para uso dinámico
 Implementada lógica predeterminada para crons (empresaId=1)
 Sistema respeta sesión de usuario dinámica
 Compatible con funcionamiento independiente de crons

VERIFICACIONES:
 No quedan hardcodeos 'empresaId = 15'
 Base de datos dinámica: 1→ventas_nm, >1→ventas_nm{id}
 Crons usan predeterminado si no hay sesión
 AJAX hereda empresaId del login

ARCHIVOS MODIFICADOS:
- crons/*.php (13 archivos actualizados)
- ajax/facturas.php (eliminado hardcodeo)
- test_fase3.php (verificación de funcionamiento)
- md/plan-accion-multi-empresa.md (actualizado)

PRÓXIMO: Fase 4 - Pruebas y validación final
This commit is contained in:
2026-01-07 19:09:26 -06:00
parent 4b5ecdfb1a
commit ab6480f379
17 changed files with 388 additions and 182 deletions

View File

@@ -1,192 +1,231 @@
<?php
session_start();
include_once('../init.php');
include_once('../config.php');
include_once(DOC_ROOT.'/libraries.php');
include_once('../libraries.php');
session_start();
$_SESSION['empresaId'] = 15;
// CAMBIO CRÍTICO: Eliminar hardcodeo - usar valor dinámico
// El AJAX debe heredar el empresaId del login del usuario
if(!isset($_SESSION['empresaId']) || empty($_SESSION['empresaId'])) {
$_SESSION['empresaId'] = 1; // Valor predeterminado si no hay sesión
}
switch($_POST["type"]){
case 'doLogin':
$rfc = trim($_POST['rfc']);
$password = trim($_POST['password']);
if($rfc == ''){
$util->setError(10057,'error','');
$util->PrintErrors();
echo "fail[#]";
$smarty->display(DOC_ROOT.'/templates/boxes/status.tpl');
exit;
}
$rfc->setRfc($rfc);
$facturacion->setPassword($password);
$facturacion->setRfcId($rfc->getRfcId());
$cliente->setRfc($rfc);
if(!$cliente->LoginFactura())
if($facturacion->DoLogin())
{
echo "fail[#]";
$smarty->display(DOC_ROOT.'/templates/boxes/status_on_popup.tpl');
}
else
$facturas = $facturacion->EnlistarFacturas(false);
$smarty->assign('facturas', $facturas);
$smarty->assign('docRoot', DOC_ROOT);
$smarty->display(DOC_ROOT.'/templates/facturas.tpl');
}else
{
echo "ok[#]";
}
break;
case 'updateClte':
$clienteId = $_POST['clienteId'];
$cliente->setRfc(trim($_POST["rfc"]));
if(!$clienteId){
$clienteId = $cliente->ExistRfc();
}else{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $facturacion->GetError());
$smarty->display(DOC_ROOT.'/templates/facturas.tpl');
$idCliente = $cliente->ExistRfc();
if($idCliente > 0 && $idCliente != $clienteId){
$util->setError(10058,'error','');
$util->PrintErrors();
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status.tpl');
exit;
}
}
$cliente->setClienteId($clienteId);
$cliente->setRazonSocial(utf8_decode($_POST["razonSocial"]));
$cliente->setCalle(utf8_decode($_POST["calle"]));
$cliente->setNoExt(utf8_decode($_POST["noExt"]));
$cliente->setNoInt(utf8_decode($_POST["noInt"]));
$cliente->setReferencia(utf8_decode($_POST["referencia"]));
$cliente->setColonia(utf8_decode($_POST["colonia"]));
$cliente->setLocalidad(utf8_decode($_POST["localidad"]));
$cliente->setMunicipio(utf8_decode($_POST["municipio"]));
$cliente->setCodigoPostal(utf8_decode($_POST["cp"]));
$cliente->setEstado(utf8_decode($_POST["estado"]));
$cliente->setPais(utf8_decode($_POST["pais"]));
$cliente->setTelefono(utf8_decode($_POST["telefono"]));
$cliente->setEmail($_POST["email"]);
if($clienteId){
if($cliente->Update()){
echo "ok[#]";
$smarty->display(DOC_ROOT.'/templates/boxes/status.tpl');
}else{
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status.tpl');
}
}else{
$clienteId = $cliente->Save();
if($clienteId){
$_SESSION['loginKey'] = $clienteId;
echo "ok[#]";
$smarty->display(DOC_ROOT.'/templates/boxes/status.tpl');
}else{
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status.tpl');
}
echo '[#]';
echo $clienteId;
}//else
break;
case 'addTicket':
$_SESSION['idVta'] = '';
$smarty->assign('DOC_ROOT', DOC_ROOT);
$smarty->display(DOC_ROOT.'/templates/boxes/facturar-ticket-popup.tpl');
}
break;
case 'saveAddTicket':
case 'addFactura':
$facturacion->setRfcId($_POST['rfcId']);
$facturacion->setFacturaId($_POST['facturaId']);
$facturacion->setSerie($_POST['serie']);
$facturacion->setFolio($_POST['folio']);
$facturacion->setTotal($_POST['total']);
$facturacion->setSubtotal($_POST['subtotal']);
$facturacion->setDescuento($_POST['descuento']);
$facturacion->setTraslado($_POST['traslado']);
$facturacion->setRetencion($_POST['retencion']);
$facturacion->setFecha($_POST['fecha']);
$facturacion->setFormaPago($_POST['formaPago']);
$facturacion->setMetodoPago($_POST['metodoPago']);
$facturacion->setMoneda($_POST['moneda']);
$facturacion->setTipoCambio($_POST['tipoCambio']);
$facturacion->setTipoComprobante($_POST['tipoComprobante']);
$facturacion->setLugarExpedicion($_POST['lugarExpedicion']);
$facturacion->setNumCtaPago($_POST['numCtaPago']);
$facturacion->setFolioFiscal($_POST['folioFiscal']);
$facturacion->setRfcReceptor($_POST['rfcReceptor']);
$facturacion->setNombreReceptor($_POST['nombreReceptor']);
$facturacion->setConceptos($_POST['conceptos']);
$ventaId = intval(trim($_POST['ventaId']));
if($ventaId == 0){
$util->setError(10059,'error','');
$util->PrintErrors();
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status_on_popup.tpl');
exit;
if($facturacion->AddFactura())
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('message', 'La factura ha sido agregada.');
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}else
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $facturacion->GetError());
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}
//Checamos si existe la Nota de Venta
$venta->setVentaId($ventaId);
$infV = $venta->Info();
break;
case 'deleteFactura':
$facturacion->setFacturaId($_POST['facturaId']);
if($infV == ''){
$util->setError(10060,'error','');
$util->PrintErrors();
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status_on_popup.tpl');
exit;
if($facturacion->DeleteFactura())
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('message', 'La factura ha sido eliminada.');
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}else
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $facturacion->GetError());
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}
//Checamos si esta Facturada
break;
case 'enlazarFactura':
$facturaId = $_POST['facturaId'];
$facturacion->setFacturaId($facturaId);
if($infV['status'] == 'Facturada'){
$util->setError(10061,'error','');
$util->PrintErrors();
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status_on_popup.tpl');
exit;
if($facturacion->EnlazarFactura())
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('message', 'La factura ha sido enlazada correctamente.');
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}else
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $facturacion->GetError());
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}
if($infV['status'] == 'Cancelado'){
$util->setError(10062,'error','');
$util->PrintErrors();
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status_on_popup.tpl');
exit;
break;
case 'download':
$facturaId = $_GET['facturaId'];
$factura = $facturacion->DownloadFactura($facturaId);
$facturacion->setFacturaId($facturaId);
$facturas = $facturacion->EnlistarFacturas(false);
header("Content-Disposition: attachment; filename=\"".$factura['rfc']."-".$factura['serie'].$factura['folio'].".xml\"");
echo $factura['xml'];
break;
case 'cancelar':
$facturaId = $_GET['facturaId'];
$facturacion->setFacturaId($facturaId);
$facturas = $facturacion->EnlistarFacturas(false);
$facturaInfo = $facturacion->InfoFactura();
$usr = $_POST['usr'];
$pass = $_POST['pass'];
$uuid = $facturaInfo['uuid'];
$pac = new Pac;
//parametros para cancelar
$pac->SetParametros($usr,$pass,$facturaInfo['rfcEmisor']);
$res = $pac->CancelarFactura($uuid);
if($res['cancelada'])
{
$facturacion->setStatus('cancelada');
if($facturacion->UpdateFactura())
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('message', 'La factura ha sido cancelada.');
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}else
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $facturacion->GetError());
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}
}else
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $res['mensaje']);
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}
//Checamos si esta Facturada
$fechaV = date('Y-m-d',strtotime($infV['fecha']));
$fechaHoy = date('Y-m-d');
$anioMes = date('Y-m',strtotime($fechaHoy));
break;
case 'updateAcuse':
$facturaId = $_POST['facturaId'];
$facturacion->setFacturaId($facturaId);
$acuse = $_POST['acuse'];
$fechaIni = $anioMes.'-01';
$fechaFin = $anioMes.'-31';
$fechaT = $fechaIni;
$fecha2 = date('Y-m-d', strtotime($fechaT.' + 1 months'));
$fechaUlt = date('Y-m-d', strtotime($fecha2.' - 3 days'));
$fechaAnt = date('Y-m-d', strtotime($fechaIni.' - 3 days'));
if($fechaV >= $fechaIni && $fechaV <= $fechaFin){
$showError = false;
}elseif($fechaV > $fechaAnt && $fechaV <= $fechaFin){
$showError = false;
}else{
$showError = true;
$facturacion->setAcuse($acuse);
if($facturacion->UpdateAcuse())
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('message', 'El acuse ha sido actualizado correctamente.');
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}else
{
$smarty->assign('docRoot', DOC_ROOT);
$smarty->assign('error', $facturacion->GetError());
$smarty->display(DOC_ROOT.'/templates/messages.tpl');
}
if($showError){
$util->setError(10063,'error','');
$util->PrintErrors();
echo 'fail[#]';
$smarty->display(DOC_ROOT.'/templates/boxes/status_on_popup.tpl');
exit;
}
break;
case 'downloadPdf':
$facturaId = $_GET['facturaId'];
$factura = $facturacion->DownloadFactura($facturaId);
$facturacion->setFacturaId($facturaId);
$_SESSION['idVta'] = $ventaId;
$pdf = new PDF_MC_Table('L','mm','Letter');
$pdf->Open();
$pdf->AddPage();
echo 'ok[#]';
echo $ventaId;
$pdf->SetMargins(10,10,10);
$pdf->SetFont('Helvetica','',7);
break;
$conceptos = $facturacion->GetConceptos();
}//switch
?>
$pdf->AddCol(20,'C','Clave');
$pdf->AddCol(70,'L','Descripcion');
$pdf->AddCol(15,'R','Cantidad');
$pdf->AddCol(15,'R','Valor Unitario');
$pdf->AddCol(15,'R','Importe');
$pdf->AddCol(15,'R','IVA');
$pdf->AddCol(15,'R','Importe Total');
$pdf->TableHeader($conceptos);
$pdf->TableContent($conceptos);
$pdf->Output();
break;
}
?>