Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,810 @@
|
||||
{
|
||||
-------------------------------------------------------------------------------
|
||||
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
|
||||
IF YEAR(liquida.fecha_ingreso) != YEAR(fecha_liquida) THEN
|
||||
LET cfecha_regalia = "0101",YEAR(fecha_liquida) USING "<<<<"
|
||||
LET fecha_regalia = cfecha_regalia
|
||||
LET dias_regalia = MONTH(fecha_liquida)
|
||||
|
||||
LET liquida.monto_regalia = liquida.sueldo_actual + comision_m
|
||||
ELSE
|
||||
|
||||
LET dias_regalia = (fecha_liquida - liquida.fecha_ingreso) / 30
|
||||
|
||||
# LET liquida.monto_regalia = (liquida.sueldo_actual * dias_regalia) /12
|
||||
LET liquida.monto_regalia = ((liquida.sueldo_actual + comision_m) * dias_regalia) / 12
|
||||
|
||||
|
||||
END IF
|
||||
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:\\norp037.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
|
||||
|
||||
Reference in New Issue
Block a user