{ ------------------------------------------------------------------ PROGRAMA : NOPRMT003 OBJETIVO : Programa para calcular REGALIA PASCUAL Y BONIFICACION PROGRAMADOR : Ing. Juan Soto FECHA REALIZACION : Agosto 23, 1993 ------------------------------------------------------------------ } GLOBALS "noprgb000.4gl" DEFINE fecha_ing ARRAY[200] OF DATE DEFINE salario ARRAY[200] OF DECIMAL(8,2) DEFINE tipo,funcion CHAR(1) DEFINE numero,mes_regal,ano_regal,dia_regal,mes_p,dia_m SMALLINT DEFINE fecha_ini,fecha_fin DATE DEFINE meses1,infotep,proporcion,regalia DECIMAL(8,2) FUNCTION noprmt013() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 LET formulario = formulario CLIPPED,"nofmmt013" OPEN FORM nofmmt013 FROM "nofmmt013" DISPLAY FORM nofmmt013 CALL pantalla() DISPLAY "noprmt003" AT 4,3 DISPLAY "Actualizacion Movimientos del Empleado" AT 6,21 LET funcion = null MENU "OPCION" COMMAND "REGALIA" LET funcion = "R" INPUT BY NAME numero,tipo WITHOUT DEFAULTS AFTER FIELD numero IF numero is null THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD numero END IF AFTER FIELD tipo IF tipo is null THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD tipo END IF SELECT fecha_del,fecha_al INTO fecha_ini,fecha_fin FROM notb00010 WHERE tipo_emp = tipo and num_nomi = numero IF status = notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD numero END IF DISPLAY BY NAME fecha_ini,fecha_fin EXIT INPUT END INPUT EXIT MENU COMMAND "BONIFICACION" LET funcion = "B" INPUT BY NAME numero,tipo WITHOUT DEFAULTS AFTER FIELD numero IF numero is null THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD numero END IF AFTER FIELD tipo IF tipo is null THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD tipo END IF SELECT fecha_del,fecha_al INTO fecha_ini,fecha_fin FROM notb00010 WHERE tipo_emp = tipo and num_nomi = numero IF status = notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD numero END IF DISPLAY BY NAME fecha_ini,fecha_fin EXIT INPUT END INPUT EXIT MENU COMMAND "LIQUIDACION" ERROR "NO IMPLEMENTADA" COMMAND "Salir" EXIT MENU END MENU IF funcion is null THEN RETURN END IF { MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" let int_flag = false CLEAR FORM CALL nopcad003() COMMAND "Eliminar" " Elimina Registro Cancela Operacion" let int_flag = false CALL nopcel003() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU} END FUNCTION {FUNCTION nopcad003() # WHENEVER ERROR CONTINUE LABEL vuelve: DISPLAY BY NAME numero,tipo,fecha_ini,fecha_fin CONSTRUCT criterio ON num_emp,departamento FROM adtb00003.num_emp,adtb00003.departamento IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE num_emp,departamento,nivel_emp,cod_puesto, ", "fech_efec,sueldo_ac ", " FROM adtb00003 where ", " status_t is null and ", criterio clipped, " ORDER BY 1,2,3,4" INPUT BY NAME fijo.cod_mov,fijo.valor ## VENTANA QUE BUSCA LOS MOVIMIENTOS ON KEY (CONTROL-W) CASE WHEN INFIELD (cod_mov) CALL busca_movimientos() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_mov END IF IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT descrip_mov,cantidad_cia,cantidad_cia INTO mov_nomi.descrip_mov,mov_nomi.cantidad_cia, mov_nomi.cantidad_emp FROM notb00002 WHERE cod_mov = fijo.cod_mov and status_t is null LET fijo.cod_mov = arr_fijo[curr1].cod_mov DISPLAY BY NAME fijo.cod_mov,mov_nomi.descrip_mov END CASE AFTER FIELD cod_mov IF fijo.cod_mov IS NOT NULL THEN SELECT descrip_mov,cantidad_cia,cantidad_emp INTO mov_nomi.descrip_mov,mov_nomi.cantidad_cia, mov_nomi.cantidad_emp FROM notb00002 WHERE cod_mov = fijo.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 valor IF funcion != "R" THEN IF fijo.valor is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF EXIT INPUT END INPUT ## SI NO EXISTE NINGUN PROBLEMA EN LA ENTRADA DE INFORMACION SE PROCEDE ## A INSERTAR EL REGISTRO PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca LET idx = 1 FOREACH datos INTO buscar_emp[idx].num_emp,buscar_emp[idx].departamento, buscar_emp[idx].nivel_emp,buscar_emp[idx].cod_puesto, fecha_ing[idx],salario[idx] LET regalia = 0 LET infotep = 0 LET proporcion = 0 # Calculo para la regalia IF funcion = "R" THEN LET mes_regal = month(fecha_ing[idx]) LET ano_regal = year(fecha_ing[idx]) LET dia_regal = day(fecha_ing[idx]) LET mes_p = month(fecha_fin) DECLARE b_dias CURSOR FOR SELECT * FROM notb00012 ORDER BY 1 LET dia_m = 0 FOREACH b_dias INTO dias_mes.* IF dias_mes.cod_mes = mes_regal THEN LET dia_m = dias_mes.dias EXIT FOREACH END IF END FOREACH IF ano_regal = year(fecha_fin) THEN LET proporcion = 1 - (dia_regal / dia_m) LET meses1 = (mes_p - mes_regal) + proporcion LET regalia = (salario[idx] * meses1) / 12 ELSE LET regalia = salario[idx] END IF LET fijo.valor = regalia END IF # Calculo de La Bonificacion IF funcion = "B" THEN LET infotep = fijo.valor * 0.005 END IF IF buscar_emp[idx].num_emp is not null THEN DELETE FROM notb00007 WHERE num_emp = buscar_emp[idx].num_emp and num_nomi = numero and tipo_emp = tipo INSERT INTO notb00007 VALUES (numero,tipo, buscar_emp[idx].num_emp, buscar_emp[idx].departamento,buscar_emp[idx].nivel_emp, buscar_emp[idx].cod_puesto,fijo.cod_mov,0,fijo.valor, null,USER, CURRENT,null,null) END IF LET idx = idx + 1 END FOREACH LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM IF status < 0 THEN CALL integridad() CLEAR FORM END IF GOTO vuelve END FUNCTION FUNCTION nopcel003() ## AQUI SE PREPARA PARA LA ELIMINACION FISICA DEL REGISTRO WHENEVER ERROR CONTINUE INPUT BY NAME numero,tipo AFTER FIELD numero IF numero is null THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD numero END IF AFTER FIELD tipo IF tipo is null THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD tipo END IF SELECT fecha_del,fecha_al INTO fecha_ini,fecha_fin FROM notb00010 WHERE tipo_emp = tipo and num_nomi = numero IF status = notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD numero END IF DISPLAY BY NAME fecha_ini,fecha_fin EXIT INPUT END INPUT DISPLAY BY NAME numero,tipo,fecha_ini,fecha_fin CONSTRUCT criterio ON num_emp,departamento FROM adtb00003.num_emp,adtb00003.departamento IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC2 = " SELECT UNIQUE num_emp,departamento,nivel_emp,cod_puesto ", " FROM adtb00003 where ", " status_t is null and ", criterio clipped, " ORDER BY 1,2,3,4" INPUT BY NAME fijo.cod_mov ## VENTANA QUE BUSCA LOS MOVIMIENTOS ON KEY (CONTROL-W) CASE WHEN INFIELD (cod_mov) CALL busca_movimientos() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_mov END IF IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT descrip_mov,cantidad_cia,cantidad_emp INTO mov_nomi.descrip_mov,mov_nomi.cantidad_cia, mov_nomi.cantidad_emp FROM notb00002 WHERE cod_mov = fijo.cod_mov and status_t is null LET fijo.cod_mov = arr_fijo[curr1].cod_mov DISPLAY BY NAME fijo.cod_mov,mov_nomi.descrip_mov END CASE AFTER FIELD cod_mov IF fijo.cod_mov IS NOT NULL THEN SELECT descrip_mov,cantidad_cia,cantidad_emp INTO mov_nomi.descrip_mov,mov_nomi.cantidad_cia, mov_nomi.cantidad_emp FROM notb00002 WHERE cod_mov = fijo.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 INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF EXIT INPUT END INPUT ## SI NO EXISTE NINGUN PROBLEMA SE PROCEDE A ELIMINAR EL REGISTRO PREPARE busca2 FROM selec2 DECLARE datos2 SCROLL CURSOR FOR busca2 LET idx = 1 FOREACH datos2 INTO buscar_emp[idx].num_emp,buscar_emp[idx].departamento, buscar_emp[idx].nivel_emp,buscar_emp[idx].cod_puesto IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF DELETE FROM notb00007 WHERE num_emp = buscar_emp[idx].num_emp and cod_mov = fijo.cod_mov and num_nomi = numero and tipo_emp = tipo LET idx = idx + 1 END FOREACH LET numero_msg = 39 CALL msg(numero_msg) IF status < 0 THEN CALL integridad() END IF END FUNCTION }