803 lines
28 KiB
Plaintext
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
|
|
|