// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:            Listado de Agentes. Ordenado por Código
//                     Listado de Agentes. Ordenado por Nombre
//
//
//
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: 
// 
//
// 
// 
// Consideraciones :
// Creación  :  Luis Palau Castañeda.  12/septiembre/2001
// Revisiones : 
//
// 12/02/2007   ND 4444   Se redondean los porcetanjes de Comisión de Venta y Cobro. (AMG)  
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INCLUSION DE ARCHIVOS
      Incluye LibAdminPaq.rpt


// INICIO PARAMETROS
    Parametro pAgenteInicial = '(Ninguno)'
      Parametro pAgenteFinal = 'z'
    Parametro  pInformacion= '1,2'//


    Parametro pIdClase1 = '0' //
    Parametro pIdClase2 = '0' //
    Parametro pIdClase3 = '0' //
    Parametro pIdClase4 = '0' //
    Parametro pIdClase5 = '0' //
    Parametro pIdClase6 = '0' //



    Parametro pTipoReporte = 1  //1  Catálogos de Agentes. Ordenado por Código
                                //2  Catálogos de Agentes. Ordenado por Nombre




// INICIO APERTURA TABLAS

  UsaEmpresa tEmpresa;'AdminpaqW'

   // Parametros de la empresa
  UsaTabla tParametros = tEmpresa['mgw10000']                    


  //Agentes
  UsaTabla tAgentes = tEmpresa['mgw10001']
  tAgentes.Usaindice['iCodigoTipo']

  //Clientes
  UsaTabla tClientes = tEmpresa['mgw10002']
  tClientes.Usaindice['']

  //Monedas
  UsaTabla tMonedas = tEmpresa['mgw10034']          
  tMonedas.Usaindice['']                     // Usa el índice primario, por cIdMoneda
  //unidades
  UsaTabla tUnidadesPM = tEmpresa['mgw10026']
  tUnidadesPM.Usaindice['']

  //Clasificaciones
  UsaTabla tClasificaciones = tEmpresa['mgw10020']
  tClasificaciones.Usaindice['']

  //EquivalenciasUnidades peso y med
  UsaTabla tEquivaleUnidadesPM = tEmpresa['mgw10027']
  tEquivaleUnidadesPM.Usaindice['']



  tParametros.Busca Primero   
//DEFINICION DE COLUMNAS 

  Columnas 20;2.7,0.15,5.55,0.15,1.5,0.15,0.9,0.15, 0,0 ,1.65,0.15,1.65,0.15,2.25,1.15,1.05,0.15,0

  UsaLetra 'Arial'
  Altura 9 
//  [C0..C7].Decimales 0
//  [C0..C7].Blanco ' '
  gDecimales = 2
//  [C8..C14].Coma
//  [C8..C14].Decimales gDecimales
//  [C8..C14].Blanco '0.00'
//  [c9,c11,c13,c15..c19].Blanco ' '


//VARIABLES GLOBALES 
  
  gDelaFecha = ''
  gAlaFecha  = ''
  gRenglon = '' 
  gMoneda = ''
  vTipoAcumulado = 0
  vImporteModelo  =  0
  vIdEjercicio = 0
  gNombreMoneda = tMonedas(cNombreMoneda)
 
  kMeses = 'Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic'[C0]


  gDelaFecha = @str(pMes;0) 
  Mientras @len(gDelaFecha)<2
     gDelaFecha   = '0' & gDelaFecha 
  FinMientras
  gDelaFecha = @str(pEjercicio;0) &   gDelaFecha & '02'
//FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//***********************************************************************************************
//	EditaFec
// Descripcion: Esta función recibe una fecha con formato ddmmaaaa y la convierte a formato
//	dd/mmm/aaaa
// Entradas :  Fecha : contiene la fecha AAAAMMDD
// Salida :    regresa una cadena con la fecha en formato DD/MMM/AAAA
// Autor :     FBCS junio 2001
//***********************************************************************************************
DefFunc fEditaFecha(aFecha)
   Local lMes
   Local lRegreso

	lMes = @INT(@SubStr(aFecha;4;2))
	lRegreso[0] = @SubStr(aFecha;6;2) & '/' & @Escoge(kMeses;lMes-1) & '/' & @SubStr(aFecha;0;4)
   Retorna lRegreso
FinFunc
//***********************************************************************************************
// fMascara()
//    Esta función recibe un campo numérico, que en una representación binaria de siete digitos
//    indica ciertos días de la semana, según el digito que esté prendido, estos pueden ser
//    11111 - serie pedimento lotes  caract umedida
//***********************************************************************************************
Deffunc fMascara(aValor)
  Local lDias,lGuion

  // solo nos interesan los 7 bits mas a la derecha
  
  lGuion = ''    
  lDias = ''
  Si aValor%2 = 1       // Un numero non = bit menos significativo encendido
    lDias = lGuion&'U'
    lGuion = ','
  Finsi
  Si aValor%4 >= 2      // Valor Entre 1y4 = Segundo bit menos significativo encendido
    lDias = lDias & lGuion & 'C'
    lGuion = ','
  Finsi
  Si aValor%8 >= 4      // Valor Entre 8y4 = Tercer bit menos significativo encendido
    lDias = lDias & lGuion & 'S'
    lGuion = ','
  Finsi
  Si aValor%16 >= 8     // Valor Entre 16y8 = Cuarto bit menos significativo encendido
    lDias = lDias & lGuion & 'P'
    lGuion = ','
  Finsi
  Si aValor%32 >= 16
    lDias = lDias & lGuion & 'L'
    lGuion = ','
  Finsi  

  Retorna lDias
FinFunc

//////////////////////////////////////////////////////////////////////////////////
//ENCABEZADO 
  Encab



    Texto '@TC{255,0,0}@S{8}AdminPAQ' 
 	 Hoja '"@TC{0,0,0}@S{8}Página: '
    Imprime

    Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre
    Texto '"@TC{0,0,0}@S{8}Fecha: ' & fEditaFecha(@Hoy())
    Imprime
    Si pTipoReporte = 1
      Texto '^@TC{0,0,0}@S{16}' & ' Listado de Agentes. Ordenado por Código'
    Sino
      Si pTipoReporte = 2
        Texto '^@TC{0,0,0}@S{16}' & ' Listado de Agentes. Ordenado por Nombre'
      Finsi
    Finsi


    Texto '"@TC{0,0,0}@S{8}Hora: ' & @Hora()
    Imprime

    
    

    NEGRITAS TRUE
    Altura 10

    // ===== Se Revisan las clasificaciones, para recuperarlas e imprimirlas en el encabezado
    fRevisaClases(tClasificaciones)
    // ===== Fin de la revision de clasificaciones

    Texto '@TC{0,0,0}@L{-1}'
	 Imprime 

    //Código         Nombre(Agente)                                      Tipo de Comisión Comisión Venta Comisión Cobro
    Columnas 20;2.4,0.15,7.5,0.15,2.7,0.15,2.4,0.15,2.4,0.15,1.44,0
    Texto ''
    Texto C0;'Código'
    Texto c2;'Nombre(Agente)' 
    Texto c4;'Tipo de Comisión' 
    Texto c6;'Comisión Venta'
    Texto c8;'Comisión Cobro'
    Imprime   

    Texto '@TC{0,0,0}@L{-1}'
	 Imprime 


    Si @pos(@col(pInformacion;0);'1') != -1

      //               Código(Cliente)   Nombre(Agente como Cliente)                
      Columnas 20;2.55,0.15,3,0.15,9,0.15,4.5,0
      Texto ''
      Texto C2;'Código(Cliente)'
      Texto C4;'Nombre(Agente como Cliente)'                        
      Imprime   
      Texto '@TC{0,0,0}@L{-1}'
	   Imprime 

    Finsi     

    Si @pos(@col(pInformacion;0);'2') != -1

      //              Código(Proveedor) Nombre(Agente como Proveedor)
               
      Columnas 20;2.55,0.15,3,0.15,9,0.15,4.5,0
      Texto ''
      Texto C2;'Código(Proveedor)'
      Texto C4;'Nombre(Agente como Proveedor)'                        
      Imprime   
      Texto '@TC{0,0,0}@L{-1}'
	   Imprime 

    Finsi     


  
    NEGRITAS FALSE
    Altura 10
  FinEncab

//PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  gRenglon = '' 
 
  si pAgenteInicial = ' '
    tAgentes.Busca primero
  sino
    tAgentes.Busca [@str(pAgenteInicial;0) & ':']
  finsi

  Si pTipoReporte = 2
    tAgentes.Usaindice['iNombreTipo']
    tAgentes.Busca primero
  Finsi




 Mientras tAgentes->Encontro
   si pAgenteFinal != ' '
     Si tAgentes(cCodigoAgente)> @str(pAgenteFinal;0)
       tAgentes.Saltareg[1]
       Continua
     Finsi 
   finsi
   si pAgenteInicial != ' '
     Si tAgentes(cCodigoAgente)< @str(pAgenteInicial;0)
       tAgentes.Saltareg[1]
       Continua
     Finsi 
   finsi

   Si tAgentes(cIdAgente)= 0
     tAgentes.Saltareg[1]
     Continua
   Finsi

   pQueTipo=3
   Si gNumDeClases > 0
     Si !fMiembroDeUnaClase(tAgentes;gNumDeClases;gListIdDeClases;pQueTipo)
       tAgentes.Saltareg[1]
       Continua
     Finsi
   Finsi


   //Código         Nombre(Agente)                                      Tipo de Comisión Comisión Venta Comisión Cobro
   Columnas 20;2.4,0.15,7.5,0.15,2.7,0.15,2.4,0.15,2.4,0.15,0
   gRenglon = fMascarilla(tAgentes(cCodigoAgente);tParametros(cMascarillaAgente))[c0]
   gRenglon = tAgentes(cNombreAgente)[c2]
   Si tAgentes(ctipoAgente)= 3
      gRenglon = 'Cobranza'[c4]
   Finsi
   Si tAgentes(ctipoAgente)= 2
     gRenglon = 'Venta/Cobranza'[c4]
   Finsi
   Si tAgentes(ctipoAgente)= 1
     gRenglon = 'Venta'[c4]
   Finsi

   //gRenglon ='"' & tAgentes(cComisionVentaAgente)& ' %'[c6]
   //gRenglon ='"' & tAgentes(cComisionCobroAgente)& ' %'[c8]
   
   //ND 4444 Permitir dos decimales en los porcentajes de Comisiones (AMG)

   gRenglon ='"' & @str(tAgentes(cComisionVentaAgente);2) & ' %'[c6]
   gRenglon ='"' & @str(tAgentes(cComisionCobroAgente);2) & ' %'[c8]
   
   imprime gRenglon
   gRenglon = ''

   Si @pos(@col(pInformacion;0);'1') != -1
      //               Código(Cliente)   Nombre(Agente como Cliente)                
      Columnas 20;2.55,0.15,3,0.15,9,0.15,4.5,0
      tClientes.busca[@str(tAgentes(cIdCliente);0)]
      Si tClientes->encontro
        gRenglon = fMascarilla(tClientes(cCodigoCliente);tParametros(cMascarillaClientes))[c2]
        gRenglon = tClientes(cRazonSocial)[c4]
      Finsi
      imprime gRenglon
      gRenglon = ''
     
   Finsi
   Si @pos(@col(pInformacion;0);'2') != -1
      //               Código(Prov)   Nombre(Agente como Cliente)                
      Columnas 20;2.55,0.15,3,0.15,9,0.15,4.5,0
      tClientes.busca[@str(tAgentes(cIdProveedor);0)]
      Si tClientes->encontro
        gRenglon = fMascarilla(tClientes(cCodigoCliente);tParametros(cMascarillaClientes))[c2]
        gRenglon = tClientes(cRazonSocial)[c4]
      Finsi
      imprime gRenglon
      gRenglon = ''

   Finsi

   texto ' ' 
   imprime

   tAgentes.Saltareg[1]
 FinMientras
