Files
MBS/PROYECTO/addir/adprrp044.4gl
T

640 lines
21 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : adprrp044
OBJETIVO : Listar las informaciones generales de los
Empleados Quincenales y Semanales y Ex-Empleados
Agrupados por los Deptos. Corporativos.
PROGRAMADOR : Oscar A. Castillo
FECHA REALIZACION : Friday, 16 March, 2001
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE tipo_l CHAR(1),
fecha1,fecha2,fecha_ini_e,fecha_fin_e DATE,
mes1,mes2,ano SMALLINT,
l_monto_emp,m_monto_emp,l_sueld_con,sueld_con,sueld_con1,ingresos LIKE adtb00003.sueldo_ac,
m_plan INTEGER,
m_categ CHAR(1),
corporativo LIKE adtb00042.dep_corp,
afp_tss,m_v98,v_comp,benef,otros_ben,horas,bonificacion,reg_pascual DECIMAL(12,2),
adtb40 RECORD LIKE adtb00040.*,edad,edad1 INTEGER,
superm,pormes,vida,myd,comision DECIMAL(12,2),
por_vida, por_myd,por_comi DECIMAL(12,2)
FUNCTION adprrp044()
## SE DEFINE EL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA EL REPORTE
DEFINE list_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,
cedula LIKE adtb00003.cedula,
serie LIKE adtb00003.serie,
telefono LIKE adtb00003.telefono,
fech_nac LIKE adtb00003.fech_nac,
tipo_sangre LIKE adtb00003.tipo_sangre,
licencia LIKE adtb00003.licencia,
fech_efec LIKE adtb00003.fech_efec,
sueldo_ac LIKE adtb00003.sueldo_ac,
nom_dpto LIKE adtb00001.nom_dpto,
nom_puesto LIKE adtb00004.nom_puesto,
calle LIKE adtb00003.calle,
casa_num LIKE adtb00003.casa_num,
barrio LIKE adtb00003.barrio,
urbanizacion LIKE adtb00003.urbanizacion,
sexo LIKE adtb00030.sexo,
dep_corp LIKE adtb00042.dep_corp,
clase_emp LIKE adtb00003.clase_emp,
monto_seg_dental LIKE adtb00003.monto_seg_dental,
monto_asegurado LIKE adtb00003.monto_asegurado,
cod_plan LIKE adtb00003.cod_plan,
estado CHAR(1)
END RECORD,
dura DECIMAL(8,2)
#WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM adfmrp044 FROM "adfmrp044"
DISPLAY FORM adfmrp044
CALL pantalla()
DISPLAY "adprrp044" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Empleados Deartamentos Corporativos " AT 6,23 ATTRIBUTE(BLACK)
## INDICA EL PAPEL NECESARIO PARA IMPRIMIR EL REPORTE. 1 - PAPEL 9 1/2 X 11
## 2 - PAPEL 14 7/8 X 11
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
CALL defecto(impresor) RETURNING imprime, letras.*, archivo
## AQUI SE DIGITA LA VARIABLE QUE INDICA LA CONDICION DEL REPORTE, ES DECIR
## SI SE TRATA DE EMPLEADOS SEMANALES O QUINCENALES
INPUT BY NAME mes1,mes2,ano
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*, archivo
AFTER FIELD mes1
IF mes1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes1
END IF
AFTER FIELD mes2
IF mes2 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes2
END IF
AFTER FIELD ano
IF ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
SELECT a.fecha_corte
INTO fecha2
FROM prdtable a
WHERE a.ano = ano
AND a.mes = mes2
SELECT a.fecha_inicio
INTO fecha1
FROM prdtable a
WHERE a.ano = ano
AND a.mes = mes1
AFTER INPUT
EXIT INPUT
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT BY NAME criterio ON a.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
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE DE LOS QUINCENALES
#IF tipo_l = "N" THEN
LET SELEC =
"SELECT UNIQUE a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
" a.nom1_emp,a.apell1_emp,a.cedula,a.serie,a.telefono,a.fech_nac, ",
" a.tipo_sangre,a.licencia,a.fech_efec,a.sueldo_ac,c.nom_dpto, ",
" b.nom_puesto,a.calle,a.casa_num,a.barrio,a.urbanizacion,d.sexo, ",
" e.dep_corp,a.clase_emp,a.monto_seg_dental,a.monto_asegurado,a.cod_plan,a.status_t ",
"FROM adtb00003 a,adtb00004 b,adtb00001 c,adtb00030 d,notb00008 t, OUTER adtb00043 e ",
"WHERE (a.cod_puesto=b.cod_puesto) AND (a.departamento=c.departamento) AND ",
#" (a.status_t is null OR a.status_t NOT IN('D','E','T')) AND ",
" (a.num_emp = d.num_emp AND a.num_emp = e.num_emp AND ",
" d.num_emp = e.num_emp AND a.num_emp = t.num_emp AND ",
" t.fecha BETWEEN ? AND ? AND ", criterio CLIPPED,
") ORDER BY 22,1 "
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
## AQUI SE PREPARA LA INFORMACION SELECCIONADA
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
OPEN accion USING fecha1,fecha2
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT empleados1 TO archivo
# display "fechas ",fecha1, " ",fecha2
## AQUI SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
WHILE STATUS != NOTFOUND
FETCH accion INTO list_emp.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
SELECT MIN(a.fecha) INTO fecha_ini_e
FROM notb00008 a
WHERE a.fecha between fecha1 AND
fecha2 AND
a.num_emp = list_emp.num_emp
SELECT MAX(a.fecha) INTO fecha_fin_e
FROM notb00008 a
WHERE a.fecha between fecha1 AND
fecha2 AND
a.num_emp = list_emp.num_emp
LET dura = fecha_fin_e - fecha_ini_e
LET pormes = dura / 30 USING "###"
LET pormes = pormes + 1
display pormes at 18,1
{
SELECT count(a.mes)
INTO pormes
FROM prdtable a
WHERE a.ano = ano
AND a.fecha_inicio >= fecha_ini_e
AND a.fecha_corte < = fecha_fin_e
SELECT UNIQUE a.plan,a.categ
INTO m_plan,m_categ
FROM smtb00012 a
WHERE a.num_emp = list_emp.num_emp
AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
SELECT a.monto_empresa
INTO l_monto_emp
FROM smtb00003 a
WHERE a.plan = m_plan
AND a.categ = m_categ
AND a.status_t IS NULL
ELSE
LET l_monto_emp = 0
END IF
}
IF l_monto_emp IS NULL THEN
LET l_monto_emp = 0
END IF
#DISPLAY "PASO ",l_monto_emp
LET m_monto_emp = l_monto_emp * pormes
#DISPLAY "PASO 11",m_monto_emp
SELECT SUM(a.valor)
INTO m_v98
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp
AND a.cod_mov = 98
#AND a.status_t IS NULL
AND a.fecha BETWEEN fecha1 AND fecha2
SELECT SUM(a.valor)
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp AND
a.fecha between fecha1 AND fecha2
IF STATUS != NOTFOUND THEN
#LET STATUS = 0
IF list_emp.monto_seg_dental != 0 THEN
LET v_comp = (list_emp.monto_seg_dental * 0.70)
LET v_comp = v_comp * pormes
END IF
END IF
# Seguro Social
SELECT SUM(a.valor)
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp
AND a.fecha BETWEEN fecha1 AND fecha2
#AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
IF list_emp.monto_asegurado > 0 THEN
SELECT a.*
INTO adtb40.*
FROM adtb00040 a
WHERE a.cod_plan = list_emp.cod_plan
AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
IF adtb40.porc_vida IS NULL THEN
LET adtb40.porc_vida = 0
END IF
IF adtb40.porc_mid IS NULL THEN
LET adtb40.porc_mid = 0
END IF
IF adtb40.porc_comision IS NULL THEN
LET adtb40.porc_comision = 0
END IF
LET edad1 = 0
LET edad1 = TODAY - list_emp.fech_nac
LET edad = edad1/365
LET vida = (list_emp.monto_asegurado * (adtb40.porc_vida / 100))
LET myd = (list_emp.monto_asegurado * (adtb40.porc_mid / 100))
#IF edad >= 60 THEN
LET comision = (list_emp.monto_asegurado * (adtb40.porc_comision / 100))
{
Puesto en comentario por requisicion de Juana Cruz en fecha 27/03/20002
a las 12:00 pm
ELSE
LET comision = 0
END IF
}
LET vida = vida * pormes
LET myd = myd * pormes
LET comision = comision * pormes
END IF
END IF
END IF
IF vida IS NULL THEN
LET vida = 0
END IF
IF myd IS NULL THEN
LET myd = 0
END IF
IF comision IS NULL THEN
LET comision = 0
END IF
IF v_comp IS NULL THEN
LET v_comp = 0
END IF
IF m_v98 IS NULL THEN
LET m_v98 = 0
END IF
IF superm IS NULL THEN
LET superm = 0
END IF
IF m_monto_emp IS NULL THEN
LET m_monto_emp = 0
END IF
LET sueld_con = 0
LET sueld_con1 = 0
LET ingresos = 0
# CODIGO 50 ES EL APORTE DE LA EMPRESA A LA SEGURIDAD SOCIAL
SELECT SUM(a.valor) INTO ingresos
FROM notb00008 a
WHERE a.clase_mov in ("E","I")
AND a.cod_mov NOT IN (1,2,3)
# En Comentario temporalmente para sacar un reporte a Juani AND a.cod_mov != 1
AND a.num_emp = list_emp.num_emp
AND a.fecha between fecha1 and fecha2
SELECT SUM(a.valor) INTO sueld_con1
FROM notb00008 a
WHERE a.cod_mov = 1
AND a.num_emp = list_emp.num_emp
AND a.fecha between fecha1 and fecha2
IF ingresos IS NULL THEN
LET ingresos = 0
END IF
IF sueld_con1 IS NULL THEN
LET sueld_con1 = 0
END IF
LET sueld_con = (sueld_con1 + ingresos) / pormes
{ ANTES
IF sueld_con > 13662 THEN
LET sueld_con = 13662
END IF
}
IF sueld_con > 22602 THEN
LET sueld_con = 22602
END IF
LET sueld_con = sueld_con * pormes
LET l_sueld_con = 0
LET l_sueld_con = sueld_con * 0.0140
LET sueld_con = 0
LET sueld_con1 = 0
LET ingresos = 0
LET benef = 0
#-------------------------------------------------------------------------------------
# Agregado por Juan Soto
LET por_vida = (vida * 0.12)
LET por_myd = (myd * 0.12)
LET por_comi = (comision * 0.12)
LET vida = vida + por_vida
LET myd = myd + por_myd
LET comision = comision + por_comi
# Seguridad Social AFP
SELECT SUM(a.valor)
INTO afp_tss
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp
AND a.cod_mov IN (50)
AND a.fecha BETWEEN fecha1 AND fecha2
IF afp_tss IS NULL THEN
LET afp_tss = 0
END IF
#-------------------------------------------------------------------------------------
LET benef = vida + myd + comision + v_comp + m_v98 + m_monto_emp + l_sueld_con +
afp_tss
display pormes
DISPLAY "Vida ",vida
DISPLAY "myd ",myd
DISPLAY "comision ",comision
DISPLAY "v_comp ",v_comp
DISPLAY "m_v98 ",m_v98
DISPLAY "m_monto_emp ",m_monto_emp
DISPLAY "l_sueld_con ",l_sueld_con
DISPLAY "afp_tss ",afp_tss
LET list_emp.sueldo_Ac = 0
SELECT SUM(a.valor),SUM(a.cantidad)
INTO list_emp.sueldo_ac,horas
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp
AND a.cod_mov IN (1,34)
AND a.fecha BETWEEN fecha1 AND fecha2
# AND a.status_t IS NULL
SELECT SUM(a.valor)
INTO otros_ben
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp
AND a.cod_mov IN (2,3,4,5,6,7,8,9,10,32,33,36,37,40,44)
# AND a.cod_mov IN (4,5,6,7,8,9,10,32,33,36,37,40,44)
AND a.fecha BETWEEN fecha1 AND fecha2
OUTPUT TO REPORT empleados1(list_emp.*,horas,bonificacion,reg_pascual,otros_ben,benef,
vida,myd,comision,v_comp,m_v98,m_monto_emp,l_sueld_con)
LET vida = 0
LET myd = 0
LET comision = 0
LET v_comp = 0
LET m_v98 = 0
LET m_monto_emp = 0
LET l_sueld_con = 0
END WHILE
FINISH REPORT empleados1
RUN imprime
CLEAR SCREEN
END FUNCTION
## AQUI SE DEFINE EL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT empleados1(x,p_horas,p_boni,p_regalia,p_otros,p_benef,
pvida,pmyd,pcomision,pv_comp,pm_v98,pm_monto_emp,pl_sueld_con)
DEFINE x 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,
cedula LIKE adtb00003.cedula,
serie LIKE adtb00003.serie,
telefono LIKE adtb00003.telefono,
fech_nac LIKE adtb00003.fech_nac,
tipo_sangre LIKE adtb00003.tipo_sangre,
licencia LIKE adtb00003.licencia,
fech_efec LIKE adtb00003.fech_efec,
sueldo_ac LIKE adtb00003.sueldo_ac,
nom_dpto LIKE adtb00001.nom_dpto,
nom_puesto LIKE adtb00004.nom_puesto,
calle LIKE adtb00003.calle,
casa_num LIKE adtb00003.casa_num,
barrio LIKE adtb00003.barrio,
urbanizacion LIKE adtb00003.urbanizacion,
sexo LIKE adtb00030.sexo,
dep_corp LIKE adtb00042.dep_corp,
clase_emp LIKE adtb00003.clase_emp,
monto_seg_dental LIKE adtb00003.monto_seg_dental,
monto_asegurado LIKE adtb00003.monto_asegurado,
cod_plan LIKE adtb00003.cod_plan,
estado CHAR(1)
END RECORD,
p_corp LIKE adtb00042.dep_corp,
nombre_corp LIKE adtb00042.nombre_depto,
p_benef,p_otros,p_horas,p_boni,p_regalia DECIMAL(12,2),
pvida,pmyd,pcomision,pv_comp,pm_v98,pm_monto_emp,pl_sueld_con DECIMAL(12,2)
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE l SMALLINT
DEFINE varia CHAR(12),
m_cedula LIKE adtb00038.cedula_n,
m_sexo LIKE adtb00030.sexo
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 2
BOTTOM MARGIN 4
ORDER BY x.dep_corp
FORMAT
PAGE HEADER
LET hora = time
IF decide = "Q" THEN
LET varia = "QUINCENALES"
END IF
IF decide = "S" THEN
LET varia = "SEMANALES"
END IF
IF decide = "T" THEN
LET varia = "EX-EMPLEADOS"
END IF
## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA-
LET l = (135 - LENGTH(varia))/2
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, letras.doce,letras.comp_on,letras.negrillas_on
PRINT COLUMN 1, "adprrp044",
COLUMN 44, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 104, "Pag. ",pageno using "###"
PRINT COLUMN 44, " Sistema de Administracion de Personal",
COLUMN 102, today using "dd/mm/yyyy"
PRINT COLUMN 44, " Maestra de Personal ",varia CLIPPED,
COLUMN 107, hora
SKIP 1 LINE
PRINT COLUMN 2, "Desde : ",fecha1 USING "dd/mm/yyyy",
" Hasta : ",fecha2 USING "dd/mm/yyyy"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"-------------------------"
PRINT COLUMN 65, "Horas",
COLUMN 80, " Otros"
PRINT COLUMN 2, "Codigo No.",
COLUMN 18, "Nombre Empleado",
COLUMN 49, "Salario ",
COLUMN 65, "Normales",
COLUMN 80, "Ingresos",
COLUMN 95, " Beneficios"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"------------------------"
PRINT letras.negrillas_off
## AQUI SE INDICA LA IMPRESION DEL DETALLE
BEFORE GROUP OF x.dep_corp
SELECT a.nombre_depto
INTO nombre_corp
FROM adtb00042 a
WHERE a.dep_corp = x.dep_corp
AND a.status_t IS NULL
PRINT COLUMN 1, "Departamento : ",x.dep_corp USING "#####"," - ",
nombre_corp CLIPPED
SKIP 1 LINE
ON EVERY ROW
INITIALIZE m_cedula,m_sexo TO NULL
PRINT COLUMN 1, letras.negrillas_on,
COLUMN 3, x.num_emp USING "&&&&","-",
x.departamento USING "&&&&","-",
x.nivel_emp USING "&&","-",x.cod_puesto USING "&&",
" ",x.apell1_emp clipped,", ",x.nom1_emp, # clipped, " ",
#COLUMN 48, letras.negrillas_off
COLUMN 47, x.sueldo_ac using "###,###.##",
COLUMN 62, p_horas using "###,###.##",
COLUMN 78, p_otros using "##,###,###.##",
COLUMN 93, p_benef using "##,###,###.##"
{ PRINT COLUMN 57, Pvida USING "##,###.##", # SEGURO VIDA
COLUMN 66, Pmyd USING "##,###.##"," ",
COLUMN 75, Pcomision using "##,###.##", " ",
COLUMN 84, Pv_comp USING "##,###.##", " ",
COLUMN 93, Pm_v98 using "##,###.##", " ", #
COLUMN 103, Pm_monto_emp using "##,###.##", " ", # SEGURO MEDICO
COLUMN 114,Pl_sueld_con using "##,###.##" # ACCIDENTE DE TRABAJO
}
AFTER GROUP OF x.dep_corp
SKIP 1 LINE
PRINT COLUMN 4, "Sub-Total ",
COLUMN 44, GROUP SUM(x.sueldo_ac) USING "##,###,###.##",
COLUMN 59, GROUP SUM(p_horas) USING "##,###,###.##",
COLUMN 78, GROUP SUM(p_otros) USING "##,###,###.##",
COLUMN 93, GROUP SUM(p_benef) USING "##,###,###.##"
SKIP 1 LINE
PRINT COLUMN 2, "Total Departamento = ", GROUP count(*) using "###"
SKIP 1 LINE
ON LAST ROW
SKIP 1 LINE
PRINT COLUMN 4, "Total ",
COLUMN 44, SUM(x.sueldo_ac) USING "##,###,###.##",
COLUMN 59, SUM(p_horas) USING "##,###,###.##",
COLUMN 78, SUM(p_otros) USING "##,###,###.##",
COLUMN 93, SUM(p_benef) USING "##,###,###.##"
SKIP 1 LINE
PRINT COLUMN 2, "Total de Registros Impresos = ", count(*) using "###"
PRINT letras.comp_off,ASCII 27, ASCII 80
END REPORT