228 lines
8.0 KiB
Plaintext
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
|