Files
MBS/PROYECTO/nodir/noprrp037.4gl
T

803 lines
28 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : NOPRRP037
OBJETIVO : LIQUIDACION DE EMPLEADOS SIN VACACIONES
PROGRAMADOR : JUAN F. SOTO
FECHA REALIZACION : Abril 14, 1999
-------------------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
DEFINE fecha_comision,fecha_regalia,fecha_boni,fecha_liquida,fecha_final,fecha_inicial,fecha_ic DATE,
cfecha_regalia CHAR(8),
anos_ley_anterior,meses_ley_anterior,mes_ley_anterior,ano_ley_anterior,
mes_ingreso,mes_salida,ano_ingreso,ano_salida,meses_bonificacion,
dias_ley_anterior SMALLINT,
comisiones_b,ingresos_emp,comision_m,meses_bonificacion1,bonificacion_pagada DEC(12,2),
dias_comision INTEGER
DEFINE liquida RECORD
departamento INTEGER,
puesto LIKE adtb00003.cod_puesto,
num_emp LIKE adtb00003.num_emp,
nombre LIKE adtb00003.nom1_emp,
apellido LIKE adtb00003.apell1_emp,
fecha_ingreso LIKE adtb00003.fech_efec,
sueldo_actual LIKE adtb00003.sueldo_ac,
sueldo_promedio LIKE adtb00003.sueldo_ac,
salario_dia LIKE adtb00003.sueldo_ac,
tiempo_empresa DECIMAL(6,2),
anos_empresa INTEGER,
meses_empresa INTEGER,
dias_empresa INTEGER,
dias_cesantia INTEGER,
monto_cesantia DECIMAL(12,2),
dias_preaviso INTEGER,
monto_preaviso DECIMAL(12,2),
dias_vacaciones INTEGER,
monto_vacaciones DECIMAL(12,2),
ultimas_vacaciones DATE,
num_nomi LIKE notb00008.num_nomi ,
monto_regalia DECIMAL(12,2),
monto_bonificacion DECIMAL(12,2)
END RECORD,
calcula_boni,incentivos DECIMAL(12,2)
DEFINE calcula_meses,salir CHAR(1),
fecha_b,fecha_b1 CHAR(12),
dias_boni,dias_regalia,pro_d1,proporcion decimal(10,3),
pro_d2 DECIMAL(10,2),
k_mes DECIMAL(8,2),
j_mes,dias,p_mes INTEGER,
fecha_b2 DATE,
fecha_emp, fecha_a DECIMAL(10,3),
sueldo_b DECIMAL(12,2),
p_tipo_emp CHAR(1),
pdias,m_ano,m_mes INTEGER,
m_valor_total DECIMAL(12,2)
MAIN
DEFER INTERRUPT
CALL noprrp037()
END MAIN
FUNCTION noprrp037()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
LET formulario = formulario CLIPPED,"nofmrp036"
OPEN FORM nofmrp036 FROM formulario
DISPLAY FORM nofmrp036
CALL pantalla()
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
#CALL defecto(impresor) RETURNING imprime,letras.*, archivo
DISPLAY "noprrp037" AT 4,3
DISPLAY "Liquidacion de Empleados" AT 6,28
INPUT BY NAME fecha_liquida,ptipo_nomina
#ON KEY(CONTROL-P)
# CALL busca_printer() RETURNING imprime,letras.*, archivo
BEFORE FIELD fecha_liquida
IF fecha_liquida IS NULL THEN
LET fecha_liquida = today
END IF
AFTER FIELD fecha_liquida
IF fecha_liquida IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_liquida
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT INPUT
END INPUT
CONSTRUCT criterio ON a.num_emp FROM num_emp
# ON KEY(CONTROL-P)
# CALL busca_printer() RETURNING imprime,letras.*, archivo
# AFTER CONSTRUCT
# EXIT CONSTRUCT
# END CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
# LET parametro = "D"
# CALL elijeimpresion(parametro) RETURNING orden,destino,letras.*
LET selec =
" SELECT a.departamento, a.cod_puesto, a.num_emp, a.nom1_emp, ",
" a.apell1_emp, a.fech_efec, a.sueldo_ac ",
" FROM adtb00003 a ",
" WHERE (a.status_t IS NULL OR a.status_T = 'I') AND ", criterio CLIPPED,
" AND a.nomina = ? ",
" AND a.departamento IS NOT NULL ",
" ORDER BY 1,2 "
DISPLAY "Buscando Informacion... Por Favor Espere" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
# LET fecha_liquida = today
LET fecha_final = fecha_liquida
LET fecha_inicial = fecha_final - 365
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
OPEN accion USING ptipo_nomina
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT liquida_emp37 TO "C:\\norp37.txt"
DELETE FROM notb00033
WHERE fecha_liquidacion = fecha_liquida
FOREACH accion INTO liquida.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE RETURN
END IF
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
#----------------------------------------------------------------------
# Calcula el Tiempo que tiene el empleado en la Empresa
#----------------------------------------------------------------------
LET liquida.anos_empresa = 0
LET liquida.meses_empresa = 0
LET liquida.dias_empresa = 0
LET anoc = NULL
LET anos = 0
LET mesc = NULL
LET lmeses = 0
LET diasc = NULL
LET dias = 0
LET mesdia = 0
LET tiempo = 0
LET tiempoc = NULL
LET mes_ingreso = MONTH(liquida.fecha_ingreso)
LET mes_salida = MONTH(fecha_liquida)
LET ano_ingreso = YEAR(liquida.fecha_ingreso)
LET ano_salida = YEAR(fecha_liquida)
LET liquida.anos_empresa = ano_salida - ano_ingreso
IF mes_ingreso > mes_salida THEN
LET liquida.anos_empresa = liquida.anos_empresa - 1
LET liquida.meses_empresa = 12 - mes_ingreso + mes_salida
ELSE
LET liquida.meses_empresa = mes_salida - mes_ingreso
END IF
LET liquida.dias_empresa = 0
IF liquida.meses_empresa < 0 THEN
LET liquida.meses_empresa = liquida.meses_empresa * -1
END IF
#----------------------------------------------------------------------
# Fin del Calculo del Tiempo que tiene el empleado en la Empresa
#----------------------------------------------------------------------
LET liquida.dias_cesantia = 0
LET liquida.dias_preaviso = 0
LET liquida.dias_vacaciones = 0
CALL calcula_salarios()
CALL calcula_preaviso()
CALL calcula_cesantia()
CALL calcula_vacaciones()
LET liquida.monto_cesantia =
liquida.dias_cesantia * liquida.salario_dia
# Busca los dias de Vacaciones
SELECT a.dias_pend INTO pdias
FROM adtb00044 a
WHERE a.num_emp = liquida.num_emp
IF pdias IS NULL THEN
LET pdias = 0
END IF
LET liquida.dias_vacaciones = pdias
# CALCULO DE LA BONIFICACION DE EMPLEADOS
SELECT MAX(a.ano)
INTO m_ano
FROM prdtable a
WHERE a.fecha_corte <= fecha_liquida
## BUSQUEDA DE LA COMISIONES A LOS VENDEDORES PARA EL CALCULO DE LA BONIFICACION
LET comisiones_b = 0
LET comision_m = 0
LET bonificacion_pagada = 0
LET fecha_comision = fecha_liquida - 365
SELECT SUM(a.valor) INTO comisiones_b
FROM notb00008 a
WHERE a.num_emp = liquida.num_emp AND
a.fecha BETWEEN fecha_comision AND fecha_liquida AND
a.cod_mov = 40
display "FECHA C ",fecha_comision
IF fecha_comision IS NOT NULL THEN
LET dias_comision = fecha_liquida - fecha_comision
LET comision_m = comisiones_b / (dias_comision/30)
LET sueldo_b = (liquida.sueldo_actual + comision_m) / 23.83
ELSE
LET sueldo_b = liquida.sueldo_actual / 23.83
END IF
IF liquida.fecha_ingreso < fecha_b2 THEN
LET meses_bonificacion = 12 - MONTH(fecha_b2) + MONTH(fecha_liquida) + 1
ELSE
# LET meses_bonificacion1 = MONTH(fecha_liquida) - MONTH(liquida.fecha_ingreso)
LET meses_bonificacion1 = (fecha_liquida - liquida.fecha_ingreso) / 30
END IF
LET liquida.monto_bonificacion = 0
IF liquida.anos_empresa >= 1 THEN
IF liquida.anos_empresa < 3 THEN
LET calcula_boni = sueldo_b * 45
LET liquida.monto_bonificacion = calcula_boni / 12
LET liquida.monto_bonificacion = liquida.monto_bonificacion * meses_bonificacion
END IF
END IF
IF liquida.anos_empresa >= 3 THEN
LET calcula_boni = sueldo_b * 60
LET liquida.monto_bonificacion = calcula_boni / 12
LET liquida.monto_bonificacion = liquida.monto_bonificacion * meses_bonificacion
LET liquida.meses_empresa = meses_bonificacion
END IF
IF liquida.anos_empresa < 1 THEN
LET calcula_boni = sueldo_b * 45
LET liquida.monto_bonificacion = calcula_boni / 12
LET liquida.monto_bonificacion = liquida.monto_bonificacion * meses_bonificacion1
LET liquida.meses_empresa = meses_bonificacion1
END IF
LET liquida.monto_bonificacion = liquida.monto_bonificacion - bonificacion_pagada
LET liquida.sueldo_promedio = sueldo_b
LET liquida.monto_preaviso = comision_m
# Busca el salario para la regalia
SELECT MIN(a.fecha_del) INTO fecha_regalia
FROM notb00010 a
WHERE ano = YEAR(fecha_liquida)
LET ingresos_emp = 0
SELECT SUM(a.valor) INTO ingresos_emp
FROM notb00008 a
WHERE a.num_emp = liquida.num_emp AND
a.fecha BETWEEN fecha_regalia AND fecha_liquida AND
a.clase_mov in ("I","E") AND a.cod_mov = 40
IF ingresos_emp IS NULL THEN
LET ingresos_emp = 0
END IF
LET liquida.monto_vacaciones = (liquida.sueldo_actual / 23.83) * pdias
LET dias_comision = fecha_liquida - fecha_regalia
LET comision_m = ingresos_emp / (dias_comision/30)
# Calculo periodo regalia
LET liquida.monto_regalia = 0
SELECT SUM(a.valor)/12 INTO liquida.monto_regalia
FROM notb00008 a
WHERE a.num_emp = liquida.num_emp AND
a.fecha BETWEEN fecha_regalia AND fecha_liquida AND
a.clase_mov in ("I","E")
LET fecha_regalia = null
LET liquida.monto_preaviso =
liquida.dias_preaviso * liquida.salario_dia
OUTPUT TO REPORT liquida_emp37(liquida.*)
INSERT INTO notb00033
VALUES (0, liquida.departamento, liquida.puesto,
fecha_liquida, liquida.num_emp,
liquida.sueldo_actual, liquida.sueldo_promedio,
liquida.salario_dia, liquida.anos_empresa,
liquida.meses_empresa, liquida.dias_empresa,
liquida.dias_cesantia, liquida.dias_preaviso,
liquida.dias_vacaciones, liquida.ultimas_vacaciones,
liquida.tiempo_empresa, null,user,current,null,null)
INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,cod_puesto,cod_mov,valor,us_crea,fech_crea)
VALUES (525,'Q',liquida.num_emp,liquida.departamento,liquida.puesto,33,liquida.monto_regalia,
user,current)
END FOREACH
FINISH REPORT liquida_emp37
RUN "TYPE C:\\norp37.txt > %USPRINT%"
# CALL fdestino(destino,archivo,imprime)
CLEAR SCREEN
END FUNCTION
REPORT liquida_emp37(x)
DEFINE x RECORD
departamento LIKE adtb00003.departamento,
puesto LIKE adtb00003.cod_puesto,
num_emp LIKE adtb00003.num_emp,
nombre LIKE adtb00003.nom1_emp,
apellido LIKE adtb00003.apell1_emp,
fecha_ingreso LIKE adtb00003.fech_efec,
sueldo_actual LIKE adtb00003.sueldo_ac,
sueldo_promedio LIKE adtb00003.sueldo_ac,
salario_dia LIKE adtb00003.sueldo_ac,
tiempo_empresa DECIMAL(6,2),
anos_empresa INTEGER,
meses_empresa INTEGER,
dias_empresa INTEGER,
dias_cesantia INTEGER,
monto_cesantia DECIMAL(12,2),
dias_preaviso INTEGER,
monto_preaviso DECIMAL(12,2),
dias_vacaciones INTEGER,
monto_vacaciones DECIMAL(12,2),
ultimas_vacaciones DATE,
num_nomi LIKE notb00008.num_nomi,
monto_regalia DECIMAL(12,2),
monto_bonificacion DECIMAL(12,2)
END RECORD
DEFINE tipo_e CHAR(15)
DEFINE hora CHAR(5)
DEFINE l INTEGER
DEFINE varia CHAR(10)
DEFINE nombre_depto CHAR(30)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
FORMAT
PAGE HEADER
LET hora = time
CASE
WHEN ptipo_nomina = "Q"
LET tipo_e = "QUINCENAL"
EXIT CASE
WHEN ptipo_nomina = "S"
LET tipo_e = "SEMANAL"
EXIT CASE
END CASE
PRINT COLUMN 1, letras.comp_on, letras.negrillas_on
PRINT COLUMN 1, "noprrp037",
COLUMN 68, "M A R M O T E C H, S. A.",
COLUMN 175, "Pag. ",pageno using "###"
PRINT COLUMN 81, "Sistema de Nomina",
COLUMN 175, today using "dd/mm/yyyy"
PRINT COLUMN 71, "Liquidacion de Empleados ",tipo_e,
COLUMN 178, hora
SKIP 1 LINE
PRINT COLUMN 2, "Nomina No.",
COLUMN 13, novedad.num_nomi using "<<<<" ," Fecha: ",
fecha_liquida USING "dd/mm/yyyy"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"---------------------------------------------------",
"--------------------------------------------------------"
PRINT COLUMN 1, " ",
COLUMN 40, "Fecha",
COLUMN 57, "Sueldo",
COLUMN 69, "Sueldo",
COLUMN 82, "Salario",
COLUMN 91, "Tiempo Empresa",
COLUMN 109, "Dias",
COLUMN 119, "Monto",
COLUMN 129, "Dias",
COLUMN 139, "Monto",
COLUMN 148, "Dias",
COLUMN 159, "Monto",
COLUMN 171, "Monto",
COLUMN 184, "Monto"
#COLUMN 185, "Ultimas "
PRINT COLUMN 1, "Empleado",
COLUMN 40, "Ingreso",
COLUMN 57, "Actual",
COLUMN 69, "Promedio",
COLUMN 82, "Diario",
COLUMN 91, "Anos Meses Dias",
COLUMN 109, "Cesantia",
COLUMN 119, "Cesantia",
COLUMN 129, "Preaviso",
COLUMN 139, "Preaviso",
COLUMN 148, "Vacaciones",
COLUMN 159, "Vacaciones",
COLUMN 170, "Regalia",
COLUMN 184, "Bonificacion",
COLUMN 198, "Total"
#COLUMN 185, "Vacaciones"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"---------------------------------------------------",
"--------------------------------------------------------"
PRINT letras.negrillas_off
BEFORE GROUP OF x.departamento
LET nombre_depto = NULL
SELECT nom_dpto INTO nombre_depto
FROM adtb00001
WHERE departamento = x.departamento AND
status_t IS NULL
PRINT COLUMN 1, letras.negrillas_on
PRINT COLUMN 1, x.departamento USING "&&&&", " ", nombre_depto
PRINT COLUMN 1, letras.negrillas_off
ON EVERY ROW
PRINT COLUMN 1, x.num_emp USING "&&&",
COLUMN 5, x.nombre CLIPPED," ",x.apellido CLIPPED,
COLUMN 40, x.fecha_ingreso USING "dd/mm/yyyy",
COLUMN 51, x.sueldo_actual USING "#,###,##&.&&",
COLUMN 65, x.sueldo_promedio USING "#,###,##&.&&",
COLUMN 80, x.salario_dia USING "###,##&.&&",
COLUMN 93, x.anos_empresa USING "#&",
COLUMN 99, x.meses_empresa USING "#&",
COLUMN 104, x.dias_empresa USING "#&",
COLUMN 110, x.dias_cesantia USING "#,##&",
COLUMN 116, x.monto_cesantia USING "#,###,##&.&&",
COLUMN 129, x.dias_preaviso USING "#,##&",
COLUMN 135, x.monto_preaviso USING "#,###,##&.&&",
COLUMN 148, x.dias_vacaciones USING "#,##&",
COLUMN 154, x.monto_vacaciones USING "#,###,##&.&&",
COLUMN 168, x.monto_regalia USING "#,###,##&.&&",
COLUMN 181, x.monto_bonificacion USING "#,###,##&.&&",
COLUMN 194, x.monto_cesantia + x.monto_preaviso +
x.monto_vacaciones + x.monto_regalia +
x.monto_bonificacion USING "##,###,##&.&&"
#COLUMN 185, x.ultimas_vacaciones USING "dd/mm/yyyy"
AFTER GROUP OF x.departamento
PRINT COLUMN 1, letras.negrillas_on
PRINT COLUMN 5, "Total Departamento : ",
COLUMN 114, GROUP SUM(x.monto_cesantia) USING "###,###,##&.&&",
COLUMN 133, GROUP SUM(x.monto_preaviso) USING "###,###,##&.&&",
COLUMN 152, GROUP SUM(x.monto_vacaciones) USING "###,###,##&.&&",
COLUMN 164, GROUP SUM(x.monto_regalia) USING "###,###,##&.&&",
COLUMN 177, GROUP SUM(x.monto_bonificacion) USING "###,###,##&.&&",
COLUMN 192, GROUP SUM(x.monto_cesantia + x.monto_preaviso +
x.monto_vacaciones + x.monto_regalia +
x.monto_bonificacion) USING "###,###,##&.&&"
PRINT COLUMN 1, letras.negrillas_off
ON LAST ROW
PRINT COLUMN 1, letras.negrillas_on
PRINT COLUMN 5, "Total General : ",
COLUMN 114, SUM(x.monto_cesantia) USING "###,###,##&.&&",
COLUMN 133, SUM(x.monto_preaviso) USING "###,###,##&.&&",
COLUMN 152, SUM(x.monto_vacaciones) USING "###,###,##&.&&",
COLUMN 164, GROUP SUM(x.monto_regalia) USING "###,###,##&.&&",
COLUMN 177, GROUP SUM(x.monto_bonificacion) USING "###,###,##&.&&",
COLUMN 192, GROUP SUM(x.monto_cesantia + x.monto_preaviso +
x.monto_vacaciones + x.monto_regalia +
x.monto_bonificacion) USING "###,###,##&.&&"
PRINT COLUMN 1, letras.negrillas_off
PRINT COLUMN 1, "Total Empleados : ",count(*) using "<,<<<", letras.comp_off
END REPORT
FUNCTION calcula_salarios()
DEFINE pvalor,valor_total,promedio_ano_actual, promedio_ano_anterior DECIMAL(12,2)
LET promedio_ano_actual = 0
LET promedio_ano_anterior = 0
LET m_valor_total = 0
# Busqueda del sueldo en la tabla actual
DECLARE busca_salario CURSOR FOR
SELECT SUM(a.valor),a.fecha FROM notb00008 a
WHERE a.num_emp = liquida.num_emp and
a.cod_mov in(1,7,4,34,40,5) AND
a.valor != 0 AND
a.fecha <= fecha_liquida
GROUP BY 2
ORDER BY 2 DESC
LET idx = 1
LET valor_total = 0
FOREACH busca_salario INTO pvalor
LET valor_total = valor_total + pvalor
IF ptipo_nomina = "Q" THEN
IF idx = 24 THEN
SELECT a.monto INTO incentivos
FROM notbingresos a
WHERE a.num_emp = liquida.num_emp
IF incentivos IS NOT NULL THEN
LET valor_total = valor_total + (incentivos * idx)
LET incentivos = 0
END IF
EXIT FOREACH
END IF
ELSE
IF idx = 52 THEN
EXIT FOREACH
END IF
END IF
LET idx = idx + 1
END FOREACH
IF idx = 0 OR idx IS NULL THEN
LET idx = 1
END IF
IF ptipo_nomina = "S" THEN
IF idx = 52 THEN
LET idx = idx - 1
END IF
LET idx = idx /4
END IF
IF ptipo_nomina = "Q" THEN
LET idx = idx / 2
END IF
IF idx > 0 THEN
LET valor_total = valor_total / idx
END IF
#LET valor_total = idx
#LET liquida.sueldo_promedio = promedio_ano_actual + promedio_ano_anterior
LET liquida.sueldo_promedio = valor_total
LET liquida.salario_dia = liquida.sueldo_promedio / 23.83
END FUNCTION
FUNCTION calcula_preaviso()
IF liquida.anos_empresa >= 1 THEN
LET liquida.dias_preaviso = 28
ELSE
IF liquida.meses_empresa >= 3 AND liquida.meses_empresa <= 5 THEN
LET liquida.dias_preaviso = 7
END IF
IF liquida.meses_empresa >= 6 AND liquida.meses_empresa <= 11 THEN
LET liquida.dias_preaviso = 14
END IF
END IF
END FUNCTION
FUNCTION calcula_cesantia()
DEFINE fecha_anterior DATE,
pase_poraqui CHAR(1)
LET tiempo_h92 = 0
LET tiempo_d92 = 0
LET cesantia_h92 = 0
LET cesantia_d92 = 0
LET dias_cesantia = 0
LET meses_cesantia = 0
LET anos_cesantia = 0
LET anoc = NULL
LET mesc = NULL
LET diasc = NULL
LET fecha_anterior = "17061992"
IF liquida.fecha_ingreso < fecha_anterior THEN
LET mes_ley_anterior = 6
LET ano_ley_anterior = 1992
LET anos_ley_anterior = ano_ley_anterior - YEAR(liquida.fecha_ingreso)
IF mes_ingreso > mes_ley_anterior THEN
LET anos_ley_anterior = ano_ley_anterior - YEAR(liquida.fecha_ingreso) - 1
LET meses_ley_anterior = mes_ingreso - 12 + mes_ley_anterior
END IF
LET cesantia_d92 = anos_ley_anterior * 15
LET meses_ley_anterior = mes_ley_anterior
IF meses_ley_anterior < 0 THEN
LET meses_ley_anterior = meses_ley_anterior * -1
END IF
LET meses_cesantia = meses_ley_anterior
LET anos_cesantia = liquida.anos_empresa - anos_ley_anterior
LET meses_cesantia = liquida.meses_empresa
IF anos_cesantia < 5 THEN
LET cesantia_d92 = anos_cesantia * 21 + cesantia_d92
ELSE
LET cesantia_d92 = anos_cesantia * 23 + cesantia_d92
END IF
IF meses_cesantia >= 3 AND meses_cesantia <= 5 THEN
LET cesantia_d92 = cesantia_d92 + 6
END IF
IF meses_cesantia >= 6 AND meses_cesantia <= 11 THEN
LET cesantia_d92 = cesantia_d92 + 13
END IF
ELSE
LET anos_cesantia = liquida.anos_empresa
LET meses_cesantia = liquida.meses_empresa
IF anos_cesantia < 5 THEN
LET cesantia_d92 = anos_cesantia * 21
ELSE
LET cesantia_d92 = anos_cesantia * 23
END IF
IF meses_cesantia >= 3 AND meses_cesantia <= 5 THEN
LET cesantia_d92 = cesantia_d92 + 6
END IF
IF meses_cesantia >= 6 AND meses_cesantia <= 11 THEN
LET cesantia_d92 = cesantia_d92 + 13
END IF
END IF
LET liquida.dias_cesantia = cesantia_d92
END FUNCTION
FUNCTION calcula_vacaciones()
DEFINE ultimas_vacaciones,
ultimas_vacaciones1 DATE,
dia,mes,ano INTEGER
LET ultimas_vacaciones = NULL
LET ultimas_vacaciones1 = NULL
LET fecha_b1 = null
LET dias_vacaciones = 0
LET meses_vacaciones = 0
LET anos_vacaciones = 0
SELECT MAX(fecha) INTO ultimas_vacaciones
FROM notb00008
WHERE cod_mov = 36 AND
num_emp = liquida.num_emp AND
status_t IS NULL
IF ultimas_vacaciones IS NULL THEN
SELECT MAX(fecha) INTO ultimas_vacaciones
FROM notb00016
WHERE cod_mov = 36 AND
num_emp = liquida.num_emp AND
status_t IS NULL
END IF
IF ultimas_vacaciones IS NOT NULL THEN
SELECT a.fech_vac
INTO ultimas_vacaciones1
FROM vacaciones a
WHERE a.num_emp = liquida.num_emp
IF pdias = 0 THEN
LET liquida.ultimas_vacaciones = ultimas_vacaciones1 - 365
ELSE
LET dia = DAY(ultimas_vacaciones1)
LET mes = MONTH(ultimas_vacaciones1)
LET ano = YEAR(ultimas_vacaciones)
LET fecha_b1 = dia USING "<<<","/",mes USING "<<<","/",ano USING "<<<<"
#LET ultimas_vacaciones = fecha_b1
LET liquida.ultimas_vacaciones = ultimas_vacaciones
END IF
END IF
IF ultimas_vacaciones IS NULL THEN
LET anos_vacaciones = anos
LET meses_vacaciones = lmeses
ELSE
LET tiempo_vacaciones = (fecha_liquida - liquida.ultimas_vacaciones)
IF tiempo_vacaciones >= 365 THEN
LET tiempo_vacaciones = tiempo_vacaciones / 365
LET tiempoc = tiempo_vacaciones USING "&&&&.&&&"
LET anoc = tiempoc[3,4]
LET anos_vacaciones = anoc
LET mesc = tiempoc[6,7]
LET meses_vacaciones = mesc
LET meses_vacaciones = meses_vacaciones / 100 * 365
IF meses_vacaciones >= 30 THEN
LET meses_vacaciones = meses_vacaciones / 30
END IF
ELSE
LET tiempo_vacaciones = tiempo_vacaciones / 30
LET tiempoc = tiempo_vacaciones USING "&&&&.&&&"
LET mesc = tiempoc[3,4]
LET meses_vacaciones = mesc
END IF
END IF
LET liquida.dias_vacaciones = 0
IF anos < 5 THEN
IF anos_vacaciones > 0 THEN
LET liquida.dias_vacaciones = anos_vacaciones * 14
END IF
ELSE
IF anos_vacaciones > 0 THEN
LET liquida.dias_vacaciones = anos_vacaciones * 18
END IF
END IF
#DISPLAY "LIQUIDA ",liquida.dias_vacaciones
CASE
WHEN meses_vacaciones = 5
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 6
WHEN meses_vacaciones = 6
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 7
WHEN meses_vacaciones = 7
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 8
WHEN meses_vacaciones = 8
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 9
WHEN meses_vacaciones = 8
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 10
WHEN meses_vacaciones = 10
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 11
WHEN meses_vacaciones = 11
LET liquida.dias_vacaciones = liquida.dias_vacaciones + 12
END CASE
# display " vacaciones ",liquida.dias_vacaciones
END FUNCTION