GLOBALS "noprgb000.4gl" DEFINE main_r RECORD num_emp SMALLINT, departamento SMALLINT, nivel_emp SMALLINT, cod_puesto SMALLINT, descrip1 STRING, num_doc SMALLINT, cod_mov SMALLINT, descrip_mov STRING, moneda INT, monto DECIMAL(10, 2), monto2 DECIMAL(10, 2), porciento DECIMAL(5, 2), fecha DATE, status_t CHAR(1), us_crea STRING, fech_crea DATE, us_mod STRING, fech_mod DATE END RECORD DEFINE p_nomina CHAR(1) DEFINE num_ctrl, num_ctrl1 CHAR(8) DEFINE monto1 DECIMAL(12, 2) DEFINE checker DECIMAL(12, 2), num_nomi SMALLINT, pfecha, fecha1 DATE 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 noprmt040() END MAIN FUNCTION noprmt040() OPEN FORM nofmmt040 FROM "nofmmt040" DISPLAY FORM nofmmt040 MENU ON ACTION nuevo INITIALIZE main_r.* TO NULL CALL agregar() ON ACTION consultar CALL consultar_editar() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION agregar() INPUT BY NAME main_r.* ATTRIBUTES(WITHOUT DEFAULTS) AFTER FIELD num_emp IF main_r.num_emp IS NOT NULL THEN SELECT departamento, nivel_emp, cod_puesto, nom1_emp, apell1_emp, nomina INTO main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, nombre1, apellido1, p_nomina FROM adtb00003 WHERE num_emp = main_r.num_emp AND (status_t IS NULL OR status_t = "I") IF status = NOTFOUND THEN LET numero_msg = 159 CALL msg(numero_msg) NEXT FIELD num_emp END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_puesto END IF LET main_r.descrip1 = nombre1 CLIPPED, " ", apellido1 CLIPPED DISPLAY BY NAME main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.descrip1 AFTER FIELD num_doc IF main_r.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF LET num_ctrl = main_r.num_doc USING "<<<<<<<<" LET num_ctrl1 = YEAR(TODAY) USING "&&&&" IF num_ctrl[1, 2] = num_ctrl1[3, 4] THEN LET numero_msg = 216 CALL msg(numero_msg) NEXT FIELD num_doc END IF AFTER FIELD cod_mov SELECT UNIQUE @num_doc FROM notb00022 WHERE @num_emp = main_r.num_emp AND @num_doc = main_r.num_doc AND @cod_mov = main_r.cod_mov IF status >= 0 THEN IF status != NOTFOUND THEN IF main_r.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT * INTO main_r.* FROM notb00022 WHERE num_emp = main_r.num_emp AND num_doc = main_r.num_doc AND cod_mov = main_r.cod_mov DISPLAY BY NAME main_r.* LET numero_msg = 12 CALL msg(numero_msg) INITIALIZE main_r.* TO NULL SLEEP 2 NEXT FIELD num_emp END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF IF main_r.cod_mov IS NOT NULL THEN SELECT descrip_mov INTO main_r.descrip_mov FROM notb00002 WHERE cod_mov = main_r.cod_mov AND status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF DISPLAY BY NAME main_r.descrip_mov AFTER FIELD fecha IF main_r.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD monto IF main_r.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF BEFORE FIELD porciento LET main_r.porciento = 0 LET main_r.monto2 = 0 DISPLAY BY NAME main_r.porciento, main_r.monto2 AFTER FIELD porciento IF main_r.porciento IS NOT NULL THEN LET monto1 = (main_r.monto * main_r.porciento) / 100 LET main_r.monto2 = main_r.monto - monto1 END IF DISPLAY BY NAME main_r.monto2 AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF BEGIN WORK # Inserta en nomina los main_r de los empleados DELETE FROM notb00008 WHERE num_emp = main_r.num_emp AND cod_mov = main_r.cod_mov AND num_nomi = main_r.num_doc INSERT INTO notb00008( num_emp, departamento, nivel_emp, cod_puesto, cod_mov, valor, fecha, num_nomi, tipo_emp, clase_mov, us_crea, fech_crea) VALUES(main_r.num_emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.cod_mov, main_r.monto2, main_r.fecha, main_r.num_doc, p_nomina, "F", SUSER_SNAME(), GETDATE()) INSERT INTO notb00022 VALUES(main_r.num_emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.num_doc, main_r.cod_mov, main_r.fecha, main_r.monto, main_r.porciento, NULL, SUSER_SNAME(), GETDATE(), NULL, NULL, NULL) COMMIT WORK LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION FUNCTION consultar_editar() CONSTRUCT criterio ON a.num_emp, a.num_doc, a.cod_mov FROM num_emp, num_doc, cod_mov IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = "SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,", "num_doc,a.cod_mov,CONVERT(CHAR(10),a.fecha,103),a.monto,a.porciento,a.status_t,a.us_crea,", " a.fech_crea,a.us_mod,a.fech_mod FROM notb00022 a WHERE a.status_t is null and ", criterio CLIPPED, " ORDER BY a.cod_mov,a.num_emp,a.fecha" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO main_r.num_Emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.num_doc, main_r.cod_mov, main_r.fecha, main_r.monto, main_r.porciento, main_r.status_t, main_r.us_Crea, main_r.fech_crea, main_r.us_mod, main_r.fech_mod IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF CALL buscadata() MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO main_r.num_Emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.num_doc, main_r.cod_mov, main_r.fecha, main_r.monto, main_r.porciento, main_r.status_t, main_r.us_Crea, main_r.fech_crea, main_r.us_mod, main_r.fech_mod IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL buscadata() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO main_r.num_Emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.num_doc, main_r.cod_mov, main_r.fecha, main_r.monto, main_r.porciento, main_r.status_t, main_r.us_Crea, main_r.fech_crea, main_r.us_mod, main_r.fech_mod IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL buscadata() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO main_r.num_Emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.num_doc, main_r.cod_mov, main_r.fecha, main_r.monto, main_r.porciento, main_r.status_t, main_r.us_Crea, main_r.fech_crea, main_r.us_mod, main_r.fech_mod CALL buscadata() LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO main_r.num_Emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.num_doc, main_r.cod_mov, main_r.fecha, main_r.monto, main_r.porciento, main_r.status_t, main_r.us_Crea, main_r.fech_crea, main_r.us_mod, main_r.fech_mod CALL buscadata() LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF main_r.status_t = "E" THEN LET numero_msg = 39 CALL msg(numero_msg) RETURN END IF PREPARE query2 FROM "select top 1 fecha_del, fecha_al from notb00010 where fecha_cierre_nomina < getdate() and status_t is null order by fecha_cierre_nomina DESC" EXECUTE query2 INTO pfecha, fecha1 IF main_r.fecha < pfecha OR main_r.fecha > fecha1 THEN CALL fgl_winmessage( "FUERA DE RANGO", "Este documento se encuentra fuera de nomina", "fa-minus-circle" ) RETURN END IF INPUT BY NAME main_r.num_doc, main_r.monto, main_r.porciento, main_r.us_crea, main_r.fech_crea, main_r.us_mod, main_r.fech_mod WITHOUT DEFAULTS AFTER FIELD num_doc IF main_r.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF LET num_ctrl = main_r.num_doc USING "<<<<<<<<" LET num_ctrl1 = YEAR(TODAY) USING "&&&&" IF num_ctrl[1, 2] = num_ctrl1[3, 4] THEN LET numero_msg = 216 CALL msg(numero_msg) NEXT FIELD num_doc END IF AFTER FIELD monto IF main_r.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF BEFORE FIELD porciento LET main_r.monto2 = 0 DISPLAY BY NAME main_r.monto2 AFTER FIELD porciento IF main_r.porciento IS NOT NULL THEN LET monto1 = (main_r.monto * main_r.porciento) / 100 LET main_r.monto2 = main_r.monto - monto1 END IF DISPLAY BY NAME main_r.monto2 #### Verifica si el usuario presiono la tecla AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF SELECT nomina INTO p_nomina FROM adtb00003 WHERE num_emp = main_r.num_emp AND (status_t IS NULL OR status_t = "I") BEGIN WORK DELETE FROM notb00008 WHERE num_emp = main_r.num_emp AND cod_mov = main_r.cod_mov AND num_nomi = main_r.num_doc SELECT UNIQUE valor INTO checker FROM notb00008 WHERE cod_mov = main_r.cod_mov ORDER BY fech_crea ASC IF checker > 0 THEN LET main_r.monto2 = main_r.monto2 * -1 END IF INSERT INTO notb00008( num_emp, departamento, nivel_emp, cod_puesto, cod_mov, valor, fecha, num_nomi, tipo_emp, clase_mov, us_crea, fech_crea) VALUES(main_r.num_emp, main_r.departamento, main_r.nivel_emp, main_r.cod_puesto, main_r.cod_mov, main_r.monto2, main_r.fecha, main_r.num_doc, p_nomina, "F", SUSER_SNAME(), GETDATE()) CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF UPDATE notb00022 SET cod_mov = main_r.cod_mov, fecha = main_r.fecha, monto = main_r.monto, porciento = main_r.porciento, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_emp = main_r.num_emp AND num_doc = main_r.num_doc AND cod_mov = main_r.cod_mov CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) EXIT INPUT END INPUT COMMAND KEY("L") "eLiminar" LET opcion = fgl_winquestion( "ELIMINAR", "ESTA SEGURO DE ELIMINAR ESTE REGISTRO?", "YES", "YES|NO", "question", 0) DISPLAY opcion IF opcion = "Y" THEN BEGIN WORK UPDATE notb00022 SET status_t = "E", us_mod = suser_sname(), fech_mod = getdate() WHERE notb00022.num_emp = main_r.num_emp AND notb00022.num_doc = main_r.num_doc AND notb00022.cod_mov = main_r.cod_mov UPDATE notb00008 SET status_t = "E", us_mod = suser_sname(), fech_mod = getdate() WHERE notb00008.num_emp = main_r.num_emp AND notb00008.num_nomi = main_r.num_doc AND notb00008.cod_mov = main_r.cod_mov AND notb00008.clase_mov = 'F' COMMIT WORK LET numero_msg = 39 CALL msg(numero_msg) END IF COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION buscadata() SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = main_r.cod_mov SELECT nom1_emp, apell1_emp INTO nombre1, apellido1 FROM adtb00003 WHERE num_emp = main_r.num_emp LET descrip1 = nombre1 CLIPPED, " ", apellido1 CLIPPED IF main_r.porciento IS NOT NULL THEN LET monto1 = (main_r.monto * main_r.porciento) / 100 LET main_r.monto2 = main_r.monto - monto1 END IF DISPLAY BY NAME main_r.monto2 DISPLAY BY NAME main_r.*, descrip1, mov_nomi.descrip_mov END FUNCTION