Files

315 lines
9.7 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP013
OBJETIVO : PLAN DE VACACIONES DEL EMPLEADO
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Julio 08, 1993
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
FUNCTION adprrp013()
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
DEFINE plan_vac 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,
nom_puesto LIKE adtb00004.nom_puesto,
nom_dpto LIKE adtb00001.nom_dpto,
fech_efec LIKE adtb00003.fech_efec,
tipo CHAR(1),
fecha_vac DATE
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM adfmrp013 FROM "adfmrp013"
DISPLAY FORM adfmrp013
CALL pantalla()
DISPLAY "adprrp013" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Plan de Vacaciones" AT 6,34 ATTRIBUTE(BLACK)
## INDICA EL TIPO DE PAPEL NECESARIO PARA 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
## SE INDICA EL RANGO DE FECHA DESEADO PARA LISTAR LAS VACACIONES
LET datos.fech_ini = NULL
LET datos.fech_fin = NULL
{
INPUT BY NAME datos.fech_ini,datos.fech_fin WITHOUT DEFAULTS
AFTER FIELD fech_ini
IF datos.fech_ini IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_ini
END IF
AFTER FIELD fech_fin
IF datos.fech_fin IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fin
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
}
## DEFINICION DEL CRITERIO DE BUSQUEDA PARA IMPRIMIR EL REPORTE
CONSTRUCT criterio ON a.nomina FROM nomina
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
LET SELEC =
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
" a.nom1_emp,a.apell1_emp,b.nom_puesto,c.nom_dpto,a.fech_efec, ",
" a.nomina ",
"FROM adtb00003 a,adtb00001 c,adtb00004 b ",
"WHERE a.departamento=c.departamento AND a.cod_puesto=b.cod_puesto AND ",
" (a.status_t is null OR a.status_t NOT IN('D','T','E')) AND ",
criterio clipped,
" ORDER BY 1"
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
## SE PREPARA LA INFORMACION SELECCIONADA
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
## SE DECLARA UN CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA
DECLARE accion CURSOR FOR busca
OPEN accion
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT planes TO archivo
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
FOREACH accion INTO plan_vac.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET plan_vac.fecha_vac = NULL
SELECT a.dia INTO plan_vac.fecha_vac
FROM vacaciones a
WHERE a.num_emp = plan_vac.num_emp
OUTPUT TO REPORT planes(plan_vac.*)
END FOREACH
FINISH REPORT planes
RUN imprime
CLEAR SCREEN
END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT planes(x)
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,
nom_puesto LIKE adtb00004.nom_puesto,
nom_dpto LIKE adtb00001.nom_dpto,
fech_efec LIKE adtb00003.fech_efec,
tipo CHAR(1),
fecha_vac DATE
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE ano_act,ano_ing,anos_cia SMALLINT
DEFINE fech_vac DATE
DEFINE d_tomados,d_vacaciones,d_pendientes,vacac,dias2 INTEGER
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
FORMAT
PAGE HEADER
LET hora = time
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, letras.comp_on,
COLUMN 2, "adprrp013",
COLUMN 14, letras.negrillas_on,
COLUMN 44, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 65, letras.negrillas_off,
COLUMN 130, "Pag. ",pageno using "###"
PRINT COLUMN 45, "Sistema de Administracion de Personal",
COLUMN 125, today using "dd/mm/yyyy"
PRINT COLUMN 54, "Plan de Vacaciones",
COLUMN 128, hora
IF x.tipo = "Q" THEN
PRINT COLUMN 54, " QUINCENALES"
ELSE
PRINT COLUMN 54, " SEMANALES"
END IF
skip 1 line
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"------------------------------"
PRINT COLUMN 114, "Fecha de",
COLUMN 123, "Fecha de"
PRINT COLUMN 2, "Ficha No.",
COLUMN 19, "Nombre Empleado",
COLUMN 51, "Puesto",
COLUMN 83, "Departamento",
COLUMN 114, "Ingreso",
COLUMN 123, "Vacaciones"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"------------------------------"
## AQUI SE INDICA LA IMPRESION DEL DETALLE
BEFORE GROUP OF x.num_emp
{
## AQUI SE CALCULA LA FECHA EN QUE LE CORRESPONDEN LAS VACACIONES
LET ano_act = YEAR(datos.fech_ini)
LET ano_ing = YEAR(x.fech_efec)
LET anos_cia = ano_act - ano_ing
LET vacac = 365 * anos_cia
LET fech_vac = vacac + x.fech_efec
## AQUI SE CALCULA LOS DIAS DE VACACIONES QUE TIENE PENDIENTES Y LOS DIAS
## QUE HA TOMADO
SELECT SUM(dias_tomados) INTO d_tomados FROM adtb00027
WHERE num_emp = x.num_emp and status_t is null
IF d_tomados is null THEN
LET d_tomados = 0
END IF
IF vacac >= 365 AND vacac < 1825 THEN
LET d_vacaciones = 14
LET dias2 = 14 * anos_cia
ELSE
IF vacac >= 1825 AND vacac < 3650 THEN
LET d_vacaciones = 18
LET anos_cia = anos_cia - 4
LET dias2= (anos_cia * 18) + 56
ELSE
IF vacac >= 3650 THEN
LET d_vacaciones = 21
LET anos_cia= (anos_cia - 9)
LET dias2= (anos_cia * 21) + 146
END IF
END IF
END IF
LET dias2 = dias2 - d_tomados
LET d_pendientes = dias2
}
#IF fech_vac >= datos.fech_ini and fech_vac <= datos.fech_fin THEN
skip 1 line
PRINT COLUMN 1, letras.negrillas_on,
COLUMN 2, x.num_emp using "&&&&","-",
x.departamento using "&&&&","-",
x.nivel_emp using "&&","-",
x.cod_puesto using "&&"," ",
x.nom1_emp clipped," ",x.apell1_emp clipped,
COLUMN 49, letras.negrillas_off,
COLUMN 54, x.nom_puesto,
COLUMN 87, x.nom_dpto,
COLUMN 118, x.fech_efec using "dd/mm/yyyy",
COLUMN 127, DAY(x.fecha_vac) using "&&","-",
x.fecha_vac + 14 using "dd/mm/yyyy"
{
PRINT COLUMN 2, "Dias Vacaciones: ",d_vacaciones using "<<<",
COLUMN 28, "Dias Tomados: ",d_tomados using "<<<",
COLUMN 50, "Dias Pendientes: ",d_pendientes using "<<<"
END IF}
AFTER GROUP OF x.num_emp
LET ano_act = 0
LET ano_ing = 0
LET anos_cia = 0
LET vacac = 0
LET d_vacaciones = 0
LET d_tomados = 0
LET d_pendientes = 0
LET dias2 = 0
ON LAST ROW
## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO
PRINT ASCII 18
PRINT ASCII 27, ASCII 80
END REPORT