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

197 lines
8.3 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),
num_emp INT,
fecha_entrada_emp DATE
END RECORD
FUNCTION vacaciones(operacion,tipo_sueldo,xcod_mov,xcod_mov3,fecha_per,fecha_entrada_emp,
fecha_salida,num_nomi,xnum_emp,xtipo_emp,salario)
DEFINE fecha_nom CHAR(10),
dias_tomados_real,balance_dias,psueldo,salario,salario_quincenal,proporcion_vacaciones DEC(12,2),
fecha_per,pfecha,fecha_inicio,fecha_entrada_emp,fecha_salida DATE,
dias_sueldo,xcod_mov,xcod_mov3,vacac,idx,dias2 SMALLINT,
sale,operacion VARCHAR(1) ,
estado,tipo_sueldo,xtipo_emp STRING,
num_nomi,xnum_emp INT
LET int_flag = FALSE
IF operacion ='A' THEN
LET sale = 'N'
LET vacacion.fecha_ent = fecha_entrada_Emp
LET vacacion.fecha_sal = fecha_salida
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
LET vacacion.num_nomi = num_nomi
LET vacacion.num_emp = xnum_emp
LET vacacion.fecha_entrada_emp = fecha_entrada_Emp
LET vacacion.pano = YEAR(fecha_per)
IF vacacion.cod_mov1 IS NOT NULL THEN
SELECT DISTINCT a.periodo FROM adtb00032 a WHERE a.num_emp = xnum_emp AND
a.periodo = vacacion.pano AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
LET estado ="NO PUEDES PAGARLE VACACIONES A ESTE EMPLEADO EN EL MISMO PERIODO"
RETURN estado,proporcion_vacaciones,vacacion.valor_vacaciones,vacacion.dias_tomados,balance_dias
END IF
LET estado = "DIAS TOMADOS ",vacacion.dias_tomados," VALOR ",vacacion.valor_vacaciones USING "###,###.##"
END IF
IF vacacion.fecha_sal IS NULL THEN
LET vacacion.fecha_sal = today
END IF
LET vacac = vacacion.fecha_sal - fecha_entrada_emp
IF vacac < 365 THEN
LET estado = "EMPLEADO NO TIENE EL PERIODO COMPLETO PARA EL PAGO DE VACACIONES"
RETURN estado,proporcion_vacaciones,vacacion.valor_vacaciones,vacacion.dias_tomados,balance_dias
END IF
DISPLAY "data ",xnum_emp," ",vacacion.fecha_sal
LET vacacion.fecha_ent = vacacion.fecha_sal + 14
IF vacacion.fecha_ent - vacacion.fecha_sal > 20 THEN
LET estado = "FECHA EXCEDE AL LIMITE DISFRUTE"
RETURN estado,proporcion_vacaciones,vacacion.valor_vacaciones,vacacion.dias_tomados,balance_dias
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 "dias vac ",dias_tomados_real," ",vacacion.dias_vac," pano ",vacacion.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 = xnum_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
END IF
IF vacac < 1825 THEN
LET dias2=14
ELSE
LET dias2=18
END IF
IF vacacion.cod_mov1 = 36 THEN
# LET salario = 0
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(xtipo_emp,xnum_emp,fecha_nom) RETURNING psueldo
ELSE
LET psueldo = salario/23.83
DISPLAY "else psueldo ",psueldo," salario ",salario
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
END IF
END IF
DISPLAY "valor vac ",vacacion.valor_vacaciones
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
LET estado = "DIAS VACACIONADOS ", vacacion.dias_tomados
END IF
RETURN estado,proporcion_vacaciones,vacacion.valor_vacaciones,vacacion.dias_tomados,balance_dias
END FUNCTION
FUNCTION adicionavac()
DEFINE trxnum INT
SELECT max(a.num_trx) INTO trxnum FROM adtb00020 a
LET trxnum = trxnum + 1
INSERT INTO adtb00032
(num_trx
,num_emp
,cod_mov
,cod_mov2
,fecha
,num_dia
,us_crea
,fech_crea
,fecha_sal
,fecha_ent
,num_nomi
,num_dias_pagados
,num_dias_disfrute
,periodo
,valor_vacaciones,
proporcion_vacaciones)
VALUES (trxnum,xnum_emp,vacacion.cod_mov1,vacacion.cod_mov2,
vacacion.fecha_ent,vacacion.dias_tomados,
usuarios,GETDATE(),vacacion.fecha_sal,vacacion.fecha_ent,
vacacion.num_nomi,dias2,
vacacion.dias_vac, vacacion.pano,vacacion.valor_vacaciones,proporcion_vacaciones)
IF vacacion.cod_mov1 IS NOT NULL AND vacacion.num_nomi IS NOT NULL THEN
INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,nivel_emp,cod_puesto,cod_mov,valor,us_crea,
fech_crea,num_trx,cod_mto)
VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.nivel_emp,
acc_per.cod_puesto,vacacion.cod_mov1,proporcion_vacaciones,usuarios,getdate(),
acc_per.num_trx,acc_per.cod_mto)
END IF
IF vacacion.cod_mov2 IS NOT NULL AND vacacion.num_nomi IS NOT NULL THEN
INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,nivel_emp,cod_puesto,cod_mov,valor,us_crea,
fech_crea,num_trx,cod_mto)
VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.nivel_emp,
acc_per.cod_puesto,vacacion.cod_mov2,salario_quincenal,usuarios,getdate(),
acc_per.num_trx,acc_per.cod_mto)
END IF
END FUNCTION