Files
MBS/PROYECTO/nodir/noprmt013.4gl
T

416 lines
14 KiB
Plaintext

{
------------------------------------------------------------------
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"
"<Esc> Adiciona Registro <CTRL-C> Cancela Operacion"
let int_flag = false
CLEAR FORM
CALL nopcad003()
COMMAND "Eliminar"
"<Esc> Elimina Registro <CTRL-C> 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
}