FUNCTION Factura

PARAMETERS cIdInvoice,lescontingencia

IF !this.lEnabled
	RETURN
ENDIF


this.lBuzy = .t.

nSegInit = SECONDS()

IF EMPTY(lescontingencia)
	lescontingencia = .F.
ENDIF 

TEXT TO cCmd NOSHOW	
	SELECT 
		i.seriesec, 
		i.caduca, 
		i.date, 
		i.due,
		i.idcustomer,
		i.clavecontingencia,
		i.formapago,
		c.name as cliente,
		c.comercio, 
		c.ruc,
		c.codigo,
		c.tiporuc, 
		c.address, 
		(SELECT address from Invoice_address WHERE id=@cIdInvoice limit 1) as direcc,
		c.phone, 
		c.email,
		c.city,
		i.void, 
		i.autorizacion,
		i.guia, 
		i.subtx, 
		i.subt0, 
		i.tax, 
		i.servicio, 
		i.total, 
		i.discount,
		i.descunit,
		i.moneda, 
		i.ice,
		i.tipo, 
	 	i.serie, 
	 	i.secuencia, 
	 	i.taxpercent, 
	 	i.id, 
	 	i.idvehiculo+0 as idvehiculo,
	 	concat(
	 	" CAM/RAMV: ",veh.camramv,
	 	" MARCA: ",veh.marca, 
	 	" CLASE: ",veh.clase, 
	 	" SUBCLASE: ",veh.subclase, 
	 	" MODELO: ",(select name from modelo where id=veh.idModelo), 
	 	" AŅO: ",veh.year, 
	 	" CHASIS: ",veh.seriechasis, 
	 	" MOTOR: ",veh.seriemotor
	 	) as InfoVeh1,
	 	concat(
	 	" PEDIDO: ",veh.pedido, 	 	
	 	" COMBUSTIBLE: ",veh.combustible, 
	 	" COLOR: ",veh.color, 
	 	" CILINDRAJE: ",veh.cilindraje, 
	 	" CAPACIDAD: ",veh.capacidad, 
	 	" TONELAJE: ",veh.tonelaje, 
	 	" ORIGEN: ",veh.pais
	 	) as InfoVeh2,
	 	s.name as vendedor,
	 	z.name as zona, 
	 	u.name as usuario,
	 	if(i.formapago=11,'Credito','Contado') as sfp,
	 	i.srifp,
	 	np.noteprint,
	 	obs.observ
	 FROM invoice as i LEFT join customer as c ON i.idcustomer=c.id 
	 LEFT join salesman as s ON i.idsalesman = s.id 
	 LEFT join zonas as z ON i.idzona = z.id 
	 LEFT join vehiculos as veh ON i.idvehiculo = veh.id 
	 LEFT join user as u ON i.iduser = u.id 
	 LEFT join invoice_noteprint as np ON i.id = np.id 
	 LEFT join invoice_observ as obs ON i.id = obs.id 
	 WHERE i.id=@cIdInvoice
ENDTEXT

 * nfpago = '20' 

cCmd = STRTRAN(cCmd,"@cIdInvoice",cIdInvoice)


IF oApp.sqlexec(cCmd, 'Cabeza')>0
	
	SELECT cabeza
	
	_civa = '2'	
	_pIva = cabeza.taxPercent/100
	_ctarifa =  ALLTRIM(TRANSFORM(INT(cabeza.taxPercent)))
	
	IF cabeza.taxpercent = 14
		_civa = '3'		
	ENDIF


	cCampoOrden = ' '
	 
	IF oApp.setup('FacturaOrdenada', 'L')
		cordena = oApp.setup('ordenarpor', 'C')
	
		&& codigo nombre cantidad grupo marca proveeedor
		
		cCampoOrden = 'order by item.name'
	
		IF cordena = '01' && codigo
			cCampoOrden = 'order by item.partnumber'
		ENDIF
		
		IF cordena = '03' && cantidad
			cCampoOrden = 'order by item.quantity'
		ENDIF
		
		IF cordena = '04' && grupo
			cCampoOrden = 'order by grupo.name, item.name'
		ENDIF
		
		IF cordena = '05' && brand
			cCampoOrden = 'order by brand.name, item.name'
		ENDIF
		
		IF cordena = '06' && proveedor
			cCampoOrden = 'order by supplier.name, item.name'
		ENDIF
	ENDIF 
	
	
	TEXT TO cCmd NOSHOW TEXTMERGE
		select item.partnumber, 
	           d.quantity, 
	           d.price, 
	           d.precioBase, 
	           item.costo, 
	           d.descunit, 
	           d.factConv, 
	           d.noteunidad,
	           d.liva, 
	           d.iditem+0 as CodigoItem_id, 
			   i.discount/i.subtotal*(d.price-d.descunit) as descuentos, 
			   item.name as item,
			   d.uc,
			   d.bultos,
			   d.unidades,
			   D.LINE,
			   d.ice 
		FROM invoicedet as d 
		inner join invoice as i on d.id=i.id 
		inner join item on d.iditem=item.id
		left join brand on item.idbrand=brand.id
		left join grupo on item.idgrupo=grupo.id
		left join supplier on item.idsupplier=supplier.id
		WHERE i.id=<<cIdInvoice>>  <<cCampoOrden>>
	ENDTEXT
	
	
	oApp.sqlexec(cCmd,'Detalle')
	
	
	oApp.sqlexec('select SUM(quantity*(price-descunit)) AS ice from invoicedet where id=?cIdInvoice and ice>0')
	nBaseICE = ROUND(sqlresult.ice,2)
	
	&&this.cargaautorizacion(Cabeza.autorizacion)		
	

	
	IF cabeza.tipo $ "01"

		This.xml_init()
		
		This.xml_insert('0','<?xml version="1.0" encoding="UTF-8" standalone="yes"?>')
		This.xml_insert('0','<factura version="1.1.0" id="comprobante">')
		
		IF lescontingencia
			cClaveAcceso = cabeza.clavecontingencia
		ELSE 
			cClaveAcceso = '15.05.2013.01.1191724778001.1.001.001.000000004.12345678.1.6'
			cClaveAcceso = ''
			cClaveAcceso = cClaveAcceso + PADL(DAY(Cabeza.date),2,'0')   	&& 99 : dia aņo
			cClaveAcceso = cClaveAcceso + PADL(MONTH(Cabeza.date),2,'0') 	&& 99 : mes
			cClaveAcceso = cClaveAcceso + PADL(YEAR(Cabeza.date),4,'0')  	&& 9999 : 
			cClaveAcceso = cClaveAcceso + '01'								&& 99 : tipo de comprobant
			
			cClaveAcceso = cClaveAcceso + PADL(oApp.cbRUC,13)						&& 999999999999 : RUC
			cClaveAcceso = cClaveAcceso + TRANSFORM(oapp.tipoambiente,"9")  && 9 : ambiente: 1=pruebas, 2=produccion
			cClaveAcceso = cClaveAcceso + SUBSTR(Cabeza.seriesec,1,3)		&& 999 : establecimiento
			cClaveAcceso = cClaveAcceso + SUBSTR(Cabeza.seriesec,4,3)		&& 999 : punto de emision

			cClaveAcceso = cClaveAcceso + PADL(ALLTRIM(SUBSTR(Cabeza.seriesec,8,9)),9,'0')		&& 999 : seuencial
			cClaveAcceso = cClaveAcceso + this.codigonumerico 	        	&& 11900817 : ruc tovacompu
			
			cClaveAcceso = cClaveAcceso + '1'								&& 9 : emision: 1=normal, 2=indisponib.	

			cClaveAcceso = cClaveAcceso + this.gen_dv48(cClaveAcceso)		&& 9 : digito verificador 
		ENDIF 	
		
		crazonrocialpruebas = 'PRUEBAS SERVICIO DE RENTAS INTERNAS'
		This.xml_insert('0','<infoTributaria>',1)
			This.xml_insert('1',This.xml_str('ambiente',TRANSFORM(oapp.tipoambiente,"9")),2)
			This.xml_insert('1',This.xml_str('tipoEmision',IIF(lescontingencia,'2','1')),2)
			This.xml_insert('1',This.xml_str('razonSocial',IIF(oapp.tipoambiente="1",crazonrocialpruebas,oApp.cbEnterprise)),2)
			This.xml_insert('1',This.xml_str('nombreComercial',oApp.cbcomercio),2)
			This.xml_insert('1',This.xml_str('ruc',oApp.cbRUC),2)
			This.xml_insert('1',This.xml_str('claveAcceso',cClaveAcceso),2)		
			This.xml_insert('1',This.xml_str('codDoc','01'),2)
			This.xml_insert('1',This.xml_str('estab',SUBSTR(Cabeza.seriesec,1,3)),2)
			This.xml_insert('1',This.xml_str('ptoEmi',SUBSTR(Cabeza.seriesec,4,3)),2)
			This.xml_insert('1',This.xml_str('secuencial',PADL(ALLTRIM(SUBSTR(Cabeza.seriesec,8,9)),9,'0')),2)
			This.xml_insert('1',This.xml_str('dirMatriz',ALLTRIM(oApp.cbAddress)),2)
		This.xml_insert('0','</infoTributaria>',1)

		
		nSubt0 = 0
		nSubtx = 0	
		nSubtIce = 0
		nSubtDesc = 0
		nTotalIva = 0
		
		nTotalS = 0
		
		nDec = 2
		
		SELECT Detalle
		GO top
		SCAN ALL
		
			nCant   = ROUND(Detalle.quantity,6)
			nPrecio = ROUND(Detalle.price,6)
			nDesc   = ROUND(detalle.descunit * nCant , nDec)
			
			nPrecioSS = ROUND(Detalle.precioBase,6)
			nPrecioSS = ROUND(Detalle.costo,6)
				
			nSubtDesc = nSubtDesc + nDesc

			_liva   = (Detalle.liva=1)
		
			nice	= ROUND(Detalle.ice, 2)
			
			nTotal  = ROUND(nCant*nPrecio,nDec) - nDesc
			
			nTotalSt  = ROUND(nCant*(nPrecioSS-nPrecio),nDec) 
			
			IF nTotalSt<0
				nTotalSt = 0
			ENDIF
			
			ntotalS = ntotalS + nTotalSt 
			
			
			IF _liva  
				nSubtx = nSubtx + nTotal  
				nIva   = ROUND(nTotal*_piva,nDec)
				nTotalIva = nTotalIva + nIva
			ELSE
				nSubt0 = nSubt0 + nTotal  
			ENDIF
			
			nSubtIce = nSubtIce + nIce  
		
			SELECT Detalle
		ENDSCAN 

		nTotalIva = ROUND(nSubtX*_piva,nDec)
		nTotalGen = nSubt0+nsubtX+nTotalIva+Cabeza.ice+Cabeza.servicio
			
		This.xml_insert('0','<infoFactura>')
			This.xml_insert('1',This.xml_fec('fechaEmision',Cabeza.date),1)
			This.xml_insert('1',This.xml_str('dirEstablecimiento',ALLTRIM(oApp.cbAddressSucursal)),1)

			IF !EMPTY(oapp.cbContribuyenteEspecial)
				This.xml_insert('1',This.xml_str('contribuyenteEspecial',ALLTRIM(oapp.cbContribuyenteEspecial)),1)
			ENDIF 
			
			cRucReceptor = ALLTRIM(Cabeza.cliente)
			
			cTR = ALLTRIM(Cabeza.tiporuc)
			
			IF cTR='19'
				cTR = '09'
			ENDIF
			 
			
			This.xml_insert('1',This.xml_str('obligadoContabilidad',IIF(EMPTY(oApp.cbObligadoCont),'NO','SI')),1)
			This.xml_insert('1',This.xml_str('tipoIdentificacionComprador',cTR),1)
			This.xml_insert('1',This.xml_str('razonSocialComprador',cRucReceptor),1)
			This.xml_insert('1',This.xml_str('identificacionComprador',ALLTRIM(Cabeza.ruc)),1)
			This.xml_insert('1',This.xml_num('totalSinImpuestos',nSubt0+nSubtX,2),1)
			
			IF oApp.lsubsidioventas AND nTotalS>0
				This.xml_insert('1',This.xml_num('totalSubsidio',      nTotalS,6),2)
			ENDIF
			
			This.xml_insert('1',This.xml_num('totalDescuento',nSubtDesc,2),1)
			
			This.xml_insert('1','<totalConImpuestos>',1)
			
			IF Cabeza.subt0>0
				This.xml_insert('1','<totalImpuesto>',2)
				This.xml_insert('1',This.xml_str('codigo','2'),2)
				This.xml_insert('1',This.xml_str('codigoPorcentaje','0'),2)
				This.xml_insert('1',This.xml_num('baseImponible',nSubt0,2),2)
				This.xml_insert('1',This.xml_num('valor',0,2),2)
				This.xml_insert('1','</totalImpuesto>',2)
			ENDIF				
			
			IF Cabeza.tax>0
				This.xml_insert('1','<totalImpuesto>',2)
				This.xml_insert('1',This.xml_str('codigo','2'),2)
				This.xml_insert('1',This.xml_str('codigoPorcentaje',_cIva),2)
				This.xml_insert('1',This.xml_num('baseImponible',nSubtx,2),2)
				This.xml_insert('1',This.xml_num('valor',nTotalIva ,2),2)
				This.xml_insert('1','</totalImpuesto>',2)
			ENDIF
			
			IF Cabeza.ice>0
				This.xml_insert('1','<totalImpuesto>',2)
				This.xml_insert('1',This.xml_str('codigo','3'),2)
				This.xml_insert('1',This.xml_str('codigoPorcentaje','3092'),2)  && el 3011 se cambia de acuerdo al tipo de ice
				This.xml_insert('1',This.xml_num('baseImponible',nBaseICE,2),2)
				This.xml_insert('1',This.xml_num('valor',Cabeza.ice,2),2)
				This.xml_insert('1','</totalImpuesto>',2)
			ENDIF

			This.xml_insert('1','</totalConImpuestos>',1)
			This.xml_insert('1',This.xml_num('propina',Cabeza.servicio,2),1)
			This.xml_insert('1',This.xml_num('importeTotal',nTotalGen,2),1)
			This.xml_insert('1',This.xml_str('moneda','DOLAR'),1)
			
			nPlazo = cabeza.due-Cabeza.date
			
			nfpago = '20'  &&OTROS CONUTILZACION DEL SISTEMA FINANCIERO
			
			csrifp = ALLTRIM(cabeza.srifp)
*!*				IF oapp.sqlexec('select fp,codigo from srifp where codigo=?csrifp')>0
*!*					nfpago = ALLTRIM(sqlresult.codigo)
*!*				ENDIF 
			
			SELECT cabeza
			DO CASE 
				CASE formapago = 06 && dinero elect
					nfpago = '17'
					nPlazo = 0
				CASE formapago = 07 && diferido
					nfpago		= '20'
				CASE formapago = 08 && tarjeta credito
					nfpago = '19'
				CASE formapago = 09 && cheque
					nfpago = '20'
				CASE formapago = 11 && credito
					nfpago		= '20'	
				CASE formapago = 12 && efectivo
					nPlazo = 0					
					csrifp		= cabeza.srifp
					nfpago		= '01'
					IF oapp.sqlexec('select fp,codigo from srifp where codigo=?csrifp')>0
						nfpago = sqlresult.codigo
					ENDIF 
					
			ENDCASE
			
			This.xml_insert('1','<pagos>',1)
				This.xml_insert('1','<pago>',2)
					This.xml_insert('1',This.xml_str('formaPago',nfpago),2)
					This.xml_insert('1',This.xml_num('total',nTotalGen,2),2)
					This.xml_insert('1',This.xml_num('plazo',nPlazo,0),2)
					This.xml_insert('1',This.xml_str('unidadTiempo','dias'),2)
				This.xml_insert('1','</pago>',2)
			This.xml_insert('1','</pagos>',1)
			
			
		This.xml_insert('0','</infoFactura>')
			
		This.xml_insert('0','<detalles>')
		
		cDetOne = ''
		
		SELECT Detalle
		** ordenar
		
		
		GO top
		SCAN ALL
		
			cConcepto = ALLTRIM(Detalle.item)
			cCodigoPrincipal = ALLTRIM(Detalle.partnumber)
			
			IF this.lCodigoItem_id
				cCodigoPrincipal = ALLTRIM(STR(CodigoItem_id))
			ENDIF
			
			nPrecioSS = ROUND(Detalle.precioBase,6)
			nPrecioSS = ROUND(Detalle.costo,6)
			
			oApp.SQLExec('SELECT text1,text2,text3,line,alias,cod_venta,prom,d1,d2 FROM invoiceaux where id=?cIdInvoice;','curLine')
			SELECT curLine       
			LOCATE FOR line=Detalle.line
			cConcepto = ALLTRIM(Detalle.item)
			cText1 = ''
			IF FOUND()
				cText1 = ALLTRIM(curLine.text1)
				IF !EMPTY(cText1)
					cDetOne = cDetOne + ' '+ cText1	
				ENDIF
			ENDIF
				
			
			IF !oApp.vacia(cText1)
				cConcepto = cConcepto + ' '+ cText1
			ENDIF
			
			cAlias = ALLTRIM(curLine.alias)
			IF !oApp.vacia(cAlias)
				cConcepto = cAlias
			ENDIF
			
			
			IF cabeza.idvehiculo>0 AND !oApp.vacia(cText1)
				cConcepto = cText1
			ENDIF
			
			
			cConcepto = ALLTRIM(SUBSTR(cConcepto,1,280))
			
			
			nCant   = ROUND(Detalle.quantity,6)
			nPrecio = ROUND(Detalle.price,6)
	
			nDesc   = ROUND(detalle.descunit * nCant,nDec)
			
			_liva   = (Detalle.liva=1)
			nice	= ROUND(Detalle.ice, 2)
			
			nTotal  = ROUND(nCant*nPrecio,nDec) - nDesc
			
			nIva    = ROUND(nTotal*IIF(_liva,_pIva,0.00), nDec)
			
			This.xml_insert('1','<detalle>',1)
			
			This.xml_insert('11',This.xml_str('codigoPrincipal',cCodigoPrincipal),2)
			This.xml_insert('11',This.xml_str('descripcion',IIF(_liva ,'*','')+cConcepto),2)
			This.xml_insert('11',This.xml_num('cantidad',               nCant,6),2)
			This.xml_insert('11',This.xml_num('precioUnitario',         nPrecio,6),2)
			
			IF oApp.lsubsidioventas AND nPrecioSS>0
				This.xml_insert('11',This.xml_num('precioSinSubsidio',      nPrecioSS,6),2)
			ENDIF
			
			This.xml_insert('11',This.xml_num('descuento',              nDesc,nDec),2)
			This.xml_insert('11',This.xml_num('precioTotalSinImpuesto', nTotal,nDec),2)
	
            This.xml_insert('11','<detallesAdicionales>',2)
            
            	*<detAdicional01 nombre="Seguro">Seguros XYZ</detAdicional01>
            	 *<detAdicional nombre="nombre2" valor="valor2"/>
            
                This.xml_insert('111','<detAdicional nombre="bultos" valor="'+ALLTRIM(TRANSFORM(detalle.bultos))+'"/>',3)
                This.xml_insert('111','<detAdicional nombre="unidades" valor="'+ALLTRIM(TRANSFORM(detalle.unidades))+'"/>',3)
                cNU = ALLTRIM(detalle.noteunidad)
                IF !EMPTY(cNU)
	                This.xml_insert('111','<detAdicional nombre="noteunidad" valor="'+cNU+'"/>',3)
	            ENDIF 
            This.xml_insert('11','</detallesAdicionales>',2)
			
			This.xml_insert('1','<impuestos>',1)
			
			This.xml_insert('11','<impuesto>',2)
			
			IF nice>0
				ntotal = ntotal+nice
			ENDIF 
			
			
			
			This.xml_insert('111',This.xml_str('codigo','2'),3)
			This.xml_insert('111',This.xml_str('codigoPorcentaje',IIF(_liva,_cIva,'0')),3)
			This.xml_insert('111',This.xml_str('tarifa',IIF(_liva,_cTarifa,'0')),3)
			This.xml_insert('111',This.xml_num('baseImponible',  nTotal,nDec),3)
			This.xml_insert('111',This.xml_num('valor',          nIva,nDec),3)
			This.xml_insert('11','</impuesto>',2)
			
			IF nice>0
				This.xml_insert('11','<impuesto>',2)
				This.xml_insert('111',This.xml_str('codigo','3'),3)
				This.xml_insert('111',This.xml_str('codigoPorcentaje','3092'),3)
				This.xml_insert('111',This.xml_str('tarifa','0'),3)
				This.xml_insert('111',This.xml_num('baseImponible',nTotal-nice,nDec),3)
				This.xml_insert('111',This.xml_num('valor',nice,2),3)
				This.xml_insert('11','</impuesto>',2)					
			ENDIF 
			
			This.xml_insert('1','</impuestos>',1)
			
			* falta aqui los productos que tienen ICE
			
			*This.xml_insert('11','<detalleadicional></detalleadicional>')
			
			*This.xml_insert('11','<detAdicional01 nombre="Seguro">Seguros XYZ</detAdicional01>')
			*This.xml_insert('11','<detAdicional02 nombre="Oficina">Portoviejo</detAdicional02>')
			*This.xml_insert('11','<detAdicional03 nombre="Prepago">NO</detAdicional03>')
		
			This.xml_insert('1','</detalle>',1)
			SELECT Detalle
		ENDSCAN 


		This.xml_insert('0','</detalles>')
			
*!*			This.xml_insert('0','<retenciones>')
*!*				This.xml_insert('1','<retencion>',1)
*!*					This.xml_insert('1',This.xml_str('codigo',this.c14),2)
*!*					This.xml_insert('1',This.xml_str('codigoPorcentaje','327'),2)
*!*					This.xml_insert('1',This.xml_str('tarifa','0.00'),2)
*!*					This.xml_insert('1',This.xml_str('valor','0.00'),2)
*!*				This.xml_insert('1','</retencion>',1)
*!*			This.xml_insert('0','</retenciones>')
		
		This.xml_insert('0','<infoAdicional>')
		
	
		This.xml_insert('0','<campoAdicional nombre="pIva">'+_cTarifa+'</campoAdicional>',1)
		
		IF cabeza.idvehiculo>0
			This.xml_insert('0','<campoAdicional nombre="InfoVeh1">'+oApp.xchr(cabeza.InfoVeh1)+'</campoAdicional>',1)
			This.xml_insert('0','<campoAdicional nombre="InfoVeh2">'+oApp.xchr(cabeza.InfoVeh2)+'</campoAdicional>',1)
		ENDIF		
		
		IF !oApp.vacio(oApp.cbWeb)
			This.xml_insert('0','<campoAdicional nombre="Web">'+oApp.xchr(oApp.cbWeb)+'</campoAdicional>',1)
		ENDIF	
		
		IF !oApp.vacio(oApp.cbPhone)
			*This.xml_insert('0','<campoAdicional nombre="Telf_e">'+oApp.xchr(oApp.cbPhone)+'</campoAdicional>',1)
		ENDIF	
		
		IF !oApp.vacio(oApp.cbEmail)
			*This.xml_insert('0','<campoAdicional nombre="email_e">'+oApp.xchr(oApp.cbEmail)+'</campoAdicional>',1)
		ENDIF			
		
		IF !oApp.vacio(cabeza.address)
			*IF !oApp.vacio(cabeza.direcc)
				*This.xml_insert('0','<campoAdicional nombre="Direccion">'+oApp.xchr(cabeza.direcc,300)+'</campoAdicional>',1)
			*ELSE
				This.xml_insert('0','<campoAdicional nombre="Direccion">'+oApp.xchr(cabeza.address,280)+'</campoAdicional>',1)
			*ENDIF
			
		ENDIF
		
		IF !oApp.vacio(cabeza.phone)
			This.xml_insert('0','<campoAdicional nombre="Telefono">'+oApp.xchr(cabeza.phone)+'</campoAdicional>',1)
		ENDIF
		
		IF !oApp.vacio(cabeza.email)
			This.xml_insert('0','<campoAdicional nombre="Email">'+oApp.xchr(cabeza.email)+'</campoAdicional>',1)
		ENDIF
		
		IF !EMPTY(cabeza.due)
			This.xml_insert('0','<campoAdicional nombre="Vencimiento">'+ALLTRIM(DTOC(cabeza.due))+'</campoAdicional>',1)
		ENDIF
	
		cNota = cabeza.noteprint
		IF ISNULL(cNota)
			cNota = ''
		ENDIF
		cNota = ALLTRIM(cNota)
		
		IF !EMPTY(cNota)
			IF AT('.-',cNota)=0
				This.xml_insert('0','<campoAdicional nombre="Nota">'+oApp.xchr(cNota,280)+'</campoAdicional>',1)
			ENDIF
		ENDIF	
		
		cNota = cabeza.observ
		IF ISNULL(cNota)
			cNota = ''
		ENDIF
		cNota = ALLTRIM(cNota)
		
		IF !EMPTY(cNota)
			IF AT('.-',cNota)=0
				This.xml_insert('0','<campoAdicional nombre="Observ">'+oApp.xchr(cNota,280)+'</campoAdicional>',1)
			ENDIF
		ENDIF
		

		IF !EMPTY(cDetOne) AND cabeza.idvehiculo=0
			This.xml_insert('0','<campoAdicional nombre="detalle">'+oApp.xchr(cDetOne,280)+'</campoAdicional>',1)
		ENDIF	


		IF !oApp.vacio(cabeza.city)
			This.xml_insert('0','<campoAdicional nombre="Ciudad">'+oApp.xchr(cabeza.city)+'</campoAdicional>',1)
		ENDIF	
		
		IF !oApp.vacio(cabeza.usuario)
			This.xml_insert('0','<campoAdicional nombre="Usuario">'+oApp.xchr(cabeza.usuario)+'</campoAdicional>',1)
		ENDIF	
		
		IF cabeza.idvehiculo=0
			IF !oApp.vacio(cabeza.vendedor)
				This.xml_insert('0','<campoAdicional nombre="Vendedor">'+oApp.xchr(cabeza.vendedor)+'</campoAdicional>',1)
			ENDIF	
			
			IF !oApp.vacio(cabeza.zona)
				This.xml_insert('0','<campoAdicional nombre="Zona">'+oApp.xchr(cabeza.zona)+'</campoAdicional>',1)
			ENDIF
		ENDIF
		
		
		IF !oApp.vacio(cabeza.comercio)
			This.xml_insert('0','<campoAdicional nombre="Comercio">'+oApp.xchr(cabeza.comercio)+'</campoAdicional>',1)
		ENDIF
		
		IF !oApp.vacio(cabeza.codigo)
			This.xml_insert('0','<campoAdicional nombre="Codigo">'+oApp.xchr(cabeza.codigo)+'</campoAdicional>',1)
		ENDIF

		sFp = 'CONTADO'
		IF !oApp.vacio(cabeza.sfp)
			sFp = cabeza.sfp
		ENDIF

		This.xml_insert('0','<campoAdicional nombre="FormaPago">'+oApp.xchr(sFp,280)+'</campoAdicional>',1)
		
		This.xml_insert('0','</infoAdicional>')
		This.xml_insert('0','</factura>')

		cFileXML     = oApp.rutaDigitalizadosFE+'\generados\'+cClaveAcceso+".XML"
	
		cFileXMLVoid = ALLTRIM(oApp.rutaDigitalizadosFE+"anulados\"+;
			Cabeza.tipo+"-"+SUBSTR(cabeza.serie,1,3)+"-"+SUBSTR(cabeza.serie,4,3)+"-"+cabeza.secuencia)+".XML"
		
		lxml = This.xml_file(IIF(cabeza.void=1,cFileXMLVoid,cFileXML))
		IF lxml
			oApp.sqlexec('update invoice set xmlfe=1 where id=?cIdInvoice')		
				
		ENDIF 
		
		this.lConsFinal = (cRucReceptor='9999999999')
		
		this.Autoriza('Factura Id: ',cClaveAcceso,cIdInvoice,nSegInit,ALLTRIM(cabeza.email))

	ENDIF	
ENDIF

this.lBuzy = .f.

oApp.setView (this.cIdView,IIF(this.lTimeOut,5,2))

ENDFUNC
