{
-------------------------------------------------------------------------------
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 DATE

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
    END RECORD,
       corporativo  LIKE adtb00042.dep_corp,
       horas,bonificacion,reg_pascual DECIMAL(12,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 fecha1,fecha2   
    
    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 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 empleados1 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
}
      SELECT SUM(a.valor)
        INTO bonificacion
        FROM notb00008 a
       WHERE a.num_emp = list_emp.num_emp
         AND a.cod_mov = 33
         AND a.fecha BETWEEN fecha1 AND fecha2
        # AND a.status_t IS NULL

      SELECT SUM(a.valor)
        INTO reg_pascual
        FROM notb00008 a
       WHERE a.num_emp = list_emp.num_emp
         AND a.cod_mov = 32
         AND a.fecha BETWEEN fecha1 AND fecha2
        # AND a.status_t IS NULL

      OUTPUT TO REPORT empleados1(list_emp.*,horas,bonificacion,reg_pascual)
 
    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)
       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)
       
## 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 134, "Pag. ",pageno using "###"
           PRINT COLUMN  44, "    Sistema de Administracion de Personal",
                 COLUMN 128, today using "dd/mm/yyyy"
           PRINT COLUMN  44, "       Maestra de Personal ",varia CLIPPED,
                 COLUMN 131, 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  95, "Regalia"

           PRINT COLUMN   2, "Codigo No.",
                 COLUMN  18, "Nombre Empleado",
                 COLUMN  49, "Salario ",
                 COLUMN  65, "Normales",
                 COLUMN  80, "Bonif.",
                 COLUMN  95, "Pascual"

        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  74, p_boni  using "##,###,###.##",
               COLUMN  90, p_regalia using "##,###,###.##"

   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 74, GROUP SUM(p_boni) USING "##,###,###.##",
                COLUMN 90, GROUP SUM(p_regalia) 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 74, SUM(p_boni) USING "##,###,###.##",
                COLUMN 90, SUM(p_regalia) USING "##,###,###.##"
          SKIP 1 LINE
          PRINT COLUMN 2, "Total de Registros Impresos = ", count(*) using "###"
          PRINT letras.comp_off,ASCII 27, ASCII 80

   END REPORT

