valor por defecto El checkbox "GENERO NOMINA ACTIVOS" (opt1) y los demas checkboxes de la pantalla inicial no entregaban su defaultValue a la variable si el usuario no los tocaba explicitamente, quedando en "N". Como el codigo hace "IF opt1 != 'S' THEN RETURN" sin ningun mensaje, el programa generaba 0 registros y se cerraba en silencio pareciendo exitoso. Se inicializan opt1/opt2/opt3/regalia/vacaciones explicitamente antes del INPUT BY NAME para que coincidan con los defaults del formulario, sin depender de esa interaccion. Se retiro tambien la funcion debuglog() (y su entrada FGLSPOOL) usada solo para diagnosticar este problema. Verificado generando la nomina 2701/Q completa: 4798 registros para 628 empleados, con calculo correcto de sueldo quincenal (50% primera quincena) y descuentos de TSS/ARS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2465 lines
91 KiB
Plaintext
2465 lines
91 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------
|
|
PROGRAMA : NOPRMT008
|
|
OBJETIVO : Generar los registros que va a contener la nomina
|
|
de empleados a partir de sus movimientos
|
|
PROGRAMADOR : Juan F. Soto
|
|
FECHA : Septiembre 10, 1993.
|
|
MODIFICACION : MONTO EXCENTO DE LA RENTA ANTES ERA DE 84000, AHORA ES DE
|
|
90,072.00
|
|
FECHA : 9 DE FEBRERO DE 1998
|
|
MODIFICACION : SEGURIDAD SOCIAL
|
|
FECHA : Junio 10, 2003
|
|
------------------------------------------------------------------------
|
|
}
|
|
|
|
GLOBALS "noprgb000.4gl"
|
|
|
|
DEFINE p10, calcula, calcula_ars, calcula_tss CHAR(1)
|
|
DEFINE
|
|
p_mes1,
|
|
numero_nomina,
|
|
num_van,
|
|
semanas,
|
|
p_mes,
|
|
p_ano,
|
|
cantidad_empleados,
|
|
control_empleado
|
|
SMALLINT,
|
|
pestado BOOLEAN,
|
|
xestado_legal VARCHAR(20),
|
|
opt3 VARCHAR(3)
|
|
DEFINE impuesto_c,
|
|
sueldo_ganado,
|
|
ing_regal,
|
|
renta_p,
|
|
val_bonifica,
|
|
valor_renta,
|
|
sueldo_boni,
|
|
valor_seguridad1,
|
|
descuento_tss,
|
|
descuento_tss1,
|
|
monto_descuento_fase,
|
|
monto_ars,
|
|
monto_afp,
|
|
valor_ars_emp_pagado,
|
|
sueldo_h
|
|
DECIMAL(16, 2)
|
|
DEFINE
|
|
ch_num CHAR(4),
|
|
calcula_interes, xafecta_tss CHAR(2)
|
|
DEFINE porc_dias, meses, factor, tasa DECIMAL(8, 2)
|
|
|
|
DEFINE numero INTEGER
|
|
DEFINE empleados CHAR(500)
|
|
DEFINE
|
|
porc_emp, porc_emp_ars, porc_cia, porc_cia_ars, porciento DECIMAL(9, 4),
|
|
afp_pago_emp,
|
|
afp_pago_cia,
|
|
cuota_ss_pa,
|
|
valor_tss_emp,
|
|
valor_ars_emp,
|
|
valor_tss_cia,
|
|
valor_ars_cia,
|
|
salario_tss,
|
|
otros_ing_tss
|
|
DECIMAL(16, 2),
|
|
fecha_ext1, fecha_ext2, fecha_ult DATE
|
|
|
|
DEFINE interes,
|
|
p_cantidad,
|
|
salario_h,
|
|
renta_15,
|
|
renta_20,
|
|
renta_27,
|
|
renta_30,
|
|
porc_extras,
|
|
valor_regal,
|
|
valor_bonif1,
|
|
renta_pagada,
|
|
excento,
|
|
hasta_15,
|
|
hasta_20,
|
|
hasta_25
|
|
DECIMAL(16, 2)
|
|
DEFINE t, p_codigo, p, idx1 INTEGER
|
|
DEFINE vacaciones, hay1, bonifica, regalia, p_tipo, encontre, retorne CHAR(1)
|
|
|
|
DEFINE fecha_ini_mes,
|
|
fecha_inicio_p,
|
|
p_fecha_del,
|
|
p_fecha_al,
|
|
p1_fecha_del,
|
|
p1_fecha_al
|
|
DATE
|
|
DEFINE p_h_normal, otros_ing DECIMAL(16, 2)
|
|
DEFINE acumulado, renta DECIMAL(16, 2)
|
|
DEFINE sueldo_renta, p_sueldo, salario_semanal DECIMAL(16, 2)
|
|
|
|
DEFINE ingresos_empleado, acum_mes_ss, cuota_ss, acum_ing_mes DECIMAL(16, 2)
|
|
DEFINE ultima_semana_mes CHAR(1)
|
|
|
|
DEFINE num_periodo, semanas_mes, ult_nomi_mes INTEGER
|
|
|
|
DEFINE ss RECORD
|
|
salario_sem_hasta LIKE notb00006.salario_sem_hasta,
|
|
salario_men_hasta LIKE notb00006.salario_men_hasta,
|
|
porc_emp LIKE notb00006.porc_emp,
|
|
porc_pat LIKE notb00006.porc_pat
|
|
END RECORD
|
|
|
|
DEFINE globales RECORD
|
|
cod_mov SMALLINT,
|
|
cantidad_emp LIKE notb00002.cantidad_emp,
|
|
clase_mov CHAR(1)
|
|
END RECORD
|
|
|
|
DEFINE desp_mov DYNAMIC ARRAY OF RECORD
|
|
todos CHAR(1),
|
|
clasifica CHAR(1),
|
|
cod_mov SMALLINT,
|
|
descrip_mov CHAR(30)
|
|
END RECORD
|
|
|
|
DEFINE datos_nomi RECORD
|
|
num_nomi LIKE notb00010.num_nomi,
|
|
tipo_emp LIKE notb00010.tipo_emp
|
|
END RECORD
|
|
|
|
DEFINE datos_emp RECORD
|
|
num_emp LIKE adtb00003.num_emp,
|
|
departamento LIKE adtb00003.departamento,
|
|
nivel_emp LIKE adtb00003.nivel_emp,
|
|
cod_puesto LIKE adtb00003.cod_puesto,
|
|
nom1_emp LIKE adtb00003.nom1_emp,
|
|
apell1_emp LIKE adtb00003.apell1_emp,
|
|
sueldo LIKE adtb00003.sueldo_ac,
|
|
paga_seg LIKE adtb00003.paga_seg,
|
|
fecha CHAR(10),
|
|
moneda VARCHAR(3)
|
|
END RECORD
|
|
|
|
DEFINE datos_mov RECORD
|
|
cod_mov LIKE notb00002.cod_mov,
|
|
clase_mov LIKE notb00002.clase_mov,
|
|
cantidad LIKE notb00002.cantidad_emp,
|
|
valor LIKE notb00007.valor,
|
|
cantidad_emp LIKE notb00002.cantidad_emp,
|
|
cantidad_cia LIKE notb00002.cantidad_cia,
|
|
identifica CHAR(20),
|
|
departamento INT
|
|
END RECORD
|
|
|
|
DEFINE movi_emp DYNAMIC ARRAY OF RECORD
|
|
num_emp SMALLINT,
|
|
cod_mov LIKE notb00002.cod_mov,
|
|
clase_mov CHAR(1),
|
|
cantidad LIKE notb00002.cantidad_emp,
|
|
valor LIKE notb00007.valor,
|
|
departamento INT
|
|
END RECORD
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT TO "smarmotech" USER usuarios USING clave
|
|
|
|
SELECT a.* INTO p_companias.* FROM companias a
|
|
CALL noprmt008()
|
|
END MAIN
|
|
|
|
FUNCTION noprmt008()
|
|
#CLEAR SCREEN
|
|
|
|
OPTIONS FORM LINE 9, PROMPT LINE 12, ERROR LINE 24, COMMENT LINE 23
|
|
|
|
#DISPLAY "noprmt008" AT 4,3 ATTRIBUTE(RED)
|
|
#DISPLAY "Generacion de nomina" AT 6,30 ATTRIBUTE(BLACK)
|
|
#LET p_formulario = formulario CLIPPED,"nofmmt008"
|
|
OPEN FORM nofmmt008 FROM "nofmmt008"
|
|
DISPLAY FORM nofmmt008
|
|
|
|
# Seccion de captura de informacion general de la generacion de
|
|
# la nomina
|
|
LET int_flag = FALSE
|
|
-- El checkbox de la forma no siempre entrega su defaultValue a la
|
|
-- variable si el usuario no lo toca explicitamente; se inicializan
|
|
-- aqui para que coincidan con los defaults del formulario
|
|
-- (opt1=S, resto=N) y no dependan de esa interaccion.
|
|
LET opt1 = "S"
|
|
LET opt2 = "N"
|
|
LET opt3 = "N"
|
|
LET regalia = "N"
|
|
LET vacaciones = "N"
|
|
INPUT BY NAME datos_nomi.*, opt1, opt2, opt3, regalia, vacaciones
|
|
AFTER FIELD num_nomi
|
|
IF datos_nomi.num_nomi IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_nomi
|
|
END IF
|
|
|
|
AFTER FIELD tipo_emp
|
|
IF datos_nomi.tipo_emp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_emp
|
|
END IF
|
|
|
|
# Busqueda del periodo comprendido de la nomina
|
|
LET selec =
|
|
"SELECT fecha_del, fecha_al, h_normal,mes,ano,num_sem,estado_legal ",
|
|
" FROM notb00010 ",
|
|
" WHERE num_nomi = '",
|
|
datos_nomi.num_nomi,
|
|
"' and ",
|
|
" tipo_emp = '",
|
|
datos_nomi.tipo_emp,
|
|
"' ",
|
|
"and (status_t is null)"
|
|
|
|
PREPARE comando20 FROM selec
|
|
EXECUTE comando20
|
|
INTO p_fecha_del,
|
|
p_fecha_al,
|
|
p_h_normal,
|
|
p_mes1,
|
|
p_ano,
|
|
semanas_mes,
|
|
xestado_legal
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 199
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_nomi
|
|
END IF
|
|
DISPLAY BY NAME xestado_legal
|
|
|
|
LET selec =
|
|
"SELECT MIN(a.fecha_del), MAX(a.fecha_al) ",
|
|
" FROM notb00010 a ",
|
|
" WHERE a.ano ='",
|
|
p_ano,
|
|
"' ",
|
|
" and a.mes = '",
|
|
p_mes1,
|
|
"' ",
|
|
" and a.tipo_emp ='",
|
|
datos_nomi.tipo_emp,
|
|
"' "
|
|
|
|
PREPARE comando21 FROM selec
|
|
EXECUTE comando21 INTO p1_fecha_del, p1_fecha_al
|
|
|
|
# Busca el mes inicial del periodo
|
|
|
|
LET selec =
|
|
"SELECT MIN(a.fecha_Del) ",
|
|
"FROM notb00010 a ",
|
|
"WHERE a.ano = '",
|
|
p_ano,
|
|
"' AND ",
|
|
" a.tipo_emp = '",
|
|
datos_nomi.tipo_emp,
|
|
"' "
|
|
|
|
PREPARE comando22 FROM selec
|
|
EXECUTE comando22 INTO fecha_inicio_p
|
|
|
|
SELECT MAX(a.monto_excento),
|
|
MAX(a.porc_15),
|
|
MAX(a.porc_20),
|
|
MAX(a.porc_25),
|
|
MAX(a.monto_ars),
|
|
MAX(a.monto_afp)
|
|
INTO excento, hasta_15, hasta_20, hasta_25, monto_ars, monto_afp
|
|
FROM notb00023 a
|
|
WHERE #a.fecha = "01012001" AND
|
|
a.tipo_emp = datos_nomi.tipo_emp
|
|
|
|
SELECT a.numero_nomina
|
|
INTO num_periodo
|
|
FROM notb00023 a
|
|
WHERE #a.fecha = "01012001" AND
|
|
a.tipo_emp = datos_nomi.tipo_emp
|
|
|
|
SELECT COUNT(*)
|
|
INTO cantidad_empleados
|
|
FROM adtb00003 a
|
|
WHERE a.status_t IS NULL OR a.status_t IN ("I")
|
|
|
|
LET factor = (100 * 24) / cantidad_empleados
|
|
|
|
{
|
|
|
|
LET excento = 11535
|
|
LET hasta_15 = 17396
|
|
LET hasta_20 = 26095
|
|
LET hasta_25 = 26096
|
|
}
|
|
DISPLAY BY NAME p_fecha_del, p_fecha_al ATTRIBUTE(BOLD)
|
|
LET ch_num = datos_nomi.num_nomi USING "&&&&"
|
|
LET numero = ch_num[3, 4]
|
|
LET num_van = datos_nomi.num_nomi
|
|
LET p_mes = MONTH(p_fecha_al)
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET numero = num_periodo - numero
|
|
LET porciento = 0.50
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "V" THEN
|
|
LET numero = num_periodo - numero
|
|
LET porciento = 1.00
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET numero = num_periodo - numero
|
|
LET porciento = 0.0025
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Determina si es la ultima nomina del mes
|
|
#------------------------------------------------------------------------------
|
|
LET ultima_semana_mes = NULL
|
|
LET fecha_ult = NULL
|
|
LET SELEC =
|
|
"SELECT MAX(a.fecha_al) ",
|
|
" FROM notb00010 a ",
|
|
" WHERE a.tipo_emp = ? AND ",
|
|
" a.mes = ? AND ",
|
|
" a.ano = ? AND a.num_nomi NOT IN (46,22) AND ",
|
|
" (a.status_t IS NULL OR a.status_t ='P')"
|
|
|
|
PREPARE busca_f1 FROM selec
|
|
EXECUTE busca_f1
|
|
INTO fecha_ult USING datos_nomi.tipo_emp, p_mes1, p_ano
|
|
DISPLAY fecha_ult
|
|
LET SELEC =
|
|
"SELECT MAX(a.num_nomi) ",
|
|
" FROM notb00010 a ",
|
|
" WHERE a.tipo_emp = ? AND ",
|
|
" a.mes = ? AND ",
|
|
" a.ano = ? AND a.num_nomi NOT IN (46,22) AND ",
|
|
" a.fecha_al = ? AND ",
|
|
" (a.status_t IS NULL OR a.status_t = 'P')"
|
|
|
|
PREPARE busca_f2 FROM selec
|
|
EXECUTE busca_f2
|
|
INTO ult_nomi_mes USING datos_nomi.tipo_emp,
|
|
p_mes1,
|
|
p_ano,
|
|
fecha_ult
|
|
|
|
IF datos_nomi.num_nomi = ult_nomi_mes THEN
|
|
LET ultima_semana_mes = "S"
|
|
ELSE
|
|
LET ultima_semana_mes = "N"
|
|
END IF
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
SELECT MIN(fecha_del)
|
|
INTO fecha_ini_mes
|
|
FROM notb00010
|
|
WHERE tipo_emp = datos_nomi.tipo_emp
|
|
AND mes = p_mes1
|
|
AND ano = p_ano
|
|
AND num_nomi NOT IN (9924, 9951, 46, 22, 50)
|
|
AND (status_t IS NULL OR status_t = 'P')
|
|
|
|
END IF
|
|
|
|
LET ss.porc_emp = 0.00
|
|
LET ss.salario_sem_hasta = 0.00
|
|
LET ss.salario_men_hasta = 0.00
|
|
LET ss.porc_pat = 0.00
|
|
LET salario_semanal = 0.00
|
|
|
|
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
|
|
|
|
# Preparacion para busqueda por rango de departamento y rango de ficha del
|
|
# empleado
|
|
CONSTRUCT BY NAME criterio ON a.departamento, a.num_emp
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
#CLEAR SCREEN
|
|
# PROMPT
|
|
#"ESTA SEGURO DE GENERAR DE NUEVO LA NOMINA (S/N) " FOR CHAR opt1
|
|
LET opt1 = upshift(opt1)
|
|
IF opt1 != "S" THEN
|
|
RETURN
|
|
END IF
|
|
|
|
#PROMPT
|
|
#"ESTA NOMINA ES DE REGALIA (S/N) " FOR CHAR regalia
|
|
LET regalia = upshift(regalia)
|
|
|
|
# PROMPT
|
|
#"ESTA NOMINA ES DE VACACIONES COLECTIVAS (S/N) " FOR CHAR vacaciones
|
|
LET vacaciones = upshift(vacaciones)
|
|
|
|
#PROMPT
|
|
#"ESTA NOMINA ES DE BONIFICACION (S/N) " FOR CHAR opt2
|
|
LET opt2 = upshift(opt2)
|
|
|
|
DISPLAY "Borrando Nomina... Espere Por Favor" AT 24, 1 ATTRIBUTE(BOLD)
|
|
|
|
DELETE FROM notb00008
|
|
WHERE num_nomi = datos_nomi.num_nomi
|
|
AND tipo_emp = datos_nomi.tipo_emp
|
|
AND clase_mov NOT IN ("F")
|
|
|
|
# CALL second_scr()
|
|
#LET p_formulario = formulario CLIPPED, "nofmmt108"
|
|
OPEN FORM nofmmt108 FROM "nofmmt108"
|
|
DISPLAY FORM nofmmt108
|
|
|
|
IF regalia = "S" THEN
|
|
INPUT BY NAME fecha_ext1, fecha_ext2
|
|
AFTER FIELD fecha_ext2
|
|
IF fecha_ext2 < fecha_ext1 THEN
|
|
LET numero_msg = 51
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_ext1
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
END IF
|
|
|
|
DECLARE tinti CURSOR FOR
|
|
SELECT cod_mov, descrip_mov
|
|
FROM notb00002
|
|
WHERE status_t IS NULL
|
|
ORDER BY cod_mov
|
|
#3522
|
|
LET idx1 = 1
|
|
FOREACH tinti INTO desp_mov[idx1].cod_mov, desp_mov[idx1].descrip_mov
|
|
LET desp_mov[idx1].todos = "Y"
|
|
IF regalia = "S" OR opt2 = "S" OR opt3 = 'S' THEN
|
|
LET desp_mov[idx1].clasifica = "N"
|
|
ELSE
|
|
LET desp_mov[idx1].clasifica = "S"
|
|
END IF
|
|
|
|
LET scr_l = scr_line()
|
|
LET idx1 = idx1 + 1
|
|
|
|
END FOREACH
|
|
|
|
CALL set_count(idx1 - 1)
|
|
INPUT ARRAY desp_mov WITHOUT DEFAULTS FROM s_mov.*
|
|
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
|
|
# CLEAR SCREEN
|
|
|
|
#DISPLAY "noprmt008" AT 4,2
|
|
#DISPLAY "Generacion de nomina" AT 6,32
|
|
|
|
# Preparacion de la busqueda de los empleados dependiendo del criterio de
|
|
# seleccion
|
|
OPEN WINDOW w1 WITH FORM "nofmmt208"
|
|
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
DISPLAY "empleados1"
|
|
LET empleados =
|
|
"SELECT num_emp,departamento,nivel_emp,cod_puesto,nom1_emp,",
|
|
"apell1_emp,sueldo_ac,paga_seg,fech_efec,moneda ",
|
|
"FROM adtb00003 ",
|
|
" WHERE ",
|
|
" nomina = ? ",
|
|
" AND CONVERT(DATE,a.fech_efec,101) <= ? ",
|
|
" AND (status_t is null or ",
|
|
" status_t = 'I') AND ",
|
|
criterio CLIPPED,
|
|
" ORDER BY num_emp"
|
|
ELSE
|
|
IF opt3 <> 'S' THEN
|
|
DISPLAY "empleados2"
|
|
LET empleados =
|
|
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,a.nom1_emp,",
|
|
"a.apell1_emp,a.sueldo_ac,a.paga_seg, ",
|
|
"CONVERT(CHAR(10),a.fech_efec,103),moneda ",
|
|
"FROM adtb00003 a ",
|
|
" WHERE ",
|
|
" a.nomina = ? and (",
|
|
criterio CLIPPED, #" and a.num_emp =162 ",
|
|
# ") AND CONVERT (CHAR(10),a.fech_efec,103) <= ? ",
|
|
") AND a.fech_efec <= ? ",
|
|
" AND (a.status_t is null or ",
|
|
" a.status_t = 'I') AND ",
|
|
" a.num_emp not in (select x.num_Emp from adtb00032 x where x.num_nomi_no = ? and x.status_t is null) ",
|
|
" AND a.estado_legal = ? AND ",
|
|
criterio CLIPPED,
|
|
" ORDER BY a.num_emp"
|
|
ELSE
|
|
DISPLAY "empleados3"
|
|
LET empleados =
|
|
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,a.nom1_emp,",
|
|
"a.apell1_emp,a.sueldo_ac,a.paga_seg, ",
|
|
"CONVERT(CHAR(10),a.fech_efec,103),moneda ",
|
|
"FROM adtb00003 a,[dbo].[tmpinactivos2026] b ",
|
|
" WHERE ",
|
|
" a.nomina = ? and (",
|
|
criterio CLIPPED,
|
|
") AND a.num_emp = b.num_emp ",
|
|
" ORDER BY a.num_emp"
|
|
|
|
END IF
|
|
|
|
END IF
|
|
|
|
#call fgl_winmessage("w",empleados,"stop")
|
|
DISPLAY "BUSCANDO EMPLEADOS..." TO estado
|
|
PREPARE comando FROM empleados
|
|
DECLARE busca SCROLL CURSOR FOR comando
|
|
OPEN busca
|
|
USING datos_nomi.tipo_emp,
|
|
p_fecha_al,
|
|
datos_nomi.num_nomi,
|
|
xestado_legal
|
|
|
|
LET control_empleado = 0
|
|
LET progreso = 5
|
|
DISPLAY progreso TO progreso
|
|
CALL ui.Interface.refresh()
|
|
DISPLAY "LOOP EMPLEADOS..." TO estado
|
|
|
|
FOREACH busca INTO datos_emp.*
|
|
|
|
# DESPLEGA INFORMACION
|
|
DISPLAY datos_emp.num_emp TO num_emp
|
|
DISPLAY datos_emp.nom1_emp || datos_emp.apell1_emp TO nombre
|
|
DISPLAY "BUSCANDO NOVEDADES EMPLEADOS..." TO estado
|
|
LET meses = (p_fecha_al - datos_emp.fecha)
|
|
|
|
LET meses = meses / 30
|
|
CALL movi_emp.clear()
|
|
|
|
LET valor_renta = 0
|
|
IF regalia != "S" THEN
|
|
# Busca los acumulados de ingresos de los empleados
|
|
|
|
SELECT SUM(a.valor)
|
|
INTO acumulado
|
|
FROM notb00008 a
|
|
WHERE a.status_t IS NULL
|
|
AND (a.clase_mov IN ("I", "E")
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.fecha
|
|
BETWEEN p1_fecha_del
|
|
AND p1_fecha_al) #fecha_inicio_p
|
|
|
|
END IF
|
|
|
|
IF acumulado IS NULL THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
################
|
|
# BUSCA LA TASA FINANCIERA DEL MES
|
|
################
|
|
|
|
SELECT AVG(a.tasa)
|
|
INTO tasa
|
|
FROM cgtb00084 a
|
|
WHERE a.mes = MONTH(TODAY)
|
|
AND a.ano = YEAR(TODAY)
|
|
AND a.ventas = datos_emp.moneda
|
|
IF tasa IS NULL THEN
|
|
LET tasa = 1
|
|
END IF
|
|
LET datos_emp.sueldo = datos_emp.sueldo * tasa
|
|
|
|
LET sueldo_renta = 0
|
|
LET movi_emp[1].cod_mov = 1
|
|
LET movi_emp[1].clase_mov = "I"
|
|
LET movi_emp[1].departamento = datos_emp.departamento
|
|
|
|
# Calculo del sueldo normal semanal
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET salario_h = datos_emp.sueldo / 190.60
|
|
LET p_sueldo = datos_emp.sueldo
|
|
LET datos_emp.sueldo = (datos_emp.sueldo / 190.60) * p_h_normal
|
|
# Mdificado el 11/11/2002 LET sueldo_boni = datos_emp.sueldo
|
|
END IF
|
|
|
|
# Calculo del sueldo normal quincenal
|
|
IF datos_nomi.tipo_emp = "Q" OR datos_nomi.tipo_emp = "J" THEN
|
|
|
|
# Calculo para los empleados quincenales, segun reunion con el gerente general
|
|
# gerente recursos humanos y gerente informatica, se acordo que los empleados
|
|
# quincenales cobraran el 35% de su sueldo la primera quincena y el restante
|
|
# la quincena siguiente.
|
|
# Fecha modificacion 3/4/2002. SEGURIDAD SOCIAL
|
|
# Modificado por el Ing. Juan Francisco Soto
|
|
|
|
LET sueldo_ganado = 0
|
|
LET p_sueldo = datos_emp.sueldo
|
|
SELECT SUM(a.valor)
|
|
INTO sueldo_ganado
|
|
FROM notb00008 a
|
|
WHERE (a.cod_mov = 1
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.fecha BETWEEN p1_fecha_del AND p1_fecha_al)
|
|
|
|
IF sueldo_ganado = 0 OR sueldo_ganado IS NULL THEN
|
|
LET datos_emp.sueldo = datos_emp.sueldo * .50
|
|
|
|
ELSE
|
|
#DISPLAY "EMPLEADO2 ",datos_emp.num_emp,' ',datos_Emp.sueldo, ' ',sueldo_ganado
|
|
LET datos_emp.sueldo = datos_emp.sueldo - sueldo_ganado
|
|
#DISPLAY "EMPLEADO3 ",datos_emp.num_emp,' ',datos_Emp.sueldo, ' ',sueldo_ganado
|
|
IF datos_emp.sueldo > p_sueldo / 12 THEN
|
|
LET datos_emp.sueldo = p_sueldo / 2
|
|
END IF
|
|
|
|
END IF
|
|
|
|
LET salario_h = (datos_emp.sueldo / 23.83) / 8
|
|
LET sueldo_boni = datos_emp.sueldo
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "V" THEN
|
|
LET sueldo_boni = datos_emp.sueldo
|
|
END IF
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
LET movi_emp[1].cantidad = p_h_normal
|
|
LET movi_emp[1].valor = datos_emp.sueldo
|
|
|
|
LET sueldo_renta = sueldo_renta + movi_emp[1].valor
|
|
|
|
FOR i = 1 TO idx1
|
|
IF movi_emp[i].cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" THEN
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].cantidad = 0
|
|
LET sueldo_renta = 0
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# Busqueda de la tabla de novedades cuando la nomina no es de bonificacion
|
|
IF opt2 != "S" THEN
|
|
DISPLAY "este es el query"
|
|
DECLARE busca1 CURSOR FOR
|
|
SELECT a.cod_mov,
|
|
b.clase_mov,
|
|
a.cantidad,
|
|
a.valor,
|
|
b.cantidad_emp,
|
|
cantidad_cia,
|
|
"fijos",
|
|
c.departamento
|
|
FROM notb00003 a, notb00002 b, adtb00003 c
|
|
WHERE a.num_emp = datos_emp.num_emp
|
|
AND a.num_emp = c.num_emp
|
|
AND a.status_t IS NULL
|
|
AND a.cod_mov = b.cod_mov
|
|
AND CAST(a.cod_mov AS CHAR(3))
|
|
+ CAST(a.num_emp AS CHAR(4))
|
|
NOT IN (SELECT CAST(a.cod_mov AS CHAR(3))
|
|
+ CAST(a.num_emp AS CHAR(4))
|
|
FROM notb00007 a
|
|
WHERE a.num_nomi = datos_nomi.num_nomi
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.tipo_emp = datos_nomi.tipo_emp)
|
|
UNION SELECT a.cod_mov,
|
|
b.clase_mov,
|
|
a.cantidad,
|
|
a.valor,
|
|
b.cantidad_emp,
|
|
cantidad_cia,
|
|
"novedades",
|
|
a.departamento_afecta
|
|
FROM notb00007 a, notb00002 b
|
|
WHERE a.num_nomi = datos_nomi.num_nomi
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.tipo_emp = datos_nomi.tipo_emp
|
|
AND a.status_t IS NULL
|
|
AND a.cod_mov = b.cod_mov
|
|
UNION SELECT b.cod_mov,
|
|
a.clase_mov,
|
|
SUM(b.cantidad),
|
|
SUM(b.valor),
|
|
a.cantidad_emp,
|
|
a.cantidad_cia,
|
|
a.ch_encabeza,
|
|
c.departamento
|
|
FROM notb00008 b, notb00002 a, adtb00003 c
|
|
WHERE b.num_emp = datos_emp.num_emp
|
|
AND b.num_emp = c.num_emp
|
|
AND b.tipo_emp = datos_nomi.tipo_emp
|
|
AND b.cod_mov = a.cod_mov
|
|
AND b.status_t IS NULL
|
|
AND b.cod_mov = 19
|
|
AND b.fecha BETWEEN p_fecha_del AND p_Fecha_al
|
|
AND b.clase_mov = "F"
|
|
GROUP BY b.cod_mov,
|
|
a.clase_mov,
|
|
a.cantidad_emp,
|
|
a.cantidad_cia,
|
|
a.ch_encabeza,
|
|
C.departamento
|
|
|
|
END IF
|
|
|
|
# Busca de la tabla de novedades si la nomina es de bonificacion
|
|
IF opt2 = "S" THEN
|
|
DECLARE busca2 CURSOR FOR
|
|
SELECT a.cod_mov,
|
|
b.clase_mov,
|
|
a.cantidad,
|
|
a.valor,
|
|
b.cantidad_emp,
|
|
cantidad_cia,
|
|
"fijos",
|
|
c.departamento
|
|
FROM notb00003 a, notb00002 b, adtb00003 c
|
|
WHERE (a.num_emp = datos_emp.num_emp
|
|
AND a.num_emp = c.num_emp
|
|
AND a.cod_mov = b.cod_mov)
|
|
AND a.status_t IS NULL
|
|
AND CAST(a.cod_mov AS CHAR(3))
|
|
+ CAST(a.num_emp AS CHAR(4))
|
|
NOT IN (SELECT CAST(a.cod_mov AS CHAR(3))
|
|
+ CAST(a.num_emp AS CHAR(4))
|
|
FROM notb00007 a
|
|
WHERE a.num_nomi = datos_nomi.num_nomi
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.tipo_emp = datos_nomi.tipo_emp)
|
|
UNION SELECT a.cod_mov,
|
|
b.clase_mov,
|
|
a.cantidad,
|
|
a.valor,
|
|
b.cantidad_emp,
|
|
cantidad_cia,
|
|
"novedades",
|
|
a.departamento_afecta
|
|
FROM notb00007 a, notb00002 b
|
|
WHERE (a.num_nomi = datos_nomi.num_nomi
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.tipo_emp = datos_nomi.tipo_emp
|
|
AND
|
|
# a.departamento = datos_emp.departamento and
|
|
a.cod_mov = b.cod_mov)
|
|
AND a.status_t IS NULL
|
|
|
|
# ORDER BY a.cod_mov
|
|
END IF
|
|
LET modifica = "N"
|
|
LET encontre = "N"
|
|
LET bonifica = "N"
|
|
LET idx = 2
|
|
|
|
# Para buscar codigos de las nominas normales
|
|
IF opt2 = "N" THEN
|
|
DISPLAY "estoy en normal"
|
|
LET descuento_tss = 0
|
|
FOREACH busca1 INTO datos_mov.*
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
# Chequea los movimientos que son balanceados
|
|
# Tiene que el movimiento no sea el movimiento 11 porque esta en la tabla
|
|
# notb00014 que es donde estan los codigos que se balancean y se puso este
|
|
# codigo de movimiento en esta tabla para el proceso de fin de ano de nomina
|
|
DISPLAY "inicia ", datos_mov.cod_mov, " ", datos_emp.num_emp
|
|
IF datos_mov.cod_mov != 11 THEN
|
|
SELECT a.*
|
|
FROM notb00014 a
|
|
WHERE a.cod_mov = datos_mov.cod_mov
|
|
|
|
IF status != NOTFOUND THEN
|
|
SELECT SUM(a.valor)
|
|
INTO p_valor
|
|
FROM notb00008 a
|
|
WHERE (a.num_emp = datos_emp.num_emp
|
|
AND a.cod_mov = datos_mov.cod_mov)
|
|
AND a.status_t IS NULL
|
|
IF p_valor = 0 THEN
|
|
CONTINUE FOREACH
|
|
ELSE
|
|
|
|
IF p_valor < datos_mov.valor THEN
|
|
LET datos_mov.valor = p_valor
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Chequea que el codigo tenga la opcion de que si lo quieren generar
|
|
FOR i = 1 TO idx1
|
|
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
DISPLAY "data1: clasifica: ",
|
|
desp_mov[i].clasifica,
|
|
" COD MOV ",
|
|
desp_mov[i].cod_mov
|
|
IF desp_mov[i].clasifica = "N" THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
|
|
IF desp_mov[i].todos = "N"
|
|
AND datos_mov.identifica = "fijos" THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF datos_mov.cod_mov != 1 THEN
|
|
LET movi_emp[idx].clase_mov = datos_mov.clase_mov
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
END IF
|
|
|
|
# Calculo de las horas trabajadas en la jornada
|
|
# Esto solo lo calcula cuando el usuario poporciona la informacion de las
|
|
# horas trabajadas durante el periodo como una novedad
|
|
IF datos_mov.cod_mov = 1 THEN
|
|
#datos_mov.cod_mov = 9 THEN
|
|
|
|
LET modifica = "S"
|
|
LET sueldo_renta = 0
|
|
LET movi_emp[1].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[1].clase_mov = datos_mov.clase_mov
|
|
|
|
# El 8 es para calcular el sueldo por hora
|
|
#IF datos_mov.cantidad > 0 THEN
|
|
# LET movi_emp[1].cantidad = datos_mov.cantidad
|
|
# LET movi_emp[1].valor = (p_sueldo / 8) *
|
|
# datos_mov.cantidad
|
|
# END IF
|
|
IF datos_mov.cantidad = 0 AND datos_mov.cod_mov = 1 THEN
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].cantidad = 0
|
|
END IF
|
|
|
|
IF datos_mov.valor > 0 THEN
|
|
LET movi_emp[1].valor = datos_mov.valor
|
|
END IF
|
|
LET sueldo_renta = sueldo_renta + movi_emp[1].valor
|
|
END IF
|
|
|
|
IF datos_mov.cod_mov > 1 THEN
|
|
LET datos_mov.valor = datos_mov.valor * tasa
|
|
|
|
IF datos_mov.cod_mov = 33 THEN
|
|
LET bonifica = "S"
|
|
LET sueldo_renta = movi_emp[1].valor
|
|
LET sueldo_boni =
|
|
datos_mov.valor # Modificado el 11/11/2002
|
|
|
|
END IF
|
|
# Cuando el valor o la cantiad tienen algun valor se quedara este valor
|
|
# en la variable de asignacion
|
|
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
|
|
# Cuando es comida, desayuno, cena
|
|
IF datos_mov.cantidad_emp > 0
|
|
AND datos_mov.clase_mov = "D" THEN
|
|
LET movi_emp[idx].valor =
|
|
(datos_mov.cantidad_emp + datos_mov.cantidad_cia)
|
|
* datos_mov.cantidad
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
END IF
|
|
|
|
# Calculo descuento adicional TSS
|
|
IF movi_emp[idx].cod_mov = 29 THEN
|
|
LET descuento_tss = movi_emp[idx].valor
|
|
END IF
|
|
|
|
# Calculo incentivo asistencia
|
|
IF movi_emp[idx].cod_mov = 9 THEN
|
|
IF datos_mov.cantidad > 0 THEN
|
|
LET movi_emp[idx].valor =
|
|
sueldo_h * movi_emp[idx].cantidad
|
|
ELSE
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
END IF
|
|
END IF
|
|
|
|
# Calculo movimientos 6 y 4
|
|
IF movi_emp[idx].cod_mov = 6
|
|
OR movi_emp[idx].cod_mov = 4 THEN
|
|
IF movi_emp[idx].cantidad > 0 THEN
|
|
LET movi_emp[idx].valor =
|
|
movi_emp[idx].cantidad * movi_emp[idx].valor
|
|
END IF
|
|
END IF
|
|
LET movi_emp[idx].departamento = datos_mov.departamento
|
|
LET idx = idx + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
|
|
LET control_empleado = control_empleado + 1
|
|
CALL desplega()
|
|
DISPLAY "DESPLEGANDO NOVEDADES EN SCREEN.." TO estado
|
|
|
|
IF control_empleado >= factor THEN
|
|
LET control_empleado = 0
|
|
LET progreso = progreso + 1
|
|
|
|
IF progreso > 95 THEN
|
|
LET progreso = 95
|
|
END IF
|
|
|
|
DISPLAY progreso TO progreso
|
|
CALL ui.Interface.refresh()
|
|
END IF
|
|
|
|
END IF
|
|
LET hay1 = "N"
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = 32 THEN
|
|
LET hay1 = "S"
|
|
LET valor_regal = movi_emp[i].valor
|
|
END IF
|
|
END FOR
|
|
|
|
IF hay1 = "N" THEN
|
|
# Nomina de Regalia Pascual
|
|
IF regalia = "S" THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].cod_mov = 32
|
|
|
|
IF YEAR(p_fecha_al) <> YEAR(datos_emp.fecha) THEN
|
|
IF p10 IS NULL THEN
|
|
|
|
LET p10 = "N"
|
|
END IF
|
|
|
|
SELECT SUM(a.valor) / 12
|
|
INTO p_sueldo
|
|
FROM notb00008 a
|
|
WHERE a.cod_mov IN (1, 40, 5, 24, 16, 34, 51, 56)
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.fecha BETWEEN fecha_ext1 AND fecha_ext2
|
|
|
|
LET movi_emp[idx].valor = p_sueldo
|
|
END IF
|
|
|
|
IF YEAR(p_fecha_al) = YEAR(datos_emp.fecha) THEN
|
|
SELECT SUM(a.valor) / 12
|
|
INTO p_sueldo
|
|
FROM notb00008 a
|
|
WHERE (a.cod_mov IN (1, 40, 5, 24, 16, 34, 51)
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.fecha BETWEEN fecha_ext1 AND fecha_ext2)
|
|
|
|
LET p_mes = MONTH(datos_emp.fecha)
|
|
|
|
SELECT dias_prod INTO dias FROM mestable WHERE mes = p_mes
|
|
LET porc_dias = 0
|
|
# LET porc_dias = (dias - day(datos_emp.fecha)) / dias
|
|
LET p_mes = 12 - MONTH(datos_emp.fecha)
|
|
LET porc_dias = porc_dias + p_mes
|
|
LET movi_emp[idx].valor = p_sueldo #* porc_dias
|
|
END IF
|
|
|
|
LET movi_emp[idx].cantidad = porc_dias
|
|
LET valor_regal = movi_emp[idx].valor
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
|
|
END IF
|
|
END IF
|
|
|
|
# Para Cuando la nomina es de bonificacion
|
|
|
|
IF opt2 = "S" THEN
|
|
|
|
FOREACH busca2 INTO datos_mov.*
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
# Chequea los movimientos que son balanceados
|
|
# Tiene que el movimiento no sea el movimiento 11 porque esta en la tabla
|
|
# notb00014 que es donde estan los codigos que se balancean y se puso este
|
|
# codigo de movimiento en esta tabla para el proceso de fin de ano de nomina
|
|
IF datos_mov.cod_mov != 11 THEN
|
|
SELECT * FROM notb00014 WHERE cod_mov = datos_mov.cod_mov
|
|
|
|
IF status != NOTFOUND THEN
|
|
SELECT SUM(valor)
|
|
INTO p_valor
|
|
FROM notb00008
|
|
WHERE (num_emp = datos_emp.num_emp
|
|
AND cod_mov = datos_mov.cod_mov)
|
|
AND status_t IS NULL
|
|
IF status = NOTFOUND THEN
|
|
LET status = 0
|
|
END IF
|
|
IF p_valor = 0 THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Chequea que el codigo tenga la opcion de que si lo quieren generar
|
|
FOR i = 1 TO idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
IF desp_mov[i].todos = "N"
|
|
AND datos_mov.identifica = "fijos" THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
IF datos_mov.cod_mov != 1 THEN
|
|
LET movi_emp[idx].clase_mov = datos_mov.clase_mov
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
END IF
|
|
|
|
# Calculo de las horas trabajadas en la jornada
|
|
# Esto solo lo calcula cuando el usuario poporciona la informacion de las
|
|
# horas trabajadas durante el periodo como una novedad
|
|
IF datos_mov.cod_mov = 1 OR datos_mov.cod_mov = 9 THEN
|
|
LET modifica = "S"
|
|
LET sueldo_renta = 0
|
|
LET movi_emp[1].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[1].clase_mov = datos_mov.clase_mov
|
|
LET movi_emp[1].departamento = datos_mov.departamento
|
|
# El 190.60 es para calcular el sueldo por hora
|
|
IF datos_mov.cantidad > 0 THEN
|
|
LET movi_emp[1].cantidad = datos_mov.cantidad
|
|
LET movi_emp[1].valor =
|
|
(p_sueldo / 190.60) * datos_mov.cantidad
|
|
END IF
|
|
IF datos_mov.cantidad = 0 AND datos_mov.cod_mov = 1 THEN
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].cantidad = 0
|
|
END IF
|
|
|
|
LET datos_mov.valor = datos_mov.valor * tasa
|
|
IF datos_mov.valor > 0 THEN
|
|
LET movi_emp[1].valor = datos_mov.valor
|
|
END IF
|
|
LET sueldo_renta = sueldo_renta + movi_emp[1].valor
|
|
END IF
|
|
|
|
IF datos_mov.cod_mov > 1 THEN
|
|
LET datos_mov.valor = datos_mov.valor * tasa
|
|
IF datos_mov.cod_mov = 9 THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
IF datos_mov.cod_mov = 33 THEN
|
|
LET bonifica = "S"
|
|
LET sueldo_boni =
|
|
datos_mov.valor # Se Agrego el 11/11/2002
|
|
END IF
|
|
|
|
# Cuando el valor o la cantiad tienen algun valor se quedara este valor
|
|
# en la variable de asignacion
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
|
|
# Cuando es comida, desayuno, cena
|
|
IF datos_mov.cantidad_emp > 0
|
|
AND datos_mov.clase_mov = "D" THEN
|
|
LET movi_emp[idx].valor =
|
|
(datos_mov.cantidad_emp + datos_mov.cantidad_cia)
|
|
* datos_mov.cantidad
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
END IF
|
|
|
|
# Calculo incentivo asistencia
|
|
IF movi_emp[idx].cod_mov = 9 THEN
|
|
LET movi_emp[idx].valor =
|
|
sueldo_h * movi_emp[idx].cantidad
|
|
END IF
|
|
|
|
# Calculo movimientos 6 y 4
|
|
IF movi_emp[idx].cod_mov = 6
|
|
OR movi_emp[idx].cod_mov = 4 THEN
|
|
IF movi_emp[idx].cantidad > 0 THEN
|
|
LET movi_emp[idx].valor =
|
|
movi_emp[idx].cantidad * movi_emp[idx].valor
|
|
END IF
|
|
END IF
|
|
# Calculo de las horas extras
|
|
IF movi_emp[idx].clase_mov = "E" THEN
|
|
IF datos_mov.cantidad > 0 THEN
|
|
SELECT cantidad_cia
|
|
INTO porc_extras
|
|
FROM notb00002
|
|
WHERE cod_mov = movi_emp[idx].cod_mov
|
|
LET movi_emp[idx].valor =
|
|
salario_h * ((porc_extras / 100) + 1)
|
|
LET movi_emp[idx].valor =
|
|
movi_emp[idx].valor * datos_mov.cantidad
|
|
ELSE
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
END IF
|
|
END IF
|
|
LET movi_emp[idx].departamento = datos_mov.departamento
|
|
LET idx = idx + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
|
|
END IF
|
|
|
|
# Calculo del infotep
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = 33 THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
LET movi_emp[idx].cod_mov = 42
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].valor = movi_emp[i].valor * .005
|
|
LET movi_emp[idx].cantidad = 0
|
|
LET val_bonifica = movi_emp[i].valor
|
|
EXIT FOR
|
|
END IF
|
|
|
|
END FOR
|
|
|
|
IF regalia != "S" THEN
|
|
IF meses < 3 THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
LET movi_emp[idx].cod_mov = 4
|
|
LET movi_emp[idx].valor = 0
|
|
END IF
|
|
|
|
END IF
|
|
|
|
LABEL salta1:
|
|
|
|
# Busqueda de las novedades globales
|
|
DECLARE busca20 CURSOR FOR
|
|
SELECT cod_mov, cantidad_emp, clase_mov
|
|
FROM notb00002
|
|
WHERE tipo_mov = "G" AND status_t IS NULL
|
|
|
|
FOREACH busca20
|
|
INTO globales.cod_mov, globales.cantidad_emp, globales.clase_mov
|
|
FOR i = 1 TO idx1
|
|
IF globales.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
IF desp_mov[i].todos = "N"
|
|
AND datos_mov.identifica = "fijos" THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
IF globales.clase_mov = "S" THEN
|
|
IF datos_emp.paga_seg != "S" THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
|
|
FOR i = 1 TO idx
|
|
IF globales.cod_mov = movi_emp[i].cod_mov THEN
|
|
LET movi_emp[i].clase_mov = globales.clase_mov
|
|
CONTINUE FOREACH
|
|
END IF
|
|
|
|
END FOR
|
|
|
|
# Este es el movimiento del descuento de casa club cuando es quincenal
|
|
# devide la cantidad que paga el empleado entre dos.
|
|
IF globales.cod_mov = 20 THEN
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET globales.cantidad_emp = globales.cantidad_emp / 2
|
|
END IF
|
|
END IF
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
LET movi_emp[idx].cod_mov = globales.cod_mov
|
|
LET movi_emp[idx].valor = globales.cantidad_emp
|
|
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[idx].cod_mov != 36 THEN
|
|
LET movi_emp[idx].valor = movi_emp[idx].valor * semanas
|
|
END IF
|
|
END IF
|
|
|
|
LET movi_emp[idx].clase_mov = globales.clase_mov
|
|
|
|
END FOREACH
|
|
|
|
LET monto_descuento_fase = 0
|
|
|
|
# Calculo del Incentivo comida, desayuno, cena
|
|
LET p_valor = 0
|
|
FOR p = 1 TO idx
|
|
IF movi_emp[p].cod_mov != 0 AND movi_emp[p].cod_mov IS NOT NULL THEN
|
|
IF movi_emp[p].cod_mov = 16
|
|
OR movi_emp[p].cod_mov = 17
|
|
OR movi_emp[p].cod_mov = 18 THEN
|
|
SELECT cantidad_cia
|
|
INTO p_cantidad
|
|
FROM notb00002
|
|
WHERE cod_mov = movi_emp[p].cod_mov
|
|
|
|
LET p_valor = p_valor + (movi_emp[p].cantidad * p_cantidad)
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
# Busqueda del impuesto sobre la renta
|
|
|
|
IF acumulado IS NULL THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
LET renta = 0
|
|
|
|
# Loop para acumular los otros ingresos para el calculo de la nomina
|
|
# se le puso una condicion donde suma los otros ingresos de que solo sume
|
|
# los clase_mov = I o E que sean diferentes a el codigo 1 sueldo normal y
|
|
# 32 regalia pascual
|
|
|
|
LET otros_ing = 0
|
|
IF vacaciones = "S" THEN
|
|
LET sueldo_renta = sueldo_renta - movi_emp[1].valor
|
|
LET movi_emp[1].cantidad = 0
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].departamento = datos_emp.departamento
|
|
CALL vacaciones_colect()
|
|
END IF
|
|
|
|
LET otros_ing_tss = 0
|
|
SELECT SUM(a.valor)
|
|
INTO otros_ing_tss
|
|
FROM notb00008 a, notb00002 b
|
|
WHERE a.cod_mov = b.cod_mov
|
|
AND b.afecta_tss = "SI"
|
|
AND a.num_emp = datos_emp.num_emp
|
|
AND a.fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
AND a.status_t IS NULL #fecha_inicio_p
|
|
|
|
LET afp_pago_emp = 0
|
|
SELECT SUM(valor)
|
|
INTO afp_pago_emp
|
|
FROM notb00008
|
|
WHERE (cod_mov IN (49)
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al)
|
|
AND status_t IS NULL #fecha_inicio_p
|
|
|
|
LET afp_pago_cia = 0
|
|
SELECT SUM(valor)
|
|
INTO afp_pago_cia
|
|
FROM notb00008
|
|
WHERE (cod_mov IN (50)
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al)
|
|
AND status_t IS NULL #fecha_inicio_p
|
|
# DESCUENTO POR FAMILIAR EXTRA
|
|
LET descuento_tss1 = 0
|
|
SELECT SUM(valor * - 1)
|
|
INTO descuento_tss1
|
|
FROM notb00008
|
|
WHERE (cod_mov IN (29)
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al)
|
|
AND status_t IS NULL #fecha_inicio_p#
|
|
|
|
# DESCUENTO ESPECIAL FASE
|
|
SELECT ISNULL(SUM(valor * - 1), 0)
|
|
INTO monto_descuento_fase
|
|
FROM notb00008
|
|
WHERE (cod_mov IN (55)
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al)
|
|
AND status_t IS NULL
|
|
|
|
IF descuento_tss1 IS NULL THEN
|
|
LET descuento_tss1 = 0
|
|
END IF
|
|
LET descuento_tss = descuento_tss + descuento_tss1
|
|
IF afp_pago_emp IS NULL THEN
|
|
LET afp_pago_emp = 0
|
|
END IF
|
|
|
|
IF afp_pago_cia IS NULL THEN
|
|
LET afp_pago_cia = 0
|
|
END IF
|
|
|
|
IF otros_ing_tss IS NULL THEN
|
|
LET otros_ing_tss = 0
|
|
END IF
|
|
|
|
FOR i = 1 TO idx
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[i].clase_mov = "D"
|
|
AND movi_emp[i].cod_mov != 23
|
|
AND movi_emp[i].cod_mov != 70 THEN
|
|
LET movi_emp[1].departamento = datos_emp.departamento
|
|
LET movi_emp[i].valor = movi_emp[i].valor * semanas
|
|
END IF
|
|
END IF
|
|
|
|
# IF movi_emp[i].clase_mov = "I" or
|
|
# movi_emp[i].clase_mov = "E" THEN
|
|
|
|
IF movi_emp[i].cod_mov != 1 THEN
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[i].cod_mov != 31 THEN
|
|
IF movi_emp[i].cod_mov != 36 THEN
|
|
LET movi_emp[i].valor = movi_emp[i].valor * semanas
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
SELECT a.afecta_tss, a.clase_mov
|
|
INTO xafecta_tss, globales.clase_mov
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = movi_emp[i].cod_mov
|
|
|
|
IF xafecta_tss = "SI" THEN
|
|
IF globales.clase_mov = 'I' THEN
|
|
|
|
LET otros_ing_tss = movi_emp[i].valor + otros_ing_tss
|
|
ELSE
|
|
|
|
LET otros_ing_tss = otros_ing_tss - movi_emp[i].valor
|
|
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF movi_emp[i].valor IS NULL THEN
|
|
LET movi_emp[i].valor = 0
|
|
END IF
|
|
IF otros_ing IS NULL THEN
|
|
LET otros_ing = 0
|
|
END IF
|
|
IF globales.clase_mov = 'I' OR globales.clase_mov = 'E' THEN
|
|
LET otros_ing = movi_emp[i].valor + otros_ing
|
|
END IF
|
|
END IF
|
|
IF movi_emp[i].cod_mov = 55 THEN
|
|
LET monto_descuento_fase =
|
|
movi_emp[i].valor + monto_descuento_fase
|
|
END IF
|
|
|
|
#END IF
|
|
END FOR
|
|
|
|
IF acumulado IS NULL THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
|
|
IF sueldo_ganado IS NULL THEN
|
|
LET sueldo_ganado = 0
|
|
END IF
|
|
IF otros_ing_tss IS NULL THEN
|
|
LET otros_ing_tss = 0
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" OR datos_nomi.tipo_emp = "J" THEN
|
|
|
|
LET salario_tss = sueldo_ganado + sueldo_renta + otros_ing_tss
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
|
|
LET valor_renta = sueldo_renta + acumulado + otros_ing
|
|
|
|
ELSE
|
|
|
|
LET valor_renta = valor_renta * 2 + acumulado + otros_ing
|
|
|
|
END IF
|
|
IF ultima_semana_mes = "N" THEN
|
|
LET valor_renta = sueldo_renta + acumulado + otros_ing
|
|
|
|
ELSE
|
|
LET valor_renta = sueldo_renta + acumulado + otros_ing
|
|
|
|
END IF
|
|
|
|
ELSE
|
|
IF ultima_semana_mes = "S" THEN
|
|
LET valor_renta = sueldo_renta + acumulado
|
|
END IF
|
|
|
|
END IF
|
|
|
|
#-----------------------------------------------------------------------
|
|
LET calcula = "N"
|
|
LET retorne = "S"
|
|
#------------------------------------------------------------------------
|
|
|
|
LABEL retorna:
|
|
|
|
# Si es la nomina de bonificacion
|
|
IF retorne = "N" THEN
|
|
# Acumualdo sin bonificacion
|
|
LET valor_renta = valor_bonif1
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
IF regalia != "S" THEN
|
|
|
|
# Busca el monto de regalia el incentivo de asistencia
|
|
# que el empleado reciba
|
|
# POR ORDEN DEL ING. PAULINO EN EL 2DO SELECT SE QUITO EL CODIGO DEL INCENTIVO
|
|
# NO.9 PARA SER GRAVADO POR LA RENTA.
|
|
|
|
SELECT UNIQUE num_nomi
|
|
INTO numero_nomina
|
|
FROM notb00008
|
|
WHERE cod_mov = 32
|
|
AND tipo_emp = datos_nomi.tipo_emp
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha >= fecha_inicio_p
|
|
|
|
LET valor_regal = 0
|
|
SELECT SUM(valor)
|
|
INTO valor_regal
|
|
FROM notb00008
|
|
WHERE (cod_mov IN (32)
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha >= fecha_inicio_p)
|
|
AND status_t IS NULL
|
|
|
|
IF valor_regal IS NULL THEN
|
|
LET valor_regal = 0
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------------
|
|
# CALCULO PARA EL PAGO SEGURIDAD SOCIAL
|
|
# EL SALARIO MAXIMO COTIZABLE ES 75340 MENSUALES
|
|
# 37670 QUINCENALES
|
|
# 98,000.00 MENSUALES 25/1/2005
|
|
# MODIFIACION PARA LA INCLUSION DEL REGIMEN DE SALUD, EL 4/5/2007,
|
|
# LOS CODIGOS DE MOVIMIENTOS SON: 53 Y 54
|
|
#------------------------------------------------------------------------------
|
|
LET globales.cod_mov = 49
|
|
LET calcula_tss = "S"
|
|
|
|
# PARA LOS EMPLEADOS QUE NO DEBEN CALCULAR AFP Y SFS
|
|
CALL fcalcula_tss(
|
|
globales.cod_mov, datos_emp.num_emp)
|
|
RETURNING pestado
|
|
|
|
IF pestado THEN
|
|
FOR i = 1 TO idx1
|
|
IF globales.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
LET calcula_tss = "N"
|
|
EXIT FOR
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
ELSE
|
|
LET calcula_tss = "N"
|
|
END IF
|
|
LET globales.cod_mov = 53
|
|
LET calcula_ars = "S"
|
|
CALL fcalcula_tss(
|
|
globales.cod_mov, datos_emp.num_emp)
|
|
RETURNING pestado
|
|
IF pestado THEN
|
|
FOR i = 1 TO idx1
|
|
IF globales.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
LET calcula_ars = "N"
|
|
EXIT FOR
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
ELSE
|
|
LET calcula_ars = "N"
|
|
END IF
|
|
|
|
IF calcula_tss = "S" THEN
|
|
SELECT a.cantidad_emp / 100
|
|
INTO porc_emp
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = 49
|
|
|
|
SELECT a.cantidad_cia / 100
|
|
INTO porc_cia
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = 50
|
|
|
|
SELECT a.cantidad_cia / 100
|
|
INTO porc_cia_ars
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = 54
|
|
|
|
SELECT a.cantidad_emp / 100
|
|
INTO porc_emp_ars
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = 53
|
|
|
|
# BUSCA VALOR PAGADO EN EL MES
|
|
SELECT ISNULL(SUM(a.valor * - 1), 0)
|
|
INTO valor_ars_emp_pagado
|
|
FROM notb00008 a
|
|
WHERE a.num_emp = datos_emp.num_emp
|
|
AND a.cod_mov = 53
|
|
AND a.fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
|
|
IF salario_tss < (monto_afp) THEN
|
|
LET valor_tss_emp = salario_tss * porc_emp
|
|
LET valor_tss_cia = salario_tss * porc_cia
|
|
|
|
LET valor_renta = valor_renta - valor_tss_emp
|
|
ELSE
|
|
LET valor_tss_emp = (monto_afp) * porc_emp
|
|
LET valor_tss_cia = (monto_afp) * porc_cia
|
|
|
|
LET valor_renta = valor_renta - valor_tss_emp
|
|
|
|
END IF
|
|
|
|
#EL TOPE SALARIAL MENSUAL PARA LA ARS ES 98550
|
|
IF salario_tss < monto_ars THEN
|
|
LET valor_ars_emp =
|
|
salario_tss * porc_emp_ars # PAGOS ARS EMPLEADOS
|
|
LET valor_ars_cia =
|
|
salario_tss * porc_cia_ars # PAGOS ARS EMPRESA
|
|
ELSE
|
|
|
|
LET valor_ars_emp =
|
|
(monto_ars) * porc_emp_ars # PAGOS ARS EMPLEADOS
|
|
LET valor_ars_cia =
|
|
(monto_ars) * porc_cia_ars # PAGOS ARS EMPRESA
|
|
|
|
END IF
|
|
|
|
LET valor_tss_emp = valor_tss_emp - (afp_pago_emp * -1)
|
|
LET valor_tss_cia = valor_tss_cia - (afp_pago_cia * -1)
|
|
LET valor_renta = valor_renta - valor_ars_emp
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 49
|
|
LET movi_emp[idx].valor = valor_tss_emp
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 50
|
|
LET movi_emp[idx].valor = valor_tss_cia
|
|
|
|
IF calcula_ars = "S" THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 53
|
|
LET movi_emp[idx].valor =
|
|
valor_ars_emp - valor_ars_emp_pagado
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 54
|
|
LET movi_emp[idx].valor = valor_ars_cia
|
|
END IF
|
|
|
|
END IF
|
|
IF monto_descuento_fase IS NULL THEN
|
|
LET monto_descuento_fase = 0
|
|
END IF
|
|
|
|
LET valor_renta = valor_renta - monto_descuento_fase
|
|
|
|
#--------------------------------------------------------------------------------
|
|
|
|
LET valor_renta = valor_renta - valor_regal - descuento_tss
|
|
# ESTOY FORZANDO EL ACUMULADO PARA EL IMPUESTO CUANDO LA NOMINA SEA DE BONIFICACION
|
|
# LET valor_renta = 0
|
|
# IF opt2 = "S" THEN
|
|
# SELECT SUM(a.valor) INTO valor_renta
|
|
# FROM notb00008 a
|
|
# WHERE a.num_emp = datos_emp.num_emp AND a.clase_mov IN ("E","I") AND
|
|
# a.fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
# LET valor_renta = valor_renta + val_bonifica
|
|
|
|
# END IF
|
|
# ------------------------------------------------------------------------
|
|
# INICIO CALCULO IMPUESTO SOBRE LA RENTA
|
|
# ------------------------------------------------------------------------
|
|
|
|
IF opt2 = "S" THEN
|
|
IF acumulado IS NULL THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
LET valor_renta =
|
|
sueldo_boni + acumulado # SE COLOCO CUANDO ES DE
|
|
# BONIFICACION NO TRAE EL VALOR_RENTA
|
|
|
|
# SUMATORIA DEL AFP Y ARS
|
|
DISPLAY "sueldo_boni ", sueldo_boni, " acumulado ", acumulado
|
|
LET valor_seguridad1 = 0
|
|
SELECT ISNULL(SUM(valor), 0)
|
|
INTO valor_seguridad1
|
|
FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp
|
|
AND cod_mov IN (49, 53, 29)
|
|
AND num_nomi != numero_nomina
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
|
|
LET valor_seguridad1 = valor_seguridad1 * -1
|
|
|
|
# CALL fgl_winmessage("seguridad",valor_seguridad1,"stop")
|
|
|
|
LET valor_renta = valor_renta - valor_Seguridad1
|
|
END IF
|
|
|
|
#SUMATORIA ESPECIAL POR EL TEMA DE FASE
|
|
|
|
IF valor_renta > excento THEN
|
|
SELECT cod_mov
|
|
INTO datos_mov.cod_mov
|
|
FROM notb00002
|
|
WHERE clase_mov = "R"
|
|
|
|
LET renta_15 = 0
|
|
LET renta_20 = 0
|
|
LET renta_27 = 0
|
|
FOR i = 1 TO idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
GOTO llega
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# Loop para saber si el codigo del impuesto sea dado mediante a una novedad
|
|
|
|
FOR i = 1 TO idx
|
|
IF datos_mov.cod_mov = movi_emp[i].cod_mov THEN
|
|
LET datos_mov.clase_mov = "D"
|
|
GOTO llega
|
|
END IF
|
|
END FOR
|
|
IF numero_nomina IS NULL THEN
|
|
LET numero_nomina = 1
|
|
END IF
|
|
|
|
SELECT SUM(valor)
|
|
INTO renta_pagada
|
|
FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp
|
|
AND (cod_mov = datos_mov.cod_mov OR cod_mov = 70)
|
|
AND num_nomi != numero_nomina
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
|
|
IF renta_pagada IS NULL THEN
|
|
LET renta_pagada = 0
|
|
END IF
|
|
|
|
IF renta_pagada < 0 THEN
|
|
LET renta_pagada = renta_pagada * -1
|
|
END IF
|
|
|
|
# Renta al 15 %
|
|
IF valor_renta > excento AND valor_renta <= hasta_15 THEN
|
|
LET valor_renta = valor_renta - excento
|
|
LET renta = valor_renta * .15
|
|
LET renta_15 = renta
|
|
ELSE
|
|
LET renta = ((hasta_15 - excento) * .15)
|
|
LET renta_15 = renta
|
|
|
|
END IF
|
|
DISPLAY " 15 ", renta_15
|
|
#CALL fgl_winmessage("renta15",renta_15,"stop")
|
|
# Renta al 20 %
|
|
IF valor_renta > hasta_15 AND valor_renta <= hasta_20 THEN
|
|
|
|
LET valor_renta = valor_renta - hasta_15
|
|
LET renta = valor_renta * .20
|
|
LET renta_20 = renta
|
|
ELSE
|
|
IF valor_renta > hasta_20 THEN
|
|
LET renta = ((hasta_20 - hasta_15) * .20)
|
|
LET renta_20 = renta
|
|
END IF
|
|
END IF
|
|
DISPLAY " RENTA 20 ", renta_20
|
|
# Renta al 25 %
|
|
|
|
IF valor_renta > hasta_20 AND valor_renta <= hasta_25 THEN
|
|
|
|
LET valor_renta = valor_renta - hasta_20
|
|
|
|
LET renta = valor_renta * .25
|
|
LET renta_27 = renta
|
|
|
|
ELSE
|
|
IF valor_renta > hasta_25 THEN
|
|
LET renta = ((hasta_25 - hasta_20) * .25)
|
|
LET renta_27 = renta
|
|
END IF
|
|
END IF
|
|
DISPLAY "renta 25 ", renta_27
|
|
# Renta al 30 %
|
|
LET renta_30 = 0
|
|
IF valor_renta > hasta_25 THEN
|
|
|
|
LET valor_renta = valor_renta - hasta_25
|
|
LET renta = valor_renta * .25
|
|
LET renta_30 = renta
|
|
END IF
|
|
DISPLAY "renta 30 ", renta_30
|
|
|
|
IF renta_15 IS NULL THEN
|
|
LET renta_15 = 0
|
|
END IF
|
|
|
|
IF renta_30 IS NULL THEN
|
|
LET renta_30 = 0
|
|
END IF
|
|
|
|
IF renta_20 IS NULL THEN
|
|
LET renta_20 = 0
|
|
END IF
|
|
|
|
IF renta_27 IS NULL THEN
|
|
LET renta_27 = 0
|
|
END IF
|
|
|
|
LET renta = renta_15 + renta_20 + renta_27 + renta_30
|
|
|
|
IF opt2 = "S" THEN
|
|
LET renta = renta_pagada - renta
|
|
END IF
|
|
IF opt2 != "S" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET p_mes = (12 - p_mes1) + 1
|
|
LET renta = (renta_pagada - renta) #/ p_mes
|
|
ELSE
|
|
#IF ultima_semana_mes = "N" THEN
|
|
IF ultima_semana_mes = "N" THEN
|
|
LET renta = (renta_pagada - renta)
|
|
ELSE
|
|
LET renta = (renta_pagada - renta)
|
|
END IF
|
|
#ELSE
|
|
# LET renta = renta_pagada - renta
|
|
#END IF
|
|
END IF
|
|
END IF
|
|
|
|
IF renta < 0 THEN
|
|
LET renta = renta * -1
|
|
END IF
|
|
|
|
IF renta < 0 THEN
|
|
LET renta = 0
|
|
END IF
|
|
|
|
# Cuando es renta de bonificacion Se Agrego el 11/11/2002
|
|
#----------------------------------------------------------------------------
|
|
IF renta > 0 THEN
|
|
IF opt1 != "S" THEN
|
|
LET idx = idx + 1
|
|
LET renta = renta * -1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
END IF
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
#-----------------------------------------------------------------------
|
|
# COMPENSACION IMPUESTO SOBRE LA RENTA
|
|
#-----------------------------------------------------------------------
|
|
LET impuesto_c = 0
|
|
SELECT SUM(a.valor)
|
|
INTO impuesto_c
|
|
FROM notb00008 a
|
|
WHERE a.num_emp = datos_emp.num_emp AND a.cod_mov = 48
|
|
|
|
IF impuesto_c < 0 THEN
|
|
LET idx = idx + 1
|
|
IF renta < 0 THEN
|
|
LET renta = renta * -1
|
|
END IF
|
|
LET impuesto_c = impuesto_c * -1
|
|
|
|
IF renta > impuesto_c THEN
|
|
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 48
|
|
LET movi_emp[idx].valor = impuesto_c
|
|
ELSE
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 48
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
END IF
|
|
END IF
|
|
#------------- TERMINA CALCULO DE LA RENTA ------------------------------
|
|
|
|
IF opt1 = "S" THEN
|
|
# Se modifico el 11/11/2002 IF retorne = "N" THEN
|
|
IF datos_mov.cod_mov = 23 THEN
|
|
# Modifico 11/11/2002 LET renta = renta_boni - renta
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
# END IF
|
|
END IF
|
|
|
|
# Cuando el empleado no tiene que pagar contando con la bonificacion
|
|
# Solo por el sueldo
|
|
IF opt1 = "S" THEN
|
|
IF bonifica = "N" THEN
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = datos_mov.cod_mov THEN
|
|
GOTO llega
|
|
END IF
|
|
END FOR
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
END IF
|
|
|
|
# Calculo de la renta de regalia pascual
|
|
LABEL llega:
|
|
IF regalia = "S" THEN
|
|
SELECT cod_mov
|
|
INTO datos_mov.cod_mov
|
|
FROM notb00002
|
|
WHERE clase_mov = "R"
|
|
FOR i = 1 TO idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
GOTO otro_llega
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
CALL renta_regalia()
|
|
END IF
|
|
LABEL otro_llega:
|
|
|
|
#------------------------------------------------------------------------------
|
|
# CALCULO PARA EL PAGO DEL SEGURO SOCIAL
|
|
#------------------------------------------------------------------------------
|
|
IF datos_emp.paga_seg = "S" THEN
|
|
SELECT cod_mov, tipo_mov
|
|
INTO datos_mov.cod_mov, p_tipo
|
|
FROM notb00002
|
|
WHERE clase_mov = "S"
|
|
|
|
IF p_tipo = "G" THEN
|
|
|
|
GOTO salta
|
|
END IF
|
|
|
|
LET cuota_ss = 0
|
|
LET acum_mes_ss = 0
|
|
LET acum_ing_mes = 0
|
|
|
|
FOR i = 1 TO idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
OR desp_mov[i].clasifica IS NULL THEN
|
|
GOTO salta
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
# Busca el acumulado de seguro social, para el mes, que tiene el empleado
|
|
|
|
SELECT SUM(valor)
|
|
INTO acum_mes_ss
|
|
FROM notb00008
|
|
WHERE cod_mov = datos_mov.cod_mov
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN fecha_ini_mes AND p_fecha_al
|
|
AND cod_mov != 33
|
|
AND status_t IS NULL
|
|
|
|
IF acum_mes_ss IS NULL THEN
|
|
LET acum_mes_ss = 0
|
|
END IF
|
|
|
|
IF acum_mes_ss <> 0 THEN
|
|
LET acum_mes_ss = acum_mes_ss * -1
|
|
END IF
|
|
|
|
# Busca el acumulado de ingresos en el mes, que tiene el empleado
|
|
SELECT SUM(valor)
|
|
INTO acum_ing_mes
|
|
FROM notb00008
|
|
WHERE (clase_mov = "I" OR clase_mov = "E")
|
|
AND num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN fecha_ini_mes AND p_fecha_al
|
|
AND status_t IS NULL
|
|
|
|
IF acum_ing_mes IS NULL THEN
|
|
LET acum_ing_mes = 0
|
|
END IF
|
|
|
|
END IF
|
|
|
|
# Busca la cuota de seguro social que debe pagar el empleado segun los ingresos
|
|
# que obtuvo en la semana, si no es la ultima nomina del mes.
|
|
|
|
IF ultima_semana_mes = "N" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET ingresos_empleado = movi_emp[1].valor + otros_ing
|
|
LET salario_semanal = 0
|
|
|
|
SELECT salario_sem_hasta
|
|
INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_sem_desde <= ingresos_empleado
|
|
AND salario_sem_hasta >= ingresos_empleado
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET ss.porc_emp = 23.10
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
ELSE
|
|
SELECT salario_sem_hasta,
|
|
salario_men_hasta,
|
|
porc_emp,
|
|
porc_pat
|
|
INTO ss.salario_sem_hasta,
|
|
ss.salario_men_hasta,
|
|
ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
|
|
LET ingresos_empleado = (p_sueldo / 190.6) * 44 + otros_ing
|
|
LET salario_semanal = 0
|
|
SELECT salario_sem_hasta
|
|
INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_sem_desde <= ingresos_empleado
|
|
AND salario_sem_hasta >= ingresos_empleado
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET ss.porc_emp = 13.03
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
ELSE
|
|
SELECT salario_sem_hasta,
|
|
salario_men_hasta,
|
|
porc_emp,
|
|
porc_pat
|
|
INTO ss.salario_sem_hasta,
|
|
ss.salario_men_hasta,
|
|
ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Busca la cuota de seguro social que debe pagar el empleado segun los ingresos
|
|
# que obtuvo en el mes, si es la ultima nomina del mes.
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET ingresos_empleado =
|
|
movi_emp[1].valor + otros_ing + acum_ing_mes
|
|
LET salario_semanal = 0
|
|
|
|
SELECT salario_sem_hasta
|
|
INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_men_desde <= ingresos_empleado
|
|
AND salario_men_hasta >= ingresos_empleado
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET ss.porc_emp = 23.10
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
ELSE
|
|
SELECT salario_sem_hasta,
|
|
salario_men_hasta,
|
|
porc_emp,
|
|
porc_pat
|
|
INTO ss.salario_sem_hasta,
|
|
ss.salario_men_hasta,
|
|
ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
|
|
LET ingresos_empleado =
|
|
movi_emp[1].valor + otros_ing + acum_ing_mes
|
|
LET salario_semanal = 0
|
|
|
|
SELECT salario_sem_hasta
|
|
INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_men_desde <= ingresos_empleado
|
|
AND salario_men_hasta >= ingresos_empleado
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET ss.porc_emp = 13.03
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
|
|
ELSE
|
|
SELECT salario_sem_hasta,
|
|
salario_men_hasta,
|
|
porc_emp,
|
|
porc_pat
|
|
INTO ss.salario_sem_hasta,
|
|
ss.salario_men_hasta,
|
|
ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Determina la cuota de seguro social, si es la ultima nomina del mes
|
|
IF ultima_semana_mes = "S" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET cuota_ss = ss.porc_emp * semanas_mes - acum_mes_ss
|
|
LET cuota_ss_pa = ss.porc_pat * semanas_mes
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET cuota_ss = ss.porc_emp * semanas_mes - acum_mes_ss
|
|
LET cuota_ss_pa = ss.porc_pat * semanas_mes
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
END IF
|
|
END IF
|
|
|
|
# Determina la cuota de seguro social, si no es la ultima nomina del mes
|
|
|
|
IF ultima_semana_mes = "N" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET cuota_ss = ss.porc_emp
|
|
LET cuota_ss_pa = 0 #ss.porc_pat
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET cuota_ss = ss.porc_emp * 2
|
|
LET cuota_ss_pa = 0 #ss.porc_pat * 2
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
LET movi_emp[idx].departamento = datos_emp.departamento
|
|
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
LET ss.porc_emp = 0.00
|
|
LET ss.salario_sem_hasta = 0.00
|
|
LET ss.salario_men_hasta = 0.00
|
|
LET ss.porc_pat = 0.00
|
|
LET salario_semanal = 0.00
|
|
LET cuota_ss_pa = 0.00
|
|
#------------------------------------------------------------------------------
|
|
# FIN DEL CALCULO PARA EL PAGO DEL SEGURO SOCIAL
|
|
#------------------------------------------------------------------------------
|
|
|
|
LABEL salta:
|
|
#BEGIN WORK
|
|
# Insertar los movimientos del empleado en memoria
|
|
FOR p = 1 TO idx
|
|
|
|
# Caso particular para prestamo cooperativa, farmacia y plaza lama
|
|
# Tiene que el movimiento no sea el movimiento 11 porque esta en la tabla
|
|
# notb00014 que es donde estan los codigos que se balancean y se puso este
|
|
# codigo de movimiento en esta tabla para el proceso de fin de ano de nomina
|
|
IF movi_emp[p].cod_mov != 11 THEN
|
|
SELECT * FROM notb00014 WHERE @cod_mov = movi_emp[p].cod_mov
|
|
|
|
IF status != NOTFOUND THEN
|
|
|
|
SELECT SUM(valor)
|
|
INTO p_valor
|
|
FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp
|
|
AND cod_mov = movi_emp[p].cod_mov
|
|
AND status_t IS NULL
|
|
|
|
IF p_valor <= 0 THEN
|
|
LET movi_emp[p].num_emp = NULL
|
|
LET movi_emp[p].cod_mov = NULL
|
|
LET movi_emp[p].valor = 0
|
|
|
|
END IF
|
|
LET p_valor = p_valor * tasa
|
|
IF p_valor < movi_emp[p].valor THEN
|
|
LET movi_emp[p].valor = p_valor
|
|
END IF
|
|
|
|
IF movi_emp[p].cod_mov = 12 THEN
|
|
LET interes = p_valor * porciento
|
|
LET movi_emp[p].valor = movi_emp[p].valor
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET interes = interes / 100
|
|
END IF
|
|
|
|
IF interes > 0 THEN
|
|
LET interes = interes * -1
|
|
END IF
|
|
|
|
CASE
|
|
WHEN movi_emp[p].cod_mov = 12
|
|
LET p_codigo = 110
|
|
EXIT CASE
|
|
WHEN movi_emp[p].cod_mov = 13
|
|
LET p_codigo = 111
|
|
EXIT CASE
|
|
WHEN movi_emp[p].cod_mov = 19
|
|
LET p_codigo = 112
|
|
EXIT CASE
|
|
END CASE
|
|
|
|
# Vacaciones Colectivas
|
|
IF vacaciones = "S" THEN
|
|
LET interes = interes * semanas
|
|
END IF
|
|
#----------------------------------------------------------------------------
|
|
|
|
# Inserta los intereses de los perstamos como un movimiento en la
|
|
# nomina, el codigo de los interes es el 110
|
|
IF calcula_interes = "SI" THEN
|
|
IF movi_emp[p].valor != 0 THEN
|
|
|
|
LET movi_emp[p].departamento =
|
|
datos_emp.departamento
|
|
INSERT INTO notb00008(
|
|
num_nomi,
|
|
tipo_emp,
|
|
num_emp,
|
|
departamento,
|
|
nivel_emp,
|
|
cod_puesto,
|
|
fecha,
|
|
cod_mov,
|
|
cantidad,
|
|
valor,
|
|
clase_mov,
|
|
us_crea,
|
|
fech_crea)
|
|
VALUES(datos_nomi.num_nomi,
|
|
datos_nomi.tipo_emp,
|
|
datos_emp.num_emp,
|
|
datos_emp.departamento,
|
|
datos_emp.nivel_emp,
|
|
datos_emp.cod_puesto,
|
|
p_fecha_al,
|
|
p_codigo,
|
|
movi_emp[p].cantidad,
|
|
interes,
|
|
movi_emp[p].clase_mov,
|
|
SUSER_SNAME(),
|
|
GETDATE())
|
|
|
|
END IF
|
|
|
|
END IF
|
|
END IF
|
|
END IF
|
|
# Si el movimiento es de prestamo farmacia o plaza lama
|
|
# Si el valor pendiente de estos prestamos esta saldado no inserta el movimiento
|
|
IF movi_emp[p].cod_mov = 13 OR movi_emp[p].cod_mov = 19 THEN
|
|
IF p_valor <= 0 THEN
|
|
LET movi_emp[p].num_emp = NULL
|
|
END IF
|
|
END IF
|
|
#----------------------------------------------------------------------------
|
|
# Cuando el movimiento es de prestamo cooperativa chequea que el valor con
|
|
# el 1% sea menor o igual que cero para no insertar movimiento en la tabla
|
|
IF movi_emp[p].valor <= 0 THEN
|
|
LET movi_emp[p].num_emp = NULL
|
|
END IF
|
|
#-------------------------------------------------------------------------
|
|
END IF
|
|
|
|
IF movi_emp[p].cod_mov != 0 AND movi_emp[p].cod_mov IS NOT NULL THEN
|
|
IF movi_emp[p].clase_mov = "D"
|
|
OR movi_emp[p].clase_mov = "R"
|
|
OR movi_emp[p].clase_mov = "S" THEN
|
|
LET movi_emp[p].clase_mov = "D"
|
|
IF movi_emp[p].valor > 0 THEN
|
|
LET movi_emp[p].valor = movi_emp[p].valor * -1
|
|
END IF
|
|
|
|
END IF
|
|
IF movi_emp[p].valor IS NULL THEN
|
|
LET movi_emp[p].valor = 0
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
IF movi_emp[p].valor != 0 THEN
|
|
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[p].cod_mov = 22 THEN
|
|
LET movi_emp[p].valor = movi_emp[p].valor * semanas
|
|
END IF
|
|
END IF
|
|
|
|
# --------------------------------- COMPENSACION ISR ---------------------
|
|
IF movi_emp[p].cod_mov = 48 THEN
|
|
IF movi_emp[p].valor < 0 THEN
|
|
LET movi_emp[p].valor = movi_emp[p].valor * -1
|
|
END IF
|
|
END IF
|
|
#-------------------------------------------------------------------------
|
|
|
|
INSERT INTO notb00008(
|
|
num_nomi,
|
|
tipo_emp,
|
|
num_emp,
|
|
departamento,
|
|
nivel_emp,
|
|
cod_puesto,
|
|
fecha,
|
|
cod_mov,
|
|
cantidad,
|
|
valor,
|
|
clase_mov,
|
|
us_crea,
|
|
fech_crea,
|
|
departamento_afecta)
|
|
VALUES(datos_nomi.num_nomi,
|
|
datos_nomi.tipo_emp,
|
|
datos_emp.num_emp,
|
|
datos_emp.departamento,
|
|
datos_emp.nivel_emp,
|
|
datos_emp.cod_puesto,
|
|
p_fecha_al,
|
|
movi_emp[p].cod_mov,
|
|
movi_emp[p].cantidad,
|
|
movi_emp[p].valor,
|
|
movi_emp[p].clase_mov,
|
|
usuarios,
|
|
GETDATE(),
|
|
movi_emp[p].departamento)
|
|
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
CALL movi_emp.clear()
|
|
#CLEAR FORM
|
|
#COMMIT WORK
|
|
END FOREACH
|
|
|
|
LET progreso = 100
|
|
|
|
DISPLAY progreso TO progreso
|
|
CALL ui.Interface.refresh()
|
|
CALL fgl_winmessage("MENSAJE", "GENERACION NOMINA TERMINADA", "STOP")
|
|
CLOSE WINDOW w1
|
|
END FUNCTION
|
|
|
|
FUNCTION renta_regalia()
|
|
SELECT SUM(@valor)
|
|
INTO valor_renta
|
|
FROM notb00008
|
|
WHERE @num_emp = datos_emp.num_emp AND clase_mov IN ("I", "E")
|
|
LET renta_15 = 0
|
|
LET renta_20 = 0
|
|
LET renta_27 = 0
|
|
LET otros_ing = 0
|
|
LET ing_regal = 0
|
|
LET l = 18
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].clase_mov = "I" OR movi_emp[i].clase_mov = "E" THEN
|
|
IF movi_emp[i].valor IS NULL THEN
|
|
LET movi_emp[i].valor = 0
|
|
END IF
|
|
LET otros_ing = otros_ing + movi_emp[i].valor
|
|
END IF
|
|
END FOR
|
|
# Este comentario pertenece al comentario mas abajo
|
|
# LET ing_regal = valor_regal
|
|
#-----------------------------------------------------------------------------
|
|
LET valor_regal = otros_ing
|
|
IF valor_regal > 14475 THEN
|
|
# Se puso comentario porque el ano 1995 se calculo los incentivos conjuntamente
|
|
# Con la regalia
|
|
{IF ing_regal < 10050 THEN
|
|
LET valor_regal = valor_regal - ing_regal
|
|
END IF}
|
|
#------------------------------------------------------------------------------
|
|
LET valor_regal = valor_regal - 14475
|
|
# Renta al 15 %
|
|
IF valor_renta > 97800 AND valor_renta <= 162996 THEN
|
|
LET renta_15 = valor_regal * .15
|
|
END IF
|
|
|
|
# Renta al 20 %
|
|
IF valor_renta > 162996 AND valor_renta < 244488 THEN
|
|
LET renta_20 = valor_regal * .20
|
|
END IF
|
|
|
|
# Renta al 27 %
|
|
IF valor_renta > 244488 THEN
|
|
LET renta_27 = valor_regal * .25
|
|
END IF
|
|
|
|
LET renta_p = renta_15 + renta_20 + renta_27
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta_p
|
|
END IF
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION vacaciones_colect()
|
|
# Cuando aplican el codigo de vacaciones colectivas que es el codigo 31
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = 1 THEN
|
|
LET movi_emp[i].valor = 0
|
|
END IF
|
|
|
|
IF movi_emp[i].cod_mov = 31 THEN
|
|
LET movi_emp[1].cantidad = movi_emp[i].cantidad
|
|
LET semanas = movi_emp[i].cantidad / p_h_normal
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
FUNCTION desplega()
|
|
DEFINE
|
|
pidx SMALLINT,
|
|
nombre_mov CHAR(30)
|
|
FOR pidx = 1 TO 9
|
|
IF movi_emp[pidx].cod_mov > 0 THEN
|
|
IF movi_emp[pidx].cantidad IS NOT NULL
|
|
OR movi_emp[pidx].valor IS NOT NULL THEN
|
|
SELECT a.descrip_mov
|
|
INTO nombre_mov
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = movi_emp[pidx].cod_mov
|
|
|
|
DISPLAY movi_emp[pidx].cod_mov TO sdetalle[pidx].cod_mov
|
|
DISPLAY nombre_mov TO sdetalle[pidx].descripcion
|
|
DISPLAY movi_emp[pidx].cantidad TO sdetalle[pidx].cantidad
|
|
DISPLAY movi_emp[pidx].valor TO sdetalle[pidx].valor
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
|
|
FUNCTION fcalcula_tss(pcod_mov, pnumemp)
|
|
DEFINE pcod_mov, pnumemp SMALLINT
|
|
|
|
SELECT a.cod_mov
|
|
FROM notb00003 a
|
|
WHERE a.cod_mov = pcod_mov AND a.num_emp = pnumemp AND a.valor = 0
|
|
IF STATUS = NOTFOUND THEN
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
END IF
|
|
END FUNCTION
|