{ ------------------------------------------------------------------ PROGRAMA : NOPRMT011 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Control de Prestamos y Facturas PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Septiembre 09, 1993 ------------------------------------------------------------------ } GLOBALS "noprgb000.4gl" DEFINE monto1,monto2 DECIMAL(12,2) DEFINE p_nomina CHAR(1), opcion VARCHAR(3) DEFINE num_ctrl,num_ctrl1 CHAR(8) 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 noprmt011() END MAIN FUNCTION noprmt011() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 LET formulario = formulario CLIPPED,"nofmmt011" OPEN FORM nofmmt011 FROM "nofmmt011" DISPLAY FORM nofmmt011 # CALL pantalla() # DISPLAY "noprmt011" AT 4,3 # DISPLAY "Control de Prestamos y Facturas" AT 6,25 MENU ON ACTION nuevo let int_flag = false CLEAR FORM CALL nopcad011() ON ACTION buscar let int_flag = false CALL nopcmf011() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION nopcad011() # WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro LABEL entrada: INPUT BY NAME presta.* ## Verifica que el registro no exista. Si existe, entonces despliega los ## datos del registro existente. AFTER FIELD num_emp IF presta.num_emp IS NOT NULL THEN SELECT departamento,nivel_emp,cod_puesto,nom1_emp,apell1_emp, nomina INTO presta.departamento,presta.nivel_emp, presta.cod_puesto,nombre1,apellido1,p_nomina FROM adtb00003 WHERE num_emp = presta.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 descrip1 = nombre1 clipped," ",apellido1 clipped DISPLAY BY NAME presta.departamento,presta.nivel_emp, presta.cod_puesto,descrip1 AFTER FIELD num_doc IF presta.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF LET num_ctrl = presta.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 {IF presta.cod_mov = 25 THEN LET numero_msg = 203 CALL msg(numero_msg) NEXT FIELD cod_mov END IF} SELECT unique @num_doc FROM notb00011 WHERE @num_emp = presta.num_emp and @num_doc = presta.num_doc and @cod_mov = presta.cod_mov IF status >= 0 THEN IF status != NOTFOUND THEN IF presta.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT * INTO presta.* FROM notb00011 WHERE num_emp = presta.num_emp and num_doc = presta.num_doc and cod_mov = presta.cod_mov DISPLAY BY NAME presta.* LET numero_msg = 12 CALL msg(numero_msg) DISPLAY BY NAME mov_nomi.descrip_mov INITIALIZE presta.* 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 presta.cod_mov is not null THEN SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = presta.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 mov_nomi.descrip_mov AFTER FIELD fecha IF presta.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF { SELECT max(fecha) INTO fecha_control FROM notb00008 IF presta.fecha < fecha_control THEN LET numero_msg = 57 CALL msg(numero_msg) NEXT FIELD fecha END IF} AFTER FIELD monto IF presta.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF BEFORE FIELD porciento LET presta.porciento = 0 LET monto2 = 0 DISPLAY BY NAME presta.porciento,monto2 AFTER FIELD porciento IF presta.porciento IS NOT NULL THEN LET monto1 = (presta.monto * presta.porciento)/100 LET monto2 = presta.monto - monto1 END IF DISPLAY BY NAME monto2 AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # IF cuota IS NULL OR cuota = 0 THEN # CALL fgl_winmessage("INFO","DEBES DE DIGITAR LA CUOTA QUE PAGARA ESTE EMPLEADO","INFO") # NEXT FIELD cuota # 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 prestamos de los empleados DELETE FROM notb00008 WHERE num_emp = presta.num_emp and cod_mov = presta.cod_mov and num_nomi = presta.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 (presta.num_emp,presta.departamento,presta.nivel_emp, presta.cod_puesto,presta.cod_mov,monto2,presta.fecha, presta.num_doc,p_nomina,"F", SUSER_SNAME(),GETDATE()) INSERT INTO notb00011 VALUES (presta.num_emp,presta.departamento,presta.nivel_emp, presta.cod_puesto,presta.num_doc,presta.cod_mov,presta.fecha, presta.monto,presta.porciento,null,SUSER_SNAME(),GETDATE(),null,NULL,presta.valor_cuota) IF presta.valor_cuota IS NOT NULL AND presta.valor_cuota <> 0 THEN CALL actualizacuota() END IF COMMIT WORK LET numero_msg = 1 CALL msg(numero_msg) # CLEAR FORM GOTO entrada END FUNCTION FUNCTION nopcmf011() ## Aqui se prepara para la captura del criterio de seleccion LET monto2 = 0 DISPLAY BY NAME monto2 # WHENEVER ERROR CONTINUE 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 notb00011 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 presta.num_Emp,presta.departamento,presta.nivel_emp, presta.nivel_emp,presta.num_doc,presta.cod_mov, presta.fecha,presta.monto,presta.porciento,presta.status_t, presta.us_Crea,presta.fech_crea,presta.us_mod,presta.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 presta.* 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 presta.* 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 presta.* CALL buscadata() LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO presta.* CALL buscadata() LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF presta.status_t = "E" THEN LET numero_msg = 39 CALL msg(numero_msg) RETURN END IF INPUT BY NAME presta.num_doc,presta.monto,presta.porciento, presta.valor_cuota, presta.us_crea,presta.fech_crea,presta.us_mod, presta.fech_mod WITHOUT DEFAULTS AFTER FIELD num_doc IF presta.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF LET num_ctrl = presta.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 presta.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF BEFORE FIELD porciento LET monto2 = 0 DISPLAY BY NAME monto2 AFTER FIELD porciento IF presta.porciento IS NOT NULL THEN LET monto1 = (presta.monto * presta.porciento)/100 LET monto2 = presta.monto - monto1 END IF DISPLAY BY NAME 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 # IF cuota IS NULL OR cuota = 0 THEN # CALL fgl_winmessage("INFO","DEBES DE DIGITAR LA CUOTA QUE PAGARA ESTE EMPLEADO","INFO") # NEXT FIELD cuota # END IF # Inserta en nomina los prestamos de los empleados SELECT nomina INTO p_nomina FROM adtb00003 WHERE num_emp = presta.num_emp AND (status_t IS NULL or status_t = "I") BEGIN WORK DELETE FROM notb00008 WHERE num_emp = presta.num_emp and cod_mov = presta.cod_mov AND num_nomi = presta.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 (presta.num_emp,presta.departamento,presta.nivel_emp, presta.cod_puesto,presta.cod_mov,monto2,presta.fecha, presta.num_doc,p_nomina,"F",SUSER_SNAME(),GETDATE()) CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF UPDATE notb00011 SET cod_mov = presta.cod_mov, fecha = presta.fecha, monto = presta.monto, porciento = presta.porciento, valor_cuota = presta.valor_cuota, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_emp = presta.num_emp and num_doc = presta.num_doc AND cod_mov = presta.cod_mov CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF IF presta.valor_cuota IS NOT NULL AND presta.valor_cuota <> 0 THEN CALL actualizacuota() 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?","NO","NO|YES","QUESTION",0) IF opcion = "YES" THEN BEGIN WORK UPDATE notb00011 SET status_t = "E", us_mod = suser_sname(), fech_mod = getdate() WHERE notb00011.num_emp = presta.num_emp AND notb00011.num_doc = presta.num_doc AND notb00011.cod_mov = presta.cod_mov UPDATE notb00008 SET status_t = "E", us_mod = suser_sname(), fech_mod = getdate() WHERE notb00008.num_emp = presta.num_emp AND notb00008.num_nomi = presta.num_doc AND notb00008.cod_mov = presta.cod_mov AND notb00008.clase_mov = 'F' DELETE FROM notb00003 WHERE cod_mov = presta.cod_mov AND num_emp = presta.num_emp 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 actualizacuota() SELECT a.cod_mov FROM notb00003 a WHERE a.num_emp = presta.num_emp AND a.cod_mov = presta.cod_mov IF STATUS = NOTFOUND THEN INSERT INTO notb00003(num_emp,departamento,nivel_emp,cod_puesto,cod_mov,valor,us_crea,fech_Crea) VALUES (presta.num_emp,presta.departamento,presta.nivel_emp,presta.cod_puesto,presta.cod_mov, presta.valor_cuota,usuarios,getdate()) ELSE LET opcion = fgl_winquestion("ACTUALIZAR", "EL EMPLEADO TIENE UNA CUOTA DE UN PRESTAMO, DESAS ACTUALIZAR LA CUOTA CON ESTA NUEVA?" ,"NO","NO|YES","QUESTION",0) IF opcion = "YES" THEN UPDATE notb00003 SET valor = presta.valor_cuota, us_mod = usuarios, fech_mod = getdate() WHERE num_Emp = presta.num_emp AND cod_mov = presta.cod_mov END IF END IF END FUNCTION FUNCTION buscadata() SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = presta.cod_mov SELECT nom1_emp,apell1_emp INTO nombre1,apellido1 FROM adtb00003 WHERE num_emp = presta.num_emp SELECT a.valor INTO presta.valor_cuota FROM notb00003 a WHERE a.num_emp = presta.num_emp AND a.cod_mov = presta.cod_mov LET descrip1 = nombre1 clipped," ",apellido1 clipped IF presta.porciento IS NOT NULL THEN LET monto1 = (presta.monto * presta.porciento)/100 LET monto2 = presta.monto - monto1 END IF DISPLAY BY NAME monto2,presta.valor_cuota DISPLAY BY NAME presta.*,descrip1,mov_nomi.descrip_mov END FUNCTION