{
=======================================================================
 Programa    : GEPRRP013
 Sistema     : Sistema de Informacion Gerencia
 Proceso     : Ranking de Ventas por Vendedor, Compania y Producto
 Autor       : Tadeo A. Ferreras
 Fecha       : Enero 18, 1995
 Modificado Por : Juan Soto
 Descripcion : Se quito las columnas devoluciones y neto. Se Agrego la
               columna VENTAS DEL ANO ANTERIOR AL ACTUAL.
 Fecha       : MAyo 21, 1996.
 Modificado Por :Juan Soto
 Descripcion : Insertar el cliente 
 Fecha       : Febrero 28, 2001
=======================================================================
}
GLOBALS
   "geprgb000.4gl"

 DEFINE ger_comp131 RECORD
        sec_vend      INTEGER,
        tipo_cliente  LIKE vetb00002.tipo_cliente,
        sec_cliente   LIKE vetb00002.sec_cliente,
        compania      SMALLINT,
        cod_n         SMALLINT,
        cod_grupo     SMALLINT,
        cod_tipo      SMALLINT,
        cod_sec       SMALLINT,
        cantidad      DECIMAL(14,2),
        cantidad_ant  DECIMAL(14,2),
        codigo        CHAR(7),
        descrip_esp   LIKE intb00001.descrip_esp,
        unidad_med    LIKE intb00001.unidad_med
 END RECORD,
     desc_mes CHAR(12)

 DEFINE ger_comp132 RECORD
        sec_vend      INTEGER,
        compania      SMALLINT,
        cod_n         SMALLINT,
        cod_grupo     SMALLINT,
        cod_tipo      SMALLINT,
        cod_sec       SMALLINT,
        cantidad      DECIMAL(14,2)
 END RECORD

 DEFINE nomb,apell CHAR(15),  
        nombre CHAR(30),
        p_mes,p_ano,p_ano_ant,mov1 SMALLINT,
        esta CHAR(1),
        idx1,idx2 INTEGER,
        devol1,devol2 DECIMAL(12,4)  
 DEFINE salir,salir1 CHAR(1)
 DEFINE fecha1,fecha2,fecha_inicial,fecha_final DATE    

 FUNCTION geprrp013()
     LET int_flag = FALSE 
     OPTIONS
     FORM LINE 8
     CALL pantalla()

     OPEN FORM gefmrp013 FROM "gefmrp013"
     DISPLAY "geprrp013" AT 4,3 ATTRIBUTE(RED)
     DISPLAY FORM gefmrp013
     DISPLAY "Ranking de Ventas Por Vendedor, Compania y Producto"  AT 6,15
     ATTRIBUTE(BLACK)

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

     INPUT BY NAME p_ano,p_mes
      ON KEY(CONTROL-P)
         CALL busca_printer() RETURNING imprime,letras.*, archivo

     AFTER FIELD p_ano
     IF p_ano is null THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD p_ano 
     END IF

     AFTER FIELD p_mes
     IF p_ano is null THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD p_ano 
     END IF

     LET p_ano_ant = p_ano - 1
     SELECT fecha_inicio,fecha_corte INTO fecha_inicial,fecha_final
     FROM prdtable
     WHERE mes = p_mes and
           ano = p_ano

     SELECT fecha_inicio,fecha_corte INTO fecha1,fecha2
     FROM prdtable
     WHERE mes = p_mes and
           ano = p_ano_ant

     SELECT descrip INTO desc_mes 
     FROM mestable 
     WHERE mes = p_mes

     EXIT INPUT
     END INPUT
     IF int_flag tHEN
        LET numero_msg = 2
        CALL msg(numero_msg)
        LET int_flag = FALSE
        RETURN
     END IF

     CONSTRUCT criterio ON d.sec_vend,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,
                           d.tipo_cliente,d.sec_cliente
                      FROM sec_vend,cod_n,cod_grupo,cod_tipo,cod_sec,
                           tipo_cliente,sec_cliente

      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

     LET selec1 = 
     "SELECT d.sec_vend,d.tipo_cliente,d.sec_cliente,b.cod_cia,b.cod_n,b.cod_grupo,",
     "b.cod_tipo,b.cod_sec, ",
     "       SUM(b.cantidad) ",
     "FROM vetb00028 a,vetb00003 b,vetb00002 d ",
     "WHERE (b.factura = d.factura) AND ",
     "      (a.sec_vend = d.sec_vend AND ",
     "      a.tipo_cliente = d.tipo_cliente AND  ",
     "      a.sec_cliente = d.sec_cliente) AND (",criterio clipped,
     ") AND  (d.fecha_factura between ? and ?) ",
     "  AND (d.ventas = '1') ",
     "  AND d.status_t is null ",
     " GROUP BY 1,2,3,4,5,6,7,8 ORDER BY 1,2,3,4,5,6,7,8 "

     DISPLAY "Buscando Informacion... Espere por Favor" AT 17,14
     ATTRIBUTE(BOLD)

     PREPARE comando1 FROM selec1
     DECLARE buscar1 SCROLL CURSOR FOR comando1
     OPEN buscar1 USING fecha_inicial,fecha_final

     LET selec2 =
     "SELECT d.sec_vend,d.tipo_cliente,d.sec_cliente,b.cod_cia,b.cod_n,b.cod_grupo,",
     "b.cod_tipo,b.cod_sec, ",
     "    SUM(b.cantidad) ",
     "FROM vetb00028 a,vetb00003 b,vetb00002 d ",
     "WHERE (b.factura = d.factura) AND ",
     "      (a.sec_vend = d.sec_vend AND ",
     "      a.tipo_cliente = d.tipo_cliente AND  ",
     "      a.sec_cliente = d.sec_cliente) AND (",criterio clipped,
     ") AND  (d.fecha_factura between ? and ?) ",
     "  AND (d.ventas = '1') ",
     "  AND d.status_t is null ",
     " GROUP BY 1,2,3,4,5,6,7,8 ORDER BY 1,2,3,4,5,6,7,8 "

     DISPLAY "Buscando Informacion Ano Anterior... Espere por Favor" AT 17,14
     ATTRIBUTE(BOLD)

     PREPARE comando2 FROM selec2
     DECLARE buscar2 SCROLL CURSOR FOR comando2
     OPEN buscar2  USING fecha1,fecha2

     START REPORT repor_13 TO archivo
     DISPLAY "Reporte Generandose ...  Espere por Favor" AT 17,14
     ATTRIBUTE(BOLD)

# Busqueda de los registros que estan en el ano actual y estan en el
# Ano anterior
     #LET idx = idx + 1
     LET idx1 = 0
     LET salir1 = "N"
     WHILE salir1  != "S"
       FETCH buscar1 INTO ger_comp131.*
       IF STATUS = NOTFOUND THEN
          LET salir1 = "S"
          LET idx1 = 1
          EXIT WHILE
       END IF
     
       IF int_flag THEN
          LET numero_msg = 2
          CALL msg(numero_msg)
          LET int_flag = FALSE
          RETURN
       END IF

       LET idx1 = idx1 + 1
       IF ger_comp131.cantidad IS NULL THEN
          LET ger_comp131.cantidad = 0 
       END IF
       LET ger_comp131.codigo = ger_comp131.cod_n using "&",
                                ger_comp131.cod_grupo using "&",
                                ger_comp131.cod_tipo using "&&",
                                ger_comp131.cod_sec using "&&&"

# Busqueda de las informaciones del ano anetrior
     LET ger_comp131.cantidad_ant = 0
     LET salir = "N"
     LET idx = 1
     WHILE salir != "S"
       FETCH ABSOLUTE idx buscar2 INTO ger_comp132.*
       IF STATUS = NOTFOUND THEN
          LET salir = "S"
          EXIT WHILE
       END IF
       LET idx = idx + 1
       IF ger_comp131.cod_n = ger_comp132.cod_n and
          ger_comp131.cod_grupo = ger_comp132.cod_grupo and
          ger_comp131.cod_tipo = ger_comp132.cod_tipo and
          ger_comp131.cod_sec = ger_comp132.cod_sec and
          ger_comp131.compania = ger_comp132.compania and
          ger_comp131.sec_vend = ger_comp132.sec_vend THEN
 
          LET ger_comp131.cantidad_ant = ger_comp132.cantidad
          EXIT WHILE
      END IF
     END WHILE
       IF ger_comp131.codigo != "0000000" THEN
          OUTPUT TO REPORT repor_13(ger_comp131.*)
       END IF
     END WHILE

# Busqueda de los registros que estan en el ano anterior y no estan en el
# ano Actual
     LET idx = 1
     LET idx1 = 1
     LET salir1 = "N"
     WHILE salir1  != "S"
       FETCH ABSOLUTE idx1 buscar2 INTO ger_comp131.*
       IF STATUS = NOTFOUND THEN
          LET salir1 = "S"
          LET idx1 = 1
          EXIT WHILE
       END IF
     
       IF int_flag THEN
          LET numero_msg = 2
          CALL msg(numero_msg)
          LET int_flag = FALSE
          RETURN
       END IF

       IF ger_comp131.cantidad IS NULL THEN
          LET ger_comp131.cantidad = 0 
       END IF
     LET esta = "N"
     LET idx1 = idx1 + 1
     LET idx = 1
# Busqueda de las informaciones del ano actual  
     LET salir = "N"
     WHILE salir != "S"
       FETCH ABSOLUTE idx buscar1 INTO ger_comp132.*
       IF STATUS = NOTFOUND THEN
          LET salir = "S"
          EXIT WHILE
       END IF
       LET idx = idx + 1
       display 
          ger_comp131.cod_n ," ",
          ger_comp131.cod_grupo ," ",
          ger_comp131.cod_tipo ," ",
          ger_comp131.cod_sec ," ",
          ger_comp131.compania ," ",
          ger_comp131.sec_vend ," " AT 12,1
       display 
          ger_comp132.cod_n ," ",
          ger_comp132.cod_grupo ," ",
          ger_comp132.cod_tipo ," ",
          ger_comp132.cod_sec ," ",
          ger_comp132.compania ," ",
          ger_comp132.sec_vend ," " AT 13,1

       display idx1," ",esta at 14,1
#sleep 2
       IF ger_comp131.cod_n = ger_comp132.cod_n and
          ger_comp131.cod_grupo = ger_comp132.cod_grupo and
          ger_comp131.cod_tipo = ger_comp132.cod_tipo and
          ger_comp131.cod_sec = ger_comp132.cod_sec and
          ger_comp131.compania = ger_comp132.compania and
          ger_comp131.sec_vend = ger_comp132.sec_vend THEN
               
          LET esta = "S"
          EXIT WHILE
       END IF
     END WHILE
     IF esta = "N" THEN
        LET ger_comp131.codigo = ger_comp131.cod_n using "&",
                                 ger_comp131.cod_grupo using "&",
                                 ger_comp131.cod_tipo using "&&",
                                 ger_comp131.cod_sec using "&&&"
       display 
          ger_comp131.cod_n ," ",
          ger_comp131.cod_grupo ," ",
          ger_comp131.cod_tipo ," ",
          ger_comp131.cod_sec ," ",
          ger_comp131.compania ," ",
          ger_comp131.sec_vend ," " AT 15,1
        LET ger_comp131.cantidad_ant = ger_comp131.cantidad
        LET ger_comp131.cantidad = 0
        IF ger_comp131.codigo != "0000000" THEN
           OUTPUT TO REPORT repor_13(ger_comp131.*)
        END IF
      END IF
   END WHILE

     FINISH REPORT repor_13
     RUN imprime
  END FUNCTION

  REPORT repor_13(x)

    DEFINE x RECORD
        sec_vend      INTEGER,
        tipo_cliente  LIKE vetb00002.tipo_cliente,
        sec_cliente   LIKE vetb00002.sec_cliente,
        compania      SMALLINT,
        cod_n         SMALLINT,
        cod_grupo     SMALLINT,
        cod_tipo      SMALLINT,
        cod_sec       SMALLINT,
        cantidad      DECIMAL(14,2),
        cantidad_ant  DECIMAL(14,2),
        codigo        CHAR(7),
        descrip_esp   LIKE intb00001.descrip_esp,
        unidad_med    LIKE intb00001.unidad_med
    END RECORD
    
    DEFINE  hora      CHAR(5),
            nombre_cli LIKE vetb00004.nombre

    OUTPUT 
      LEFT MARGIN 2
      TOP MARGIN 1 
      ORDER BY x.sec_vend,x.sec_cliente,x.compania,x.cantidad
              DESC, x.codigo

    FORMAT
      PAGE HEADER
      LET hora = time
      PRINT COLUMN  1, letras.doce,letras.negrillas_on
      PRINT COLUMN  1, "geprrp013",
            COLUMN 25, "  R A Y . O . V A C  D O M I N I C A N A, S. A.",
            COLUMN 91, "Pag. ", pageno using "###"
      PRINT COLUMN 38, "SISTEMA DE INFORMACION GERENCIAL",
            COLUMN 91, today using "dd/mm/yyyy"
      PRINT COLUMN 25, "Ranking de Ventas Por Vendedor, Compania y Producto",
            COLUMN 94, hora
                      SKIP 1 LINES

      PRINT COLUMN  1, "MES DE ",desc_mes
      PRINT COLUMN  1, "-------------------------------------------------",
                       "-------------------------------------------------"

      PRINT COLUMN 59, "Ventas",
            COLUMN 77, "Ventas"

      PRINT COLUMN  1, "Posicion y Producto",
            COLUMN 59, p_ano using "####",
            COLUMN 77, p_ano_ant using "####"

      PRINT COLUMN  1, "-------------------------------------------------",
                       "-------------------------------------------------"
      PRINT COLUMN  1, letras.negrillas_off

      BEFORE GROUP OF x.sec_vend
        SKIP TO TOP OF PAGE
        SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO nomb,apell FROM adtb00003 a
        WHERE a.num_emp = x.sec_vend
      
        LET nombre = nomb CLIPPED," ",apell CLIPPED
  
        PRINT COLUMN  1, letras.negrillas_on
        PRINT COLUMN  1, "Vendedor: ",x.sec_vend USING "&&&&"," ",nombre,       
                         letras.negrillas_off

      BEFORE GROUP OF x.sec_cliente
         SELECT a.nombre INTO nombre_cli
         FROM vetb00002 a
         WHERE a.tipo_cliente = x.tipo_cliente AND
               a.sec_cliente = x.sec_cliente

         PRINT COLUMN 1, letras.negrillas_on,
                         "CLIENTE: ",x.tipo_cliente USING "<<","-",
                                     x.sec_cliente USING "<<<<"," ",nombre_cli,
                         letras.negrillas_off

      BEFORE GROUP OF x.compania
        PRINT COLUMN  1, letras.negrillas_on
        IF x.compania = 1 THEN
           PRINT COLUMN  1, "Productos Locales", letras.negrillas_off
        ELSE
           PRINT COLUMN  1, "Productos Importados", letras.negrillas_off
        END IF
        LET idx2 = 0

      AFTER GROUP OF x.codigo 
        LET idx2 = idx2 + 1

        SELECT UNIQUE a.descrip_esp,a.unidad_med INTO x.descrip_esp,x.unidad_med
        FROM intb00001 a
        WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND
              a.cod_tipo = x.cod_tipo AND a.cod_sec   = x.cod_sec 

        PRINT COLUMN  1, idx2 USING "&&&"," ",
                         x.cod_n USING "&","-",x.cod_grupo USING "&","-",
                         x.cod_tipo USING "&&","-",x.cod_sec USING "&&&",
                         " ", x.descrip_esp," ",x.unidad_med CLIPPED,
              COLUMN 51, GROUP SUM(x.cantidad) 
                         WHERE x.sec_vend = x.sec_vend
                         USING "-,---,---,---.##", 
              COLUMN 68, GROUP SUM(x.cantidad_ant) 
                         WHERE x.sec_vend = x.sec_vend
                         USING "-,---,---,---.##" 

      AFTER GROUP OF x.compania
        PRINT COLUMN  1, letras.negrillas_on
        PRINT COLUMN 51, "----------------", 
              COLUMN 68, "----------------" 
        PRINT COLUMN  1, "Total Compania ---> ",
              COLUMN 51, GROUP SUM(x.cantidad) 
                         WHERE x.sec_vend = x.sec_vend
                         USING "-,---,---,---.##", 
              COLUMN 68, GROUP SUM(x.cantidad_ant) 
                         WHERE x.sec_vend = x.sec_vend
                         USING "-,---,---,---.##" 
        PRINT COLUMN  1, letras.negrillas_off

      AFTER GROUP OF x.sec_vend
        PRINT COLUMN  1, letras.negrillas_on
        PRINT COLUMN 51, "----------------", 
              COLUMN 68, "----------------"
        PRINT COLUMN  1, "Total Vendedor ---> ",
              COLUMN 51, GROUP SUM(x.cantidad) 
              USING "-,---,---,---.##", 
              COLUMN 68, GROUP SUM(x.cantidad_ant) 
              USING "-,---,---,---.##" 
        PRINT COLUMN  1, letras.negrillas_off

      ON LAST ROW
        PRINT COLUMN  1, letras.negrillas_on
        PRINT COLUMN 51, "================", 
              COLUMN 68, "================" 
        PRINT COLUMN  1, "Total General ---> ",
              COLUMN 51, SUM(x.cantidad) 
              USING "-,---,---,---.##", 
              COLUMN 68, SUM(x.cantidad_ant) 
              USING "-,---,---,---.##" 
        PRINT COLUMN  1, letras.normal,letras.negrillas_off
END REPORT   
