{ ------------------------------------------------------------------------------- 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 ( term_sp, descrip_term, descrip_ting, status_t, us_crea, fech_crea, us_mod, fech_mod, dias) 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 NULL) -- dias (no se captura en esta pantalla) 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