{
==============================================================================
    PROGRAMA    : TEPRRP011
    SISTEMA     : Sistema de Tesoreria
    Objetivo    : Panoramico de Cash Flow Real 
    PROGRAMADOR : Tadeo A. Ferreras
    FECHA       : Diciembre 08, 1995
==============================================================================
}
GLOBALS
  "teprgb000.4gl"

  DEFINE datos_11 RECORD
     codigo       INTEGER,
     descripcion  CHAR(30),
     tipo         CHAR(2),
     mes          INTEGER,       
     fecha1       DATE,    
     fecha2       DATE,    
     monto        DECIMAL(12,4),
     monto1       DECIMAL(12,4)      
  END RECORD

  DEFINE fecha_inicial,fecha_final DATE
  DEFINE d,i,c,ano,mes_1,mes_2 INTEGER       
  DEFINE tasa DECIMAL(12,4)
  DEFINE balance,balance1 INTEGER       
  DEFINE total_ig1 ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_di1 ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_dl1 ARRAY[12] OF DECIMAL(12,4)      
  DEFINE balan1   ARRAY[12] OF DECIMAL(12,4)      
   
  FUNCTION teprrp011()
  LET int_flag = FALSE

  OPTIONS
     FORM LINE 8
     
   OPEN FORM tefmrp011 FROM "tefmrp011"
   DISPLAY FORM tefmrp011
   DISPLAY "teprrp011" AT 4,3 ATTRIBUTE(RED)
   DISPLAY "Panoramico de Cash Flow Real" AT 6,26 ATTRIBUTE(BLACK) 

   LET tipo_papel = 2
   CALL msgrp000(tipo_papel)
   CALL defecto(impresor) RETURNING imprime,letras.*,archivo

   LET mes_1 = 1
   INPUT BY NAME ano,mes_2,tasa
    ON KEY(CONTROL-P)
       CALL busca_printer() RETURNING imprime,letras.*,archivo

    AFTER FIELD ano          
     IF ano IS NULL THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD ano          
     END IF

    AFTER FIELD mes_2        
     IF mes_2 IS NULL THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD mes_2        
     END IF

     IF mes_1 > mes_2 THEN
        LET numero_msg = 51
        CALL msg(numero_msg)
        NEXT FIELD mes_1 
     END IF

     IF mes_2 - mes_1 > 11 THEN
        LET numero_msg = 75
        CALL msg(numero_msg)
        NEXT FIELD mes_2 
     END IF
     SELECT MIN(a.fecha_inicio) INTO fecha_inicial
     FROM prdtable a
     WHERE a.ano = ano
           a.mes = mes_2
    AFTER FIELD tasa         
     IF tasa  IS NULL THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD tasa         
     END IF

    END INPUT
LET parametro = "D"
    CALL elijeimpresion(parametro) RETURNING orden,destino,letras.*      
    
    IF int_flag THEN
       LET numero_msg = 2
       CALL msg(numero_msg)
       LET int_flag = FALSE
       RETURN
    END IF

    SELECT a.valor/1000 INTO balance1 FROM tetb00007 a
    WHERE a.ano = ano - 1

    IF balance IS NULL THEN
       LET balance = 0
    END IF
    IF balance1 IS NULL THEN
       LET balance1 = 0
    END IF
      FOR idx = 1 TO 12
          LET total_ig1[idx] = 0
          LET total_di1[idx] = 0
          LET total_dl1[idx] = 0
      END FOR
      LET selec = 
       "SELECT UNIQUE a.codigo,a.descripcion,a.tipo,b.mes,",
       " b.fecha_inicio, b.fecha_corte,'0' ",
       "FROM tetb00003 a,prdtable b  ",
       "WHERE ",
       "      b.ano    = b.ano    AND ",
       "      b.fecha_corte  <= ?    AND ",
       "      a.status_t IS NULL  AND ",
       "      b.ano    = ? ",
       "ORDER BY 5,1,2 "

       DISPLAY "<<<Buscando Informacion... Espere por Favor>>>" AT 19,14
       ATTRIBUTE(YELLOW)

       PREPARE comando FROM selec
       DECLARE busco CURSOR FOR comando
       OPEN busco USING fecha_inicial,ano 

       START REPORT reporte_11 TO archivo
   
       DISPLAY "<<<Reporte Generandose...  Espere por Favor>>>" AT 19,14
       ATTRIBUTE(YELLOW)
                  
       WHILE status != NOTFOUND
       FETCH busco INTO datos_11.*
            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 

            LET datos_11.monto1 = 0
            CASE
             WHEN datos_11.codigo = 1 
              SELECT SUM(a.monto/1000) INTO datos_11.monto1 FROM tetb00001 a
              WHERE (a.status_t IS NULL) AND (a.procedencia IN (1,7)) AND 
                    (a.fecha BETWEEN datos_11.fecha1 AND datos_11.fecha2)
              EXIT CASE

             WHEN datos_11.codigo = 2 
              SELECT SUM(a.monto/1000) INTO datos_11.monto1 FROM tetb00001 a
              WHERE (a.status_t IS NULL) AND (a.procedencia = 2) AND 
                    (a.fecha BETWEEN datos_11.fecha1 AND datos_11.fecha2)
              EXIT CASE

             WHEN datos_11.codigo = 3 
              SELECT SUM(a.monto/1000) INTO datos_11.monto1 FROM tetb00001 a
              WHERE (a.status_t IS NULL) AND (a.procedencia = 3) AND 
                    (a.fecha BETWEEN datos_11.fecha1 AND datos_11.fecha2)
              EXIT CASE

             WHEN datos_11.codigo = 4 
              SELECT SUM(a.monto/1000) INTO datos_11.monto1 FROM tetb00001 a
              WHERE (a.status_t IS NULL) AND (a.procedencia = 4) AND 
                    (a.fecha BETWEEN datos_11.fecha1 AND datos_11.fecha2)
              EXIT CASE
     
             WHEN datos_11.codigo = 22
              LET datos_11.monto1 = (datos_11.monto * -1) / 1000
              EXIT CASE
             OTHERWISE
              SELECT SUM(a.monto/1000)*-1 INTO datos_11.monto1 
              FROM cgtb00005 a,tetb00006 b
              WHERE a.cheque_no = b.cheque_no       AND 
                    a.status_t  = "C"               AND 
                    a.cuenta_no = b.banco           AND 
                    b.codigo    = datos_11.codigo   AND 
                    a.fecha BETWEEN datos_11.fecha1 AND datos_11.fecha2 
              EXIT CASE
          
           END CASE

           DISPLAY datos_11.codigo USING "&&" AT 21,30
           DISPLAY datos_11.mes    USING "&&" AT 21,34
           DISPLAY datos_11.monto1            AT 21,40

           IF datos_11.monto IS NULL THEN
              LET datos_11.monto = 0
           END IF
           IF datos_11.monto1 IS NULL THEN
              LET datos_11.monto1 = 0
           END IF
         
           IF datos_11.tipo = "DI" THEN
              LET datos_11.monto  = datos_11.monto  * tasa 
              LET datos_11.monto1 = datos_11.monto1 * tasa 
           END IF
           OUTPUT TO REPORT reporte_11(datos_11.*)
      END WHILE
      FINISH REPORT reporte_11
      CALL fdestino(destino,archivo,imprime)
      CLEAR SCREEN
     END FUNCTION

REPORT reporte_11(x)
   DEFINE x RECORD
     codigo       INTEGER,
     descripcion  CHAR(30),
     tipo         CHAR(2),
     mes          INTEGER,       
     fecha1       DATE,    
     fecha2       DATE,    
     monto        DECIMAL(12,4),       
     monto1       DECIMAL(12,4)       
   END RECORD

## DEFINICION DE LAS VARIABLES DE IMPRESION
    DEFINE numero_ch CHAR(9),
           descripcion CHAR(30),
           detalle1,detalle2 CHAR(40)
    DEFINE hora CHAR(5)
    DEFINE nombre1 ARRAY[12] OF CHAR(10)
    DEFINE total_partida, total_procedencia, total_general DECIMAL(12,4) 

    OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
     TOP MARGIN 0
      LEFT MARGIN 0
      BOTTOM MARGIN 3

    FORMAT
      PAGE HEADER
 
        LET hora = time
        LET nombre1[1]  = "  ENERO   "
        LET nombre1[2]  = " FEBRERO  "
        LET nombre1[3]  = "  MARZO   "  
        LET nombre1[4]  = "  ABRIL   "  
        LET nombre1[5]  = "  MAYO    "   
        LET nombre1[6]  = "  JUNIO   "   
        LET nombre1[7]  = "  JULIO   "   
        LET nombre1[8]  = "  AGOSTO  "  
        LET nombre1[9]  = "SEPTIEMBRE"
        LET nombre1[10] = " OCTUBRE  "   
        LET nombre1[11] = "NOVIEMBRE " 
        LET nombre1[12] = "DICIEMBRE " 

## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
           LET c = 39
           FOR i = mes_1 TO mes_2
               LET c = c + 10
           END FOR
               
           LET d = (c-46)/2
           PRINT COLUMN   1, letras.negrillas_on,letras.comp_on
           PRINT COLUMN   1, "teprrp011",
                 COLUMN   d, "R A Y . O . V A C  D O M I N I C A N A,  S. A.",
                 COLUMN c-7, "Pag. ",pageno using "###"
           PRINT COLUMN   d, "             Sistema de Tesoreria", 
                 COLUMN c-7, today using "dd/mm/yyyy"
           PRINT COLUMN   d, "         Panoramico de Cash Flow Real",
                 COLUMN c-4, hora
           PRINT COLUMN   d, "          Expresados Em Miles (1000)  "
           SKIP 1 LINE
           PRINT COLUMN   1, "FECHA: De ",nombre1[mes_1]," A ",nombre1[mes_2],
                             " Del ", ano USING "&&&&"

           PRINT COLUMN 1, "--------------------------------------";

           LET c = 39
           FOR i = mes_1 TO mes_2
               PRINT COLUMN c, "----------";
               LET c = c + 10
           END FOR
           PRINT COLUMN c, "-----------" 
#          PRINT COLUMN c," "

           PRINT COLUMN  1, "Partida";

         DECLARE busca_mes CURSOR FOR
           SELECT a.mes,a.fecha_inicio FROM prdtable a
           WHERE a.ano = ano

           LET c = 39
           FOR i = mes_1 TO mes_2
               PRINT COLUMN c, nombre1[i];
               LET c = c + 10
           END FOR
           PRINT COLUMN c, "  TOTALES  " 
#          PRINT COLUMN c," "
               
           PRINT COLUMN 1, "--------------------------------------";
           LET c = 39
           FOR i = mes_1 TO mes_2
               PRINT COLUMN c, "----------";
               LET c = c + 10
           END FOR
           PRINT COLUMN c, "-----------" 
#          PRINT COLUMN c," "
           PRINT letras.negrillas_off
               
      BEFORE GROUP OF x.codigo 
           IF x.codigo = 1 THEN
              PRINT COLUMN 1,letras.negrillas_on,"INGRESOS",letras.negrillas_off
              PRINT COLUMN 1,letras.negrillas_on,"========",letras.negrillas_off
              SKIP 1 LINE
           END IF

           IF x.codigo = 5 THEN
              PRINT COLUMN 1,letras.negrillas_on,"DESEMBOLSOS",letras.negrillas_off
              PRINT COLUMN 1,letras.negrillas_on,"===========",letras.negrillas_off
              PRINT COLUMN 1,letras.negrillas_on,"DESEMBOLSOS INTERNACIONALES (",
                             "TASA UTILIZADA RD$",tasa USING "<<<,<<<.<<",")",
                             letras.negrillas_off
              SKIP 1 LINE
           END IF

           IF x.codigo = 14 THEN
              PRINT COLUMN 1,letras.negrillas_on,"DESEMBOLSOS LOCALES",
                             letras.negrillas_off
              SKIP 1 LINE
           END IF

           PRINT COLUMN  1, x.codigo USING "###"," ",x.descripcion CLIPPED;

           LET c = 39
## AQUI SE INDICA LA IMPRESION DEL DETALLE
         
      ON EVERY ROW
           IF total_partida is NULL THEN 
              LET total_partida = 0
           END IF 

           IF total_procedencia is NULL THEN 
              LET total_procedencia = 0
           END IF 

           IF total_general is NULL THEN 
              LET total_general = 0
           END IF 

           LET idx = x.mes
           IF x.mes >= mes_1 AND x.mes <= mes_2 THEN
              PRINT COLUMN   c, x.monto1 USING "#,###,###","|";
              LET c = c + 10
           END IF
           
           IF x.tipo = "IG" THEN
              LET total_ig1[idx] = total_ig1[idx] + x.monto1
           END IF

           IF x.tipo = "DI" THEN
              LET total_di1[idx] = total_di1[idx] + x.monto1
           END IF

           IF x.tipo = "DL" THEN
              LET total_dl1[idx] = total_dl1[idx] + x.monto1
           END IF

           LET total_partida = total_partida + x.monto1 

      AFTER GROUP OF x.tipo 
           PRINT COLUMN   c, total_partida USING "#,###,###","|" 
#          LET total_procedencia = total_procedencia + total_partida 
           LET total_partida = 0 

      AFTER GROUP OF x.codigo
#          PRINT " "
           IF x.codigo = 4 THEN
              LET c = 39
              FOR i = mes_1 TO mes_2
                 PRINT COLUMN   c, "---------","|";
                  LET c = c + 10
              END FOR
              PRINT COLUMN c, "---------","|" 
#             PRINT COLUMN c," "

              PRINT COLUMN  5, "TOTAL INGRESOS";
              LET c = 39
              LET total_procedencia = 0 
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN   c, total_ig1[i] USING "#,###,###","|";
                  LET c = c + 10
                  LET total_procedencia = total_procedencia + total_ig1[i] 
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, total_procedencia USING "#,###,###","|" 
           END IF

           IF x.codigo = 13 THEN
              LET c = 39
              FOR i = mes_1 TO mes_2
                 PRINT COLUMN   c, "---------","|";
                  LET c = c + 10
              END FOR
              PRINT COLUMN c, "---------","|" 
#             PRINT COLUMN c," "

              PRINT COLUMN  5, "TOTAL DESEMBOLSOS INTERN.";
              LET c = 39
              LET total_procedencia = 0 
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN   c, total_di1[i] USING "#,###,###","|";
                  LET c = c + 10
                  LET total_procedencia = total_procedencia + total_di1[i] 
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, total_procedencia USING "#,###,###","|" 
           END IF

           IF x.codigo = 25 THEN
              LET c = 39
              FOR i = mes_1 TO mes_2
                 PRINT COLUMN   c, "---------","|";
                  LET c = c + 10
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, "---------","|" 

              PRINT COLUMN  5, "TOTAL DESEMBOLSOS LOCALES";
              LET c = 39
              LET total_procedencia = 0 
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN   c, total_dl1[i] USING "#,###,###","|";
                  LET c = c + 10
                  LET total_procedencia = total_procedencia + total_dl1[i] 
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, total_procedencia USING "#,###,###","|" 

              LET c = 39
              FOR i = mes_1 TO mes_2
                 PRINT COLUMN   c, "---------","|";
                  LET c = c + 10
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, "---------","|" 

              PRINT COLUMN  5, "TOTAL DESEMBOLSOS ";
              LET c = 39
              LET total_procedencia = 0 
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN   c, total_di1[i]+total_dl1[i] 
                                    USING "#,###,###","|";
                  LET c = c + 10
                  LET total_procedencia = 
                      total_procedencia + total_di1[i] + total_dl1[i] 
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, total_procedencia USING "#,###,###","|" 

              LET c = 39
              FOR i = mes_1 TO mes_2
                 PRINT COLUMN   c, "---------","|";
                  LET c = c + 10
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, "---------","|" 

              PRINT COLUMN  5, "FLUJO OPERATIVO";
              LET c = 39
              LET total_procedencia = 0 
              FOR i = 1 TO mes_2
                IF i >= mes_1 and I <= mes_2 THEN
                   PRINT COLUMN   c, total_ig1[i] + total_di1[i]+ total_dl1[i] 
                                     USING "-,---,---","|";
                   LET c = c + 10
                   LET total_procedencia = total_procedencia + total_ig1[i] + 
                                           total_di1[i] + total_dl1[i] 
                END IF
                IF i = 1 THEN
                   LET balan1[i] = balance1
                ELSE
                   LET balan1[i]=total_ig1[i-1]+total_di1[i-1]+total_dl1[i-1]+
                                 balan1[i-1] 
                END IF
                IF balan1[i] IS NULL THEN
                   LET balan1[i] = 0
                END IF
              END FOR
              PRINT COLUMN c, total_procedencia USING "#,###,###","|" 
#             PRINT COLUMN c," "

              PRINT COLUMN  5, "BALANCE INICIAL";
              LET c = 39
              LET total_procedencia = 0 
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN   c, balan1[i] USING "-,---,---","|";
                  LET c = c + 10
                  LET total_procedencia = total_procedencia + balan1[i] 
              END FOR
#             PRINT COLUMN c, total_procedencia USING "#,###,###","|" 
#             PRINT COLUMN c," "
              PRINT COLUMN   c, balan1[mes_1] USING "-,---,---","|" 

              LET c = 39
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN c, "---------","|";
                  LET c = c + 10
              END FOR
#             PRINT COLUMN c," "
              PRINT COLUMN c, "---------","|" 

              PRINT COLUMN  5, "BALANCE FINAL";
              LET c = 39
              LET total_general = 0 
              FOR i = mes_1 TO mes_2
                  PRINT COLUMN   c, total_ig1[i] + total_di1[i]+ total_dl1[i]+
                                    balan1[i] USING "-,---,---","|";
                  LET total_general = total_general + total_ig1[i] + 
                                      total_di1[i] + total_dl1[i] +
                                      balan1[i] 
              END FOR
#             PRINT COLUMN c," "
#             PRINT COLUMN c, total_general USING "-,---,---","|" 
              PRINT COLUMN c, total_ig1[mes_2] + total_di1[mes_2] + 
                              total_dl1[mes_2] + balan1[mes_2] 
                              USING "-,---,---","|" 
           END IF

     ON LAST ROW
           LET c = 39
           PRINT letras.negrillas_off
           PRINT letras.comp_off,letras.negrillas_off
  END REPORT  
