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

446 lines
14 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : adprrp046
OBJETIVO : Listar las Edades de los
Empleados Quincenales y Semanales y Ex-Empleados
Dentro de la Empresa
PROGRAMADOR : Oscar A. Castillo
FECHA REALIZACION : Thursday, 22 March, 2001
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE tipo_l CHAR(1),
fecha1,fecha2 DATE,
edad1,edad2 INTEGER
FUNCTION adprrp046()
## 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
END RECORD,
corporativo LIKE adtb00042.dep_corp,
naci,naci1,naci3,naci4,horas,bonificacion,reg_pascual DECIMAL(12,2),
naci2,naci5 INTEGER
DEFINE anoc,anos,mesc,diasc CHAR(3),
tiempoc CHAR(8)
DEFINE liq_empresa,lmeses,dias,mesdia,tiempo DECIMAL (12,2)
#WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM adfmrp046 FROM "adfmrp046"
DISPLAY FORM adfmrp046
CALL pantalla()
DISPLAY "adprrp046" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Tiempo de los Empleados Dentro de la Empresa" AT 6,20 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 fecha1,fecha2,edad1,edad2
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*, archivo
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
AFTER FIELD fecha2
IF fecha2 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha2
END IF
AFTER FIELD edad1
IF edad1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD edad1
END IF
AFTER FIELD edad2
IF edad2 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD edad2
END IF
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 ",
"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 empleados3 TO archivo
## 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 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.cantidad)
INTO horas
FROM notb00008 a
WHERE a.num_emp = list_emp.num_emp
AND a.cod_mov = 1
AND a.fecha BETWEEN fecha1 AND fecha2
# AND a.status_t IS NULL
}
#----------------------------------------------------------------------
# Calcula el Tiempo que tiene el empleado en la Empresa
#----------------------------------------------------------------------
LET naci2 = 0
LET naci5 = 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 tiempo = (today - list_emp.fech_efec)
#IF tiempo >= 365 THEN
LET tiempo = tiempo / 365
LET tiempoc = tiempo USING "&&&&.&&&"
LET liq_empresa = tiempo
LET anoc = tiempoc[2,4]
LET anos = anoc
LET mesc = tiempoc[6,7]
LET lmeses = mesc
LET mesdia = lmeses / 100 * 365
LET tiempoc = mesdia USING "&&&&.&&&"
LET mesc = tiempoc[2,4]
LET lmeses = mesc
#display "mes ",lmeses
IF lmeses >= 30 THEN
LET mesdia = lmeses / 30
LET tiempoc = mesdia USING "&&&&.&&&"
LET mesc = tiempoc[3,4]
LET lmeses = mesc
LET diasc = tiempoc[6,7]
LET dias = diasc
LET dias = dias / 100 * 30
ELSE
LET lmeses = 0
LET dias = mesc
END IF
#END IF
LET naci2 = anos
LET naci5 = lmeses
IF naci2 = 0 THEN
LET naci2 = null
END IF
IF naci5 = 0 THEN
LET naci5 = null
END IF
#----------------------------------------------------------------------
# Fin del Calculo del Tiempo que tiene el empleado en la Empresa
#----------------------------------------------------------------------
{
LET naci = (today - list_emp.fech_efec)
LET naci1 = naci / 365
IF naci1 < 1 THEN
# LET naci1 = naci1 * 10
END IF
LET naci2 = naci1
LET naci3 = naci1 - naci2
if list_emp.num_emp = "552" then
display "naci 3" ,list_emp.num_emp ," ", naci
end if
LET naci4 = naci3 / 100 * 365
LET naci5 = naci4
}
IF tiempo >= edad1 AND tiempo <= edad2 THEN
OUTPUT TO REPORT empleados3(list_emp.*,naci2,naci5)
END IF
END WHILE
FINISH REPORT empleados3
RUN imprime
CLEAR SCREEN
END FUNCTION
## AQUI SE DEFINE EL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT empleados3(x,p_naci2,p_naci5)
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
END RECORD,
p_corp LIKE adtb00042.dep_corp,
nombre_corp LIKE adtb00042.nombre_depto,
p_horas,p_boni,p_regalia DECIMAL(12,2),
p_naci2,p_naci5 INTEGER
## 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,
nacit CHAR(50)
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, "adprrp046",
COLUMN 24, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 81, "Pag. ",pageno using "###"
PRINT COLUMN 24, " Sistema de Administracion de Personal",
COLUMN 81, today using "dd/mm/yyyy"
PRINT COLUMN 24, " Tiempo de los Empleados en la Empresa ",
COLUMN 81, hora
SKIP 1 LINE
IF edad1 IS NULL THEN
LET edad1 = 0
END IF
PRINT COLUMN 2, "Desde : ",fecha1 USING "dd/mm/yyyy",
" Hasta : ",fecha2 USING "dd/mm/yyyy"
PRINT COLUMN 2, "Tiempo Entre : ",edad1 USING "##&"," Y ",edad2 USING "###",
" Anos"
PRINT COLUMN 2, "---------------------------------------------------",
"----------------------------------------"
PRINT COLUMN 2, "Codigo No.",
COLUMN 18, "Nombre Empleado",
COLUMN 49, "Salario ",
COLUMN 65, " Tiempo"
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
#DISPLAY "NACIT ",nacit
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 "###,###.##";
IF p_naci2 IS NULL THEN
PRINT COLUMN 65, p_naci5 USING "###", " Mes(es)"
END IF
IF p_naci5 IS NULL THEN
PRINT COLUMN 65, p_naci2 using "###", " Ano(s)"
END IF
IF p_naci2 IS NOT NULL AND
p_naci5 IS NOT NULL THEN
PRINT COLUMN 65, p_naci2 using "###", " Ano(s) y ",p_naci5 USING "###", " Mes(es)"
END IF
AFTER GROUP OF x.dep_corp
SKIP 1 LINE
PRINT COLUMN 4, "Sub-Total ",
COLUMN 44, GROUP SUM(x.sueldo_ac) 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 "##,###,###.##"
SKIP 1 LINE
PRINT COLUMN 2, "Total de Registros Impresos = ", count(*) using "###"
PRINT letras.comp_off,ASCII 27, ASCII 80
END REPORT