{ ------------------------------------------------------------------ PROGRAMA : ACPRMT001 OBJETIVO : Capturar, Modificar, Elimacar registros de la Tabla Catalogo de Bienes y Servicios PROGRAMADOR : TAdeo A. Ferreras. FECHA REALIZACION : Sept. 27, 1993. ------------------------------------------------------------------ } IMPORT FGL fgldialog IMPORT util IMPORT com GLOBALS "acprgb000.4gl" DEFINE next_code INT DEFINE des RECORD descripcion2, descripcion3, descripcion4, descripcion5 STRING END RECORD DEFINE DisArray DYNAMIC ARRAY OF RECORD codigo1 INT, descripcion STRING, cuenta_no1 CHAR(8), departamento1 STRING END RECORD DEFINE infoArray RECORD codigo INT, descripcion1 STRING, cuenta_no CHAR(8), cta_depr CHAR(8), cta_gasto CHAR(8), departamento SMALLINT, fech_compra DATE, duracion INT, fech_elim DATE, referencia STRING, fabricante STRING, status_t CHAR(1), us_crea STRING, fech_crea DATE, us_mod STRING, fech_mod DATE, id_MaintainX INT, id_maquina INT, desc_maquina STRING END RECORD DEFINE answer STRING, ApiCheck BOOLEAN MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL acprmt001() END MAIN FUNCTION acprmt001() OPEN WINDOW w1 WITH FORM "acfmmt001" CALL fgl_settitle("Maestra de Activos Fijos") CALL acpcad001() DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY DisArray TO Tabla.* ON ACTION Adicionar ATTRIBUTES(TEXT = 'Adicionar', IMAGE = 'fa-address-book-o') INITIALIZE infoArray, des TO NULL LET infoArray.us_crea = usuarios LET infoArray.fech_crea = CURRENT YEAR TO DAY SELECT TOP(1) codigo INTO next_code FROM actb00001 ORDER BY codigo DESC LET infoArray.codigo = next_code + 1 INPUT BY NAME infoArray.*, des.*, apiCheck ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS) AFTER FIELD cuenta_no SELECT a.descripcion INTO des.descripcion2 FROM cgtb00001 a WHERE cuenta_no = infoArray.cuenta_no DISPLAY BY NAME des.descripcion2 AFTER FIELD cta_depr SELECT a.descripcion INTO des.descripcion3 FROM cgtb00001 a WHERE a.cuenta_no = infoArray.cta_depr DISPLAY BY NAME des.descripcion3 AFTER FIELD cta_gasto SELECT a.descripcion INTO des.descripcion4 FROM cgtb00001 a WHERE a.cuenta_no = infoArray.cta_gasto DISPLAY BY NAME des.descripcion4 AFTER FIELD departamento SELECT a.nom_dpto INTO des.descripcion5 FROM adtb00001 a WHERE a.departamento = infoArray.departamento DISPLAY BY NAME des.descripcion5 AFTER INPUT NEXT FIELD fabricante ON ACTION ACCEPT CALL insertData() EXIT INPUT ON ACTION CANCEL CALL msg(2) EXIT INPUT END INPUT ON ACTION Modificar ATTRIBUTES(TEXT = 'Modificar', IMAGE = 'refresh') INPUT BY NAME infoArray.*, apiCheck ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS) AFTER FIELD cuenta_no SELECT a.descripcion INTO des.descripcion2 FROM cgtb00001 a WHERE cuenta_no = infoArray.cuenta_no DISPLAY BY NAME des.descripcion2 AFTER FIELD cta_depr SELECT a.descripcion INTO des.descripcion3 FROM cgtb00001 a WHERE a.cuenta_no = infoArray.cta_depr DISPLAY BY NAME des.descripcion3 AFTER FIELD cta_gasto SELECT a.descripcion INTO des.descripcion4 FROM cgtb00001 a WHERE a.cuenta_no = infoArray.cta_gasto DISPLAY BY NAME des.descripcion4 AFTER FIELD departamento SELECT a.nom_dpto INTO des.descripcion5 FROM adtb00001 a WHERE a.departamento = infoArray.departamento DISPLAY BY NAME des.descripcion5 AFTER INPUT NEXT FIELD fabricante --Para que no se haga el auto accept ON ACTION ACCEPT CALL UpdateData(1) EXIT INPUT ON ACTION CANCEL CALL msg(2) EXIT INPUT END INPUT ON ACTION Eliminar ATTRIBUTES(TEXT = 'Eliminar', IMAGE = 'delete') LET answer = fgl_winquestion( "ELIMINAR REGISTRO", "Esta seguro/a que desea eliminar este registro? ", "yes", "yes|no", "question", 0) IF answer = 'yes' THEN CALL updateData(2) ELSE CALL msg(2) END IF ON ACTION Salir ATTRIBUTES(TEXT = 'Salir', IMAGE = 'exit2') EXIT PROGRAM BEFORE ROW CALL getdata(arr_curr()) DISPLAY BY NAME infoArray.* END DISPLAY END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION acpcad001() --Consultar Datos DEFINE i INT LET i = 1 PREPARE query FROM "SELECT a.codigo, a.descripcion, a.cuenta_no, b.nom_dpto FROM actb00001 a inner join adtb00001 b on a.departamento = b.departamento where a.status_t is null ORDER BY codigo" DECLARE buscar CURSOR FOR query FOREACH buscar INTO DisArray[i].* LET i = i + 1 END FOREACH END FUNCTION FUNCTION getdata(idx INT) {PREPARE query FROM 'SELECT a.codigo ,a.descripcion ,a.cuenta_no ,a.cta_depr ,a.cta_gasto ,a.departamento ,CONVERT(VARCHAR(10),fech_compra,103) ,a.duracion ,CONVERT(VARCHAR(10),fech_elim,103) ,a.referencia ,a.fabricante ,a.status_t ,a.us_crea ,a.fech_crea ,a.us_mod ,a.fech_mod FROM actb00001 a WHERE a.codigo = ' || DisArray[idx].codigo1 || ' ORDER BY a.codigo '} PREPARE query FROM "SELECT a.codigo ,a.descripcion ,a.cuenta_no ,a.cta_depr ,a.cta_gasto ,a.departamento ,CONVERT(VARCHAR(10),fech_compra,103) ,a.duracion ,CONVERT(VARCHAR(10),fech_elim,103) ,a.referencia ,a.fabricante ,a.status_t ,a.us_crea ,a.fech_crea ,a.us_mod ,a.fech_mod ,a.id_MaintainX ,a.id_codigo ,b.nombre FROM actb00001 a left join irtb00009 b on a.id_codigo = b.codigo WHERE a.codigo = " || DisArray[idx].codigo1 || " AND a.status_t is null ORDER BY a.codigo" EXECUTE query INTO infoArray.* SELECT a.descripcion INTO des.descripcion2 FROM cgtb00001 a WHERE cuenta_no = infoArray.cuenta_no SELECT a.descripcion INTO des.descripcion3 FROM cgtb00001 a WHERE a.cuenta_no = infoArray.cta_depr SELECT a.descripcion INTO des.descripcion4 FROM cgtb00001 a WHERE a.cuenta_no = infoArray.cta_gasto SELECT a.nom_dpto INTO des.descripcion5 FROM adtb00001 a WHERE a.departamento = infoArray.departamento DISPLAY BY NAME des.* END FUNCTION FUNCTION insertData() LET infoArray.fech_crea = CURRENT YEAR TO FRACTION BEGIN WORK IF apiCheck THEN CALL ApiMaintainX('POST',NULL, infoArray.*) RETURNING infoArray.id_MaintainX IF infoArray.id_MaintainX IS NULL THEN ROLLBACK WORK ELSE DISPLAY "nuevo ID: ",infoArray.id_MaintainX END IF END IF INSERT INTO actb00001( codigo, descripcion, cuenta_no, cta_dpr, cta_gasto, departamento, fech_compra, duracion, fech_elim, referencia, fabricante, status_t, us_crea, fech_crea, us_mod, fech_mod, id_maintainX, id_codigo) VALUES(infoArray.codigo, infoArray.descripcion1, infoArray.cuenta_no, infoArray.cta_depr, infoArray.cta_gasto, infoArray.departamento, infoArray.fech_compra, infoArray.duracion, NULL, infoArray.referencia, infoArray.fabricante, NULL, infoArray.us_crea, infoArray.fech_crea, NULL, NULL, infoArray.id_MaintainX, infoArray.id_maquina) INSERT INTO actb00005 VALUES(infoArray.codigo, infoArray.descripcion1, infoArray.cuenta_no, infoArray.cta_depr, infoArray.cta_gasto, infoArray.departamento, infoArray.fech_compra, infoArray.duracion, NULL, NULL, infoArray.us_crea, infoArray.fech_crea, NULL, NULL, NULL) 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 actb00001 SET descripcion = infoArray.descripcion1, cuenta_no = infoArray.cuenta_no, cta_depr = infoArray.cta_depr, cta_gasto = infoArray.cta_gasto, departamento = infoArray.departamento, fech_compra = infoArray.fech_compra, duracion = infoArray.duracion, referencia = infoArray.referencia, fabricante = infoArray.fabricante, id_codigo = infoArray.id_maquina, us_mod = usuarios, fech_mod = CURRENT YEAR TO FRACTION WHERE codigo = infoArray.codigo UPDATE actb00005 SET descripcion = infoArray.descripcion1, cuenta_no = infoArray.cuenta_no, cta_depr = infoArray.cta_depr, cta_gasto = infoArray.cta_gasto, departamento = infoArray.departamento, fech_compra = infoArray.fech_compra, duracion = infoArray.duracion, us_mod = usuarios, fech_mod = CURRENT YEAR TO FRACTION WHERE codigo = infoArray.codigo IF apiCheck THEN CALL ApiMaintainX('PATCH',infoArray.id_MaintainX, infoArray.*) RETURNING answer IF answer IS NULL THEN ROLLBACK WORK ELSE DISPLAY answer END IF END IF IF SQLCA.SQLCODE < 0 THEN ROLLBACK WORK CALL msg(1663) ELSE COMMIT WORK CALL msg(13) END IF EXIT CASE WHEN 2 BEGIN WORK UPDATE actb00001 SET status_t = 'E', us_mod = usuarios, fech_mod = CURRENT YEAR TO FRACTION, fech_elim = CURRENT YEAR TO FRACTION WHERE codigo = infoArray.codigo UPDATE actb00005 SET status_t = 'E', us_mod = usuarios, fech_mod = CURRENT YEAR TO FRACTION, fech_elim = CURRENT YEAR TO FRACTION WHERE codigo = infoArray.codigo IF apiCheck THEN CALL ApiMaintainX('DELETE',infoArray.id_MaintainX, infoArray.*) RETURNING answer END IF IF SQLCA.SQLCODE < 0 THEN ROLLBACK WORK CALL msg(1663) ELSE COMMIT WORK CALL msg(39) END IF OTHERWISE DISPLAY "Nothing happens..." END CASE END FUNCTION