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

  DEFINE datos_10 RECORD
     codigo       INTEGER,
     descripcion  CHAR(30),
     tipo         CHAR(2),
     ano          INTEGER,       
     mes          INTEGER,       
     fecha1       DATE,    
     fecha2       DATE,    
     monto1       DECIMAL(12,4),
     tipo1        CHAR(1)      
  END RECORD
  DEFINE fecha_inicial,fecha_final DATE
  DEFINE d,i,c,ano,ano2,mes,mes_2 INTEGER       
  DEFINE tasa DECIMAL(12,4)
  DEFINE balance,balance1,balance2 INTEGER       
  DEFINE total_ig ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_ig1 ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_di ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_di1 ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_dl ARRAY[12] OF DECIMAL(12,4)      
  DEFINE total_dl1 ARRAY[12] OF DECIMAL(12,4)      
  DEFINE balan    ARRAY[12] OF DECIMAL(12,4)      
  DEFINE balan1   ARRAY[12] OF DECIMAL(12,4)      
   
  FUNCTION teprrp010()
  LET int_flag = FALSE

  OPTIONS
     FORM LINE 8
     
   OPEN FORM tefmrp010 FROM "tefmrp010"
   DISPLAY FORM tefmrp010
   DISPLAY "teprrp010" AT 4,3 ATTRIBUTE(RED)
   DISPLAY "Cash Flow Real Comparativo (Periodo de 3 Anos)" AT 6,17 ATTRIBUTE(BLACK) 

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

   INPUT BY NAME ano,mes,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

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

    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 balance2 FROM tetb00007 a
    WHERE a.ano = ano - 3
    SELECT a.valor/1000 INTO balance1 FROM tetb00007 a
    WHERE a.ano = ano - 2
    SELECT a.valor/1000 INTO balance  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

    IF balance2 IS NULL THEN
       LET balance2 = 0
    END IF

    FOR idx = 1 TO 12
        LET total_ig[idx] = 0
        LET total_ig1[idx] = 0
        LET total_di[idx] = 0
        LET total_di1[idx] = 0
        LET total_dl[idx] = 0
        LET total_dl1[idx] = 0
    END FOR

    LET selec = 
       "SELECT UNIQUE a.codigo,a.descripcion,a.tipo,b.ano,b.mes, ",
       "              b.fecha_inicio,b.fecha_corte ",
       "FROM tetb00003 a,prdtable b ",
       "WHERE (a.status_t IS NULL) AND (b.ano BETWEEN ? AND ?) AND ",
       "      (b.mes = ?) "

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

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

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

            DISPLAY datos_10.tipo AT 21,30 

            IF datos_10.tipo = "IG" THEN
               LET datos_10.tipo1 = "A"
            END IF
            IF datos_10.tipo = "DI" THEN
               LET datos_10.tipo1 = "B"
            END IF
            IF datos_10.tipo = "DL" THEN
               LET datos_10.tipo1 = "C"
            END IF
            LET datos_10.monto1 = 0
            IF datos_10.ano = ano THEN
               CASE
                WHEN datos_10.codigo = 1 
                 SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
                 WHERE (a.status_t IS NULL) AND (a.procedencia IN (1,7)) AND 
                       (a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
                 EXIT CASE

                WHEN datos_10.codigo = 2 
                 SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
                 WHERE (a.status_t IS NULL) AND (a.procedencia = 2) AND 
                       (a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
                 EXIT CASE
   
                WHEN datos_10.codigo = 3 
                 SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
                 WHERE (a.status_t IS NULL) AND (a.procedencia = 3) AND 
                       (a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
                 EXIT CASE
   
                WHEN datos_10.codigo = 4 
                 SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
                 WHERE (a.status_t IS NULL) AND (a.procedencia = 4) AND 
                       (a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
                 EXIT CASE
     
                WHEN datos_10.codigo = 22
                  SELECT SUM(a.valor/1000) INTO datos_10.monto1 FROM tetb00004 a
                  WHERE (a.status_t IS NULL) AND (a.codigo=datos_10.codigo) AND
                        (a.ano = datos_10.ano AND a.mes = datos_10.mes)
                  EXIT CASE
                OTHERWISE
                 SELECT SUM(a.monto/1000) INTO datos_10.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_10.codigo   AND 
                       a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2 
                 EXIT CASE
          
              END CASE
           ELSE
              SELECT SUM(a.valor_real/1000) INTO datos_10.monto1 
              FROM tetb00005 a
              WHERE (a.status_t IS NULL) AND (a.codigo = datos_10.codigo) AND
                    (a.ano = datos_10.ano AND a.mes = datos_10.mes)
              
           END IF

            DISPLAY datos_10.monto1 AT 21,35 

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

REPORT reporte_10(x)
   DEFINE x RECORD
     codigo       INTEGER,
     descripcion  CHAR(30),
     tipo         CHAR(2),
     ano          INTEGER,
     mes          INTEGER,       
     fecha1       DATE,    
     fecha2       DATE,    
     monto1       DECIMAL(12,4),
     tipo1        CHAR(1)       
   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)

    OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
     TOP MARGIN 0
      LEFT MARGIN 0
      BOTTOM MARGIN 3
      ORDER BY x.tipo1,x.codigo,x.ano,x.mes

    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 d = (c-46)/2
           PRINT COLUMN   1, letras.negrillas_on
           PRINT COLUMN   1, "teprrp010",
                 COLUMN  17, "R A Y . O . V A C  D O M I N I C A N A,  S. A.",
                 COLUMN  73, "Pag. ",pageno using "###"
           PRINT COLUMN  17, "             Sistema de Tesoreria", 
                 COLUMN  73, today using "dd/mm/yyyy"
           PRINT COLUMN  17, "          Cash Flow Real Comparativo",
                 COLUMN  76, hora
           PRINT COLUMN  17, "Periodo de 3 Anos Y Expresados Em Miles (1000)  "
           SKIP 1 LINE
           PRINT COLUMN   1, "Periodo: Mes de ", nombre1[mes] CLIPPED,
                             " Del Ano ",ano - 2 USING "&&&&",
                             " Al ", ano USING "&&&&"

           PRINT COLUMN 1, "--------------------------------------------------",
                           "------------------------------"
           PRINT COLUMN  1, "Partida",
                 COLUMN 35, "Ano ", ano - 2 USING "&&&&",
                 COLUMN 50, "Ano ", ano - 1 USING "&&&&",
                 COLUMN 65, "Ano ", ano     USING "&&&&"
           PRINT COLUMN 1, "--------------------------------------------------",
                           "------------------------------"
               
      BEFORE GROUP OF x.tipo1
           IF x.tipo1 = "A" THEN
              LET descripcion = "TOTAL INGRESO"
           END IF
           IF x.tipo1 = "B" THEN
              LET descripcion = "TOTAL DESEMBOLSO INT."
           END IF
           IF x.tipo1 = "C" THEN
              LET descripcion = "TOTAL DESEMBOLSO LOCAL"
           END IF
      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
         
      AFTER GROUP OF x.codigo
           PRINT COLUMN 35, GROUP SUM(x.monto1) 
                            WHERE x.ano = ano - 2 AND x.mes = mes
                            USING "#,###,###","|",
                 COLUMN 50, GROUP SUM(x.monto1) 
                            WHERE x.ano = ano - 1 AND x.mes = mes
                            USING "#,###,###","|",
                 COLUMN 65, GROUP SUM(x.monto1) 
                            WHERE x.ano = ano AND x.mes = mes
                            USING "#,###,###","|"

      AFTER GROUP OF x.tipo1 
           PRINT COLUMN 35, "---------","|",
                 COLUMN 50, "---------","|",
                 COLUMN 65, "---------","|"

           PRINT COLUMN  1, descripcion,
                 COLUMN 35, GROUP SUM(x.monto1) 
                            WHERE x.ano = ano - 2 AND x.mes = mes
                            USING "#,###,###","|",
                 COLUMN 50, GROUP SUM(x.monto1) 
                            WHERE x.ano = ano - 1 AND x.mes = mes
                            USING "#,###,###","|",
                 COLUMN 65, GROUP SUM(x.monto1) 
                            WHERE x.ano = ano AND x.mes = mes
                            USING "#,###,###","|"
      ON LAST ROW

           PRINT COLUMN 35, "---------","|",
                 COLUMN 50, "---------","|",
                 COLUMN 65, "---------","|"

           PRINT COLUMN  1, "TOTAL DESEMB. LOC. E INT.",
                 COLUMN 35, SUM(x.monto1) WHERE x.ano = ano - 2 AND x.mes = mes
                            AND (x.tipo1 != "A") USING "#,###,###","|", 
                 COLUMN 50, SUM(x.monto1) WHERE x.ano = ano - 1 AND x.mes = mes
                            AND (x.tipo1 != "A") USING "#,###,###","|",
                 COLUMN 65, SUM(x.monto1) WHERE x.ano = ano AND x.mes = mes
                            AND (x.tipo1 != "A") USING "#,###,###","|"

           PRINT COLUMN 35, "---------","|",
                 COLUMN 50, "---------","|",
                 COLUMN 65, "---------","|"

           PRINT COLUMN  1, "FLUJO OPERATIVO",
                 COLUMN 35, (SUM(x.monto1) WHERE x.ano=ano - 2 AND x.mes=mes)
                            USING "-,---,---","|",
                 COLUMN 50, (SUM(x.monto1) WHERE x.ano=ano - 1 AND x.mes=mes)
                            USING "-,---,---","|",
                 COLUMN 65, (SUM(x.monto1) WHERE x.ano=ano AND x.mes = mes)
                            USING "-,---,---","|"

           PRINT COLUMN  1, "BALANCE INICIAL",
                 COLUMN 35, (SUM(x.monto1) WHERE x.ano=ano - 2 AND x.mes<mes)
                            + balance2 USING "-,---,---","|",
                 COLUMN 50, (SUM(x.monto1) WHERE x.ano=ano - 1 AND x.mes<mes)
                            + balance1 USING "-,---,---","|",
                 COLUMN 65, (SUM(x.monto1) WHERE x.ano=ano AND x.mes < mes)
                            + balance USING "-,---,---","|"

           PRINT COLUMN 35, "---------","|",
                 COLUMN 50, "---------","|",
                 COLUMN 65, "---------","|"

           PRINT COLUMN  1, "BALANCE FINAL",
                 COLUMN 35, (SUM(x.monto1) WHERE x.ano=ano - 2 AND x.mes<=mes)
                            + balance2 USING "-,---,---","|",
                 COLUMN 50, (SUM(x.monto1) WHERE x.ano=ano - 1 AND x.mes<=mes)
                            + balance1 USING "-,---,---","|",
                 COLUMN 65, (SUM(x.monto1) WHERE x.ano=ano AND x.mes <= mes)
                            + balance USING "-,---,---","|"
           PRINT letras.comp_off,letras.negrillas_off
  END REPORT  
