<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

	function ReemplazarCadena($Cadena)
	{
		$Regresa=str_replace("&","&amp;",$Cadena);
		$Regresa2=str_replace('"',"&quot",$Cadena);
		$Regresa3=str_replace("<","&lt;",$Regresa2);
		$Regresa4=str_replace(">","&gt;",$Regresa3);
		$Regresa5=str_replace("\"","&apos;",$Regresa4);
		
		return $Regresa5;
	}
	
	function sustituir($Cadena)
	{
		$Regresa=str_replace("\"","&quot",$Cadena);
		$Regresa2=str_replace("&","&amp;",$Regresa);
		$Regresa3=str_replace("<","&lt;",$Regresa2);
		$Regresa4=str_replace(">","&gt;",$Regresa3);
		$Regresa5=str_replace("\"","&apos;",$Regresa4);
		
		return sustituirSaltosFactura($Regresa5);
	}//
	
	#--------------------------------------------------------------------------------------------------#
	#	                                   XML para la Nota de Crédito							       #
	#--------------------------------------------------------------------------------------------------#
	function xmlNotaCredito($configuracion,$cliente,$productos,$sello,$certificado,$fecha,$folio,$cotizacion)
	{
		$fecha			=str_replace(" ","T",$fecha);
		$sello			=str_replace(" ","",$sello);
		$certificado	=str_replace(" ","",$certificado);
		
		#$subTotal=$cotizacion->subTotal-(($cotizacion->descuento)*$cotizacion->subTotal);
		#$iva=$subTotal*$cotizacion->iva;
		
		$subTotal		=0;
		$total			=0;
		$iva			=$cotizacion->iva;
		$descuento		=$cotizacion->descuento/100;
		
		foreach($productos as $row)
		{
			$subTotal+=$row->devueltos*$row->precio;
		}
			
		$descuento	=$subTotal*$descuento;
		$suma		=$subTotal-$descuento;
		$iva		=$suma*$iva;
		$total		=$suma+$iva;
		
		#$iva=Sprintf("% 01.4f",$iva);
		
		$XMLFacturaComprobante='<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" version="3.2" folio="'.$folio.'" serie="'.$configuracion->serie.'" fecha="'.$fecha.'" sello="'.$sello.'" formaDePago="'.$_POST['formaPago'].'" noCertificado="'.$configuracion->numeroCertificado.'" certificado="'.$certificado.'" condicionesDePago="'.$_POST['condiciones'].'" subTotal="'.Sprintf("% 01.2f",$subTotal).'"';
		
		if($descuento>0)
		{
			$XMLFacturaComprobante.=' descuento="'.Sprintf("% 01.2f",$descuento).'"';
		}
		
		if(strlen($configuracion->numeroCuenta)>0)
		{
			$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		$XMLFacturaComprobante.=' TipoCambio="1.00" Moneda="MXN" total="'.Sprintf("% 01.2f",$total).'" metodoDePago="'.$_POST['metodoPago'].'" tipoDeComprobante="egreso" LugarExpedicion="'.sustituir($configuracion->lugarExpedicion).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor rfc="'.sustituir($configuracion->rfc).'" nombre="'.sustituir($configuracion->nombre).'">';
		#$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'" localidad="'.sustituir($configuracion->localidad).'" municipio="'.$configuracion->municipio.'" estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'"';
		$XMLFacturaEmisor.=strlen($configuracion->localidad)>3?' localidad="'.sustituir($configuracion->localidad).'"':'';
		$XMLFacturaEmisor.=strlen($configuracion->municipio)>3?' municipio="'.$configuracion->municipio.'"':'';
		$XMLFacturaEmisor.=' estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';

		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:RegimenFiscal Regimen="'.sustituir($configuracion->regimenFiscal).'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'  </cfdi:Emisor>';
		
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor rfc="'.sustituir($cliente->rfc).'" nombre="'.sustituir($cliente->empresa).'" >';
		$XMLFacturaReceptor.=chr(13).chr(10).'    <cfdi:Domicilio calle="'.sustituir($cliente->direccion).'" noExterior="'.sustituir($cliente->no_direccion).'" colonia="'.sustituir($cliente->colonia).'" localidad="'.sustituir($cliente->localidad).'" municipio="'.sustituir($cliente->municipio).'" estado="'.sustituir($cliente->estado).'" pais="'.sustituir($cliente->pais).'" codigoPostal="'.sustituir($cliente->cp).'"/>';
		$XMLFacturaReceptor.=chr(13).chr(10).'  </cfdi:Receptor>';
		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		
		$i=0;
		
		#$numeroConceptos=count($Conceptos);
		
		foreach($productos as $row)
		{
			$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.2f",$row->devueltos).'" unidad="'.$row->unidad.'" valorUnitario="'.Sprintf("% 01.2f",$row->precio).'" descripcion="'.sustituir($row->nombre).'" importe="'.Sprintf("% 01.2f",$row->devueltos*$row->precio).'" />';
		}
		
		#for($i=0;$i<$numeroConceptos;$i++)
		#{
		#	$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.4f",$Conceptos[$i]["cantidad"]).'" valorUnitario="'.Sprintf("% 01.4f",$Conceptos[$i]["precio"]).'" descripcion="'.sustituir($Conceptos[$i]["descripcion"]).'" importe="'.Sprintf("% 01.4f",$Conceptos[$i]["importe"]).'" />';
		#}
		
		
		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="'.Sprintf("% 01.2f",$iva).'">';
		#$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Retenciones>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'	     <cfdi:Retencion impuesto="IVA" importe="0.00" />';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Retenciones>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IEPS" tasa="0.00" importe="0.00"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="'.Sprintf("% 01.2f",$cotizacion->iva*100).'" importe="'.Sprintf("% 01.2f",$iva).'"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';
		
		#$XMLSinEspacios = QuitarEspaciosXML($XMLFinal,"B");//preg_replace("/[\n|\r|\n\r]/i"," ",$XMLFinal);
		
		#return $XMLSinEspacios;
		return $XMLFinal;
	}
	
	#--------------------------------------------------------------------------------------------------#
	#	                                    Crear el archivo XML								       #
	#--------------------------------------------------------------------------------------------------#
	function RegresaXMLFormato($configuracion,$cliente,$productos,$sello,$certificado,$fecha,$folio,$cotizacion,$retenciones,$divisa,$refacciones,$mano,$impuestos=null)
	{
		$fecha			= str_replace(" ","T",$fecha);
		$sello			= str_replace(" ","",$sello);
		$certificado	= str_replace(" ","",$certificado);
		
		//LOS TOTALE SERAN DIRECTAMENTE DE LA COTIZACIÓN
		/*$subTotal		= $cotizacion->subTotal;
		$total			= 0;
		$iva			= $cotizacion->iva;
		$descuento		= $cotizacion->descuentoPorcentaje/100;
		
		$descuento		= $subTotal*$descuento;
		$suma			= $subTotal-$descuento;
		$iva			= $suma*$iva;
		$total			= $suma+$iva;*/
		//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		
		//LOS TOTALE SERAN DIRECTAMENTE DE LA COTIZACIÓN
		$subTotal		= $cotizacion->subTotal;
		$total			= $cotizacion->total;
		$iva			= $cotizacion->ivaTotal;
		$descuento		= 0;
		
		
		if($retenciones['importe']>0)
		{
			$total		= $total-$retenciones['importe'];
		}
		
		if($_POST['parcial']==1)
		{
			$subTotal		=$_POST['subTotal'];
			$descuento		=$_POST['descuento'];
			$iva			=$_POST['iva'];
			$total			=$_POST['total'];
		}
		
		$iva			=Sprintf("% 01.2f",$iva);
		
		#$XMLFacturaComprobante='<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3"';
		#$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
		$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd"';
		$XMLFacturaComprobante.=' Sello="'.$sello.'"';
		$XMLFacturaComprobante.=' Certificado="'.$certificado.'"';
		
		#$XMLFacturaComprobante.=' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"';
		
		$XMLFacturaComprobante.=' Version="3.3" Folio="'.$folio.'" Serie="'.$configuracion->serie.'" Fecha="'.$fecha.'" FormaPago="'.$_POST['formaPago'].'" NoCertificado="'.$configuracion->numeroCertificado.'" CondicionesDePago="'.$_POST['condiciones'].'" SubTotal="'.Sprintf("% 01.2f",$subTotal+$cotizacion->descuento).'"';
		
		if($cotizacion->descuento>0)
		{
			$XMLFacturaComprobante.=' Descuento="'.Sprintf("% 01.2f",$cotizacion->descuento).'"';
		}
		
		if(strlen($configuracion->numeroCuenta)>0)
		{
			#$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		#TipoCambio="'.Sprintf("% 01.2f",$divisa->tipoCambio).'"
		$XMLFacturaComprobante.=' Moneda="'.$divisa->clave.'" Total="'.Sprintf("% 01.2f",$total).'" MetodoPago="'.$_POST['metodoPago'].'" TipoDeComprobante="I" LugarExpedicion="'.sustituir($configuracion->codigoPostal).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor Rfc="'.espaciosFactura(sustituir($configuracion->rfc)).'" Nombre="'.sustituir($configuracion->nombre).'" RegimenFiscal="'.sustituir($configuracion->claveRegimen).'"/>';
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor Rfc="'.espaciosFactura(sustituir($cliente->rfc)).'" Nombre="'.sustituir($cliente->empresa).'" UsoCFDI="'.$_POST['usoCfdi'].'"/>';

		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		
		$i		= 0;
		$iva16	= 0;
		$iva0	= 0;

		foreach($productos as $row)
		{
			$producto	= strlen($row->nombre)>0?$row->nombre:$row->producto;
			
			#$precio		=$row->precio-$row->descuento;
			#$importe	=$row->importe-$row->descuento;
			#$importe	=($row->importe-$row->descuento)*(1+($cotizacion->porcentaje/100));
			$importe	= $row->importe-$row->descuento; //BASE PARA IMPUESTOS
			#$precio		= $importe/$row->cantidad;
			$precio		= $row->importe/$row->cantidad;
			
			$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto ClaveProdServ="'.$row->claveProducto.'"'.(strlen(sustituir($row->codigoInterno))>0?' NoIdentificacion="'.sustituir($row->codigoInterno).'"':'').' Cantidad="'.Sprintf("% 01.2f",$row->cantidad).'" ClaveUnidad="'.$row->claveUnidad.'" Unidad="'.$row->unidad.'" ValorUnitario="'.Sprintf("% 01.2f",$precio).'" Descripcion="'.sustituir($row->medida.' '.$producto).'" Importe="'.Sprintf("% 01.2f",$row->importe).'"'.($row->descuento>0?' Descuento="'.Sprintf("% 01.2f",$row->descuento).'"':'').'>';
			$XMLFacturaConceptos.=chr(13).chr(10).'<cfdi:Impuestos>';
			$XMLFacturaConceptos.=chr(13).chr(10).'<cfdi:Traslados>';
			$XMLFacturaConceptos.=chr(13).chr(10).'<cfdi:Traslado Base="'.Sprintf("% 01.2f",$importe).'" Impuesto="002" TipoFactor="Tasa" TasaOCuota="'.($row->iva>0?'0.160000':'0.000000').'" Importe="'.Sprintf("% 01.2f",$row->ivaTotal).'"/>';
			$XMLFacturaConceptos.=chr(13).chr(10).'</cfdi:Traslados>';
			$XMLFacturaConceptos.=chr(13).chr(10).'</cfdi:Impuestos>';
			$XMLFacturaConceptos.=chr(13).chr(10).'</cfdi:Concepto>';
			
			/*if($row->ivaTotal>0) $iva16	= 1;
			if($row->ivaTotal==0) $iva0	= 1;*/
			
			if($row->iva>0) $iva16	= 1;
			if($row->iva==0) $iva0	= 1;
		}

		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		//IMPUESTOS
		$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos TotalImpuestosTrasladados="'.Sprintf("% 01.2f",$iva).'">';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
	
		if($iva16==1)
		{
			$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="'.Sprintf("% 01.2f",$iva).'"/>';
		}
		
		if($iva0==1)
		{
			$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.000000" Importe="0.00"/>';
		}
		
		
		
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';
		
		
		/*$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="'.Sprintf("% 01.2f",$iva).'">';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IEPS" tasa="0.00" importe="0.00"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="'.Sprintf("% 01.2f",$cotizacion->iva*100).'" importe="'.Sprintf("% 01.2f",$iva).'"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';*/
		
		$retencion="";
		
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).$retencion.'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';

		return $XMLFinal;
	}
	
	
	function facturaGlobal111($configuracion,$cliente,$sello,$certificado,$fecha,$folio,$productos)
	{
		$fecha			=str_replace(" ","T",$fecha);
		$sello			=str_replace(" ","",$sello);
		$certificado	=str_replace(" ","",$certificado);

		#$iva			=Sprintf("% 01.2f",$iva);
		
		#$XMLFacturaComprobante='<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3"';
		$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
		$XMLFacturaComprobante.=' sello="'.$sello.'"';
		$XMLFacturaComprobante.=' certificado="'.$certificado.'"';
		
		$XMLFacturaComprobante.=' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"';
		
		$XMLFacturaComprobante.=' version="3.2" folio="'.$folio.'" serie="'.$configuracion->serie.'" fecha="'.$fecha.'" formaDePago="'.$_POST['txtFormaPago'].'" noCertificado="'.$configuracion->numeroCertificado.'" condicionesDePago="'.$_POST['txtCondiciones'].'" subTotal="'.Sprintf("% 01.2f",$_POST['txtSubTotal']).'"';

		if(strlen($configuracion->numeroCuenta)>0)
		{
			$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		$XMLFacturaComprobante.=' TipoCambio="1.00" Moneda="MXN" total="'.Sprintf("% 01.2f",$_POST['txtTotal']).'" metodoDePago="'.$_POST['txtMetodoPago'].'" tipoDeComprobante="ingreso" LugarExpedicion="'.sustituir($configuracion->lugarExpedicion).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor rfc="'.espaciosFactura(sustituir($configuracion->rfc)).'" nombre="'.sustituir($configuracion->nombre).'">';
		#$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'" localidad="'.sustituir($configuracion->localidad).'" municipio="'.$configuracion->municipio.'" estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'"';
		$XMLFacturaEmisor.=strlen($configuracion->localidad)>3?' localidad="'.sustituir($configuracion->localidad).'"':'';
		$XMLFacturaEmisor.=strlen($configuracion->municipio)>3?' municipio="'.$configuracion->municipio.'"':'';
		$XMLFacturaEmisor.=' estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:RegimenFiscal Regimen="'.sustituir($configuracion->regimenFiscal).'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'  </cfdi:Emisor>';
		
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor rfc="'.espaciosFactura(sustituir($cliente->rfc)).'" nombre="'.sustituir($cliente->empresa).'" >';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'    <cfdi:Domicilio';
		
		if(strlen($cliente->calle)>2)
		{
			$XMLFacturaReceptor.=' calle="'.sustituir($cliente->calle).'"';
		}
		
		if(strlen($cliente->numero)>0)
		{
			$XMLFacturaReceptor.=' noExterior="'.sustituir($cliente->numero).'"';
		}
		
		if(strlen($cliente->colonia)>2)
		{
			$XMLFacturaReceptor.=' colonia="'.sustituir($cliente->colonia).'"';
		}	
		
		if(strlen($cliente->localidad)>2)
		{
			$XMLFacturaReceptor.=' localidad="'.sustituir($cliente->localidad).'"';
		}
		
		if(strlen($cliente->municipio)>2)
		{
			$XMLFacturaReceptor.=' municipio="'.sustituir($cliente->municipio).'"';
		}
		
		if(strlen($cliente->estado)>2)
		{
			$XMLFacturaReceptor.=' estado="'.sustituir($cliente->estado).'"';
		}		
		
		$XMLFacturaReceptor.=' pais="'.sustituir($cliente->pais).'"';
		
		if(strlen($cliente->codigoPostal)==5)
		{
			$XMLFacturaReceptor.=' codigoPostal="'.sustituir($cliente->codigoPostal).'"';
		}
		
		$XMLFacturaReceptor.='/>';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'  </cfdi:Receptor>';
		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		
		$i=0;

		#$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.2f",1).'" unidad="NA" valorUnitario="'.Sprintf("% 01.2f",$_POST['txtSubTotal']).'" descripcion="'.sustituir($_POST['txtConcepto']).'" importe="'.Sprintf("% 01.2f",$_POST['txtSubTotal']).'" />';
		
		foreach($productos as $row)
		{
			$producto	=strlen($row->nombre)>0?$row->nombre:$row->producto;
			
			#$precio		=$row->precio-$row->descuento;
			#$importe	=$row->importe-$row->descuento;
			#$importe	=($row->importe-$row->descuento)*(1+($cotizacion->porcentaje/100));
			$importe	=$row->importe-$row->descuento;
			$precio		=$importe/$row->cantidad;
			
			$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.2f",$row->cantidad).'" unidad="'.$row->unidad.'" valorUnitario="'.Sprintf("% 01.2f",$precio).'" descripcion="'.sustituir($row->medida.' '.$producto).'" importe="'.Sprintf("% 01.2f",$importe).'" />';
		}
		

		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="'.Sprintf("% 01.2f",$_POST['txtIva']).'">';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IEPS" tasa="0.00" importe="0.00"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="'.Sprintf("% 01.2f",$_POST['txtIvaPorcentaje']).'" importe="'.Sprintf("% 01.2f",$_POST['txtIva']).'"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';
		
		
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';

		return $XMLFinal;
	}
	
	function notaCredito1($configuracion,$cliente,$sello,$certificado,$fecha,$folio)
	{
		$fecha			=str_replace(" ","T",$fecha);
		$sello			=str_replace(" ","",$sello);
		$certificado	=str_replace(" ","",$certificado);

		#$iva			=Sprintf("% 01.2f",$iva);
		
		#$XMLFacturaComprobante='<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3"';
		$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
		$XMLFacturaComprobante.=' sello="'.$sello.'"';
		$XMLFacturaComprobante.=' certificado="'.$certificado.'"';
		
		$XMLFacturaComprobante.=' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"';
		
		$XMLFacturaComprobante.=' version="3.2" folio="'.$folio.'" serie="'.$configuracion->serie.'" fecha="'.$fecha.'" formaDePago="'.$_POST['txtFormaPago'].'" noCertificado="'.$configuracion->numeroCertificado.'" condicionesDePago="'.$_POST['txtCondiciones'].'" subTotal="'.Sprintf("% 01.2f",$_POST['txtSubTotalNota']).'"';

		if(strlen($configuracion->numeroCuenta)>0)
		{
			$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		$XMLFacturaComprobante.=' TipoCambio="1.00" Moneda="MXN" total="'.Sprintf("% 01.2f",$_POST['txtTotalNota']).'" metodoDePago="'.$_POST['txtMetodoPago'].'" tipoDeComprobante="egreso" LugarExpedicion="'.sustituir($configuracion->lugarExpedicion).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor rfc="'.espaciosFactura(sustituir($configuracion->rfc)).'" nombre="'.sustituir($configuracion->nombre).'">';
		#$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'" localidad="'.sustituir($configuracion->localidad).'" municipio="'.$configuracion->municipio.'" estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'"';
		$XMLFacturaEmisor.=strlen($configuracion->localidad)>3?' localidad="'.sustituir($configuracion->localidad).'"':'';
		$XMLFacturaEmisor.=strlen($configuracion->municipio)>3?' municipio="'.$configuracion->municipio.'"':'';
		$XMLFacturaEmisor.=' estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:RegimenFiscal Regimen="'.sustituir($configuracion->regimenFiscal).'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'  </cfdi:Emisor>';
		
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor rfc="'.espaciosFactura(sustituir($cliente->rfc)).'" nombre="'.sustituir($cliente->empresa).'" >';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'    <cfdi:Domicilio';
		
		if(strlen($cliente->calle)>2)
		{
			$XMLFacturaReceptor.=' calle="'.sustituir($cliente->calle).'"';
		}
		
		if(strlen($cliente->numero)>0)
		{
			$XMLFacturaReceptor.=' noExterior="'.sustituir($cliente->numero).'"';
		}
		
		if(strlen($cliente->colonia)>2)
		{
			$XMLFacturaReceptor.=' colonia="'.sustituir($cliente->colonia).'"';
		}	
		
		if(strlen($cliente->localidad)>2)
		{
			$XMLFacturaReceptor.=' localidad="'.sustituir($cliente->localidad).'"';
		}
		
		if(strlen($cliente->municipio)>2)
		{
			$XMLFacturaReceptor.=' municipio="'.sustituir($cliente->municipio).'"';
		}
		
		if(strlen($cliente->estado)>2)
		{
			$XMLFacturaReceptor.=' estado="'.sustituir($cliente->estado).'"';
		}		
		
		$XMLFacturaReceptor.=' pais="'.sustituir($cliente->pais).'"';
		
		if(strlen($cliente->codigoPostal)==5)
		{
			$XMLFacturaReceptor.=' codigoPostal="'.sustituir($cliente->codigoPostal).'"';
		}
		
		$XMLFacturaReceptor.='/>';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'  </cfdi:Receptor>';
		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		
		$i=0;

		$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.2f",1).'" unidad="NA" valorUnitario="'.Sprintf("% 01.2f",$_POST['txtSubTotalNota']).'" descripcion="'.sustituir($_POST['txtConceptoNota']).'" importe="'.Sprintf("% 01.2f",$_POST['txtSubTotalNota']).'" />';



		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="'.Sprintf("% 01.2f",$_POST['txtIvaNota']).'">';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IEPS" tasa="0.00" importe="0.00"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="'.Sprintf("% 01.2f",$_POST['txtIvaPorcentajeNota']).'" importe="'.Sprintf("% 01.2f",$_POST['txtIvaNota']).'"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';
		
		
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';

		return $XMLFinal;
	}
	
	#--------------------------------------------------------------------------------------------------#
	#	                                    Crear el archivo XML								       #
	#--------------------------------------------------------------------------------------------------#
	function facturaManual1($configuracion,$cliente,$sello,$certificado,$fecha,$folio,$divisa)
	{
		$fecha			=str_replace(" ","T",$fecha);
		$sello			=str_replace(" ","",$sello);
		$certificado	=str_replace(" ","",$certificado);

		$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
		$XMLFacturaComprobante.=' sello="'.$sello.'"';
		$XMLFacturaComprobante.=' certificado="'.$certificado.'"';
		
		$XMLFacturaComprobante.=' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"';
		
		$XMLFacturaComprobante.=' version="3.2" folio="'.$folio.'" serie="'.$configuracion->serie.'" fecha="'.$fecha.'" formaDePago="'.$_POST['txtFormaPago'].'" noCertificado="'.$configuracion->numeroCertificado.'" condicionesDePago="'.$_POST['txtCondiciones'].'" subTotal="'.Sprintf("% 01.2f",$_POST['txtSubTotal']).'"';
		
		/*if($descuento>0)
		{
			$XMLFacturaComprobante.=' descuento="'.Sprintf("% 01.2f",$descuento).'"';
		}*/
		
		if(strlen($configuracion->numeroCuenta)>0)
		{
			$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		$XMLFacturaComprobante.=' TipoCambio="'.Sprintf("% 01.2f",$divisa->tipoCambio).'" Moneda="'.$divisa->clave.'" total="'.Sprintf("% 01.2f",$_POST['txtTotal']).'" metodoDePago="'.$_POST['txtMetodoPago'].'" tipoDeComprobante="ingreso" LugarExpedicion="'.sustituir($configuracion->lugarExpedicion).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor rfc="'.espaciosFactura(sustituir($configuracion->rfc)).'" nombre="'.sustituir($configuracion->nombre).'">';
		#$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'" localidad="'.sustituir($configuracion->localidad).'" municipio="'.$configuracion->municipio.'" estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'"';
		$XMLFacturaEmisor.=strlen($configuracion->localidad)>3?' localidad="'.sustituir($configuracion->localidad).'"':'';
		$XMLFacturaEmisor.=strlen($configuracion->municipio)>3?' municipio="'.$configuracion->municipio.'"':'';
		$XMLFacturaEmisor.=' estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:RegimenFiscal Regimen="'.sustituir($configuracion->regimenFiscal).'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'  </cfdi:Emisor>';
		
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor rfc="'.espaciosFactura(sustituir($cliente->rfc)).'" nombre="'.sustituir($cliente->empresa).'" >';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'    <cfdi:Domicilio';
		
		if(strlen($cliente->calle)>2)
		{
			$XMLFacturaReceptor.=' calle="'.sustituir($cliente->calle).'"';
		}
		
		if(strlen($cliente->numero)>0)
		{
			$XMLFacturaReceptor.=' noExterior="'.sustituir($cliente->numero).'"';
		}
		
		if(strlen($cliente->colonia)>2)
		{
			$XMLFacturaReceptor.=' colonia="'.sustituir($cliente->colonia).'"';
		}	
		
		if(strlen($cliente->localidad)>2)
		{
			$XMLFacturaReceptor.=' localidad="'.sustituir($cliente->localidad).'"';
		}
		
		if(strlen($cliente->municipio)>2)
		{
			$XMLFacturaReceptor.=' municipio="'.sustituir($cliente->municipio).'"';
		}
		
		if(strlen($cliente->estado)>2)
		{
			$XMLFacturaReceptor.=' estado="'.sustituir($cliente->estado).'"';
		}		
		
		$XMLFacturaReceptor.=' pais="'.sustituir($cliente->pais).'"';
		
		if(strlen($cliente->codigoPostal)==5)
		{
			$XMLFacturaReceptor.=' codigoPostal="'.sustituir($cliente->codigoPostal).'"';
		}
		
		$XMLFacturaReceptor.='/>';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'  </cfdi:Receptor>';
		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		
		$i=0;
		$numeroProductos	=	$_POST['txtNumeroProductos'];
		
		for($i=1;$i<=$numeroProductos;$i++)
		{
			if(isset($_POST['txtIdConcepto'.$i]))
			{
				$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.2f",$_POST['txtCantidadFactura'.$i]).'" unidad="'.$_POST['txtUnidadFactura'.$i].'" valorUnitario="'.Sprintf("% 01.2f",$_POST['txtPrecioFactura'.$i]).'" descripcion="'.$_POST['txtConceptoFactura'.$i].'" importe="'.Sprintf("% 01.2f",$_POST['txtImporteFactura'.$i]).'" />';
			}
		}

		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="'.Sprintf("% 01.2f",$_POST['txtIva']).'">';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="'.Sprintf("% 01.2f",$_POST['txtIvaPorcentaje']).'" importe="'.Sprintf("% 01.2f",$_POST['txtIva']).'"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';
		
		$retencion="";
		
		/*if($retenciones['importe']>0)
		{
			$retencion.='  <implocal:ImpuestosLocales xmlns:implocal="http://www.sat.gob.mx/implocal" version="1.0" TotaldeRetenciones="'.Sprintf("% 01.2f",$retenciones['importe']).'" TotaldeTraslados="0.00">';
			$retencion.=chr(13).chr(10).'    <implocal:RetencionesLocales ImpLocRetenido="'.$retenciones['nombre'].'" TasadeRetencion="'.Sprintf("% 01.2f",$retenciones['tasa']).'" Importe="'.Sprintf("% 01.2f",$retenciones['importe']).'"/>';
			$retencion.=chr(13).chr(10).'  </implocal:ImpuestosLocales>';
		}*/
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).$retencion.'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';

		return $XMLFinal;
	}
	
	#--------------------------------------------------------------------------------------------------#
	#	                                    Crear el archivo XML de la nómina					       #
	#--------------------------------------------------------------------------------------------------#
	function crearXmlRecibo($configuracion,$empleado,$sello,$certificado,$fecha,$folio,$divisa,$antiguedad,$anios)
	{
		$fecha			=str_replace(" ","T",$fecha);
		$sello			=str_replace(" ","",$sello);
		$certificado	=str_replace(" ","",$certificado);

		$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:nomina12="http://www.sat.gob.mx/nomina12" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
		$XMLFacturaComprobante.=' Sello="'.$sello.'"';
		$XMLFacturaComprobante.=' Certificado="'.$certificado.'"';
		
		$XMLFacturaComprobante.=' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"';
		
		$XMLFacturaComprobante.=' Version="3.3" Folio="'.$folio.'"';
		
		if(strlen($configuracion->serie)>0)
		{
			$XMLFacturaComprobante.=' Serie="'.$configuracion->serie.'"';
		}
		
		$XMLFacturaComprobante.=' Fecha="'.$fecha.'" FormaPago="99" NoCertificado="'.$configuracion->numeroCertificado.'"';
		#$XMLFacturaComprobante.=strlen($_POST['condiciones'])>0?' condicionesDePago="'.$_POST['condiciones'].'"':'';
		$XMLFacturaComprobante.=' SubTotal="'.Sprintf("% 01.2f",$_POST['txtPercepciones']+$_POST['txtOtrosPagos']).'"';
		
		if($_POST['txtDeducciones']>0)
		{
			#$XMLFacturaComprobante.=' descuento="'.Sprintf("% 01.2f",$_POST['txtDeducciones']-$_POST['txtTotalIsr']).'" motivoDescuento="Deducciones nómina"';
			$XMLFacturaComprobante.=' Descuento="'.Sprintf("% 01.2f",$_POST['txtDeducciones']).'"';
		}
		
		if(strlen($configuracion->numeroCuenta)>0)
		{
			#$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		$XMLFacturaComprobante.=' TipoCambio="1" Moneda="'.$divisa->clave.'" Total="'.Sprintf("% 01.2f",$_POST['txtTotales']).'" MetodoPago="PUE" TipoDeComprobante="N" LugarExpedicion="'.sustituir($configuracion->codigoPostal).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor Rfc="'.espaciosFactura(sustituir($configuracion->rfc)).'" Nombre="'.sustituir($configuracion->nombre).'" RegimenFiscal="'.sustituir($configuracion->claveRegimen).'"/>';
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor Rfc="'.espaciosFactura(sustituir($empleado->rfc)).'" Nombre="'.sustituir($empleado->nombre).'" UsoCFDI="P01"/>';

		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto '.($_POST['txtDeducciones']>0?'Descuento="'.Sprintf("% 01.2f",$_POST['txtDeducciones']).'" ':'').'ClaveProdServ="84111505" Cantidad="1" ClaveUnidad="ACT" ValorUnitario="'.Sprintf("% 01.2f",$_POST['txtPercepciones']+$_POST['txtOtrosPagos']).'" Descripcion="'.$_POST['txtConcepto'].'" Importe="'.Sprintf("% 01.2f",$_POST['txtPercepciones']+$_POST['txtOtrosPagos']).'" />';
		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		$totalIsr		=$_POST['txtTotalIsr'];
		
		/*$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="0"';
		$XMLFacturaImpuestos.=$totalIsr>1?' totalImpuestosRetenidos="'.Sprintf("% 01.2f",$totalIsr).'"':'';
		$XMLFacturaImpuestos.='>';
		
		if($totalIsr>0)
		{
			$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Retenciones>';
			$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Retencion impuesto="ISR" importe="'.Sprintf("% 01.2f",$totalIsr).'"/>';
			$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Retenciones>';
		}
		
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="0.00" importe="0.00"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';*/
		
		$XMLFacturaImpuestos='';
		
		#$nomina=chr(13).chr(10)."<cfdi:Complemento>";
		$nomina="";

		$nomina.='  <nomina12:Nomina Version="1.2" TipoNomina="'.$_POST['selectTipoNomina'].'" FechaPago="'.$_POST['txtFechaPago'].'" FechaInicialPago="'.$_POST['txtFechaInicialPago'].'" FechaFinalPago="'.$_POST['txtFechaFinalPago'].'" NumDiasPagados="'.$_POST['txtDiasTrabajados'].'" TotalPercepciones="'.Sprintf("% 01.2f",$_POST['txtPercepciones']).'"';
		
		$nomina.=$_POST['txtDeducciones']>0?' TotalDeducciones="'.Sprintf("% 01.2f",$_POST['txtDeducciones']).'"':'';
		$nomina.=$_POST['txtOtrosPagos']>0?' TotalOtrosPagos="'.Sprintf("% 01.2f",$_POST['txtOtrosPagos']).'"':'';
		
		$nomina.='>';
		
		if(strlen($empleado->registroPatronal)>2)
		{
			$nomina.='<nomina12:Emisor RegistroPatronal="'.$empleado->registroPatronal.'" />';
		}
		
		$nomina.='<nomina12:Receptor';
		
		$nomina.=$empleado->salarioBase>0?' SalarioBaseCotApor="'.Sprintf("% 01.2f",$empleado->salarioBase).'"':'';
		$nomina.=$empleado->salarioDiario>0?' SalarioDiarioIntegrado="'.Sprintf("% 01.2f",$empleado->salarioDiario).'"':'';
		$nomina.=$empleado->idRiesgo>0?' RiesgoPuesto="'.$empleado->idRiesgo.'"':'';
		$nomina.=strlen($empleado->puesto)>1?' Puesto="'.sustituir($empleado->puesto).'"':'';
		$nomina.=strlen($empleado->departamento)>1?' Departamento="'.sustituir($empleado->departamento).'"':'';
		$nomina.=strlen($empleado->numeroSeguridad)>2?' NumSeguridadSocial="'.espaciosFactura(sustituir($empleado->numeroSeguridad)).'"':'';
		$nomina.=' FechaInicioRelLaboral="'.$empleado->fechaInicio.'" Antigüedad="P'.$antiguedad.'W"';
		$nomina.=strlen($empleado->clabe)>8?' CuentaBancaria="'.espaciosFactura(sustituir($empleado->clabe)).'"':'';
		
		if(strlen($empleado->clabe)<18)
		{
			$nomina.=strlen($empleado->claveBanco)>1?' Banco="'.$empleado->claveBanco.'"':'';
		}
		
		$nomina.=strlen($empleado->claveJornada)>1?' TipoJornada="'.$empleado->claveJornada.'"':'';
		#$nomina.=strlen($empleado->claveContrato)>1?' ':'';
		#$nomina.=strlen($empleado->clavePeriodicidad)>1?' ':'';
		
		$nomina.=' TipoRegimen="'.$empleado->claveRegimen.'" TipoContrato="'.$empleado->claveContrato.'" PeriodicidadPago="'.$empleado->clavePeriodicidad.'" NumEmpleado="'.sustituir($empleado->numeroEmpleado).'" Curp="'.espaciosFactura(sustituir($empleado->curp)).'" ClaveEntFed="'.$empleado->estado.'"';
		
		
		if($empleado->subContratacion=='1')
		{
			$nomina.='<nomina12:SubContratacion RfcLabora="'.$empleado->rfcLabora.'"  PorcentajeTiempo="'.$empleado->tiempo.'" />';
			$nomina.='</nomina12:Receptor>';
		}
		else
		{
			$nomina.='/>';
		}

		//PARA LAS PERCEPCIONES
		
		$numeroPercepciones	=$_POST['txtNumeroPercepciones'];
		
		//SACAR LAS INDEMNIZACIONES Y PRIMAS
		$indemnizacion=0;
		for($i=0;$i<$numeroPercepciones;$i++)
		{
			if(isset($_POST['txtTipoPercepcion'.$i]))
			{
				if($_POST['txtTipoPercepcion'.$i]=='022' or $_POST['txtTipoPercepcion'.$i]=='023' or $_POST['txtTipoPercepcion'.$i]=='025')
				{
					$indemnizacion	+= $_POST['txtImporteGravadoPercepcion'.$i]+$_POST['txtImporteExentoPercepcion'.$i];
				}
			}
		}
		
		
		$nomina.=chr(13).chr(10).'    <nomina12:Percepciones TotalGravado="'.Sprintf("% 01.2f",$_POST['txtTotalGravadoPercepciones']).'" TotalExento="'.Sprintf("% 01.2f",$_POST['txtTotalExentoPercepciones']).'" TotalSueldos="'.Sprintf("% 01.2f",($_POST['txtPercepciones'])-$indemnizacion).'"'.($indemnizacion>0?' TotalSeparacionIndemnizacion="'.Sprintf("% 01.2f",$indemnizacion).'"':'').'>';
		
		for($i=0;$i<$numeroPercepciones;$i++)
		{
			if(isset($_POST['txtTipoPercepcion'.$i]))
			{
				if(strlen($_POST['txtTipoPercepcion'.$i])>0 and $_POST['txtOtros'.$i]=='0')
				{
					#if($_POST['txtTipoPercepcion'.$i]!='019') //LAS HORAS EXTRA PENDIENTES
					#{
						$nomina.=chr(13).chr(10).'      <nomina12:Percepcion TipoPercepcion="'.$_POST['txtTipoPercepcion'.$i].'" Clave="'.sustituir($_POST['txtClavePercepcion'.$i]).'" Concepto="'.sustituir($_POST['txtConceptoPercepcion'.$i]).'" ImporteGravado="'.Sprintf("% 01.2f",$_POST['txtImporteGravadoPercepcion'.$i]).'" ImporteExento="'.Sprintf("% 01.2f",$_POST['txtImporteExentoPercepcion'.$i]).'"/>';
					#}
					#else
					#{
						
					#}
					
					
				}
			}
		}
		
		if($indemnizacion>0)
		{
			$nomina.=chr(13).chr(10).'      <nomina12:SeparacionIndemnizacion TotalPagado="'.Sprintf("% 01.2f",$indemnizacion).'" NumAñosServicio="'.$anios.'" UltimoSueldoMensOrd="'.Sprintf("% 01.2f",$empleado->ultimoSueldo).'"/> ';
		}
		
		
		$nomina.=chr(13).chr(10).'    </nomina12:Percepciones>';
		
		//PARA LAS DEDUCCIONES
		
		$numeroDeducciones	=$_POST['txtNumeroDeducciones'];
		
		if($numeroDeducciones>0)
		{
			$otrasDeducciones	= $_POST['txtDeducciones']-$_POST['txtTotalIsr'];
			
			$nomina.=chr(13).chr(10).'    <nomina12:Deducciones'.($otrasDeducciones>0?' TotalOtrasDeducciones="'.Sprintf("% 01.2f",$otrasDeducciones).'"':'').($_POST['txtTotalIsr']>0?' TotalImpuestosRetenidos="'.Sprintf("% 01.2f",$_POST['txtTotalIsr']).'"':'').'>';
			
			for($i=0;$i<$numeroDeducciones;$i++)
			{
				if(isset($_POST['txtTipoDeduccion'.$i]))
				{
					if(strlen($_POST['txtTipoDeduccion'.$i])>0)
					{
						$nomina.=chr(13).chr(10).'      <nomina12:Deduccion TipoDeduccion="'.$_POST['txtTipoDeduccion'.$i].'" Clave="'.($_POST['txtClaveDeduccion'.$i]).'" Concepto="'.sustituir($_POST['txtConceptoDeduccion'.$i]).'" Importe="'.Sprintf("% 01.2f",$_POST['txtImporteGravadoDeduccion'.$i]).'"/>';
					}
				}
			}
			
			$nomina.=chr(13).chr(10).'    </nomina12:Deducciones>';
		}
		
		if($_POST['txtOtrosPagos']>0)
		{
			$nomina .=chr(13).chr(10). '    	<nomina12:OtrosPagos>';

			for($i=0;$i<$numeroPercepciones;$i++)
			{
				if ($_POST['txtOtros'.$i] == "1")
				{
					if ($_POST['txtTipoPercepcion'.$i] != "002")
					{
						$nomina .=chr(13).chr(10). '		<nomina12:OtroPago TipoOtroPago="'.$_POST['txtTipoPercepcion'.$i].'" Importe="'.Sprintf("% 01.2f",$_POST['txtImporteGravadoPercepcion'.$i]).'" Clave="'.$_POST['txtClavePercepcion'.$i].'" Concepto="'.$_POST['txtConceptoPercepcion'.$i].'"/>';
					}
					else
					{
						$nomina .=chr(13).chr(10). '<nomina12:OtroPago TipoOtroPago="'.$_POST['txtTipoPercepcion'.$i].'" Importe="'.Sprintf("% 01.2f",$_POST['txtImporteGravadoPercepcion'.$i]).'" Clave="'.$_POST['txtClavePercepcion'.$i].'" Concepto="'.$_POST['txtConceptoPercepcion'.$i].'">';
						$nomina .=chr(13).chr(10). '<nomina12:SubsidioAlEmpleo SubsidioCausado="'.Sprintf("% 01.2f",$_POST['txtImporteGravadoPercepcion'.$i]).'"/>';
						$nomina .=chr(13).chr(10). '</nomina12:OtroPago>';
					}
				}
			}

		   $nomina.=chr(13).chr(10).'</nomina12:OtrosPagos>';
		}
		
		$nomina.=chr(13).chr(10).'  </nomina12:Nomina>';
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).$nomina.'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';

		return $XMLFinal;
	}
	
	function QuitarEspaciosXML($Texto,$Tipo)
	{
		$Textox="";
		
		switch($Tipo)
		{
			case "A": $Textox=eregi_replace("[\n|\r|\n\r]"," ", $Texto); break;
			case "B": $Textox=preg_replace("/[\n|\r|\n\r]/i"," ", $Texto); break;
		}
		
		return $Textox;
	}

	/*function guardarArchivoXML($Archivo,$XML)
	{
		$fh =fopen($Archivo,'w');
		
		if($fh)
		{
			fwrite($fh,$XML);
			fclose($fh);
			return true;
		}
		else 
		{
			return false;
		}
	}*/

	function openFile($file, $mode, $input) 
	{
		if ($mode == "READ") 
		{
			if (file_exists($file)) 
			{
				$handle = fopen($file, "r");
				$output = fread($handle, filesize($file));
				return $output; // output file text
			} 
			else 
			{
				return false; // failed.
			}
		} 
		elseif ($mode == "WRITE") 
		{
			$handle = fopen($file, "w");
			
			if (!fwrite($handle, $input)) 
			{
				return false; // failed.
			} 
			else 
			{
				return true; //success.
			}
		} 
		elseif($mode == "READ/WRITE") 
		{
			if (file_exists($file) && isset($input)) 
			{
				$handle = fopen($file,"r+");
				$read = fread($handle, filesize($file));
				$data = $read.$input;
				
				if (!fwrite($handle, $data)) 
				{
					return false; // failed.
				} 
				else 
				{
					return true; // success.
				}
			} 
			else 
			{
				return false; // failed.
			}
		} 
		else 
		{
			return false; // failed.
		}
		
		fclose($handle);
	}

	function crearDirectorio($Ruta)
	{
		$band=false;

		if(!file_exists($Ruta))
		{
			$Crear=mkdir($Ruta,0777);
			
			if($Crear)
			{
				chmod($Ruta,0777);
				$Band=true;
			}
		}
		else
		{
			$Band=false;
		}  
		
		return $Band;   
	}

	function rmdirr($dirname)
	{
		// Simple delete for a file
		if (is_file($dirname)) 
		{
			return unlink($dirname); 
		}
		// Loop through the folder
		$dir = dir($dirname);
		while (false !== $entry = $dir->read()) 
		{
			// Skip pointers
			if ($entry == '.' || $entry == '..') 
			{ 
				continue; 
			}
			// Deep delete directories
			if (is_dir("$dirname/$entry")) 
			{
				rmdirr("$dirname/$entry"); }
			else 
			{
				unlink("$dirname/$entry");
			}
		}// Clean up
		$dir->close();
		
		return rmdir($dirname);
	}
	
	function obtenerMetodoPago($metodo)
	{
		$data=array();
		$metodo=trim($metodo);
		switch($metodo)
		{
			case "No identificado":
			$data[0]	= 'NA';
			$data[1]	= 'NA';
			break;
			
			case "99 Otros":
			$data[0]	= '99';
			$data[1]	= '99 Otros';
			break;
			
			
			case "03 Transferencia Electrónica de Fondos":
			$data[0]	= '03';
			$data[1]	= '03 Transferencia Electrónica de Fondos';
			break;
		}
		
		return $data;
	}
	
	function notaCreditoTemporal($sello,$certificado,$fecha,$folio,$factura,$configuracion,$producto)
	{
		$fecha			= str_replace(" ","T",$fecha);
		$sello			= str_replace(" ","",$sello);
		$certificado	= str_replace(" ","",$certificado);
		$metodoPago		= obtenerMetodoPago($factura->metodoPago);

		#$iva			=Sprintf("% 01.2f",$iva);
		
		#$XMLFacturaComprobante='<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3"';
		$XMLFacturaComprobante='<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
		$XMLFacturaComprobante.=' sello="'.$sello.'"';
		$XMLFacturaComprobante.=' certificado="'.$certificado.'"';
		
		$XMLFacturaComprobante.=' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"';
		
		$XMLFacturaComprobante.=' version="3.2" folio="'.$folio.'" serie="'.$configuracion->serie.'" fecha="'.$fecha.'" formaDePago="'.$factura->formaPago.'" noCertificado="'.$configuracion->numeroCertificado.'" condicionesDePago="'.$factura->condicionesPago.'" subTotal="'.Sprintf("% 01.2f",$factura->subTotal).'"';

		if(strlen($configuracion->numeroCuenta)>0)
		{
			$XMLFacturaComprobante.=' NumCtaPago="'.$configuracion->numeroCuenta.'"';
		}
		
		$XMLFacturaComprobante.=' TipoCambio="1.00" Moneda="MXN" total="'.Sprintf("% 01.2f",$factura->total).'" metodoDePago="'.$metodoPago[0].'" tipoDeComprobante="egreso" LugarExpedicion="'.sustituir($configuracion->lugarExpedicion).'">';
		
		$XMLFacturaEmisor=chr(13).chr(10).'  <cfdi:Emisor rfc="'.espaciosFactura(sustituir($configuracion->rfc)).'" nombre="'.sustituir($configuracion->nombre).'">';
		#$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'" localidad="'.sustituir($configuracion->localidad).'" municipio="'.$configuracion->municipio.'" estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:DomicilioFiscal calle="'.sustituir($configuracion->direccion).'" noExterior="'.$configuracion->numero.'" colonia="'.sustituir($configuracion->colonia).'"';
		$XMLFacturaEmisor.=strlen($configuracion->localidad)>3?' localidad="'.sustituir($configuracion->localidad).'"':'';
		$XMLFacturaEmisor.=strlen($configuracion->municipio)>3?' municipio="'.$configuracion->municipio.'"':'';
		$XMLFacturaEmisor.=' estado="'.$configuracion->estado.'" pais="'.$configuracion->pais.'" codigoPostal="'.$configuracion->codigoPostal.'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'    <cfdi:RegimenFiscal Regimen="'.sustituir($configuracion->regimenFiscal).'"/>';
		$XMLFacturaEmisor.=chr(13).chr(10).'  </cfdi:Emisor>';
		
		$XMLFacturaReceptor=chr(13).chr(10).'  <cfdi:Receptor rfc="'.espaciosFactura(sustituir($factura->rfc)).'" nombre="'.sustituir($factura->empresa).'" >';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'    <cfdi:Domicilio';
		
		if(strlen($factura->direccion)>2)
		{
			$XMLFacturaReceptor.=' calle="'.sustituir($factura->direccion).'"';
		}
		
		if(strlen($factura->numero)>0)
		{
			$XMLFacturaReceptor.=' noExterior="'.sustituir($factura->numero).'"';
		}
		
		if(strlen($factura->colonia)>2)
		{
			$XMLFacturaReceptor.=' colonia="'.sustituir($factura->colonia).'"';
		}	
		
		if(strlen($factura->ciudad)>2)
		{
			$XMLFacturaReceptor.=' localidad="'.sustituir($factura->ciudad).'"';
		}
		
		if(strlen($factura->municipio)>2)
		{
			$XMLFacturaReceptor.=' municipio="'.sustituir($factura->municipio).'"';
		}
		
		if(strlen($factura->estado)>2)
		{
			$XMLFacturaReceptor.=' estado="'.sustituir($factura->estado).'"';
		}		
		
		$XMLFacturaReceptor.=' pais="'.sustituir($factura->pais).'"';
		
		if(strlen($factura->codigoPostal)==5)
		{
			$XMLFacturaReceptor.=' codigoPostal="'.sustituir($factura->codigoPostal).'"';
		}
		
		$XMLFacturaReceptor.='/>';
		
		$XMLFacturaReceptor.=chr(13).chr(10).'  </cfdi:Receptor>';
		$XMLFacturaConceptos=chr(13).chr(10).'  <cfdi:Conceptos>';
		
		$i=0;

		$XMLFacturaConceptos.=chr(13).chr(10).'    <cfdi:Concepto cantidad="'.Sprintf("% 01.2f",1).'" unidad="NA" valorUnitario="'.Sprintf("% 01.2f",$producto->precio).'" descripcion="'.sustituir($producto->nombre).'" importe="'.Sprintf("% 01.2f",$producto->importe).'" />';

		$XMLFacturaConceptos.=chr(13).chr(10).'  </cfdi:Conceptos>';
		
		$XMLFacturaImpuestos=chr(13).chr(10).'  <cfdi:Impuestos totalImpuestosTrasladados="'.Sprintf("% 01.2f",$factura->iva*$factura->subTotal).'">';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    <cfdi:Traslados>';
		#$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IEPS" tasa="0.00" importe="0.00"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'      <cfdi:Traslado impuesto="IVA" tasa="'.Sprintf("% 01.2f",$factura->iva*100).'" importe="'.Sprintf("% 01.2f",$factura->iva*$factura->subTotal).'"/>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'    </cfdi:Traslados>';
		$XMLFacturaImpuestos.=chr(13).chr(10).'  </cfdi:Impuestos>';
		
		
		
		$XMLFinal='<?xml version="1.0" encoding="utf-8"?>'.chr(13).chr(10).
		$XMLFacturaComprobante.
		$XMLFacturaEmisor.
		$XMLFacturaReceptor.
		$XMLFacturaConceptos.
		$XMLFacturaImpuestos.chr(13).chr(10).'  <cfdi:Complemento>'.chr(13).chr(10).'  </cfdi:Complemento>'.chr(13).chr(10).'</cfdi:Comprobante>';

		return $XMLFinal;
	}
?>
