Files
MBS/PROYECTO/addir/vacaciones.4gl
T

228 lines
8.0 KiB
Plaintext

DEFINE vacacion RECORD
fecha_sal DATE,
fecha_ent DATE,
pano SMALLINT,
num_nomi INT,
dias_tomados DEC(12,2),
dias_vac INTEGER,
cod_mov1 SMALLINT,
cod_mov2 SMALLINT,
cod_mov3 SMALLINT,
# num_nomi_no SMALLINT,
valor_vacaciones DEC(12,2),
descrip_mov1 CHAR(50),
descrip_mov2 CHAR(50),
descrip_mov3 CHAR(50)
END RECORD,
vacac,xcod_mov,xcod_mov2,xcod_mov3 SMALLINT
DEFINE xbusca RECORD
departamento INT,
num_emp INT,
nombre varchar(255),
cod_puesto INT,
fecha_ingreso varchar(255),
fecha_Salida DATE,
fecha_entrada date,
sueldo float,
tipo_sueldo char(20)
END RECORD,
xtipo VARCHAR(30)
MAIN
CALL busca_empleados()
END MAIN
FUNCTION busca_empleados()
SELECT a.cod_mov,a.cod_mov2,a.cod_mov3,a.tipo_mov
INTO xcod_mov,xcod_mov2,xcod_mov3,xtipo FROM adtb00009 a
WHERE a.cod_mto = acc_per.cod_mto
DECLARE busca CURSOR FOR SELECT * INTO xbusca.* FROM tmpvacaciones ORDER BY num_emp
FOREACH busca
LET vacacion.num_nomi=2005
LET vacacion.cod_mov1=36
CALL vacaciones("A",xbusca.tipo_sueldo)
END FOREACH
END FUNCTION
FUNCTION vacaciones(operacion,tipo_sueldo)
DEFINE fecha_nom CHAR(10),
dias_tomados_real,balance_dias,psueldo,salario DEC(12,2),
pfecha,fecha_entrada_emp DATE,
dias_sueldo SMALLINT,
sale,operacion VARCHAR(1),
tipo_sueldo VARCHAR(20)
LET int_flag = FALSE
DISPLAY "TIPO SUELDO ",tipo_sueldo
IF operacion ='A' THEN
LET vacacion.cod_mov1=xcod_mov
LET vacacion.cod_mov2 = NULL
LET vacacion.cod_mov3=xcod_mov3
LET vacacion.descrip_mov1=NULL
LET vacacion.descrip_mov2=NULL
LET vacacion.descrip_mov3=NULL
SELECT a.descrip_mov INTO vacacion.descrip_mov1
FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov1
SELECT a.descrip_mov INTO vacacion.descrip_mov2
FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov2
SELECT a.descrip_mov INTO vacacion.descrip_mov3
FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov3
LET vacacion.pano = YEAR(xbusca.fecha_ingreso)
LET vacac = xbusca.fecha_Salida - xbusca.fecha_ingreso
LET vacacion.fecha_ent = vacacion.fecha_sal + 14
DISPLAY BY NAME vacacion.fecha_ent
AFTER FIELD fecha_ent
IF vacacion.fecha_ent IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_ent
END IF
IF vacacion.fecha_ent - vacacion.fecha_sal > 20 THEN
CALL fgl_winmessage("INFO","FECHA EXCEDE AL LIMITE DISFRUTE","INFO")
NEXT FIELD fecha_sal
END IF
####### CALCULO DE LOS DIAS VACACIONADOS ###########
LET vacacion.dias_tomados = vacacion.fecha_ent - vacacion.fecha_sal
LET dias_tomados_real=0
LET pfecha = vacacion.fecha_sal
FOR idx= 1 TO (vacacion.dias_tomados+1)
IF WEEKDAY(pfecha) <> 6 THEN
IF WEEKDAY(pfecha) <> 0 THEN
LET dias_tomados_real = dias_tomados_real + 1
END IF
END IF
IF WEEKDAY(pfecha) = 0 THEN
LET dias_tomados_real =dias_tomados_real + .5
END IF
LET pfecha = pfecha+1
END FOR
LET vacacion.dias_vac = dias_tomados_real
DISPLAY BY NAME vacacion.dias_vac
AFTER FIELD pano
IF vacacion.pano IS NOT NULL THEN
SELECT SUM(a.num_dia) INTO vacacion.dias_tomados
FROM adtb00032 a
WHERE a.periodo = vacacion.pano AND
a.num_emp = acc_per.num_emp AND
a.status_t IS NULL
IF vacacion.dias_tomados IS NULL THEN
LET vacacion.dias_tomados=0
END IF
LET balance_dias = vacacion.dias_vac - vacacion.dias_tomados
DISPLAY BY NAME vacacion.dias_tomados,balance_Dias
END IF
AFTER FIELD num_nomi
IF vacacion.num_nomi IS NOT NULL THEN
SELECT CONVERT(CHAR(10),a.fecha_al,103) INTO fecha_nom FROM notb00010 a
WHERE a.tipo_emp = acc_per.nomina AND a.num_nomi = vacacion.num_nomi
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NOMINA NO EXISTE","INFO")
NEXT FIELD num_nomi
END IF
# SELECT MIN(a.num_nomi) INTO vacacion.num_nomi_no
# FROM notb00010 a
# WHERE a.num_nomi > vacacion.num_nomi AND a.tipo_emp = acc_per.nomina
IF vacac < 1825 THEN
LET dias2=14
ELSE
LET dias2=18
END IF
IF vacacion.cod_mov1 = 36 THEN
LET salario = 0
SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
LET salario_quincenal = salario /2
LET dias_sueldo = fecha_nom - fecha_entrada_emp
IF dias_sueldo > 30 AND tipo_sueldo = "VARIABLE" THEN
CALL calcula_salarios(acc_per.nomina,acc_per.num_emp,fecha_nom) RETURNING psueldo
ELSE
DISPLAY acc_per.sueldo_ac
LET psueldo = acc_per.sueldo_ac/23.83
#DISPLAY "sueldo ",acc_per.sueldo_ac," dias ",dias2
END IF
DISPLAY "DATA ",psueldo," dias ",dias2," salario q ",salario_quincenal
LET proporcion_vacaciones=0
LET vacacion.valor_vacaciones = psueldo*dias2
LET proporcion_vacaciones = vacacion.valor_vacaciones - salario_quincenal
DISPLAY BY NAME fecha_nom,vacacion.valor_vacaciones,proporcion_vacaciones,
salario,salario_quincenal
END IF
END IF
{ AFTER FIELD num_nomi_no
IF vacacion.num_nomi_no IS NOT NULL THEN
SELECT CONVERT(CHAR(10),a.fecha_al,103) FROM notb00010 a
WHERE a.tipo_emp = acc_per.nomina AND a.num_nomi = vacacion.num_nomi_no
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NOMINA NO EXISTE","INFO")
NEXT FIELD num_nomi
END IF
END IF
}
AFTER INPUT
## VERIFICA QUE LA FECHA DE REGRESO DE VACACIONES NO SEA MENOR QUE LA FECHA
## DE INICIO DE LAS VACACIONES
IF INT_FLAG THEN
INITIALIZE vacacion.* TO NULL
EXIT INPUT
END IF
IF vacacion.fecha_ent < vacacion.fecha_sal THEN
LET numero_msg = 51
CALL msg(numero_msg)
NEXT FIELD fecha_ent
END IF
IF vacacion.cod_mov1 IS NOT NULL THEN
############## PROCESO PARA CALCULAR LOS DIAS QUE DEBE VACACIONAR #######
IF vacac < 1825 THEN
LET dias2=14
ELSE
LET dias2=18
END IF
DISPLAY BY NAME vacacion.dias_tomados
END IF
LET opt = fgl_Winquestion("INFO","TODA LA INFORMACION ESTA CORRECTA?","NO","YES|NO","QUESTION",0)
IF opt = 'NO' THEN
CONTINUE INPUT
END IF
END INPUT
ELSE
LET salario = 0
SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
LET salario_quincenal = salario /2
DISPLAY BY NAME proporcion_vacaciones,fecha_nom,tipo_sueldo,salario,salario_quincenal
INPUT BY NAME vacacion.*,dias2 WITHOUT DEFAULTS
END IF
END FUNCTION