Files
MBS/PROYECTO/cgdir/cgprrp034.4gl
T

159 lines
5.2 KiB
Plaintext

{
PROGRAMA : CGPRRP034
OBJETIVO : ANULAR RANGO DE NCF'S
DESARROLLADOR : ING. ELVIS GARCÍA
FECHA : AGOSTO 05, 2024
}
IMPORT util
DEFINE usuarios,clave,rncemisor VARCHAR(50),
ruta_anulados STRING, numero_msg INT
DEFINE codigodgii CHAR(14),
descripcion CHAR(80), fecha_vencimiento DATE
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "marmotech" AS "IFMX" USER usuarios USING clave
SELECT a.rnc INTO rncemisor FROM companias a
CALL genera_anulacion()
END MAIN
FUNCTION genera_anulacion()
DEFINE documento_anular RECORD
nombrefile,rnc_emisor,cantidadEncf,fechaAnulacion,numeroLineas,tipoeCF,
secuenciaeCFdesde,secuenciaeCFhasta,
cantidadeCFanulados STRING
END RECORD, mensaje, respuesta, codigo STRING
DEFINE flag,
ncf_ini,ncf_fin, comprobante_ini, comprobante_fin STRING, range INT, tiponcf VARCHAR(3)
OPEN WINDOW w1 WITH FORM 'cgfmrp034'
INPUT BY NAME tiponcf,ncf_ini, ncf_fin ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS)
BEFORE INPUT
LET ruta_anulados= fgl_getenv("RUTA_XML_ANULADOS")
ON ACTION f2
CALL btipo_fact(1,'FT') RETURNING codigodgii,descripcion,fecha_vencimiento
LET tiponcf = codigodgii
DISPLAY BY NAME tiponcf
ON ACTION CANCEL
EXIT INPUT
AFTER INPUT
LET numero_msg = 16
-- IF fech_ini IS NULL THEN
-- CALL msg(numero_msg)
-- NEXT FIELD fech_ini
-- END IF
--
-- IF fech_fin IS NULL THEN
-- CALL msg(numero_msg)
-- NEXT FIELD fech_fin
-- END IF
IF tiponcf IS NULL THEN
CALL msg(numero_msg)
NEXT FIELD tiponcf
END IF
IF ncf_ini IS NULL THEN
CALL msg(numero_msg)
NEXT FIELD ncf_ini
END IF
IF ncf_fin IS NULL THEN
CALL msg(numero_msg)
NEXT FIELD ncf_fin
END IF
LET comprobante_ini = build_whole_voucher(ncf_ini, tiponcf)
LET comprobante_fin = build_whole_voucher(ncf_fin, tiponcf)
LET range = (ncf_fin - ncf_ini) + 1
DISPLAY comprobante_ini
DISPLAY comprobante_fin
INITIALIZE flag TO NULL
SELECT TOP (1) ncf INTO flag FROM vetb00002
WHERE ncf BETWEEN comprobante_ini AND comprobante_fin
AND estado_dgii NOT IN ('Anulado', 'Rechazado')
IF flag IS NULL THEN
LET documento_anular.nombrefile = ruta_anulados CLIPPED,rncemisor CLIPPED,"AENCF",tiponcf CLIPPED,"_",ncf_ini USING "<<<<<<<",".xml"
LET documento_anular.rnc_emisor=rncemisor CLIPPED
LET documento_anular.cantidadEncf= range
LET documento_anular.fechaAnulacion = util.Datetime.format(current, "%d-%m-%Y %H:%M:%S" )
LET documento_anular.numeroLineas=1
LET documento_anular.tipoeCF=tiponcf[2,3]
LET documento_anular.secuenciaeCFdesde= comprobante_ini
LET documento_anular.secuenciaeCFhasta= comprobante_fin
LET documento_anular.cantidadeCFanulados=range
CALL anularencf(documento_anular.*) RETURNING mensaje, respuesta, codigo
DISPLAY mensaje, respuesta, codigo
IF codigo = 200 THEN
LET respuesta = "LAS SECUENCIAS FUERON ANULADAS CORRECTAMENTE"
ELSE
IF codigo = 400 THEN
LET respuesta = "LAS SECUENCIAS QUE HAS INTENTADO ANULAR YA HAN SIDO UTILIZADAS"
CALL fgl_winmessage('ANULACION ESTADO', respuesta,NULL)
NEXT FIELD ncf_ini
ELSE
LET respuesta = "HA OCURRIDO UN ERROR CODIGO: ", codigo
CALL fgl_winmessage('ANULACION ESTADO', respuesta,NULL)
NEXT FIELD ncf_ini
END IF
END IF
INSERT INTO vetb00046(ncf_desde, ncf_hasta, usuario, fecha_anulacion, respuesta_dgii) VALUES
(comprobante_ini, comprobante_fin, usuarios, getdate(), respuesta)
CALL fgl_winmessage('ANULACION ESTADO', respuesta,NULL)
ELSE
CALL fgl_winmessage('NCF ENCONTRADO', 'EXISTE UN NCF EN EL RANGO ESTABLECIDO YA FACTURADO',NULL)
NEXT FIELD ncf_ini
END IF
END INPUT
CLOSE WINDOW w1
END FUNCTION
FUNCTION build_whole_voucher(sequence_number, voucher_type)
DEFINE sequence_number INT, voucher_type STRING
DEFINE answer STRING, i INT
LET answer= voucher_type
LET answer = answer, sequence_number USING "&&&&&&&&&&"
RETURN answer
END FUNCTION