233 lines
7.2 KiB
PHP
Executable File
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;
|
|
|
|
?>
|