Files
MBS/PROYECTO/codir/coprmt016.4gl
T

260 lines
7.3 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : COPRMT016
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Terminos de Pago
PROGRAMADOR : Juan Soto (1997)
REESTRUCTURADO : Ing. Elvis Garcia (patron acprmt001)
FECHA REALIZACION : Agosto 1997
DIRECTOR PROYECTO : Jose Alfredo Paulino Alejo
-------------------------------------------------------------------------------
}
IMPORT FGL fgldialog
GLOBALS "coprgb000.4gl"
-- Listado del tab 1
DEFINE DisArray DYNAMIC ARRAY OF RECORD
term_sp LIKE cotb00024.term_sp,
dias INT,
descrip_term STRING,
descrip_ting STRING
END RECORD
DEFINE answer STRING
MAIN
DEFER INTERRUPT
CALL STARTLOG("COPRMT16.TXT")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "smarmotech" USER usuarios USING clave
CALL coprmt016()
END MAIN
FUNCTION coprmt016()
OPEN WINDOW w1 WITH FORM "cofmmt016"
CALL fgl_settitle("Terminos de Pago")
CALL copcad016()
DIALOG ATTRIBUTE(UNBUFFERED)
DISPLAY ARRAY DisArray TO Tabla.*
ON ACTION refresh
INITIALIZE pagos.* TO NULL
CALL copcad016()
ON ACTION Adicionar
INITIALIZE pagos.* TO NULL
LET pagos.us_crea = usuarios
LET pagos.fech_crea = CURRENT YEAR TO DAY
INPUT BY NAME pagos.term_sp, pagos.descrip_term, pagos.descrip_ting
ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS)
AFTER FIELD term_sp
IF pagos.term_sp IS NULL THEN
CALL msg(16)
NEXT FIELD term_sp
END IF
IF existe_termino(pagos.term_sp) THEN
CALL msg(12) -- ya existe
NEXT FIELD term_sp
END IF
AFTER FIELD descrip_term
IF pagos.descrip_term IS NULL THEN
CALL msg(16)
NEXT FIELD descrip_term
END IF
AFTER FIELD descrip_ting
IF pagos.descrip_ting IS NULL THEN
CALL msg(16)
NEXT FIELD descrip_ting
END IF
ON ACTION ACCEPT
CALL insertData()
CALL copcad016()
EXIT INPUT
ON ACTION CANCEL
CALL msg(2)
EXIT INPUT
END INPUT
ON ACTION Modificar
-- el registro ya viene cargado en pagos.* por BEFORE ROW
INPUT BY NAME pagos.descrip_term, pagos.descrip_ting
ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS)
AFTER FIELD descrip_term
IF pagos.descrip_term IS NULL THEN
CALL msg(16)
NEXT FIELD descrip_term
END IF
AFTER FIELD descrip_ting
IF pagos.descrip_ting IS NULL THEN
CALL msg(16)
NEXT FIELD descrip_ting
END IF
ON ACTION ACCEPT
CALL updateData(1)
CALL copcad016()
EXIT INPUT
ON ACTION CANCEL
CALL msg(2)
EXIT INPUT
END INPUT
ON ACTION Eliminar
IF fgl_winquestion(
"ELIMINAR REGISTRO",
"Esta seguro/a que desea eliminar este registro? ",
"yes", "yes|no", "question", 0) = "yes" THEN
CALL updateData(2)
CALL copcad016()
ELSE
CALL msg(2)
END IF
ON ACTION Salir
EXIT PROGRAM
BEFORE ROW
IF DisArray.getLength() > 0 THEN
CALL getdata(arr_curr())
DISPLAY BY NAME pagos.*
ELSE
INITIALIZE pagos.* TO NULL
DISPLAY BY NAME pagos.*
END IF
END DISPLAY
END DIALOG
CLOSE WINDOW w1
END FUNCTION
FUNCTION copcad016()
DEFINE i INT
CALL DisArray.clear()
LET i = 1
DECLARE buscar CURSOR FOR
SELECT term_sp,dias, descrip_term, descrip_ting
FROM cotb00024
WHERE status_t IS NULL
ORDER BY term_sp
FOREACH buscar INTO DisArray[i].*
LET i = i + 1
END FOREACH
END FUNCTION
FUNCTION getdata(idx INT) -- Cargar detalle del registro seleccionado
INITIALIZE pagos.* TO NULL
SELECT * INTO pagos.* FROM cotb00024
WHERE term_sp = DisArray[idx].term_sp
END FUNCTION
FUNCTION existe_termino(p_term)
DEFINE p_term LIKE cotb00024.term_sp
DEFINE n INT
SELECT COUNT(*) INTO n FROM cotb00024
WHERE term_sp = p_term
RETURN (n > 0)
END FUNCTION
FUNCTION insertData()
LET pagos.fech_crea = CURRENT YEAR TO FRACTION
BEGIN WORK
INSERT INTO cotb00024
VALUES (pagos.term_sp,
pagos.descrip_term,
pagos.descrip_ting,
NULL, -- status_t
usuarios, -- us_crea
pagos.fech_crea, -- fech_crea
NULL, -- us_mod
NULL) -- fech_mod
CALL integridad()
IF SQLCA.SQLCODE < 0 THEN
ROLLBACK WORK
CALL msg(1663)
ELSE
COMMIT WORK
CALL msg(1)
END IF
END FUNCTION
FUNCTION updateData(caso INT)
CASE caso
WHEN 1
BEGIN WORK
UPDATE cotb00024
SET descrip_term = pagos.descrip_term,
descrip_ting = pagos.descrip_ting,
us_mod = usuarios,
fech_mod = CURRENT YEAR TO FRACTION
WHERE term_sp = pagos.term_sp
IF SQLCA.SQLCODE < 0 THEN
ROLLBACK WORK
CALL msg(1663)
ELSE
COMMIT WORK
CALL msg(13)
END IF
WHEN 2
BEGIN WORK
UPDATE cotb00024
SET status_t = 'E',
us_mod = usuarios,
fech_mod = CURRENT YEAR TO FRACTION
WHERE term_sp = pagos.term_sp
IF SQLCA.SQLCODE < 0 THEN
ROLLBACK WORK
CALL msg(1663)
ELSE
COMMIT WORK
CALL msg(39)
END IF
OTHERWISE
DISPLAY "updateData: caso no contemplado"
END CASE
END FUNCTION