Files
ventas_php/modules/facturacion-pdf.php

233 lines
7.2 KiB
PHP
Executable File

<?php
$empresa->AuthUser();
include_once(DOC_ROOT."/classes/override_generator_pdf.class.php");
if($_GET['ver']){
$modo = 'ver';
$comprobanteId = intval($_GET['ver']);
}elseif($_GET['descargar']){
$modo = 'descargar';
$comprobanteId = intval($_GET['descargar']);
}
$fact = $comprobante->GetInfoComprobante($comprobanteId);
$rfcId = $rfc->getRfcActive();
$empresaId = $_SESSION['empresaId'];
$empresa->setEmpresaId($empresaId);
$emp = $empresa->Info();
$cancelado = ($fact['status'] == 0) ? 1 : 0;
$archivo = 'SIGN_'.$empresaId.'_'.$fact['serie'].'_'.$fact['folio'].'.xml';
$enlace = DOC_ROOT.'/empresas/'.$empresaId.'/certificados/'.$rfcId.'/facturas/xml/'.$archivo;
$xml = simplexml_load_file($enlace);
$ns = $xml->getNamespaces(true);
$xml->registerXPathNamespace('c',$ns['cfdi']);
$xml->registerXPathNamespace('t',$ns['tfd']);
$data['sucursalId'] = $fact['sucursalId'];
$data['tiposComprobanteId'] = $fact['tiposComprobanteId'];
$data['observaciones'] = $fact['observaciones'];
$data["comprobante"] = $comprobante->InfoComprobante($data["tiposComprobanteId"]);
//Comprobante
foreach($xml->xpath('//cfdi:Comprobante') as $comp){
$serie['serie'] = $comp['serie'];
$serie['noCertificado'] = $comp['noCertificado'];
$data['folio'] = $comp['folio'];
$fecha = explode('T',$comp['fecha']);
$data['fecha'] = $fecha[0].' '.$fecha[1];
$data['tipoDeComprobante'] = $comp['tipoDeComprobante'];
$data['formaDePago'] = $comp['formaDePago'];
$data['metodoDePago'] = $comp['metodoDePago'];
$data['LugarExpedicion'] = $comp['LugarExpedicion'];
$data['tiposDeMoneda'] = $comp['Moneda'];
$data['tipoDeCambio'] = $comp['TipoCambio'];
$totales['subtotal'] = $comp['subTotal'];
$totales['descuento'] = $comp['descuento'];
$totales['total'] = $comp['total'];
}//foreach
//Retenciones
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Retenciones//cfdi:Retencion') as $ret){
if($ret['impuesto'] == 'IVA')
$totales['retIva'] = floatval($ret['importe']);
elseif($ret['impuesto'] == 'ISR')
$totales['retIsr'] = floatval($ret['importe']);
}
//Traslados
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Traslados//cfdi:Traslado') as $tras){
if($tras['impuesto'] == 'IVA'){
$totales['iva'] = floatval($tras['importe']);
$totales['tasaIva'] = $tras['tasa'];
}elseif($tras['impuesto'] == 'IEPS'){
$totales['ieps'] = floatval($tras['importe']);
$totales['porcentajeIEPS'] = $tras['tasa'];
}
}
//Emisor
$card = array();
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Emisor') as $emisor){
$card['rfc'] = $emisor['rfc'];
$card['razonSocial'] = $emisor['nombre'];
}//foreach
//Emisor > Domicilio Fiscal
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:DomicilioFiscal') as $domFiscal){
$card['calle'] = $domFiscal['calle'];
$card['noExt'] = $domFiscal['noExterior'];
$card['noInt'] = $domFiscal['noInterior'];
$card['colonia'] = $domFiscal['colonia'];
$card['municipio'] = $domFiscal['municipio'];
$card['estado'] = $domFiscal['estado'];
$card['pais'] = $domFiscal['pais'];
$card['cp'] = $domFiscal['codigoPostal'];
}//foreach
//Emisor > Regimen Fiscal
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:RegimenFiscal') as $regimen){
$card['regimenFiscal'] = $regimen['Regimen'];
}//foreach
$data['nodoEmisor']['rfc'] = $card;
//Emisor > Expedido En
$card = array();
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:ExpedidoEn') as $exp){
$card['identificador'] = $data['LugarExpedicion'];
$card['calle'] = $exp['calle'];
$card['noExt'] = $exp['noExterior'];
$card['noInt'] = $exp['noInterior'];
$card['colonia'] = $exp['colonia'];
$card['municipio'] = $exp['municipio'];
$card['estado'] = $exp['estado'];
$card['pais'] = $exp['pais'];
$card['cp'] = $exp['codigoPostal'];
}//foreach
$data['nodoEmisor']['sucursal'] = $card;
$data['nodoEmisor']['sucursal']['nombre'] = $card['identificador'];
$data['nodoEmisor']['sucursal']['sucursalActiva'] = 'no';
//Receptor
$card = array();
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Receptor') as $receptor){
$card['rfc'] = $receptor['rfc'];
$card['nombre'] = $receptor['nombre'];
}//foreach
//Receptor > Domicilio
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Receptor//cfdi:Domicilio') as $dom){
$card['calle'] = $dom['calle'];
$card['noExt'] = $dom['noExterior'];
$card['noInt'] = $dom['noInterior'];
$card['colonia'] = $dom['colonia'];
$card['municipio'] = $dom['municipio'];
$card['estado'] = $dom['estado'];
$card['pais'] = $dom['pais'];
$card['cp'] = $dom['codigoPostal'];
}//foreach
$data['nodoReceptor'] = $card;
$nodoReceptor = $card;
//Conceptos
$conceptos = array();
foreach($xml->xpath('//cfdi:Comprobante//cfdi:Conceptos//cfdi:Concepto') as $con){
$conceptos[] = $con;
}
//TimbreFiscalDigital
foreach($xml->xpath('//t:TimbreFiscalDigital') as $tfd){
$data['UUID'] = $tfd['UUID'];
$data['FechaTimbrado'] = $tfd['FechaTimbrado'];
$data['sello'] = $tfd['selloCFD'];
$data['selloSAT'] = $tfd['selloSAT'];
}//foreach
$sql = 'SELECT serieId FROM serie
WHERE serie = "'.$serie['serie'].'"
AND sucursalId = '.$fact['sucursalId'];
$util->DBSelect($_SESSION['empresaId'])->setQuery($sql);
$serie['serieId'] = $util->DBSelect($_SESSION['empresaId'])->GetSingle();
$infEmp['empresaId'] = $empresaId;
//Cadena Original
switch($emp['version'])
{
case 'auto':
case 'v3':
case 'construc':
include_once(DOC_ROOT.'/classes/cadena_original_v3.class.php');break;
case '2':
include_once(DOC_ROOT.'/classes/cadena_original_v2.class.php');break;
}
$cadena = new Cadena;
$cadenaOriginal = $cadena->BuildCadenaOriginal($data, $serie, $totales, $nodoEmisor, $nodoReceptor, $conceptos);
$data['cadenaOriginal'] = $cadenaOriginal;
//Timbre
$user = USER_PAC;
$pw = PW_PAC;
$pac = new Pac;
$nufa = $infEmp["empresaId"]."_".$serie["serie"]."_".$data["folio"];
$rfcActivo = $rfc->getRfcActive();
$root = DOC_ROOT."/empresas/".$_SESSION["empresaId"]."/certificados/".$rfcActivo."/facturas/xml/";
$root_dos = DOC_ROOT."/empresas/".$_SESSION["empresaId"]."/certificados/".$rfcActivo."/facturas/xml/timbres/";
$nufa_dos = "SIGN_".$_SESSION["empresaId"]."_".$serie["serie"]."_".$data["folio"];
$timbradoFile = $root.$nufa_dos.".xml";
$timbreXml = $pac->ParseTimbre($timbradoFile);
$cadenaOriginalTimbre = $pac->GenerateCadenaOriginalTimbre($timbreXml);
$data['timbreFiscal'] = $cadenaOriginalTimbre;
$override = new Override;
$override->GeneratePDF($data, $serie, $totales, $nodoEmisor, $nodoReceptor, $conceptos, $infEmp, $cancelado);
if($modo == 'ver'){
header('Location: '.WEB_ROOT.'/temp/factura_'.$data['sucursalId'].'.pdf?noCache='.rand());
}elseif($modo == 'descargar'){
$archivo = 'factura_'.$data['sucursalId'].'.pdf';
$nomPdf = $_SESSION['empresaId'].'_'.$serie['serie'].'_'.$data['folio'].'.pdf';
$enlace = WEB_ROOT.'/temp/'.$archivo;
header ("Content-Disposition: attachment; filename=".$nomPdf."\n\n");
header ("Content-Type: text/pdf");
readfile($enlace);
}//elseif
exit;
?>