416 lines
14 KiB
Plaintext
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
|
|
}
|