{
-------------------------------------------------------------------------------
PROGRAMA              :  ADPRRP037
OBJETIVO              :  ANALISIS DE BENEFICIOS DE EMPLEADOS          
PROGRAMADOR           :  JOSE ALFREDO PAULINO ALEJO 
FECHA REALIZACION     :  Diciembre 6, 1996.    
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl" 

   DEFINE i,n_nomi SMALLINT
   DEFINE plane integer
   DEFINE valora,sub_total1,sub_total2 DECIMAL (12,2)
   DEFINE nomina CHAR(1)
   DEFINE lee RECORD
    num_emp     LIKE adtb00003.num_emp,
    nom_emp     LIKE adtb00003.nom1_emp,
    apell_emp   LIKE adtb00003.apell1_emp
   END RECORD

   DEFINE interme RECORD
    num_emp     LIKE adtb00003.num_emp,
    cod_mov     LIKE notb00008.cod_mov,
    valor       LIKE notb00008.valor,
    nom1_emp    LIKE adtb00003.nom1_emp,
    apell1_emp  LIKE adtb00003.apell1_emp
   END RECORD
   
   DEFINE anal_bene RECORD
    num_emp     LIKE adtb00003.num_emp,
    cod_mov     LIKE notb00008.cod_mov,
    valor       LIKE notb00008.valor,
    descrip_mov CHAR (30),
    nombre      CHAR (30), 
    orden       SMALLINT
   END RECORD
                  


FUNCTION adprrp037()

#  WHENEVER ERROR CONTINUE

    OPTIONS
       FORM LINE 8,
       ERROR LINE 23,
       COMMENT LINE 21

    CLEAR SCREEN

    OPEN FORM adfmrp037 FROM "adfmrp037"
    DISPLAY FORM adfmrp037
    CALL pantalla()
    DISPLAY "adprrp037" AT 4,3 ATTRIBUTE(RED)
    DISPLAY "JAPA     " AT 5,3
    DISPLAY "Analisis de Beneficios Por Empleado" AT 6,26 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_fin = NULL
    LET nomina         = NULL

    INPUT BY NAME datos.fech_fin,nomina WITHOUT DEFAULTS


ON KEY(CONTROL-P)
      CALL busca_printer() RETURNING imprime, letras.*, archivo
   

          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 FIELD nomina    
                IF nomina IS NULL THEN
                   LET numero_msg = 16
                   CALL msg(numero_msg)
                   NEXT FIELD nomina    
                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.num_emp FROM 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

   LET SELEC =
    "SELECT a.num_emp,a.cod_mov,sum(a.valor)",
    "  FROM notb00008 a,notb00010 b ",
    "  WHERE a.num_nomi = b.num_nomi AND (a.tipo_emp = b.tipo_emp AND",
    "  a.tipo_emp = '", nomina ,
    "' ) AND a.cod_mov IN (1,2,3,4,5,7,8,9,10,",
    "        21,22,28,32,33,36,37,40,43) AND ", criterio clipped,
    "  GROUP BY 1,2",
    "  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 benefi TO archivo 
         
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
    LET sub_total1 = 0
    LET sub_total2 = 0
    FOREACH accion INTO interme.* 

    IF interme.cod_mov  = 1 or interme.cod_mov = 2 OR interme.cod_mov = 3
       OR interme.cod_mov = 40 or interme.cod_mov = 7 
       OR interme.cod_mov = 37 
       THEN 
         LET anal_bene.num_emp = interme.num_emp  
         LET anal_bene.cod_mov = interme.cod_mov
         LET anal_bene.valor   = interme.valor
         SELECT a.descrip_mov INTO anal_bene.descrip_mov
            FROM notb00002 a WHERE a.cod_mov=interme.cod_mov  
         LET anal_bene.orden = 1
    END IF
    IF interme.cod_mov  =21 or interme.cod_mov =22 OR interme.cod_mov =43
       OR interme.cod_mov = 5 or interme.cod_mov = 4 
       OR interme.cod_mov = 9 or interme.cod_mov = 8 
       OR interme.cod_mov =10 or interme.cod_mov = 28
       OR interme.cod_mov =32 or interme.cod_mov = 33
       OR interme.cod_mov = 36 
     
      THEN 

         LET anal_bene.num_emp = interme.num_emp  
         LET anal_bene.cod_mov = interme.cod_mov
         LET anal_bene.valor   = interme.valor
          IF interme.cod_mov = 21 THEN
             SELECT sum(valor) INTO valora
                FROM notb00088 WHERE tipo_emp=nomina AND 
                     num_emp = anal_bene.num_emp AND cod_mov = 21 
                     AND STATUS_T IS NULL AND fecha <= datos.fech_fin
             SELECT unique plan INTO plane  FROM smtb00012 WHERE 
                    num_emp = anal_bene.num_emp AND cod_par = 0
                    AND sec_par = 0
             IF plane = 1 THEN
                LET anal_bene.valor = (4 * (valora * -1))
             ELSE
                LET anal_bene.valor = (2.333* (valora * -1))
             END IF
          END IF 
          IF interme.cod_mov = 43 THEN
             SELECT sum(valor) INTO valora
                FROM notb00088 WHERE tipo_emp=nomina AND 
                     num_emp = anal_bene.num_emp AND cod_mov = 43 
                     AND STATUS_T IS NULL AND fecha <=datos.fech_fin
             LET anal_bene.valor = (2.333 * (valora * -1))
          END IF
          IF interme.cod_mov = 22 THEN
             SELECT sum(valor) INTO valora
                FROM notb00088 WHERE tipo_emp=nomina AND 
                     num_emp = anal_bene.num_emp AND cod_mov = 22 
                     AND STATUS_T IS NULL AND fecha <= datos.fech_fin
             LET anal_bene.valor = (2.8 * (valora * -1))
          END IF
         SELECT a.descrip_mov INTO anal_bene.descrip_mov
            FROM notb00002 a WHERE a.cod_mov=interme.cod_mov  
         LET anal_bene.orden = 2
    END IF 
 
     IF int_flag THEN
       LET numero_msg = 2
       CALL msg(numero_msg)
       LET int_flag = FALSE
       RETURN
     END IF

     IF anal_bene.num_emp != 0 THEN
       OUTPUT TO REPORT benefi(anal_bene.*)
     END IF
    END FOREACH
  
    FINISH REPORT benefi  
    RUN imprime

    CLEAR SCREEN

END FUNCTION

## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
    REPORT benefi(x)
       DEFINE x RECORD
        num_emp     LIKE adtb00003.num_emp,
        cod_mov     LIKE notb00008.cod_mov,
        valor       LIKE notb00008.valor,
        descrip_mov CHAR (30),
        nombre      CHAR (30), 
        orden       SMALLINT
       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

   ORDER BY x.num_emp,x.orden  

    FORMAT
      PAGE HEADER
        LET hora = time

## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
           PRINT COLUMN 1, letras.comp_on,
                 COLUMN 2, "adprrp037",
                 COLUMN 14, letras.negrillas_on,
                 COLUMN 43, "R A Y . O . V A C  D O M I N I C A N A,  S. A.",
                 COLUMN 59, letras.negrillas_off,
                 COLUMN 120, "Pag.",pageno using "###"
           PRINT COLUMN 44, "Sistema de Administracion de Personal", 
                 COLUMN 121, today using "dd/mm/yyyy"
           PRINT COLUMN 44, "Analisis de Beneficios Por Empleados",
                 COLUMN 121, hora

     skip 1 line
        PRINT COLUMN  2, "Hasta: ",datos.fech_fin using "dd/mm/yyyy"

        PRINT COLUMN 2, "---------------------------------------------------",
                        "---------------------------------------------------",
                        "------------------------------"


  
   BEFORE GROUP OF x.num_emp

    IF x.orden = 1 THEN
       SELECT nom1_emp,apell1_emp INTO interme.nom1_emp,interme.apell1_emp
         FROM adtb00003 WHERE num_emp = x.num_emp

       LET x.nombre = interme.nom1_emp clipped," ", interme.apell1_emp

       PRINT COLUMN  2, "FICHA : ",x.num_emp,
           COLUMN 20, "NOMBRE: ",x.nombre  
    

       PRINT COLUMN 2, "---------------------------------------------------",
                        "---------------------------------------------------",
                        "------------------------------"
     END IF
   BEFORE GROUP OF x.orden
   IF x.orden = 1 THEN
      PRINT COLUMN 25, "INGRESOS:" 
      skip 1 line 
   ELSE     
      skip 1 line
      PRINT COLUMN 25, "BENEFICIOS MARGINALES:"
      skip 1 line
   END IF

   ON EVERY ROW
    PRINT COLUMN 26, x.cod_mov,
          COLUMN 33, x.descrip_mov,
          COLUMN 83, x.valor using "##,###,###.##"
       IF x.orden = 1 THEN
          LET sub_total1 = sub_total1 + x.valor
       ELSE
          LET sub_total2 = sub_total2 + x.valor
       END IF

   AFTER GROUP OF x.orden
    skip 1 line
    PRINT COLUMN 25, " SUB-TOTAL  ---->",
          COLUMN 83, GROUP SUM(x.valor) using "##,###,###.##"
   AFTER GROUP OF x.num_emp
     SKIP 1 LINE    
     PRINT COLUMN 26, "TOTAL GENERAL ----->",
           COLUMN 83, GROUP SUM(x.valor) using "##,###,###.##" 
     IF sub_total1 != 0 THEN 
     SKIP 1 LINE    
     PRINT COLUMN 26, "PROPORCION BENEFICIOS/INGRESOS:",
           COLUMN 89, (sub_total2 / sub_total1) * 100 using "%<<<.###"
           LET sub_total1 = 0
           LET sub_total2 = 0
     END IF
     SKIP 5 LINE
     PRINT COLUMN 2, "______________________________",
           COLUMN 80,"______________________________"
     PRINT COLUMN 7, "JUANA CRUZ ORTEGA",
           COLUMN 86, "FIRMA DEL EMPLEADO"
     
     PRINT COLUMN 7, "GERENTE DE PERSONAL"
     SKIP TO TOP OF PAGE
     ON LAST ROW
## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO
          PRINT ASCII 18
          PRINT ASCII 27, ASCII 80
  END REPORT

