// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:            Listado de usuarios  CatUsua.rpt
//
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: 
//  
//
// Consideraciones :
// Creación  :  Luis Palau Castañeda.  2/Noviembre/2001
// Revisiones : ND-327  Daniel Robles de Alba 11/Abril/2002
//              ND-1820 EGV                   18/Agosto/2003
//                          Se usa el prefijo AdminPAQW cuando se crean los objetos tEmpresa2 y
//                          tEmpresa3. Se activa la llave primaria para el objeto tParametros.
//              ND-2935 DRdA     20/Sep/2004
//                      Se modificó fImprimePerfil:
//                        - Caso de catálogos, que imprima los permisos de cada catálogo agrupados.
//                        - Caso de movimientos, que no imprima los permisos globales.
//                        - Caso de configuración, que imprima los permisos agrupados.
//                        - Caso de vistas, que imprima los permisos agrupados.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INCLUSION DE ARCHIVOS
      Incluye LibAdminPaq.rpt


// INICIO PARAMETROS

    Parametro pInformacion = '1,2,3,4,5,6,7,8'
                       	//1 Archivos
                       	//2 Catálogos
                       	//3 Movimientos
                      	//4 Procesos
                        //5 Configuración
                      	//6 Contabilización
                     	//7 Reportes
                        //8 Vistas




// INICIO APERTURA TABLAS

  UsaEmpresa tEmpresa;'AdminpaqW'

  // ND-327 Cuando traía una \ la ruta al final y se le concatenaba otra
  // junto con los directorios tronaba la aplicación y el sistema
  // Si la ruta ya tiene \ al final solo le concatena el directorio final
  Si @SubStr(tEmpresa->SysDirDatos;@len(tEmpresa->SysDirDatos)-1;1) = '\\'
    gRuta[0] = tEmpresa->SysDirDatos & 'cacdd\adminpaq'
  Sino
    gRuta[0] = tEmpresa->SysDirDatos & '\cacdd\adminpaq'
  FinSi

  UsaEmpresa tEmpresa2;'AdminpaqW';gRuta


  UsaEmpresa tEmpresa3;'AdminpaqW';tEmpresa->SysDirDatos
   //tabla global
  UsaTabla tEmpresas = tEmpresa3['mgw00001']                    
  tEmpresas.Usaindice['']   



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


  //cac10000 Usuarios
  UsaTabla tUsuarios = tEmpresa2['cac10000']
  tUsuarios.Usaindice['']

  //cac20000 niveles
  UsaTabla tNiveles = tEmpresa2['cac20000'] Alias 'Niveles'
  tNiveles.Usaindice['']

  //cac30000 perfiles
  UsaTabla tPerfiles = tEmpresa2['cac30000']
  tPerfiles.Usaindice['']

  //cac40000 procesos
  UsaTabla tProcesos = tEmpresa2['cac40000'] Alias 'Procesos'
  tProcesos.Usaindice['']

  //cac50000 procesosGRP
//  UsaTabla tProcesosGRP = tEmpresa2['cac50000']
//  tProcesosGRP.Usaindice['']

  //cac20000 niveles auxiliar
  UsaTabla tNivAux = tEmpresa2['cac20000'] Alias 'NivAux'
//  tNivAux.Usaindice['IdxSistemaProceso']
  tNivAux.Usaindice['']

  //cac40000 procesos
  UsaTabla tProcBus = tEmpresa2['cac40000'] Alias 'ProcBus'
  tProcBus.Usaindice['IdxSistemaGrpDesc']



  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 

//VARIABLES GLOBALES 
  
  gDelaFecha = ''
  gAlaFecha  = ''
  gRenglon = '' 

 
  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

//***********************************************************************************************
//	fImprimePerfil
// Descripcion:recorre las tablas de usuarios(procesos, niveles, etc)
// para imprimir toda la confiuracion de dicho usuario 
//
// Entradas :  Fecha : usuario grupo y nivel
// Salida :    
// Autor :     LEPC Nov 2001
//***********************************************************************************************
deffunc fImprimePerfil(aIdUsuario;aGrupo;aNivel)
local vstr,vstr2,vresp ,v1,lencontro,lProceso,lPar
  lencontro =0
  vresp =''
  //buscamos niveles
  tNiveles.busca ['5:' & @col(aNivel;0) ]
  Mientras tNiveles->encontro
    Si tNiveles(Nivel) !=@col(aNivel;0)
      finciclo
    Finsi
    //por cada nivel reviasr su descripcion  en procesos
    tProcesos.busca ['5:' & @col(tNiveles(Proceso);0) ]
    Si tProcesos->encontro
      //grupo filtrar
     Si tProcesos(grupo) = @col(aGrupo;0)     
        
      v1 = 0
      lencontro =0
      mientras v1 < @len( tProcesos(descripcion))
        Si @substr( tProcesos(descripcion);v1;1) = '|'
          lencontro =1
          finciclo
        Finsi
        v1 = v1+1
      finmientras
      si  lencontro =1
        vstr2 = @Substr(tProcesos(Descripcion);0;v1)[C0]
        // Si el grupo es movimientos y es permiso global no se debe de imprimir
        Si @Col(aGrupo;0) = 12 Y (@Col(vstr2;0) = 'Ventas' O @Col(vstr2;0) = 'Compras' O @Col(vstr2;0) = 'Clientes' O @Col(vstr2;0) = 'Proveedores')
          tNiveles.saltareg[1]
          Continua
        FinSi

        // Si el grupo es movimientos y es permiso de concepto que tiene que ver con el permiso global de inventarios no se debe imprimir
        Si @Col(aGrupo;0) = 12 Y (tProcesos(Descripcion) = 'Inventarios|Entradas' O tProcesos(Descripcion) = 'Inventarios|Salidas' O tProcesos(Descripcion) = 'Inventarios|Traspasos' O tProcesos(Descripcion) = 'Inventarios|Modificar Documentos Impresos')
          tNiveles.saltareg[1]
          Continua
        FinSi

        vstr = @substr(tProcesos(descripcion);v1+1;100)[c0]

        // Si el grupo es catálogos y el permiso es de modificación, no se procesa, porque ya se procesó junto con el de acceso
        Si (@Col(aGrupo;0) = 11 O @Col(aGrupo;0) = 19 O @Col(aGrupo;0) = 22) Y @Col(vstr;0) != 'Acceso'
          tNiveles.saltareg[1]
          Continua
        FinSi

        // Si el grupo es movimientos y el permiso es de acceso, no se procesa, porque se va a procesar junto con el de modificación
        Si @Col(aGrupo;0) = 12 Y @Col(vstr;0) = 'Acceso'
          tNiveles.saltareg[1]
          Continua
        FinSi

        Si @Col(aGrupo;0) = 12 Y @Col(vstr;0) = 'Modificación'
          lPar = tProcesos(LParam)[C0]
          lPar = 1[C1]
          // Se busca el proceso de acceso
          tProcBus.Busca ['5:' & @Str(@Col(aGrupo;0);0) & ':' & @Mayusculas(@Col(vstr2;0)) & '|Acceso']
          Si !tProcBus->Encontro
            tProcBus.Busca Primero
          FinSi
          Mientras tProcBus->Encontro
            Si tProcBus(Descripcion) = (@Col(vstr2;0) & '|Acceso') Y tProcBus(IdSistema) = 5 Y tProcBus(LParam) = @Col(lPar;0)
              lPar = 0[C1]
              vstr2 = '-- '& @Substr(tProcesos(Descripcion);0;v1) & ' --'[C0]
              //sub encabezado 
              Si @Col(vresp;0) != @Col(vstr2;0)
                Negritas true 
                Texto C0;@Col(vstr2;0)
                Imprime   
                Negritas false
              Finsi
              vresp =@col(vstr2;0)[c0]

              // Se busca el permiso de modificación
              tNivAux.Busca ['5:' & @Col(aNivel;0) & ':' & tProcBus(IdProceso)]
              Si tNivAux->Encontro
                vstr = 'Acceso'[C0]
                // Impresion de tres campos
                Texto C0; @Col(vstr;0)
                Si tNivAux(Estado) = 0
                  Texto C1; '    No'
                SiNo
                  Texto C1; '    Sí'
                Finsi
                // Barra outloock 
                Si tNivAux(Estado) = 2
                  Texto C2; '    Sí'
                SiNo
                  Texto C2; '    No'
                Finsi
                Imprime
                vstr = 'Modificación'[C0]
              FinSi
              FinCiclo
            FinSi
            tProcBus.saltareg[1]
          FinMientras
          Si @Col(lPar;1) = 1
            vstr2 = '-- '& @Substr(tProcesos(descripcion);0;v1) & ' --'[C0]
            //sub encabezado 
            Si @Col(vresp;0) != @Col(vstr2;0)
              Negritas true 
              Texto C0;@Col(vstr2;0)
              Imprime   
              Negritas false
            Finsi
            vresp =@col(vstr2;0)[c0]
          FinSi
        SiNo
          vstr2 = '-- '& @substr(tProcesos(descripcion);0;v1)&' --'[c0]
          //sub encabezado 
          Si @col(vresp;0) != @col(vstr2;0)
            negritas  true 
            texto c0;@col(vstr2;0)
            imprime   
            negritas  false
          Finsi
          vresp =@col(vstr2;0)[c0]
        FinSi
      sino
        vstr = tProcesos(descripcion)[c0]
      Finsi
      //impresion de tres campos
      texto c0; @col(vstr;0)
      si tNiveles(estado) = 0
        texto c1; '    No'
      sino
        texto c1; '    Sí'
      finsi
      //barra outloock 
      si tNiveles(estado) = 2
        texto c2; '    Sí'
      sino
        texto c2; '    No'
      finsi
      imprime

      Si (@Col(aGrupo;0) = 11 O @Col(aGrupo;0) = 19 O @Col(aGrupo;0) = 22) Y lencontro = 1
        lProceso = @Val(tNiveles(Proceso))[C0]
        Si @Col(aGrupo;0) = 22
          lProceso = lProceso - 80[C0]
        SiNo
          lProceso = lProceso + 100[C0]
        FinSi
        // Se busca el permiso de modificación
        tNivAux.Busca ['5:' & @Col(aNivel;0) & ':' & @Str(@Col(lProceso;0);0)]
        Si tNivAux->Encontro
          Si @Col(aGrupo;0) = 22
            vstr = 'Ver Costos'[C0]
          SiNo
            vstr = 'Modificación'[C0]
          FinSi
          // Impresion de tres campos
          Texto C0; @Col(vstr;0)
          Si tNivAux(Estado) = 0
            Texto C1; '    No'
          SiNo
            Texto C1; '    Sí'
          Finsi
          // Barra outloock 
          Si tNivAux(Estado) = 2
            Texto C2; '    Sí'
          SiNo
            Texto C2; '    No'
          Finsi
          Imprime
        FinSi
      FinSi

     Finsi //grupo
    Finsi
    tNiveles.saltareg[1]
  FinMientras

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
    Texto '^@TC{0,0,0}@S{16}' & ' Listado de Usuarios'
    Imprime

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

    
    

    NEGRITAS TRUE
    Altura 10


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


  
    NEGRITAS FALSE
    Altura 10
  FinEncab

//PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  gRenglon = '' 
 

tUsuarios.busca primero
Mientras tUsuarios->encontro != 0

  columnas 20;15,4,0,0
  Texto '@TC{0,0,0}@L{-1}'
  Imprime 
  negritas true
  texto 'Datos Generales:'
  imprime
  negritas false

  texto 'Nombre:    '  &  tUsuarios(clave)
  imprime
  texto 'Nombre Largo:    '  &  tUsuarios(nombre)
  imprime

  tPerfiles.busca[ @str(tUsuarios(nivel);0)]
  Si tPerfiles->encontro
    texto 'Grupo:    '  &  tPerfiles(descripcion)
    imprime
  Finsi

  negritas true
  texto 'Empresas a las que tiene acceso:'
  imprime
  negritas false
  Texto '@TC{0,0,0}@L{-1}'
  Imprime 

  ///enlista las empresas
//buscamos nuevles
  tNiveles.busca ['5:' & @str(tUsuarios(Nivel);0) ]
  Mientras tNiveles->encontro
    Si tNiveles(Nivel) !=tUsuarios(Nivel)
      finciclo
    Finsi

    //es un proceso de empresas  e0, e1,e2,e32,e3433,etc
    Si @substr(@str(tNiveles(proceso);0);0;1) = 'E'
      //se trata de empresa
     Si tNiveles(estado) = 1

      Si  @val(@substr(tNiveles(proceso);1;10)) = 0
         //todas las empresas
         texto c0; 'Todas las empresas'
         Imprime
      Sino
         //buscar el id de la empresa
         tEmpresas.busca[@substr(tNiveles(proceso);1;10)]
         Si tEmpresas->encontro
           texto c0;tEmpresas(cNombreEmpresa)
           Imprime
         Finsi
      Finsi
     Finsi
    Finsi
    tNiveles.saltareg[1]
  FinMientras



  //jjj

  ///DERECHOS Y BARRA DE ACCESO
  ///Módulo                                               Derechos de Acceso   Visualizar en Barra de Acceso
  ///Archivos
  ///Respaldar                                                    Si                         No
  columnas 20;10,4,4,0,0  
  Texto ' '
  Imprime 
  negritas true
  texto c0; 'DERECHOS Y BARRA DE ACCESO'
  imprime
  texto c0; 'Módulo'
  texto c1; 'Derechos de Acceso'
  texto c2; 'Visualizar en Barra de Acceso'
  imprime
  negritas false  
  //archivo
  Si @pos(@col(pInformacion;0);'1') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Archivo'
    imprime
    negritas false  
    //usuario , grupo y nivel
    fImprimePerfil(tUsuarios(idUsuario);10;tUsuarios(Nivel))

    //jjj
  Finsi
  //catalogo
  Si @pos(@col(pInformacion;0);'2') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Catálogo'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);11;tUsuarios(Nivel))
    //jjj
  Finsi
  //movtos
  Si @pos(@col(pInformacion;0);'3') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Movimientos'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);12;tUsuarios(Nivel))
    //jjj
  Finsi
  //procesos
  Si @pos(@col(pInformacion;0);'4') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Procesos'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);15;tUsuarios(Nivel))
    //jjj
  Finsi
  //confi
  Si @pos(@col(pInformacion;0);'5') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Configuración'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);19;tUsuarios(Nivel))
    //jjj
  Finsi
  //contabuiliza
  Si @pos(@col(pInformacion;0);'6') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Contabilización'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);20;tUsuarios(Nivel))
    //jjj
  Finsi
  //reportes
  Si @pos(@col(pInformacion;0);'7') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Reportes'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);21;tUsuarios(Nivel))
    //jjj
  Finsi
  //vistas
  Si @pos(@col(pInformacion;0);'8') != -1     
    Texto ' '
    Imprime 
    negritas true
    Texto ''
    Texto c0; 'Vistas'
    imprime
    negritas false  
    fImprimePerfil(tUsuarios(idUsuario);22;tUsuarios(Nivel))
    //jjj

    //al final un blanco
    Texto ' '
    Imprime 
  Finsi

  tUsuarios.saltareg[1]
Finmientras


