Files

367 lines
12 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : cpprmt005
OBJETIVO : Este programa crea tipos de pagos
REALIZADO POR : Ing. Luis Miguel Soto.
FECHA : Agosto 16,2024.
--------------------------------------------------------------------------
}
GLOBALS "cpprgb000.4gl"
DEFINE tipo,tipo1 INT,opt1 CHAR(3)
DEFINE desc_tipo,obj,us_crea,us_mod CHAR(80)
DEFINE fech_mod,fech_crea DATE
DEFINE cuentas2 ARRAY[300] OF RECORD
cuenta_no LIKE cgtb00001.cuenta_no,
descripcion LIKE cgtb00001.descripcion,
origen LIKE cgtb00001.origen
END RECORD
DEFINE tipos DYNAMIC ARRAY OF RECORD
tipo2 INT,
descripcion1 CHAR(80),
obj1 CHAR(80),
us_mod1 CHAR(50),
fech_mod1 DATE,
us_crea1 CHAR(50),
fech_crea1 date
END record
DEFINE cuentas DYNAMIC ARRAY OF RECORD
cuenta_no LIKE cgtb00001.cuenta_no,
descripcion char(80),
origen CHAR(1)
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "sistemas" AS "MSSQL" USER usuarios USING clave
CALL cpprmt005()
END MAIN
FUNCTION cpprmt005()
CLEAR SCREEN
OPEN WINDOW cpfmmt005 AT 4,3 with FORM "cpfmmt005"
MENU
ON ACTION adicionar
CALL cpcad005()
ON ACTION consultar_modificar
CALL cpprmf005()
ON ACTION salir
EXIT menu
END menu
END FUNCTION
FUNCTION cpcad005()
DIALOG ATTRIBUTES (UNBUFFERED,FIELD ORDER FORM )
INPUT BY NAME desc_tipo,obj
BEFORE INPUT
LET tipo=0
LET scr_l = scr_line()
LET idx = arr_curr()
SELECT MAX (a.tipo)INTO tipo FROM cptb00008 a
IF tipo IS NULL OR tipo=0 THEN
LET tipo=1
ELSE
LET tipo=tipo+1
END IF
DISPLAY BY NAME tipo
END INPUT
INPUT ARRAY cuentas FROM scuentas.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
LET curr = arr_curr()
LET scr_l = scr_line()
ON ACTION cuenta
LET curr = arr_curr()
LET scr_l = scr_line()
CALL busca_cuenta()
LET cuentas[curr].cuenta_no=cuentas2[curr].cuenta_no
LET cuentas[curr].descripcion=cuentas2[curr].descripcion
LET cuentas[curr].origen=cuentas2[curr].origen
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
AFTER FIELD cuenta_no
LET curr = arr_curr()
LET scr_l = scr_line()
IF cuentas[curr].cuenta_no IS NOT NULL THEN
SELECT unique a.descripcion,a.origen
INTO cuentas[curr].descripcion,cuentas[curr].origen
FROM cgtb00001 a
WHERE a.cuenta_no=cuentas[curr].cuenta_no and a.status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
END IF
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
END INPUT
ON ACTION guardar
IF desc_tipo IS NULL THEN
CALL fgl_winmessage("ERROR","LA DESCRIPCION NO PUEDE ESTAR VACIO","STOP")
NEXT FIELD DESC_TIPO
END IF
BEGIN WORK
INSERT INTO cptb00008
VALUES(tipo,desc_tipo,obj,null,usuarios,getdate(),NULL,NULL)
FOR idx=1 TO cuentas.getLength()
IF cuentas[idx].cuenta_no IS NOT NULL THEN
INSERT INTO cptb00009
VALUES(tipo,cuentas[idx].cuenta_no,cuentas[idx].descripcion,cuentas[idx].origen,NULL,usuarios,getdate(),NULL,null)
END IF
END FOR
IF status<0 THEN
ROLLBACK WORK
CALL fgl_winmessage("error","NO SE PUDO ACTUALIZAR","STOP")
ELSE
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
RETURN
END IF
ON ACTION CANCEL
LET int_flag = FALSE
CALL cuentas.clear()
CLEAR FORM
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION cpprmf005()
DIALOG ATTRIBUTES (UNBUFFERED, FIELD ORDER FORM)
CONSTRUCT criterio ON a.tipo
FROM tipo1
BEFORE CONSTRUCT
END CONSTRUCT
ON ACTION buscar
CALL tipos.clear()
LET curr=arr_curr()
LET selec= "select unique a.tipo,a.desc_tipo,a.obj,us_crea,fech_crea,us_mod,fech_mod ",
"from cptb00008 a ",
"where a.status_t is null and ", criterio CLIPPED
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR WITH HOLD FOR busca
LET idx=1
FOREACH datos INTO tipos[idx].*
LET idx=idx+1
END FOREACH
IF idx= 1 THEN
CALL fgl_winmessage("ERROR","NO HAY REGISTROS CON ESA CONDICION","STOP")
EXIT DIALOG
END IF
DISPLAY ARRAY tipos TO stipo.*
BEFORE ROW
ON ACTION escoger
LET curr=arr_curr()
SELECT tipo FROM cptb00008
WHERE status_t IS NULL AND tipo=tipos[curr].tipo2
IF status!= NOTFOUND THEN
LET numero_msg=36
CALL msg(numero_msg)
ELSE
CALL actualizar()
END IF
ON ACTION borrar
LET curr=arr_curr()
LET tipo=tipos[curr].tipo2
LET OPT1 = FGL_WINQUESTION("WARNING","ESTA SEGURO DE ELIMINAR ESTE REGISTRO?","NO","YES|NO","QUESTION",0)
IF OPT1 = "YES" THEN
UPDATE cptb00008
SET status_t="E",
us_mod=usuarios,
fech_mod=getdate()
WHERE @tipo=tipos[curr].tipo2
UPDATE cptb00009
SET status_t="E",
us_mod=usuarios,
fech_mod=getdate()
WHERE @tipo=tipos[curr].tipo2
DISPLAY "tipo",tipos[curr].tipo2
LET numero_msg = 39
CALL msg(numero_msg)
END IF
END DISPLAY
ON ACTION CANCEL
LET int_flag= FALSE
call tipos.clear()
CLEAR FORM
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION busca_cuenta()
OPEN WINDOW cons_cuenta AT 10,5 WITH FORM "cpfmwd006" ATTRIBUTE
(BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
CONSTRUCT BY NAME criterio ON descripcion
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
LET selec =
"SELECT cuenta_no,descripcion,origen FROM cgtb00001 ",
"WHERE ",criterio clipped," AND status_t is null ORDER BY 1"
PREPARE comando FROM selec
DECLARE busca2 CURSOR FOR comando
OPEN busca2
WHILE STATUS != NOTFOUND
LET idx = 1
FETCH busca2 INTO cuentas2[idx].cuenta_no,cuentas[idx].descripcion,cuentas[idx].origen
IF status = notfound THEN
EXIT WHILE
END IF
LET idx = idx + 1
END WHILE
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
CALL set_count (idx - 1)
DISPLAY ARRAY cuentas2 TO s_cuentas.*
LET curr1 = arr_curr()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
CLOSE WINDOW cons_cuenta
END FUNCTION
FUNCTION actualizar()
DIALOG ATTRIBUTES (UNBUFFERED, FIELD ORDER FORM)
INPUT BY NAME desc_tipo,obj
BEFORE INPUT
LET tipo=tipos[curr].tipo2
LET desc_tipo=tipos[curr].descripcion1
LET obj=tipos[curr].obj1
LET us_crea=tipos[curr].us_crea1
LET fech_crea=tipos[curr].fech_crea1
LET us_mod=tipos[curr].us_mod1
LET fech_mod=tipos[curr].fech_mod1
DISPLAY BY NAME tipo,desc_tipo,obj,us_crea,
fech_crea,us_mod,fech_mod
END INPUT
INPUT ARRAY cuentas FROM scuentas.* ATTRIBUTES(WITHOUT DEFAULTS )
BEFORE INPUT
LET scr_l=scr_line()
LET curr = arr_curr()
LET selec= "select a.cuenta_no,a.descripcion,a.origen ",
" from cptb00009 a",
" where a.tipo=",tipos[curr].tipo2,
" order by a.cuenta_no"
PREPARE comando1 FROM selec
DECLARE busca4 CURSOR FOR comando1
LET idx=1
FOREACH busca4 INTO cuentas[idx].cuenta_no,
cuentas[idx].descripcion,cuentas[idx].origen
DISPLAY cuentas[idx].cuenta_no TO scuentas[idx].cuenta_no
DISPLAY cuentas[idx].descripcion TO scuentas[idx].descripcion
DISPLAY cuentas[idx].origen TO scuentas[idx].origen
LET idx =idx+1
END FOREACH
ON ACTION cuenta
LET scr_l=scr_line()
LET curr = arr_curr()
CALL busca_cuenta()
LET cuentas[curr].cuenta_no=cuentas2[curr].cuenta_no
LET cuentas[curr].descripcion=cuentas2[curr].descripcion
LET cuentas[curr].origen=cuentas2[curr].origen
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
AFTER FIELD cuenta_no
LET scr_l=scr_line()
LET curr = arr_curr()
IF cuentas[curr].cuenta_no IS NOT NULL THEN
LET verdad = "N"
#CALL otravez()
IF verdad = "S" THEN
NEXT FIELD cuenta
END IF
SELECT unique a.descripcion,a.origen
INTO cuentas[curr].descripcion,cuentas[curr].origen
FROM cgtb00001 a
WHERE a.cuenta_no=cuentas[curr].cuenta_no and a.status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
END IF
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
END INPUT
ON ACTION guardar
IF desc_tipo IS NULL THEN
CALL fgl_winmessage("ERROR","LA DESCRIPCION NO PUEDE ESTAR VACIO","STOP")
NEXT FIELD DESC_TIPO
END IF
BEGIN WORK
UPDATE cptb00008 SET desc_tipo=desc_tipo,
obj=obj,
us_mod=usuarios,
fech_mod=getdate()
DELETE FROM cptb00009
WHERE tipo=tipo
FOR idx=1 TO cuentas.getLength()
IF cuentas[idx].cuenta_no IS NOT NULL THEN
INSERT INTO cptb00009
VALUES(tipo,cuentas[idx].cuenta_no,cuentas[idx].descripcion,cuentas[idx].origen,NULL,NULL,null,usuarios,getdate())
END IF
END FOR
IF status<0 THEN
ROLLBACK WORK
CALL fgl_winmessage("error","NO SE PUDO ACTUALIZAR","STOP")
ELSE
COMMIT WORK
LET numero_msg=13
CALL msg(numero_msg)
RETURN
END IF
ON ACTION CANCEL
LET int_flag = FALSE
CALL cuentas.clear()
CLEAR FORM
EXIT dialog
END DIALOG
END FUNCTION