PARAMETERS cBdd, cTipo, cIdDoc, cSerieSec, cIdView, cMsg

*DO compelec.prg WITH "fss1", "07", "00000000000742", "001008-000000338", "", "1"

SET TALK off
SET STATUS BAR OFF
SET SYSMENU off
SET DELETED on
SET CONFIRM OFF
SET NOTIFY off
SET SAFETY off
SET CENTURY ON
SET DATE TO DMY
SET FIXED OFF
SET DECIMALS TO 6
_SCREEN.Visible=.F.

SET PATH TO proj,json,classes, form,prg,class
*** Clases para el manejo de Web
SET PATH TO ".\classes" ADDITIVE
SET PROCEDURE TO wwHTTP ADDITIVE   
SET PROCEDURE TO wwAPI ADDITIVE
SET PROCEDURE TO wwFTP ADDITIVE
SET PROCEDURE TO wwUtils ADDITIVE
SET PROCEDURE TO classes\wwEval ADDITIVE


DO app.prg WITH cBdd

CREATEOBJECT ('CEClass',cTipo, cIdDoc, cSerieSec, cIdView, cMsg)


DEFINE CLASS CEClass AS CUSTOM 

lEnabled = .F.
lfacturacionelectronica = .f.
codigonumerico = '12345678'  && 

cEst = ''
cAut = ''
cFaFull = ''
cFec = ''
cMsg = ''
nIva = 12
cTarifa = '12'
lBuzy = .f.
cIdView = ''
cTitulo = ''
cTipo = ''
cIdDoc = ''
lTimeOut = .f.

lCodigoItem_id = .f.
lcMsg = '0'

lConsFinal = .F.

c14 = '2'


FUNCTION init (cTipo, cIdDoc, cSerieSec, cIdView, lcMsg)


	this.lcMsg = lcMsg
	
	IF oApp.nIva=14
		this.c14 = '4'
		this.nIva = 14
		this.cTarifa = '14'
	ENDIF
	

	oApp.openDB()

	this.lfacturacionelectronica = oApp.lfacturacionelectronica
	
	this.lCodigoItem_id = oApp.setup('lCodigoItem_id','L')
		
	IF this.lfacturacionelectronica
		IF !EMPTY(oApp.rutaDigitalizadosFE)

			IF !DIRECTORY(oApp.rutadigitalizadosFE)
				MKDIR (oApp.rutadigitalizadosFE)
			ENDIF
			
			
			IF !DIRECTORY(oApp.rutadigitalizadosFE+'\generados\')
				MKDIR (oApp.rutadigitalizadosFE+'\generados\')
			ENDIF
			
			IF !DIRECTORY(oApp.rutadigitalizadosFE+'\anulados\')
				MKDIR (oApp.rutadigitalizadosFE+'\anulados\')
			ENDIF
			
			IF !DIRECTORY(oApp.rutadigitalizadosFE+'\firmados\')
				MKDIR (oApp.rutadigitalizadosFE+'\firmados\')
			ENDIF
			
			IF !DIRECTORY(oApp.rutadigitalizadosFE+'\autorizados\')
				MKDIR (oApp.rutadigitalizadosFE+'\autorizados\')
			ENDIF
			
			IF !DIRECTORY(oApp.rutadigitalizadosFE+'\noautorizados\')
				MKDIR (oApp.rutadigitalizadosFE+'\noautorizados\')
			ENDIF
			this.lEnabled = .T.
		ELSE
			MESSAGEBOX ('Directorio de comprobantes electronicos no definido',63,'Ghost')
		ENDIF
	ELSE
		this.lEnabled = .F.
		*MESSAGEBOX ('Facturacion electrónica no habilitada',63,'Ghost')
	ENDIF
	
		
	this.cTitulo = ''
	this.cTipo = cTipo
	this.cIdView = cIdView
	this.cIdDoc = cIdDoc
	
	cNroDoc = SUBSTR(cSerieSec,1,3)		
	cNroDoc = cNroDoc + '-' + SUBSTR(cSerieSec,4,3)		
	cNroDoc = cNroDoc + '-' + PADL(ALLTRIM(SUBSTR(cSerieSec,8,9)),9,'0')		

	*cClaveAcceso = cClaveAcceso + PADL(ALLTRIM(SUBSTR(Cabeza.seriesec,8,9)),9,'0')		&& 999 : seuencial

	
	
	DO case
	CASE cTipo='01'
		this.cTitulo = 'Factura Nro. '+CHR(13)+ cNroDoc + CHR(13)+CHR(13)
		
		IF lcMsg>'0'
			this.envio_email ()
		ELSE	
			this.factura(cIdDoc)
		ENDIF
			
	CASE cTipo='04'
		this.cTitulo = 'Nota de Crédito Nro. '+CHR(13)+ cNroDoc + CHR(13)+CHR(13)
		IF lcMsg>'0'
			this.envio_email ()
		ELSE
			this.NotaCred(cIdDoc)
		ENDIF
		
		
	CASE cTipo='05'
		this.cTitulo = 'Nota de Débito Nro. '+CHR(13)+ cNroDoc + CHR(13)+CHR(13)
		IF lcMsg>'0'
			this.envio_email ()
		ELSE
			this.NotaDebito(cIdDoc)
		ENDIF
		
	CASE cTipo='06'
		this.cTitulo = 'Guía de Remisión Nro. '+CHR(13)+ cNroDoc + CHR(13)+CHR(13)

		IF lcMsg>'0'
			this.envio_email ()
		ELSE
			this.GuiaRem(cIdDoc)
		ENDIF
		
	CASE cTipo='07'
		this.cTitulo = 'Comp. de Ret.  Nro. '+CHR(13)+ cNroDoc + CHR(13)+CHR(13)
		IF lcMsg>'0'
			this.envio_email ()
		ELSE
			this.CompRet(cIdDoc)
		ENDIF
		
	ENDCASE

	oApp.closeDB()

ENDFUNC	


FUNCTION envio_email ()

	cTabla = 'invoice'
	cRecep = 'Customer'
	cIdC   = 's.idCustomer'
	cAut   = 's.autorizacion'

	cTotal = 's.total'
	cDocType = 'FACTURA'
	IF this.cTipo='04'
		cDocType = 'NOTA DE CREDITO'
		cTabla = 'ndc'
	ENDIF
	IF this.cTipo='05'
		cDocType = 'NOTA DE DEBITO'
		cTabla = 'ndc'
	ENDIF
	IF this.cTipo='06'
		cDocType = 'GUIA DE REMISION'
		cTotal = '0'
		cTabla = 'invoice_grelect'
	ENDIF
	
	IF this.cTipo='07'
		cDocType = 'COMPROBANTE DE RENTECION'
		cRecep = 'Supplier'
		cIdC   = 's.idSupplier'
		cTabla = 'poret'
		cTotal = 's.totalRetAir'
		cAut   = 's.autRetencion1'
	ENDIF
	
	cId = this.cIdDoc
				
	
	TEXT TO cCmd NOSHOW textmerge
		SELECT s.xmlfe, s.clavecontingencia, d.email,d.ruc, d.name, <<cTotal>> as total, <<cAut>> as autorizacion, s.fechaautorizafe FROM 
		<<cTabla>> as s INNER JOIN <<cRecep>> as d 
		ON <<cIdC>>=d.id WHERE s.id=<<cId>>
	ENDTEXT 
	
	&&STRTOFILE(cCmd,'/temp/poret.txt')
	
	IF oApp.sqlexec(cCmd,'curMail')>0
		cCA = ALLTRIM(curMail.clavecontingencia)
		cRuc = ALLTRIM(curMail.ruc)
		cEmail = ALLTRIM(curMail.email)
		cDest = ALLTRIM(curMail.name)
		
		cNumDoc = SUBSTR(cCA,25,15)
		cNumDoc = SUBSTR(cNumDoc,1,3)+'-'+SUBSTR(cNumDoc,4,3)+'-'+SUBSTR(cNumDoc,7)
		
				
		cMark = " "
		IF DATE()<=oApp.dvigenciap AND oApp.lPublicidad
			cMark = ALLTRIM(oApp.setup ('ghost_mark_file', 'C'))
			IF EMPTY(cMark)
				cMark = "visualplus.png"		
			ENDIF
			IF !FILE("publicidad/"+cMark)
				cMark = " "
			ENDIF
		ENDIF
		
		IF !EMPTY(cRuc) AND !EMPTY(cEmail) AND !(cRuc='999')
					
			this.msg_add('Generando pdf y xml ')
			oApp.rUrl("fe2/gen_pdf_xml.php?ca="+cCA)
			this.msg_add('Descargando ')
			
			DECLARE INTEGER URLDownloadToFile IN urlmon.dll;
			INTEGER pCaller, STRING szURL, STRING szFileName,;
			INTEGER dwReserved, INTEGER lpfnCB

			LOCAL lcRemoteFile, lcLocalFile, lcResult

			lcHost = "http://"+oApp.host+"/temp/"

			URLDownloadToFile(0,lcHost+cCa+".xml",cCa+".xml",0,0)
			URLDownloadToFile(0,lcHost+cCa+".pdf",cCa+".pdf",0,0)
			
			oApp.rUrl("fe2/gen_pdf_xml.php?borrar=1&ca="+cCA)
			
TEXT TO cEmailContent TEXTMERGE noshow
<<oApp.rand(6)+1>>
<<oApp.cbComercio>>
<<cEmail>>
<<cDest>>
<<cDocType>> Nro.: <<cNumDoc>> por USD <<TRANSFORM(curMail.total)>>
<<ALLTRIM(curMail.autorizacion)>>
<<DTOC(curMail.fechaautorizafe)>>
<<cMark>>
<<oApp.cbPhone>>
<<oApp.cbEmail>>
<<IIF(EMPTY(oApp.cbWeb),"www.tecsicom.net",ALLTRIM(oApp.cbWeb))>>

ENDTEXT
		
			STRTOFILE(cEmailContent,cCa+'.txt')	
			this.msg_add('Enviando '+cEmail)
			cCmdRun = 'javaw -jar EnviarMail.jar '+cCa
			RUN /n &cCmdRun
			this.msg_add('Ok. '+cDest)
			*DELETE FILE cFileEmail
		ENDIF		
	ENDIF
		
	
	oApp.setView (this.cIdView,2)
ENDFUNC



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, 
		TRIM((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.lsubsidioventas,
	 	i.id, 
	 	i.idvehiculo+0 as idvehiculo,
	 	concat(
	 	" CAM/RAMV: ",TRIM(veh.camramv),
	 	" MARCA: ",TRIM(veh.marca), 
	 	" CLASE: ",TRIM(veh.clase), 
	 	" SUBCLASE: ",TRIM(veh.subclase), 
	 	" MODELO: ",TRIM((select name from modelo where id=veh.idModelo)), 
	 	" AÑO: ",veh.year, 
	 	" CHASIS: ",TRIM(veh.seriechasis), 
	 	" MOTOR: ",TRIM(veh.seriemotor)
	 	) as InfoVeh1,
	 	concat(
	 	" PEDIDO: ",TRIM(veh.pedido), 	 	
	 	" COMBUSTIBLE: ",TRIM(veh.combustible), 
	 	" COLOR: ",TRIM(veh.color), 
	 	" CILINDRAJE: ",TRIM(veh.cilindraje), 
	 	" CAPACIDAD: ",TRIM(veh.capacidad), 
	 	" TONELAJE: ",TRIM(veh.tonelaje), 
	 	" ORIGEN: ",TRIM(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)

*WAIT WINDOW 'Consulta' nowait

*STRTOFILE(cCmd,'\temp\ee.txt')

IF oApp.sqlexec(cCmd, 'Cabeza')>0


*WAIT WINDOW  "termino consulta" nowait
	
	SELECT cabeza
	*brow
	
	_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')
	WAIT WINDOW "detalle" nowait
	
	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="2.0.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 = ROUND(nSubt0+nsubtX+nTotalIva+Cabeza.ice+Cabeza.servicio,2)
			
		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 Cabeza.lsubsidioventas=1 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)
			
			IF oApp.lgasolinera	
				cPlaca = ALLTRIM(cabeza.guia)
				
				IF !EMPTY(cPlaca)
					This.xml_insert('1',This.xml_str('placa',oApp.xchr(cPlaca)),1)
				ENDIF
			ENDIF
			
			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 


			IF EMPTY(csrifp)
			
				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)
			ELSE
				cSriFP = this.fp(csrifp)
				
				This.xml_insert('1','<pagos>',1)
				
				DIMENSION aa[1]
				oApp.explode(cSriFP,@aa,"|")
				DIMENSION afp[1]
				DIMENSION avl[1]
				
				nLenFP = oApp.explode(aa[1],@afp," ")
				nLenK = oApp.explode(aa[2],@avl," ")
				
				FOR _i = 1 TO nLenFP
					This.xml_insert('1','<pago>',2)
						This.xml_insert('1',This.xml_str('formaPago',afp[_i]),2)
						This.xml_insert('1',This.xml_num('total',IIF(nLenK=1,nTotalGen,avl[_i]),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)
				ENDFOR
					
				This.xml_insert('1','</pagos>',1)
				
			ENDIF
			
			
		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 Cabeza.lsubsidioventas=1 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')
		
		WAIT WINDOW "Autorizando ... " nowait
		
		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


FUNCTION Autoriza (cTitulo, cClaveAcceso, cIdDoc, nSegInit, e_mail_dest)

		_cIdDoc = ALLTRIM(STR(VAL(cIdDoc)))
		this.msg_add(cTitulo+_cIdDoc +' <'+cClaveAcceso+'> proceso de fact. elect.')
	
		lAutorizado = .f. 

		IF this.procesa(0,cClaveAcceso,cIdDoc) && firmado

			IF this.procesa(1,cClaveAcceso,cIdDoc)  && enviar 
				IF this.procesa(2,cClaveAcceso,cIdDoc)  && autorizado
					lAutorizado = .t.
					IF !this.lConsFinal
						this.RegistrarCA(cClaveAcceso)
						this.envio_email ()
					ENDIF
				ENDIF
			ENDIF
		ENDIF

		
		cTimeOut = ''
		IF this.lTimeOut 
			cTimeOut = 'SIN REPUESTA'
		ENDIF
		
		this.msg_add(IIF(lAutorizado,'AUTORIZADO: <'+cClaveAcceso+'> en ' + allt(STR(SECONDS()-nSegInit,10,2)) + ' seg', ALLTRIM('NOVEDAD Id: '+_cIdDoc +' '+this.cMsg+' '+cTimeOut)))

		this.lConsFinal = .F.
ENDFUNC


FUNCTION RegistrarCA(cClaveAcceso)

this.msg_add('Registrando clave de acceso '+cClaveAcceso)

cFileXMLFirmado  = oApp.rutaDigitalizadosFE+'/autorizados/'+cClaveAcceso+".XML"

lSubir = FILE(cFileXMLFirmado)

cUrl = "fe2/publicar.php?ca="+cClaveAcceso

IF FILE(cFileXMLFirmado)
	cXML = FILETOSTR(cFileXMLFirmado)
	cRet = oApp.rUrl(cUrl,cXML,'POST')
ENDIF

RETURN cRet != '@@'

ENDFUNC



FUNCTION enviarDoc(cClaveAcceso, e_mail_dest, lmsg)


IF this.lcMsg='2'
	lmsg = .f.
ENDIF

this.msg_add(IIF(lmsg,'Enviando correo...','Registrando clave de acceso '+cClaveAcceso))

cFileXMLFirmado  = oApp.rutaDigitalizadosFE+'/autorizados/'+cClaveAcceso+".XML"

lSubir = FILE(cFileXMLFirmado)

IF this.lcMsg='2'
	cUrl = "fe2/publicar.php?ca="+cClaveAcceso
ELSE
	cUrl = "fe2/maill.php?ca="+cClaveAcceso+'&dest='+e_mail_dest	
ENDIF

IF FILE(cFileXMLFirmado)
	cXML = FILETOSTR(cFileXMLFirmado)
	cRet = oApp.rUrl(cUrl,cXML,'POST')
	
	*strtofile(cRet,'/temp/error.txt')
ELSE
	cRet = oApp.rUrl(cUrl)
ENDIF


RETURN cRet != '@@'

ENDFUNC


FUNCTION checkEstado (cClaveAcceso)
	cFileTxt = cClaveAcceso+'.txt'
	&&cCmdRun = 'java -jar autorizacion.jar "'+cClaveAcceso+'"'
	
	cCmdRun = 'autorizacion.exe "'+cClaveAcceso+'"'
	
	DELETE FILE &cFileTxt
	*RUN /n &cCmdRun
	
	oShell.Run(cCmdRun)
	
	MESSAGEBOX(FILETOSTR(cClaveAcceso),32+4,'VisualFAC')
ENDFUNC


FUNCTION procesa (nTipo, cClaveAcceso, _cIdDoc )
	nSeconds = 0
	iSegCount = 0
	cFileTxt = cClaveAcceso+'.txt'
	cTitulo = ''
	nMaxSeconds = 60
	
	cTipoTabla = SUBSTR(cClaveAcceso,9,2)
	
	cTabla = 'invoice'
	cCampoAut = 'autorizacion'
	
	IF cTipoTabla='04'
		cTabla = 'ndc'
	ENDIF

	IF cTipoTabla='05'
		cTabla = 'ndc'
	ENDIF
	
	IF cTipoTabla='06'
		cTabla = 'invoice_grelect'
	ENDIF
	
	IF cTipoTabla='07'
		
		cTabla = 'poret'
		cCampoAut = 'autRetencion1'
	ENDIF
	
	lRecibido = .f.
	lAutorizado = .f.

	cEst = ''
	
	ciddoc = _cIdDoc 
	
	IF oApp.sqlexec('SELECT estadofe, recibidofe FROM '+ cTabla +' WHERE id=?ciddoc ')>0
		cEst = ALLTRIM(sqlresult.estadofe)
		lRecibido = (sqlresult.recibidofe==1)
		lAutorizado = (ALLTRIM(sqlresult.estadofe)=='AUTORIZADO')
		
	ENDIF	
	
	IF nTipo=0
		cCmdRun = 'javaw -jar fet.jar "'+oApp.cbRUC+'" "'+oApp.rutaDigitalizadosFE+'" "'+cClaveAcceso+'"'  	
		cTitulo = 'Firmando'
	ELSE
		cComando = '4'
		IF nTipo=1
			cTitulo = 'Enviando'
			cComando = '3'
			IF lAutorizado OR lRecibido
				RETURN .T.
			ENDIF
		ENDIF
		IF nTipo=2
			cTitulo = 'Autorizando'
			cComando = '4'
			IF lAutorizado
				RETURN .T.
			ENDIF
		ENDIF
		
		enviojar = "Offline.jar"
		IF oApp.tipoambiente="2"
			enviojar = "envioOffline.jar"
		ENDIF
		
		IF cComando $ '2.4.5'
			TEXT TO cCmdRun NOSHOW TEXTMERGE
		 		javaw -jar autorizacion.jar "<<oApp.rutaDigitalizadosFE>>" "<<cClaveAcceso>>" <<oApp.tipoambiente>> <<cComando>>
		 	ENDTEXT
		ELSE
			TEXT TO cCmdRun NOSHOW TEXTMERGE 
				javaw -jar <<enviojar>> "<<oApp.rutaDigitalizadosFE>>" "<<cClaveAcceso>>"
			ENDTEXT
		ENDIF
	ENDIF
		
	
	DELETE FILE &cFileTxt
	RUN /n &cCmdRun
	
	DO WHILE (.t.)
	
		this.msg_add(cTitulo+'... '+STR(nSeconds)+' seg. ')
		
		
		sFile = ''
		
		IF FILE(cFileTxt)
			sFile = ALLTRIM(FILETOSTR(cFileTxt))
		ENDIF
		
		
		*STRTOFILE(sFile,'/temp/'+cClaveAcceso+TRANSFORM(nTipo)+'.txt')
		
		IF !EMPTY(sFile)	
			*
			DIMENSION aMyArray(1)				
			ALINES(aMyArray, sFile,1)
			this.cEst = UPPER(ALLTRIM(aMyArray(1)))
			this.cAut = ALLTRIM(aMyArray(2))
			this.cfafull    = ALLTRIM(aMyArray(3))
			this.cFec = SUBSTR(cClaveAcceso,5,4)+'-'+SUBSTR(cClaveAcceso,3,2)+'-'+SUBSTR(cClaveAcceso,1,2)
			this.cMsg = ALLTRIM(aMyArray(4))
			
			
			cEst = this.cEst
			cAut = this.cAut
			cFec = this.cFec
			cMsg = this.cMsg
			cFaFull = this.cfafull
			
			DELETE FILE (cFileTxt)
			
			_ca = cClaveAcceso
			
			IF nTipo=0
				
				oApp.sqlexec('UPDATE '+cTabla+' SET estadofe=?cEst, notafe=?cMsg, clavecontingencia=?_ca WHERE id=?ciddoc ')
							 
				RETURN (cEst='OK')
			ENDIF
			
			cMsg = UPPER(ALLTRIM(cMsg))
			
			IF nTipo=1
			
				nRecibida = (cEst=='RECIBIDA' or (cEst=='DEVUELTA' AND cMsg='CLAVE ACCESO REGISTRADA'))
				nRecibida = .t.
				oApp.sqlexec('UPDATE '+cTabla+' SET estadofe=?cEst, notafe=?cMsg, clavecontingencia=?_ca, recibidofe=?nRecibida WHERE id=?ciddoc ')
							 
				RETURN nRecibida
			ENDIF
			
			IF nTipo=2
			
				IF cEst=='NULL' OR ISNULL(cEst) OR EMPTY(cEst)
					this.getFileAut (cFileTxt)
					cEst = this.cEst
					cAut = this.cAut
					cFec = this.cFec
					cMsg = this.cMsg
					cFaFull = this.cfafull
				ENDIF
				
				oApp.sqlexec('UPDATE '+cTabla+' SET '+cCampoAut+' = ?cAut, '+;
							 'fechaautorizafe=?cFec, estadofe=?cEst, notafe=?cMsg, clavecontingencia=?_ca '+;
							 'WHERE id=?ciddoc ')
							 
				cNL = CHR(13)+CHR(10)
				
				
				cFileFir = oApp.rutaDigitalizadosFE+'\firmados\'+cClaveAcceso+".XML"
				
				cComp = FILETOSTR(cFileFir )
				
				IF (cEst='AUTORIZADO')
							 
					xmlfir = '<?xml version="1.0" encoding="UTF-8"?>'+cNL;
	                            + '<autorizacion>'+cNL;
	                            + '    <estado>AUTORIZADO</estado>'+cNL;
	                            + '    <numeroAutorizacion>'   + cAut   + '</numeroAutorizacion>'+cNL;
	                            + '    <fechaAutorizacion>'    + cfafull + '</fechaAutorizacion>'+cNL;
	                            + '    <comprobante><![CDATA[' + cComp  + ']]></comprobante>'+cNL;
	                            + '    <mensajes/>'+cNL;
	                            + '</autorizacion>'+cNL
	                            
	                STRTOFILE(xmlfir,  oApp.rutaDigitalizadosFE+'\autorizados\'+cClaveAcceso+".XML")	 
	                DELETE FILE &cFileFir 
					RETURN .t.
				ENDIF
				RETURN .f.
			ENDIF
			RETURN .f.
		ENDIF		

		IF iSegCount%10=0
			nSeconds = nSeconds + 1
		ENDIF
		iSegCount = iSegCount + 1
		
		IF nSeconds > nMaxSeconds
			
			IF nTipo=1
				this.lTimeOut = .T.
			ENDIF
			
			RETURN .f.
		ENDIF
	ENDDO
	RETURN .f.
ENDFUNC


FUNCTION getFileAut (cFileTxt)
	
	TEXT TO cCmdRun NOSHOW TEXTMERGE
 		javaw -jar autorizacion.jar "<<oApp.rutaDigitalizadosFE>>" "<<cClaveAcceso>>" <<oApp.tipoambiente>> <<cComando>>
 	ENDTEXT	
	
	FOR iCount = 1 TO 5
		
		WAIT WINDOW '' TIMEOUT .3
		
		IF FILE(cFileTxt)
			DELETE FILE &cFileTxt
		ENDIF
		
		RUN /n &cCmdRun

		this.msg_add(cTitulo+'... '+STR(nSeconds)+' seg. ')
		
		sFile = ''
		
		IF FILE(cFileTxt)
			sFile = ALLTRIM(FILETOSTR(cFileTxt))
		ENDIF
		
		DIMENSION aMyArray(1)				
		ALINES(aMyArray, sFile,1)
		
		*WAIT WINDOW aMyArray(1) TIMEOUT 1
		
		this.cEst = ''
		
		IF !EMPTY(sFile) AND !ISNULL(aMyArray(1))
			this.cEst = UPPER(ALLTRIM(aMyArray(1)))
			this.cAut = ALLTRIM(aMyArray(2))
			this.cfafull = ALLTRIM(aMyArray(3))
			this.cFec = SUBSTR(cClaveAcceso,5,4)+'-'+SUBSTR(cClaveAcceso,3,2)+'-'+SUBSTR(cClaveAcceso,1,2)
			this.cMsg = ALLTRIM(aMyArray(4))
				
			DELETE FILE (cFileTxt)
			EXIT
			
		ENDIF
	ENDFOR	
		
ENDFUNC


FUNCTION GuiaRem
PARAMETERS cIdGRem,lescontingencia

IF !this.lEnabled
	RETURN
ENDIF

this.lBuzy = .t.

nSegInit = SECONDS()

IF EMPTY(lescontingencia)
	lescontingencia = .F.
ENDIF 


TEXT TO ccad NOSHOW TEXTMERGE
	SELECT ir.*,
		 i.date, ir.destinatario as cliente, c.ruc, i.idcustomer, 
		 c.tiporuc, ir.direccion as address, c.phone, c.email,
		 i.void,i.id as idfactura,i.seriesec as seriesecfc,
		 c.city as ciudadCliente,
		 i.fechaautorizafe as fechaautofc,i.autorizacion as autorizacionfc,ir.id as idguia 
		 FROM invoice as i LEFT join customer as c ON i.idcustomer=c.id 
		 inner join invoice_grelect as ir ON i.id=ir.idinvoice 
		 WHERE ir.id=<<cIdGRem>> 
ENDTEXT


oapp.sqlexec(ccad,'cabeza')

this.xml_init()

this.xml_insert('0','<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',0)
this.xml_insert('0','<guiaRemision id="comprobante" version="1.1.0">',0)

IF lescontingencia
	cClaveAcceso = cabNCXML.clavecontingencia
ELSE 		
	cClaveAcceso = '15.05.2013.01.1191724778001.1.001.001.000000004.12345678.1.6'
	cClaveAcceso = ''
	cClaveAcceso = cClaveAcceso + PADL(DAY(cabeza.fechapartida),2,'0')   	&& 99 : dia año
	cClaveAcceso = cClaveAcceso + PADL(MONTH(cabeza.fechapartida),2,'0') 	&& 99 : mes
	cClaveAcceso = cClaveAcceso + PADL(YEAR(cabeza.fechapartida),4,'0')  	&& 9999 : 
	cClaveAcceso = cClaveAcceso + '06'								&& 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(cabeza.secuencia,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('1',this.xml_str('tipoEmision','1'),2)

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','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','06'),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)

ctipodoc = '04'
DO CASE 
	CASE LEN(ALLTRIM(Cabeza.ructransporte))=13
		ctipodoc = '04'
	CASE LEN(ALLTRIM(Cabeza.ructransporte))=10
		ctipodoc = '05'
	CASE LEN(ALLTRIM(Cabeza.ructransporte))<10
		ctipodoc = '06'
ENDCASE 
		
this.xml_insert('0','<infoGuiaRemision>')
	this.xml_insert('1',this.xml_str('dirEstablecimiento',ALLTRIM(oApp.cbAddressSucursal)),1)
	this.xml_insert('1',this.xml_str('dirPartida',ALLTRIM(cabeza.partida)),1)
	this.xml_insert('1',this.xml_str('razonSocialTransportista',ALLTRIM(Cabeza.transportista)),1)
	this.xml_insert('1',this.xml_str('tipoIdentificacionTransportista',ctipodoc),1)
	this.xml_insert('1',this.xml_str('rucTransportista',ALLTRIM(Cabeza.ructransporte)),1)
	this.xml_insert('1',this.xml_str('obligadoContabilidad',IIF(EMPTY(oApp.cbObligadoCont),'NO','SI')),1)
	this.xml_insert('1',this.xml_str('fechaIniTransporte',DTOC(Cabeza.fechapartida)),1)
	this.xml_insert('1',this.xml_str('fechaFinTransporte',DTOC(Cabeza.fechallegada)),1)
	this.xml_insert('1',this.xml_str('placa',ALLTRIM(Cabeza.vehiculo)),1)
this.xml_insert('0','</infoGuiaRemision>')

this.xml_insert('0','<destinatarios>')

cdocuemtosustento = SUBSTR(cabeza.seriesecfc,1,3)+'-'+SUBSTR(cabeza.seriesecfc,4,3)+'-'+SUBSTR(cabeza.seriesecfc,8)


this.xml_insert('1','<destinatario>',1)	

cmotivo = ALLTRIM(oApp.setup('cmotivotraslado','C',,,'Venta'))

this.xml_insert('11',this.xml_str('identificacionDestinatario',cabeza.ruc),2)
this.xml_insert('11',this.xml_str('razonSocialDestinatario',cabeza.cliente),2)
this.xml_insert('11',this.xml_str('dirDestinatario',cabeza.address),2)
this.xml_insert('11',this.xml_str('motivoTraslado',cmotivo),2)
IF !EMPTY(cabeza.documentoaduana)
	this.xml_insert('11',this.xml_str('docAduaneroUnico',cabeza.documentoaduana),2)
ENDIF 	
this.xml_insert('11',this.xml_str('codEstabDestino',SUBSTR(cabeza.seriesec,1,3)),2)
this.xml_insert('11',this.xml_str('ruta',cabeza.partida),2)
this.xml_insert('11',this.xml_str('codDocSustento','01'),2)
this.xml_insert('11',this.xml_str('numDocSustento',cdocuemtosustento),2)

IF !EMPTY(cabeza.autorizacionfc)
	this.xml_insert('11',this.xml_str('numAutDocSustento',ALLTRIM(cabeza.autorizacionfc)),2)
	this.xml_insert('11',this.xml_str('fechaEmisionDocSustento',DTOC(cabeza.date)),2)
ENDIF 

cidguia = cabeza.idguia

ccad = 'select item.partnumber, d.quantity,d.enviado,item.name as item '+;
				'FROM invoice_grelectdet as d inner join item on d.iditem=item.id '+;
				'WHERE d.id=?cidguia and enviado>0 ' 
				
IF oApp.sqlexec(ccad,'Detalle')>0
	
	this.xml_insert('0','<detalles>')
	SELECT Detalle
	SCAN ALL 
		nCant   = ROUND(enviado,2)
				
		this.xml_insert('1','<detalle>',1)	
		this.xml_insert('11',this.xml_str('codigoInterno',Detalle.partnumber),2)
		this.xml_insert('11',this.xml_str('descripcion',Detalle.item),2)
		this.xml_insert('11',this.xml_str('cantidad',TRANSFORM(nCant,"9999999999.99")),2)
		this.xml_insert('1','</detalle>',1)
	ENDSCAN 	
	this.xml_insert('0','</detalles>')
ENDIF 
this.xml_insert('0','</destinatario>')
this.xml_insert('0','</destinatarios>')

this.xml_insert('0','<infoAdicional>')		

	This.xml_insert('0','<campoAdicional nombre="pIva">'+this.cTarifa+'</campoAdicional>',1)
	
	IF !EMPTY(ALLTRIM(cabeza.address))
		this.xml_insert('0','<campoAdicional nombre="Direccion">'+ALLTRIM(cabeza.address)+'</campoAdicional>',1)
	ENDIF
				
	IF !EMPTY(ALLTRIM(cabeza.phone))
		this.xml_insert('0','<campoAdicional nombre="Telefono">'+ALLTRIM(cabeza.phone)+'</campoAdicional>',1)
	ENDIF

	IF !EMPTY(ALLTRIM(cabeza.email))
		this.xml_insert('0','<campoAdicional nombre="Email">'+ALLTRIM(cabeza.email)+'</campoAdicional>',1)
	ENDIF
	
	IF !EMPTY(ALLTRIM(cabeza.ciudadCliente))
		this.xml_insert('0','<campoAdicional nombre="CiudadCliente">'+ALLTRIM(cabeza.ciudadCliente)+'</campoAdicional>',1)
	ENDIF
	
	IF !EMPTY(ALLTRIM(cabeza.horapartida))
		this.xml_insert('0','<campoAdicional nombre="HoraPartida">'+ALLTRIM(cabeza.horapartida)+'</campoAdicional>',1)
	ENDIF

	IF !EMPTY(ALLTRIM(cabeza.horallegada))
		this.xml_insert('0','<campoAdicional nombre="HoraLlegada">'+ALLTRIM(cabeza.horallegada)+'</campoAdicional>',1)
	ENDIF

	

	IF !EMPTY(ALLTRIM(cabeza.infoadicionalgr1))
		cinfoa = ALLTRIM(oApp.setup('infoadicionalgr1','C'))
		IF !EMPTY(cinfoa)
			this.xml_insert('0','<campoAdicional nombre="'+cinfoa+'">'+ALLTRIM(cabeza.infoadicionalgr1)+'</campoAdicional>',1)	
		ENDIF 	
						
	ENDIF 
	IF !EMPTY(ALLTRIM(cabeza.infoadicionalgr2))
		cinfoa = ALLTRIM(oApp.setup('infoadicionalgr2','C'))
		IF !EMPTY(cinfoa)
			this.xml_insert('0','<campoAdicional nombre="'+cinfoa+'">'+ALLTRIM(cabeza.infoadicionalgr2)+'</campoAdicional>',1)	
		ENDIF 
						
	ENDIF 
	IF !EMPTY(ALLTRIM(cabeza.infoadicionalgr3))
		cinfoa = ALLTRIM(oApp.setup('infoadicionalgr3','C'))
		IF !EMPTY(cinfoa)
			this.xml_insert('0','<campoAdicional nombre="'+cinfoa+'">'+ALLTRIM(cabeza.infoadicionalgr3)+'</campoAdicional>',1)	
		ENDIF 	
						
	ENDIF 
	IF !EMPTY(ALLTRIM(cabeza.infoadicionalgr4))
		cinfoa = ALLTRIM(oApp.setup('infoadicionalgr4','C'))
		IF !EMPTY(cinfoa)
			this.xml_insert('0','<campoAdicional nombre="'+cinfoa+'">'+ALLTRIM(cabeza.infoadicionalgr4)+'</campoAdicional>',1)	
		ENDIF 				
	ENDIF 

	IF !EMPTY(ALLTRIM(cabeza.infoadicionalgr5))
		cinfoa = ALLTRIM(oApp.setup('infoadicionalgr5','C'))
		IF !EMPTY(cinfoa)
			this.xml_insert('0','<campoAdicional nombre="'+cinfoa+'">'+ALLTRIM(cabeza.infoadicionalgr5)+'</campoAdicional>',1)	
		ENDIF 				
	ENDIF 

	IF !EMPTY(ALLTRIM(cabeza.infoadicionalgr6))
		cinfoa = ALLTRIM(oApp.setup('infoadicionalgr6','C'))
		IF !EMPTY(cinfoa)
			this.xml_insert('0','<campoAdicional nombre="'+cinfoa+'">'+ALLTRIM(cabeza.infoadicionalgr6)+'</campoAdicional>',1)	
		ENDIF 				
	ENDIF 

	
this.xml_insert('0','</infoAdicional>')
this.xml_insert('0','</guiaRemision>')



nvoid = 0 && revisar

cFileXML     = oApp.rutadigitalizadosFE+'\generados\'+cClaveAcceso+".XML"


cFileXMLVoid = ALLTRIM(oApp.rutaDigitalizadosFE+"anulados\"+;
	'06'+"-"+SUBSTR(cabeza.seriesec,1,3)+"-"+SUBSTR(cabeza.seriesec,4,3)+"-"+cabeza.secuencia)+".XML"


this.xml_file(IIF(nvoid=1,cFileXMLVoid,cFileXML))	

lxml = This.xml_file(IIF(nvoid=1,cFileXMLVoid,cFileXML))
IF lxml
	oApp.sqlexec('update invoice_grelect set xmlfe=1 where id=?cIdGRem')
	
ENDIF 



this.Autoriza('Guía De Remisión Id: ',cClaveAcceso,cIdGRem,nSegInit,ALLTRIM(cabeza.email))

this.lBuzy = .f.

oApp.setView (this.cIdView,2)


ENDFUNC



*!*	FUNCTION GuiaRemMultiple

*!*	&&PARAMETERS cidfactura,cidcargamento,ccursorlista,lescontingencia

*!*	PARAMETERS cIdGRem,lescontingencia

*!*	IF !this.lEnabled
*!*		RETURN
*!*	ENDIF

 
*!*	this.lBuzy = .t.

*!*	nSegInit = SECONDS()


*!*	IF EMPTY(lescontingencia)
*!*		lescontingencia = .F.
*!*	ENDIF 

*!*	csecuencia = INT(VAL(cIdGRem))	

*!*	&&SELECT * FROM (ccursorlista) WHERE visto = 1 INTO CURSOR destinatarios
*!*	oApp.SQLExec('SELECT I.seriesec, I.autorizacion, I.date, C.ruc, C.name, C.email, C.address, D.id '+;
*!*		 ' FROM CargamentoDet as D inner join Invoice as I on D.idinvoice=I.id '+;
*!*		 ' INNER JOIN Customer as C on I.idcustomer=C.id WHERE D.id=?cIdGRem','destinatarios')


*!*	&&t	his.cargaautorizacion('')		

*!*	oApp.SQLExec('select * from cargamento where id=?cIdGRem','cabeza')

*!*	this.xml_init()

*!*	this.xml_insert('0','<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',0)
*!*	this.xml_insert('0','<guiaRemision id="comprobante" version="1.1.0">',0)

*!*	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 + '06'								&& 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 + '001'		&& 999 : establecimiento
*!*		cClaveAcceso = cClaveAcceso + '001'		&& 999 : punto de emision
*!*		cClaveAcceso = cClaveAcceso + PADL(csecuencia,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','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','06'),2)
*!*		
*!*		*this.xml_insert('1',this.xml_str('estab','001'),2)
*!*		*this.xml_insert('1',this.xml_str('ptoEmi','001'),2)
*!*		*this.xml_insert('1',this.xml_str('secuencial',PADL(csecuencia,9,'0')),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)

*!*	ctipodoc = '04'
*!*	DO CASE 
*!*		CASE LEN(ALLTRIM(Cabeza.rucchofer))=13
*!*			ctipodoc = '04'
*!*		CASE LEN(ALLTRIM(Cabeza.rucchofer))=10
*!*			ctipodoc = '05'
*!*		CASE LEN(ALLTRIM(Cabeza.rucchofer))<10
*!*			ctipodoc = '06'
*!*	ENDCASE 
*!*			
*!*	this.xml_insert('0','<infoGuiaRemision>')
*!*		this.xml_insert('1',this.xml_str('dirEstablecimiento',ALLTRIM(oApp.cbAddressSucursal)),1)
*!*		
*!*		IF !EMPTY(oApp.cbContribuyenteEspecial)&& preguntar si es del cliente o de la empresa que factura
*!*			This.xml_insert('1',This.xml_str('contribuyenteEspecial',ALLTRIM(oApp.cbContribuyenteEspecial)),2)
*!*		ENDIF

*!*		this.xml_insert('1',this.xml_str('dirPartida',ALLTRIM(cabeza.partida)),1)
*!*		this.xml_insert('1',this.xml_str('razonSocialTransportista',ALLTRIM(Cabeza.chofer)),1)
*!*		this.xml_insert('1',this.xml_str('tipoIdentificacionTransportista',ctipodoc),1)
*!*		this.xml_insert('1',this.xml_str('rucTransportista',ALLTRIM(Cabeza.rucchofer)),1)
*!*		this.xml_insert('1',this.xml_str('obligadoContabilidad',IIF(EMPTY(oApp.cbObligadoCont),'NO','SI')),1)
*!*		this.xml_insert('1',this.xml_fec('fechaIniTransporte',Cabeza.fechainicio),1)
*!*		this.xml_insert('1',this.xml_fec('fechaFinTransporte',Cabeza.fechallegada),1)
*!*		this.xml_insert('1',this.xml_str('placa',ALLTRIM(Cabeza.carro)),1)
*!*	this.xml_insert('0','</infoGuiaRemision>')

*!*	this.xml_insert('0','<destinatarios>')

*!*	SELECT destinatarios
*!*	SCAN 
*!*		cdocuemtosustento = SUBSTR(destinatarios.seriesec,1,3)+'-'+SUBSTR(destinatarios.seriesec,4,3)+'-'+SUBSTR(destinatarios.seriesec,8)
*!*		
*!*		cIdInvoice__fe = id
*!*		
*!*		this.xml_insert('1','<destinatario>',1)	
*!*		
*!*		this.xml_insert('11',this.xml_str('identificacionDestinatario',destinatarios.ruc),2)
*!*		this.xml_insert('11',this.xml_str('razonSocialDestinatario',destinatarios.name),2)
*!*		this.xml_insert('11',this.xml_str('dirDestinatario',destinatarios.address),2)
*!*		this.xml_insert('11',this.xml_str('motivoTraslado',cabeza.nota),2)
*!*		IF !EMPTY(cabeza.documentoaduana)
*!*			this.xml_insert('11',this.xml_str('docAduaneroUnico',cabeza.documentoaduana),2)
*!*		ENDIF 	
*!*		this.xml_insert('11',this.xml_str('codEstabDestino',SUBSTR(destinatarios.seriesec,1,3)),2)
*!*		this.xml_insert('11',this.xml_str('ruta',cabeza.partida),2)
*!*		this.xml_insert('11',this.xml_str('codDocSustento','01'),2)
*!*		this.xml_insert('11',this.xml_str('numDocSustento',cdocuemtosustento),2)
*!*		this.xml_insert('11',this.xml_str('numAutDocSustento',destinatarios.autorizacion),2)
*!*		this.xml_insert('11',this.xml_fec('fechaEmisionDocSustento',destinatarios.date),2)
*!*		
*!*		ccad = 'select item.partnumber, d.quantity,item.name as item '+;
*!*						'FROM invoicedet as d inner join item on d.iditem=item.id '+;
*!*						'WHERE d.id=?cIdInvoice__fe'
*!*						
*!*		IF oApp.SQLExec(ccad,'Detalle')>0
*!*			
*!*			this.xml_insert('0','<detalles>')
*!*			SELECT Detalle
*!*			SCAN ALL 
*!*				nCant   = ROUND(quantity,2)
*!*				this.xml_insert('1','<detalle>',1)	
*!*				this.xml_insert('11',this.xml_str('codigoInterno',Detalle.partnumber),2)
*!*				this.xml_insert('11',this.xml_str('descripcion',Detalle.item),2)
*!*				this.xml_insert('11',this.xml_num('cantidad',nCant,2),2)
*!*				this.xml_insert('1','</detalle>',1)
*!*			ENDSCAN 	
*!*			this.xml_insert('0','</detalles>')
*!*		ENDIF 
*!*		this.xml_insert('0','</destinatario>')
*!*		
*!*		SELECT destinatarios
*!*	ENDSCAN 
*!*	this.xml_insert('0','</destinatarios>')
*!*	this.xml_insert('0','</guiaRemision>')

*!*	nvoid = 0 && revisar

*!*	cFileXML     = oApp.rutadigitalizadosFE+'\generados\'+cClaveAcceso+".XML"

*!*	cFileXMLVoid = ALLTRIM(oApp.rutadigitalizadosFE+"anulados\"+;
*!*		'01'+"-"+'001'+"-"+'001'+"-"+PADL(csecuencia,9,'0'))+".XML"

*!*	this.xml_file(IIF(nvoid=1,cFileXMLVoid,cFileXML))	

*!*	lxml = This.xml_file(IIF(nvoid=1,cFileXMLVoid,cFileXML))
*!*	IF lxml
*!*		oApp.sqlexec('update cargamento set xmlfe=1 where id=?cIdGRem')
*!*		
*!*	ENDIF 


*!*	this.Autoriza('Guía De Remisión Id: ',cClaveAcceso,ALLTRIM(STR(cIdGRem)),nSegInit,ALLTRIM(cabeza.email))

*!*	this.lBuzy = .f.

*!*	oApp.setView (this.cIdView,2)

*!*	ENDFUNC


FUNCTION CompRet
PARAMETERS _cId,lescontingencia



IF !this.lEnabled
	RETURN
ENDIF


this.lBuzy = .t.

nSegInit = SECONDS()

IF EMPTY(lescontingencia)
	lescontingencia = .F.
ENDIF 

IF oApp.SQLExec('SELECT P.*, S.email, S.city, S.esContEsp FROM PoRet as P inner join Supplier as S ON P.idsupplier=S.id WHERE P.id=?_cId ','Cabeza')>0

	&&this.cargaautorizacion(Cabeza.autRetencion1)
	cIdSupplier = Cabeza.idsupplier
	cidpo 		= Cabeza.idpo
	
	cCodSust    = Cabeza.tipoComprobante
	
	oApp.SQLExec('SELECT * FROM Supplier WHERE id=?cIdSupplier','curTempSupRet')
	
	oApp.SQLExec('SELECT * FROM po where id = ?cidpo','curtemppo')
	
	*oApp.SQLExec('SELECT * FROM tSRI_11 WHERE CTR=?Cabeza.codRetAIR','curSRI')

		this.xml_init()

		this.xml_insert('0','<?xml version="1.0" encoding="UTF-8" standalone="yes"?>')
		this.xml_insert('0','<comprobanteRetencion version="1.0.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.fechaEmiRet1),2,'0')   	&& 99 : dia año
			cClaveAcceso = cClaveAcceso + PADL(MONTH(Cabeza.fechaEmiRet1),2,'0') 	&& 99 : mes
			cClaveAcceso = cClaveAcceso + PADL(YEAR(Cabeza.fechaEmiRet1),4,'0')  	&& 9999 : 
			cClaveAcceso = cClaveAcceso + '07'								&& 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.estabRetencion1,1,3)		&& 999 : establecimiento
			cClaveAcceso = cClaveAcceso + SUBSTR(Cabeza.ptoEmiRetencion1,1,3)		&& 999 : punto de emision
			
			cClaveAcceso = cClaveAcceso + PADL(ALLT(Cabeza.secretencion1),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','07'),2)
			this.xml_insert('1',this.xml_str('estab',SUBSTR(Cabeza.estabRetencion1,1,3)),2)
			this.xml_insert('1',this.xml_str('ptoEmi',SUBSTR(Cabeza.ptoEmiRetencion1,1,3)),2)
			this.xml_insert('1',this.xml_str('secuencial',PADL(ALLTRIM(Cabeza.secretencion1),9,'0')),2)
			this.xml_insert('1',this.xml_str('dirMatriz',ALLTRIM(oApp.cbAddress)),2)
		this.xml_insert('0','</infoTributaria>',1)
		
		cperiodofiscal = PADL(month(Cabeza.fechaEmiRet1),2,'0')+'/'+PADL(year(Cabeza.fechaEmiRet1),4)
		ctiporuc = '04'
		DO CASE 
			CASE ALLTRIM(curTempSupRet.tiporuc) = '01'
				ctiporuc = '04'
			CASE ALLTRIM(curTempSupRet.tiporuc) = '02'
				ctiporuc = '05'
			CASE ALLTRIM(curTempSupRet.tiporuc) = '03'
				ctiporuc = '06'
			
		ENDCASE 
		this.xml_insert('0','<infoCompRetencion>')
			this.xml_insert('1',this.xml_fec('fechaEmision',Cabeza.fechaEmiRet1),1)
			this.xml_insert('1',this.xml_str('dirEstablecimiento',ALLTRIM(oApp.cbAddressSucursal)),1)
			
			IF !EMPTY(oApp.cbContribuyenteEspecial)&& preguntar si es del cliente o de la empresa que factura
				This.xml_insert('1',This.xml_str('contribuyenteEspecial',ALLTRIM(oApp.cbContribuyenteEspecial)),1)
			ENDIF
			
			this.xml_insert('1',this.xml_str('obligadoContabilidad',IIF(EMPTY(oApp.cbObligadoCont),'NO','SI')),1)
			this.xml_insert('1',this.xml_str('tipoIdentificacionSujetoRetenido',ctiporuc),1)
			this.xml_insert('1',this.xml_str('razonSocialSujetoRetenido',ALLTRIM(curTempSupRet.name)),1)
			this.xml_insert('1',this.xml_str('identificacionSujetoRetenido',ALLTRIM(curTempSupRet.ruc)),1)
			this.xml_insert('1',this.xml_str('periodoFiscal',cperiodofiscal),1)
		this.xml_insert('0','</infoCompRetencion>')	
		
		this.xml_insert('0','<impuestos>')
			cNumDoc=ALLTRIM(Cabeza.NSC)+Cabeza.secuencial
			
			IF Cabeza.valorRetBienes>0 OR (cabeza.esContEsp=1 AND cabeza.montoIvaBienes>0)
				ccretencion = '7'
				npretencion = '0'
				DO CASE 
					CASE Cabeza.porRetBienes=2
						ccretencion = '1'
						npretencion = '30'
					CASE Cabeza.porRetBienes=3
						ccretencion = '3'
						npretencion = '100'
					CASE Cabeza.porRetBienes=4
						ccretencion = '9'
						npretencion = '10'	
				ENDCASE 
				IF ccretencion!='7'
					this.xml_insert('1','<impuesto>',1)
						this.xml_insert('11',this.xml_str('codigo',"2"),2)&& IVA
						this.xml_insert('11',this.xml_str('codigoRetencion',ccretencion),2)&& 1=30, 2=70, 3=100
						this.xml_insert('11',this.xml_num('baseImponible',Cabeza.montoIvaBienes,2),2)
						this.xml_insert('11',this.xml_str('porcentajeRetener',npretencion),2)			
						this.xml_insert('11',this.xml_num('valorRetenido',Cabeza.valorRetBienes,2),2)
						this.xml_insert('11',this.xml_str('codDocSustento',cCodSust),2)
						this.xml_insert('11',this.xml_str('numDocSustento', cNumDoc),2)
						this.xml_insert('11',this.xml_fec('fechaEmisionDocSustento',curtemppo.date),2)
					this.xml_insert('1','</impuesto>',1)
				ENDIF
			ENDIF
			
			IF Cabeza.valorRetServicios>0 OR (cabeza.esContEsp=1 AND cabeza.montoIvaServicios>0)
				
				ccretencion = '2'
				npretencion = '70'
				DO CASE 
					CASE Cabeza.porRetServicios=1
						IF !EMPTY(Cabeza.tipoivaret)
							ccretencion = '7'
						ELSE
							ccretencion = '8'
						ENDIF 
						npretencion = '0'

					CASE Cabeza.porRetServicios=2
						ccretencion = '2'
						npretencion = '70'
					CASE Cabeza.porRetServicios=3
						ccretencion = '3'
						npretencion = '100'
					CASE Cabeza.porRetServicios=4
						ccretencion = '10'
						npretencion = '20'
					CASE Cabeza.porRetServicios=5
						ccretencion = ''&& colocar cuando haya el codigo en el sri
						npretencion = '50'	
						
				ENDCASE 
				
				this.xml_insert('1','<impuesto>',1)
				this.xml_insert('11',this.xml_str('codigo',"2"),2)&& IVA
				this.xml_insert('11',this.xml_str('codigoRetencion',ccretencion),2)&& 1=30, 2=70, 3= 100
				this.xml_insert('11',this.xml_num('baseImponible',Cabeza.montoIvaServicios,2),2)
				this.xml_insert('11',this.xml_str('porcentajeRetener',npretencion),2)
				this.xml_insert('11',this.xml_num('valorRetenido',Cabeza.valorRetServicios,2),2)
				this.xml_insert('11',this.xml_str('codDocSustento',cCodSust),2)
				this.xml_insert('11',this.xml_str('numDocSustento', cNumDoc),2)
				this.xml_insert('11',this.xml_fec('fechaEmisionDocSustento',curtemppo.date),2)
				this.xml_insert('1','</impuesto>',1)
			ENDIF
			
			IF Cabeza.valretserv100>0 && retencion iva 100%
				this.xml_insert('1','<impuesto>',1)
				this.xml_insert('11',this.xml_str('codigo',"2"),2)&& IVA
				this.xml_insert('11',this.xml_str('codigoRetencion','3'),2)&& 1=30, 2=70, 3= 100
				this.xml_insert('11',this.xml_num('baseImponible',Cabeza.montoIva,2),2)
				this.xml_insert('11',this.xml_str('porcentajeRetener','100'),2)
				this.xml_insert('11',this.xml_num('valorRetenido',Cabeza.valretserv100,2),2)
				this.xml_insert('11',this.xml_str('codDocSustento',cCodSust),2)
				this.xml_insert('11',this.xml_str('numDocSustento', cNumDoc),2)
				this.xml_insert('11',this.xml_fec('fechaEmisionDocSustento',curtemppo.date),2)
				this.xml_insert('1','</impuesto>',1)			
			ENDIF 	
				
			IF oApp.SQLExec('select * from SRI_PORET_DETALLE where id = ?_cId','Detalle')>0
						
				SELECT Detalle
				SCAN ALL
				
					this.xml_insert('1','<impuesto>',1)
					this.xml_insert('11',this.xml_str('codigo',"1"),2)&& RENTA
					this.xml_insert('11',this.xml_str('codigoRetencion',ALLTRIM(detalle.codretair)),2)&& ej.307
					this.xml_insert('11',this.xml_num('baseImponible',Detalle.baseImpAir,2),2)		
					this.xml_insert('11',this.xml_str('porcentajeRetener',TRANSFORM(Detalle.nporcentajeAir,"999.9")),2)	
					this.xml_insert('11',this.xml_num('valorRetenido',Detalle.valRetAir,2),2)
					this.xml_insert('11',this.xml_str('codDocSustento',cCodSust),2)
					this.xml_insert('11',this.xml_str('numDocSustento', cNumDoc),2)
					this.xml_insert('11',this.xml_fec('fechaEmisionDocSustento',curtemppo.date),2)
					this.xml_insert('1','</impuesto>',1)
					SELECT Detalle
				ENDSCAN 
			ENDIF
					
		this.xml_insert('0','</impuestos>')
		this.xml_insert('0','<infoAdicional>')

		This.xml_insert('0','<campoAdicional nombre="pIva">'+this.cTarifa+'</campoAdicional>',1)
				
		IF !oApp.vacio(curTempSupRet.address)
			this.xml_insert('0','<campoAdicional nombre="Direccion">'+oApp.xchr(curTempSupRet.address)+'</campoAdicional>',1)
		ENDIF
		
		IF !oApp.vacio(curTempSupRet.phone)
			this.xml_insert('0','<campoAdicional nombre="Telefono">'+oApp.xchr(curTempSupRet.phone)+'</campoAdicional>',1)
		ENDIF
		
		IF !oApp.vacio(curTempSupRet.email)
			this.xml_insert('0','<campoAdicional nombre="Email">'+oApp.xchr(curTempSupRet.email)+'</campoAdicional>',1)
		ENDIF
		
		
		IF !oApp.vacio(curTempSupRet.city)
			this.xml_insert('0','<campoAdicional nombre="Ciudad">'+oApp.xchr(curTempSupRet.city)+'</campoAdicional>',1)
		ENDIF
		
		this.xml_insert('0','</infoAdicional>')
		this.xml_insert('0','</comprobanteRetencion>')

		cFileXML     = oApp.rutadigitalizadosFE+'\generados\'+cClaveAcceso+".XML"
		
		cFileXMLVoid = ALLTRIM(oApp.rutadigitalizadosFE+"anulados\"+;
			'07'+"-"+SUBSTR(cabeza.NSC,1,3)+"-"+SUBSTR(cabeza.NSC,4,3)+"-"+cabeza.secuencial)+".XML"
		
		
		lxml = This.xml_file(IIF(cabeza.void=1,cFileXMLVoid,cFileXML))
		IF lxml
			oApp.sqlexec('update poret set xmlfe=1 where id=?_cId')
			
		ENDIF 

		this.Autoriza('Comp. Retención Id: ',cClaveAcceso,_cId,nSegInit,ALLTRIM(cabeza.email))	
		
ENDIF

this.lBuzy = .f.

oApp.setView (this.cIdView,2)

ENDFUNC




FUNCTION NotaCred
PARAMETERS cIdNDC,lescontingencia

LOCAL cCmd

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, 
		c.name as cliente, 
		c.comercio,
		c.ruc, 
		c.address,
		c.email,
		c.phone, 
		c.tiporuc,
		c.city, 
		c.codigo,
		i.idcustomer,
		i.clavecontingencia, 
		inv.seriesec as iseriesec, 
		i.subtx, 
		i.subt0,
		i.tax,
		i.total,
		i.moneda,
		i.ice,
		i.tipo,
		i.serie,
		i.secuencia,
		i.void,
		i.autorizacion,
		i.numeroSriFact,
		i.idInvoice,
		inv.date as fechaFact,
		inv.autorizacion as autFact,
		inv.total as tFact,
		i.id,
		i.type_doc,
		s.name as vendedor,
	 	z.name as zona, 
	 	u.name as usuario,
	 	i.taxpercent,
		i.note
	FROM ndc as i LEFT join customer as c ON i.idcustomer=c.id 
				  LEFT join invoice as inv ON i.idinvoice=inv.id 
				  LEFT join salesman as s ON i.idsalesman = s.id 
				  LEFT join zonas as z ON i.idzona = z.id 
				  LEFT join user as u ON i.iduser = u.id 
	WHERE i.id=@cIdNDC
ENDTEXT

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



IF oApp.sqlexec(cCmd,'Cabeza')>0

	_civa = '2'	
	_pIva = cabeza.taxPercent/100
	_ctarifa =  ALLTRIM(TRANSFORM(INT(cabeza.taxPercent)))
	
	IF cabeza.taxpercent = 14
		_civa = '3'		
	ENDIF
	
	oapp.sqlexec('select SUM(quantity*(cost-descunit)) AS ice from ndcdet where id=?cIdNDC and ice>0')
	nBaseICE = ROUND(sqlresult.ice,2)

	
	ccad = 'select * from ndcdet where id=?cIdNDC'
	oApp.sqlexec(ccad,'detalle')
	
	&&this.cargaautorizacion(Cabeza.autorizacion)
	
	
	nSubt0 = 0
	nSubtx = 0	
	nSubtIce = 0
	nSubtDesc = 0
	nTotalIva = 0
	
	SELECT Detalle
	GO top
	SCAN ALL
	
		nCant   = ROUND(Detalle.quantity,6)
		nPrecio = ROUND(Detalle.cost,6)
		nDesc   = ROUND(detalle.descunit * nCant , 2)
		
		nSubtDesc = nSubtDesc + nDesc

		_liva   = (Detalle.liva=1)
	
		nice	= ROUND(Detalle.ice, 2)
		
		nTotal  = ROUND(nCant*nPrecio,2) - nDesc
		
		IF _liva  
			nSubtx = nSubtx + nTotal  
			nIva   = ROUND(nTotal*_pIva,2)
			nTotalIva = nTotalIva + nIva
		ELSE
			nSubt0 = nSubt0 + nTotal  
		ENDIF
		
		nSubtIce = nSubtIce + nIce  
	
		SELECT Detalle
	ENDSCAN 

	*nTotalIva = ROUND(nSubtX*_pIva,2)
	
	nTotalGen = nSubt0+nsubtX+nTotalIva + nSubtIce 
	
	
	
	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 + '04'								&& 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 	
	
	cIdInvo = Cabeza.idInvoice
	IF oApp.sqlexec('SELECT x.cliente, a.ocasional '+;
		'FROM invoice_cliente as x inner join invoice as a where a.id=x.id and a.id=?cidinvo')>0
		IF sqlresult.ocasional=1
			SELECT Cabeza
			replace cliente WITH sqlresult.cliente
		ENDIF
	ENDIF
	IF oApp.sqlexec('SELECT x.ruc, a.ocasional '+;
		'FROM invoice_ruc as x inner join invoice as a where a.id=x.id and a.id=?cidinvo')>0
		IF sqlresult.ocasional=1
			SELECT Cabeza
			replace ruc WITH sqlresult.ruc
		ENDIF
	ENDIF
	IF oApp.sqlexec('SELECT x.address, a.ocasional '+;
		'FROM invoice_address as x inner join invoice as a where a.id=x.id and a.id=?cidinvo')>0
		IF sqlresult.ocasional=1
			SELECT Cabeza
			replace address WITH sqlresult.address
		ENDIF
	ENDIF
			
	IF .t. &&Cabeza.tipo $ "01"
		This.xml_init()

		This.xml_insert('0','<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',0)
		This.xml_insert('0','<notaCredito id="comprobante" version="1.1.0">',0)
		
		crazonrocialpruebas = 'PRUEBAS SERVICIO DE RENTAS INTERNAS'
		cnumerofactura = SUBSTR(Cabeza.iseriesec,1,3)+'-'+SUBSTR(Cabeza.iseriesec,4,3)+'-'+PADL(ALLTRIM(SUBSTR(Cabeza.iseriesec,8,9)),9,'0')
			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)	&& revisar
				This.xml_insert('1',This.xml_str('codDoc','04'),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)	
			
			
			
			This.xml_insert('0','<infoNotaCredito>',1)	
				This.xml_insert('1',This.xml_fec('fechaEmision',Cabeza.date),2)
				This.xml_insert('1',This.xml_str('dirEstablecimiento',oApp.cbAddressSucursal),2)
				This.xml_insert('1',This.xml_str('tipoIdentificacionComprador',Cabeza.tiporuc),2)
				This.xml_insert('1',This.xml_str('razonSocialComprador',Cabeza.cliente),2)	
				This.xml_insert('1',This.xml_str('identificacionComprador',Cabeza.ruc),2)	
				
				IF !EMPTY(oApp.cbContribuyenteEspecial)&& preguntar si es del cliente o de la empresa que factura
					This.xml_insert('1',This.xml_str('contribuyenteEspecial',ALLTRIM(oApp.cbContribuyenteEspecial)),2)
				ENDIF
				This.xml_insert('1',This.xml_str('obligadoContabilidad',IIF(EMPTY(oApp.cbObligadoCont),'NO','SI')),2)
				This.xml_insert('1',This.xml_str('codDocModificado',Cabeza.tipo),2)&& si es factura o nota de venta
				This.xml_insert('1',This.xml_str('numDocModificado',cnumerofactura),2)
				This.xml_insert('1',This.xml_fec('fechaEmisionDocSustento',IIF(ISNULL(Cabeza.fechaFact),Cabeza.date,Cabeza.fechaFact)),2)
				This.xml_insert('1',This.xml_num('totalSinImpuestos',ROUND(nSubtx + nSubt0 - nSubtIce,2),2),2)
				This.xml_insert('1',This.xml_num('valorModificacion',nTotalGen ,2),2)					
				This.xml_insert('1',This.xml_str('moneda','DOLAR'),2)
				This.xml_insert('1','<totalConImpuestos>',1)
				
				IF nSubt0>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 nTotalIva>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',ROUND(Cabeza.ice,2),2),2)
					This.xml_insert('1','</totalImpuesto>',2)
				ENDIF

				This.xml_insert('1','</totalConImpuestos>',1)				
				This.xml_insert('1',This.xml_str('motivo',IIF(Cabeza.type_doc=1,'devolucion','descuento')),1)
			This.xml_insert('0','</infoNotaCredito>')	
			This.xml_insert('0','<detalles>')
			
			IF oApp.sqlexec('select item.partnumber, d.quantity, d.cost, d.descunit,d.liva,d.ice, '+;
					'0.00 as descuentos, item.name as item, d.alias '+;
					'FROM ndcdet as d inner join ndc as i on d.id=i.id inner join item on d.iditem=item.id '+;
					'WHERE i.id=?cIdNDC','detalle')>0
					
				SELECT detalle
				SCAN ALL
					*nTotaldetalle = (detalle.quantity*detalle.cost)- detalle.descunit
					ntotalsinimpuestos = ROUND(detalle.quantity*(detalle.cost- detalle.descunit),2)
					nCant   = detalle.quantity
					nPrecio = detalle.cost
					nDesc   = ROUND(detalle.descunit*detalle.quantity,2)
					_liva   = (detalle.liva=1)
					nice	= detalle.ice
					
					IF detalle.ice=1
						ccodigo = '3' && tabla 15 ficha tecnica
					ELSE
						ccodigo = '2' && tabla 15 ficha tecnica
						IF detalle.liva=1 && tabla 16 ficha tecnica
							codigoPorcentaje = _cIva && 12%
						ELSE
							codigoPorcentaje = '0' && 0%
						ENDIF 
					ENDIF 
					LOCAL cItemName
					
					cItemName = ALLTRIM(detalle.item)
					
					IF !ISNULL(detalle.alias)
						LOCAL cAliasItem
						cAliasItem = ALLTRIM(detalle.alias)
						IF !EMPTY(cAliasItem)
							cItemName = cAliasItem 
						ENDIF
					ENDIF
					
					
					This.xml_insert('1','<detalle>',1)
					This.xml_insert('11',This.xml_str('codigoInterno',	detalle.partnumber),2)
					This.xml_insert('11',This.xml_str('descripcion',	IIF(_liva ,'*','') + cItemName),2)
					This.xml_insert('11',This.xml_num('cantidad',      	nCant,6),2)
					This.xml_insert('11',This.xml_num('precioUnitario',	nPrecio,6),2)
					This.xml_insert('11',This.xml_num('descuento',     	nDesc,2),2)
					This.xml_insert('11',This.xml_num('precioTotalSinImpuesto',ntotalsinimpuestos,2),2)

					IF nice>0
						ntotalsinimpuestos = ntotalsinimpuestos+nice	
					ENDIF 
					
						This.xml_insert('1','<impuestos>',2)
						This.xml_insert('11','<impuesto>',2)
						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',ntotalsinimpuestos,2),3)
						This.xml_insert('111',This.xml_num('valor',ROUND(ntotalsinimpuestos*IIF(_liva,_pIva,0.00),2),2),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',ROUND(ntotalsinimpuestos-nice,2),2),3)
						This.xml_insert('111',This.xml_num('valor',ROUND(nice,2),2),3)
						This.xml_insert('11','</impuesto>',2)					
					ENDIF 
						
					This.xml_insert('1','</impuestos>',1)
				
					This.xml_insert('1','</detalle>',1)
					SELECT detalle
				ENDSCAN 	
			ENDIF 
			This.xml_insert('0','</detalles>')
			This.xml_insert('0','<infoAdicional>')						
			
			This.xml_insert('0','<campoAdicional nombre="pIva">'+_cTarifa+'</campoAdicional>',1)
			
			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)
				This.xml_insert('0','<campoAdicional nombre="Direccion">'+oApp.xchr(cabeza.address,280)+'</campoAdicional>',1)
			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
			
			IF !EMPTY(cabeza.note) AND !ISNULL(cabeza.note)
				This.xml_insert('0','<campoAdicional nombre="Nota">'+oApp.xchr(cabeza.note,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 !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
			
			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

*!*				IF !oApp.vacio(cabeza.sfp)
*!*					This.xml_insert('0','<campoAdicional nombre="FormaPago">'+oApp.xchr(cabeza.sfp)+'</campoAdicional>',1)
*!*				ENDIF

			
			This.xml_insert('0','</infoAdicional>')
			This.xml_insert('0','</notaCredito>')


		cFileXML     = oApp.rutadigitalizadosFE+'\generados\'+cClaveAcceso+".XML"
		
		cFileXMLVoid = ALLTRIM(oApp.rutadigitalizadosFE+"anulados\"+;
			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 ndc set xmlfe=1 where id=?cIdNDC')
			
		ENDIF 

		
		this.Autoriza('Nota de Crédito: ',cClaveAcceso,cIdNDC,nSegInit,ALLTRIM(Cabeza.email))
		
	ENDIF	
ENDIF

this.lBuzy = .f.

oApp.setView (this.cIdView,2)

ENDFUNC



FUNCTION NotaDebito
PARAMETERS cIdNDC,lescontingencia

LOCAL cCmd

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, 
		c.name as cliente, 
		c.comercio,
		c.ruc, 
		c.address,
		c.email,
		c.phone, 
		c.tiporuc,
		c.city, 
		c.codigo,
		i.idcustomer,
		i.clavecontingencia, 
		inv.seriesec as iseriesec, 
		i.subtx, 
		i.subt0,
		i.tax,
		i.total,
		i.moneda,
		i.ice,
		i.tipo,
		i.serie,
		i.secuencia,
		i.void,
		i.autorizacion,
		i.numeroSriFact,
		i.idInvoice,
		inv.date as fechaFact,
		inv.autorizacion as autFact,
		inv.total as tFact,
		i.id,
		i.type_doc,
		s.name as vendedor,
	 	z.name as zona, 
	 	u.name as usuario,
	 	i.taxpercent,
		i.note
	FROM ndc as i LEFT join customer as c ON i.idcustomer=c.id 
				  LEFT join invoice as inv ON i.idinvoice=inv.id 
				  LEFT join salesman as s ON i.idsalesman = s.id 
				  LEFT join zonas as z ON i.idzona = z.id 
				  LEFT join user as u ON i.iduser = u.id 
	WHERE i.id=@cIdNDC
ENDTEXT

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



IF oApp.sqlexec(cCmd,'Cabeza')>0

	_civa = '2'	
	_pIva = cabeza.taxPercent/100
	_ctarifa =  ALLTRIM(TRANSFORM(INT(cabeza.taxPercent)))
	
	IF cabeza.taxpercent = 14
		_civa = '3'		
	ENDIF
	
	oapp.sqlexec('select SUM(quantity*(cost-descunit)) AS ice from ndcdet where id=?cIdNDC and ice>0')
	nBaseICE = ROUND(sqlresult.ice,2)

	
	ccad = 'select * from ndcdet where id=?cIdNDC'
	oApp.sqlexec(ccad,'detalle')
	
	&&this.cargaautorizacion(Cabeza.autorizacion)
	
	
	nSubt0 = 0
	nSubtx = 0	
	nSubtIce = 0
	nSubtDesc = 0
	nTotalIva = 0
	
	SELECT Detalle
	GO top
	SCAN ALL
	
		nCant   = ROUND(Detalle.quantity,6)
		nPrecio = ROUND(Detalle.cost,6)
		nDesc   = ROUND(detalle.descunit * nCant , 2)
		
		nSubtDesc = nSubtDesc + nDesc

		_liva   = (Detalle.liva=1)
	
		nice	= ROUND(Detalle.ice, 2)
		
		nTotal  = ROUND(nCant*nPrecio,2) - nDesc
		
		IF _liva  
			nSubtx = nSubtx + nTotal  
			nIva   = ROUND(nTotal*_pIva,2)
			nTotalIva = nTotalIva + nIva
		ELSE
			nSubt0 = nSubt0 + nTotal  
		ENDIF
		
		nSubtIce = nSubtIce + nIce  
	
		SELECT Detalle
	ENDSCAN 

	*nTotalIva = ROUND(nSubtX*_pIva,2)
	
	nTotalGen = nSubt0+nsubtX+nTotalIva + nSubtIce 
	
	ntotalsinimpuestos  = nSubt0+nsubtX+ nSubtIce 
	
	
	
	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 + '05'								&& 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 	
	
	cIdInvo = Cabeza.idInvoice
	IF oApp.sqlexec('SELECT x.cliente, a.ocasional '+;
		'FROM invoice_cliente as x inner join invoice as a where a.id=x.id and a.id=?cidinvo')>0
		IF sqlresult.ocasional=1
			SELECT Cabeza
			replace cliente WITH sqlresult.cliente
		ENDIF
	ENDIF
	IF oApp.sqlexec('SELECT x.ruc, a.ocasional '+;
		'FROM invoice_ruc as x inner join invoice as a where a.id=x.id and a.id=?cidinvo')>0
		IF sqlresult.ocasional=1
			SELECT Cabeza
			replace ruc WITH sqlresult.ruc
		ENDIF
	ENDIF
	IF oApp.sqlexec('SELECT x.address, a.ocasional '+;
		'FROM invoice_address as x inner join invoice as a where a.id=x.id and a.id=?cidinvo')>0
		IF sqlresult.ocasional=1
			SELECT Cabeza
			replace address WITH sqlresult.address
		ENDIF
	ENDIF
			
	IF .t. &&Cabeza.tipo $ "01"
		This.xml_init()

		This.xml_insert('0','<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',0)
		This.xml_insert('0','<notaDebito id="comprobante" version="1.0.0">',0)
		
		crazonrocialpruebas = 'PRUEBAS SERVICIO DE RENTAS INTERNAS'
		cnumerofactura = SUBSTR(Cabeza.iseriesec,1,3)+'-'+SUBSTR(Cabeza.iseriesec,4,3)+'-'+PADL(ALLTRIM(SUBSTR(Cabeza.iseriesec,8,9)),9,'0')
			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)	&& revisar
				This.xml_insert('1',This.xml_str('codDoc','05'),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)	

			This.xml_insert('0','<infoNotaDebito>',1)	
				This.xml_insert('1',This.xml_fec('fechaEmision',Cabeza.date),2)
				This.xml_insert('1',This.xml_str('dirEstablecimiento',oApp.cbAddressSucursal),2)
				This.xml_insert('1',This.xml_str('tipoIdentificacionComprador',Cabeza.tiporuc),2)
				This.xml_insert('1',This.xml_str('razonSocialComprador',Cabeza.cliente),2)	
				This.xml_insert('1',This.xml_str('identificacionComprador',Cabeza.ruc),2)	
				
				IF !EMPTY(oApp.cbContribuyenteEspecial)&& preguntar si es del cliente o de la empresa que factura
					This.xml_insert('1',This.xml_str('contribuyenteEspecial',ALLTRIM(oApp.cbContribuyenteEspecial)),2)
				ENDIF
				This.xml_insert('1',This.xml_str('obligadoContabilidad',IIF(EMPTY(oApp.cbObligadoCont),'NO','SI')),2)
				This.xml_insert('1',This.xml_str('codDocModificado','01'),2)&& siempre factura
				This.xml_insert('1',This.xml_str('numDocModificado',cnumerofactura),2)
				This.xml_insert('1',This.xml_fec('fechaEmisionDocSustento',IIF(ISNULL(Cabeza.fechaFact),Cabeza.date,Cabeza.fechaFact)),2)
				This.xml_insert('1',This.xml_num('totalSinImpuestos',ROUND(nSubtx + nSubt0 - nSubtIce,2),2),2)
			
			This.xml_insert('1','<impuestos>',2)
			This.xml_insert('11','<impuesto>',2)
	

			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',ntotalsinimpuestos,2),3)
			This.xml_insert('111',This.xml_num('valor',ROUND(ntotalsinimpuestos*IIF(_liva,_pIva,0.00),2),2),3)

			
			
			This.xml_insert('11','</impuesto>',2)
			This.xml_insert('1','</impuestos>',2)
			This.xml_insert('1',This.xml_num('valorTotal',ROUND(nTotalGen,2),2),2)
			
			
				
			
			
			**This.xml_insert('1',This.xml_str('motivo',IIF(Cabeza.type_doc=1,'devolucion','descuento')),1)

			This.xml_insert('1','<pagos>',1)
			This.xml_insert('11','<pago>',2)
			
			This.xml_insert('111',This.xml_str('formaPago','20'),3)
			This.xml_insert('111',This.xml_num('total',nTotalGen,2),3)
			This.xml_insert('111',This.xml_str('plazo','15'),3)
			This.xml_insert('111','<unidadTiempo>dias</unidadTiempo>',3)
			
			This.xml_insert('11','</pago>',2)
			This.xml_insert('1','</pagos>',1)


			This.xml_insert('0','</infoNotaDebito>')

			This.xml_insert('1','<motivos>',1)
			This.xml_insert('11','<motivo>',2)
			
			
			cRazon = oApp.xchr(TRIM(cabeza.note),280)
			IF (cRazon='')
				cRazon = 'INTERES POR MORA'
			ENDIF
			
			This.xml_insert('111',This.xml_str('razon',	cRazon ),2)
			This.xml_insert('111',This.xml_num('valor',ROUND(nSubtx + nSubt0 - nSubtIce,2),2),2)
			This.xml_insert('11','</motivo>',2)
			This.xml_insert('1','</motivos>',1)

			This.xml_insert('0','<infoAdicional>')						
			
			This.xml_insert('0','<campoAdicional nombre="pIva">'+_cTarifa+'</campoAdicional>',1)
			
			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)
				This.xml_insert('0','<campoAdicional nombre="Direccion">'+oApp.xchr(cabeza.address,280)+'</campoAdicional>',1)
			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
			
*!*				IF !EMPTY(cabeza.note) AND !ISNULL(cabeza.note)
*!*					This.xml_insert('0','<campoAdicional nombre="Nota">'+oApp.xchr(cabeza.note,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 !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
			
			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

*!*				IF !oApp.vacio(cabeza.sfp)
*!*					This.xml_insert('0','<campoAdicional nombre="FormaPago">'+oApp.xchr(cabeza.sfp)+'</campoAdicional>',1)
*!*				ENDIF

			
			This.xml_insert('0','</infoAdicional>')
			This.xml_insert('0','</notaDebito>')


		cFileXML     = oApp.rutadigitalizadosFE+'\generados\'+cClaveAcceso+".XML"
		
		cFileXMLVoid = ALLTRIM(oApp.rutadigitalizadosFE+"anulados\"+;
			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 ndc set xmlfe=1 where id=?cIdNDC')
			
		ENDIF 

		
		this.Autoriza('Nota de Débito: ',cClaveAcceso,cIdNDC,nSegInit,ALLTRIM(Cabeza.email))
		
	ENDIF	
ENDIF

this.lBuzy = .f.

oApp.setView (this.cIdView,2)

ENDFUNC



FUNCTION gen_dv48
PARAMETERS cRuc

cRuc = ALLTRIM(cRuc)

IF LEN(cRuc)<48
	RETURN '.'
ENDIF

DIMENSION aRUC[48]

nbasemultiplicador = 7
nmultiplicador = 2
nultimo = 48	
nsuma = 0

FOR iCount = 1 TO nultimo	
	aRuc[iCount] = SUBSTR(cRuc,nultimo,1)
	nultimo = nultimo -1
	
ENDFOR

FOR i = 1 TO 48	
	nsuma = nsuma+INT(VAL(aRuc[i]))*nmultiplicador
	nmultiplicador = nmultiplicador+1
	IF nmultiplicador>7
		nmultiplicador = 2
	ENDIF 
ENDFOR 

nVerif = (11 - (nSuma % 11))%11

IF nVerif=11
	nVerif = 0
ENDIF
IF nVerif=10
	nVerif = 1
ENDIF

RETURN padl(nVerif,1,'0')

*!*	cn1 = 1
*!*	cn2 = 1
*!*	cn3 = 9
*!*	cn4 = 0
*!*	cn5 = 0
*!*	cn6 = 8
*!*	cn7 = 1
*!*	cn8 = 7
*!*	FOR iCount = 1 TO 48
*!*		ccn = 'cn'+PADL((icount % 8)+1,1)
*!*		aRuc[iCount] = VAL(SUBSTR(cRuc,iCount,1)) * &ccn
*!*		
*!*	ENDFOR

*!*	nSum = 0
*!*	FOR iCount = 1 TO 48
*!*		nSum = nSum + aRuc[iCount]
*!*	ENDFOR

*!*	nVerif = (11 - (nSum % 11))%11

*!*	IF nVerif=11
*!*		nVerif = 0
*!*	ENDIF

*!*	RETURN padl(nVerif,1,'0')


ENDFUNC



FUNCTION xml_init ()
	CREATE cursor xmlCont (grupo c(10), linea m)
ENDFUNC

FUNCTION xml_insert (cGrupo, cLinea, nSp)
	IF EMPTY(nSp)
		nSp = 0
	ENDIF

	nSp = REPLICATE(CHR(9),nSp)
	
	IF ISNULL(cLinea) OR EMPTY(cLinea)
		cLinea = ' '
	ENDIF
	

	INSERT INTO xmlCont VALUES (cGrupo, nSp+cLinea)
ENDFUNC

FUNCTION xml_file(cFileName)
LOCAL cDirec
	cFileName = ALLTRIM(cFileName)
	cDirec = substr(cfileName,1,RAT('\', cFileName))
	
	IF !EMPTY(cDirec) AND !DIRECTORY(cDirec)
		MESSAGEBOX(cDirec+ '  no existe, creelo antes de generar XML',63,oApp.cModule)
		RETURN .F.
	ENDIF
	
   	gnErrFile = FCREATE(cFileName)  && If not create it

	IF gnErrFile < 0     && Check for error opening file	   	
	   	RETURN .f.
	ELSE  && If no error, write to file
		SELECT xmlCont 
		GO top
		SCAN all
			=FWRITE(gnErrFile , ALLTRIM(xmlCont.linea)+CHR(13)+CHR(10))	
			*=FWRITE(gnErrFile , ALLTRIM(xmlCont.linea))	
			SELECT xmlCont 
		ENDSCAN
	ENDIF
	=FCLOSE(gnErrFile )     && Close file
	SELECT xmlCont
	RETURN .t.
ENDFUNC


FUNCTION xml_num (cCampoName,nValor,nDec)
		eValor = ALLTRIM(TRANSFORM(nValor,'999999999999.'+REPLICATE('9',nDec)))
		
		FOR iCount = 1 TO 6
			IF SUBSTR(eValor,LEN(eValor),1)='0'
				eValor = SUBSTR(eValor,1,LEN(eValor)-1)
			ENDIF
		ENDFOR
		
		IF SUBSTR(eValor,LEN(eValor),1)='.'
			eValor = SUBSTR(eValor,1,LEN(eValor)-1)
		ENDIF
		
		
	RETURN '<'+cCampoName+'>'+eValor+'</'+cCampoName+'>'
ENDFUNC

FUNCTION xml_str (cCampoName,sValor)
		eValor = ALLTRIM(sValor)
	RETURN '<'+cCampoName+'>'+oApp.xchr(eValor)+'</'+cCampoName+'>'
ENDFUNC

FUNCTION xml_fec (cCampoName,dValor)
		eValor = dtoc(dValor)
	RETURN '<'+cCampoName+'>'+eValor+'</'+cCampoName+'>'
ENDFUNC


FUNCTION msg_add (cMsg)
	cMsg = this.cTitulo + cMsg
	oApp.msg_add(this.cIdView, cMsg)
ENDFUNC

FUNCTION fp
LPARAMETERS cCad, nTotal

LOCAL aa, bb, nFP, cRetFP, cRetVal, cValor, cFP, cRet 

DIMENSION aa[1]
nFP = oApp.explode(cCad,@aa,";")

DIMENSION bb[1]

cRetFP = ''
cRetVal = ''


IF nFP>1
	FOR iCount = 1 TO nFP
		nPar = oApp.explode(aa[iCount],@bb,":")
		cFP = PADL(INT(VAL(bb[1])),2,'0')
		nValor = 0
		IF nPar>1
			nValor = VAL(bb[2])
		ENDIF
		cValor = TRANSFORM(nValor)
		cRetFP = cRetFP + cFP + " "
		cRetVal = cRetVal + cValor + " "
	ENDFOR
ELSE
	cFP = '01'
	cValor = TRANSFORM(nTotal)
	
	IF nFP=1
		nPar = oApp.explode(aa[1],@bb,":")
		cFP = PADL(INT(VAL(bb[1])),2,'0')
	ENDIF
	
	cRetFP = cRetFP + cFP + " "
	cRetVal = cRetVal + cValor + " "

ENDIF

cRet = ALLTRIM(cRetFP)+'|'+ALLTRIM(cRetVal)

RETURN cRet
ENDFUNC


ENDDEFINE
