197 lines
8.3 KiB
Plaintext
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 |