// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:            Estado Contable de Documentos
//
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: 
//  
//
// Consideraciones :
// Creación  :  Luis Palau Castañeda.  12/septiembre/2001
// Revisiones : 
// 21/01/2003  N.D.1726     Presenta prepólizas con estado de error. (DRdA)
// 05/06/2006  N.D.4089     Mostrar la hora de la póliza de AdminPaq en el 
//                          reporte (ELVS)
// 21/06/2006  N.D.4089	    Se reabre el defecto, porque solo se debe mostrar
//			    la hora cuando la empresa usa CFDs	
// 20\02\2009  N.D.5010    MUESTRA EN BLANCO EL REPORTE ESTADO CONTABLE CUANDO SE SELECCIONA 
//                         EN EL FILTRO ESTADO CONTABLE NO CONTABILIZADO (IYPZ) 
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INCLUSION DE ARCHIVOS
      Incluye LibAdminPaq.rpt


// INICIO PARAMETROS
    Parametro pFechaInicio = '20050101' 
    Parametro pFechaFin = '20051231' 

    Parametro pConcepto = '4,21'   



    Parametro pEstado = '1,2,5,8'   //1 = no Contabiliazdo 
                                    //2 = Precontabilizado
                                    //5 = Contabilizado
                                    //8 = Poliza modificada



// INICIO APERTURA TABLAS

  UsaEmpresa tEmpresa;'AdminpaqW'

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


  //Polizas
  UsaTabla tPolizas = tEmpresa['mgw10038']
  tPolizas.Usaindice['']  

  //tDocumentos
  UsaTabla tDocumentos = tEmpresa['mgw10008']
  tDocumentos.Usaindice['iConceptoFecha']

  //tconceptos
  UsaTabla tConceptos = tEmpresa['mgw10006']
  tConceptos.Usaindice['']

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


//!  tParametros.Busca Primero   
// Lee el registro de parámetros de la empresa para obtener el directorio de trabajo de ContPAQ
gDirContPAQ = ''
tParametros.Busca Primero
Si tParametros->Encontro // Si lo encontró
  gDirContPAQ = tParametros(cRutaContPAQ)
FinSi

Si gDirContPAQ != ''
  UsaEmpresa tEmpContPAQ;'CONTPAQW';gDirContPAQ
  UsaTabla tDiario = tEmpContPAQ['CTW10009/IDIARIO']              // Catálogo de diarios: Tipo Póliza
FinSi
//DEFINICION DE COLUMNAS 


// N.D. 4089 // N.D. 4089 se modificaron las columnas para la visualización correcta de los datos y agregar el campo hora
// Columnas 20;3.15,0.15,2.1,0.15,1.8,0.15,1.8,0.15,3.6,0.15,1.8,0.15,1.8,0.15,2.1,0.15
  Columnas 20;3.15,0.15,4.0,0.15,2.4,0.15,1.8,0.15,3.6,0.15,1.8,0.15,1.8,0.15,2.4,0.15,2.5,0.15
  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

//***********************************************************************************************
//	ImprimeDocto
// Descripcion: imprime una linea xon el doxumento y su poliza
// Entradas : 
// Salida :   
// Autor :     LEPC SEPT 2001
//  Historial:
//  21/Ene/2003 N.D.1726 Se agregó el filtro para brincarse la prepólizas con
//                       estado de error. (DRdA)
//  20\Feb\2009 N.D.5010 Si se eligió en el filtro "documentos no contabilizados" se imprimien con la 
//                         información de la póliza en blanco. (IYPZ)
//***********************************************************************************************
Deffunc ImprimeDocto()
  //N.D.5010 Si tPolizas(cEstadoContable) > 0
    tConceptos.busca[@str(tDocumentos(cIdConceptoDocumento);0)]
    Si tConceptos->encontro
      gRenglon =tConceptos(cCodigoConcepto) & '  '& tConceptos(cNombreConcepto)[c0]
    Finsi
    gRenglon = fEditaFecha(tDocumentos(cFecha))[c2]
    gRenglon =tDocumentos(cSerieDocumento) [c4] 
    gRenglon =@str(tDocumentos(cFolio);0) [c6]

    Si tDocumentos(cEstadoContable) = 1
      gRenglon ='No contabilizado'[c8]
    Sino
      Si tDocumentos(cEstadoContable) = 2 o tDocumentos(cEstadoContable) = 3 o tDocumentos(cEstadoContable) = 4
        gRenglon ='Precontabilizado'[c8]
      Sino
        Si tDocumentos(cEstadoContable) = 5 o  tDocumentos(cEstadoContable) = 6 o tDocumentos(cEstadoContable) = 7
          gRenglon ='Contabilizado'[c8]
        Sino
          Si tDocumentos(cEstadoContable) = 8
            gRenglon ='Modificada en ContPAQ'[c8]
          Finsi
        Finsi
      Finsi
    Finsi

		Si tDocumentos(cEstadoContable) > 1//N.D.5010 Se imprime información de la póliza
      // Tipo de póliza
      Escoge tPolizas(TipoPol)
        Caso 1 // Ingresos
          gRenglon = 'Ingreso'[C10]
        FinCaso
        Caso 2 // Egresos
          gRenglon = 'Egreso'[C10]
        FinCaso
        Caso 3 // Diario
          gRenglon = 'Diario'[C10]
        FinCaso
        Caso 4 // Orden
          gRenglon = 'Orden'[C10]
        FinCaso
        Caso 5 // Estadística
          gRenglon = 'Estadística'[C10]
        FinCaso
        OtroCaso
          gRenglon = @STR(tPolizas(TipoPol);0)[C10]
          Si gDirContPAQ != ''
            Si tDiario(Numero) = tPolizas(TipoPol)
              gRenglon = tDiario(Descrip)[C10]
            SiNo
              tDiario.Busca[tPolizas(TipoPol) $ 3]
              Si tDiario->Encontro
                gRenglon = tDiario(Descrip)[C10]
              FinSi
            FinSi
          FinSi
        FinCaso
      FinEscoge
   	  gRenglon =@STR(tPolizas(NumPol);0)[c12]
       gRenglon =fEditaFecha(tPolizas(fecha)) [c14]
      //N.D. 4089 Se agrega el campo hora al reporte
      Si tParametros(cEsCFD)=1
    	  gRenglon =tPolizas(cHora) [c16]
      FinSi

    FinSi //N.D.5010
      
    Imprime gRenglon
    gRenglon = ''
  //N.D.5010 FinSi

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}' & ' Estado Contable de Documentos'
    Imprime


    gDelaFecha = fEditaFecha(pFechaInicio) 
    gAlaFecha = fEditaFecha(pFechaFin) 
    Texto '^@TC{0,0,0}@S{16}'& 'Del: ' &  gDelaFecha  & ' al ' &  gAlaFecha


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

    
    

    NEGRITAS TRUE
    Altura 10


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


    //Columnas 20;1.65,0.15,1.2,0.15,1.5,0.15,3.3,0.15,1.8,0.15,1.8,0.15,2.4,0.15,2.4,0.3,2.4,0

    // N.D. 4089 se modificaron las columnas para la visualización correcta de los datos y agregar el campo fecha
    //Columnas 20;3.15,0.15,2.1,0.15,1.8,0.15,1.8,0.15,3.6,0.15,1.8,0.15,1.8,0.15,2.1,0.15
    // N.D.5010 Para mejor visualización se amplia la columna de Tipo Docto y se reduce la columna de fecha.
    //Columnas 20;3.15,0.15,4.0,0.15,2.4,0.15,1.8,0.15,3.6,0.15,1.8,0.15,1.8,0.15,2.4,0.15,2.5,0.15
    Columnas 20;4.15,0.15,2.2,0.15,1.8,0.15,3.4,0.15,4.6,0.15,1.8,0.15,1.8,0.15,2.4,0.15,2.5,0.15

    Texto c0; 'Tipo Documento'
    Texto c2; 'Fecha'
    Texto c4; 'Serie'
    Texto c6; 'Folio'
    Texto c8; 'Edo Contable'
    Texto c10; 'Tipo Póliza'
    Texto c12; 'Número'
    Texto c14; 'Fecha'
    //N.D. 4089 Solo aplica para empresas que usen CFDs
    Si tParametros(cEsCFD)=1
	Texto c16; 'Hora' // N.D. 4089
    FinSi
    Imprime
    Texto '@TC{0,0,0}@L{-1}'
	 Imprime 

  
    NEGRITAS FALSE
    Altura 10
  FinEncab

//PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  gRenglon = '' 
  lcontador = 0
  Mientras @escoge(@col(pEstado;0);lcontador)>0
    Si @escoge(@col(pEstado;0);lcontador) = '2' 
      pEstado = @col(pEstado;0)& ',3,4'[c0]
    Finsi
    Si @escoge(@col(pEstado;0);lcontador) = '5' 
      pEstado = @col(pEstado;0)& ',6,7'[c0]
    Finsi

    lcontador =   lcontador + 1
  FinMientras

  lcontador = 0
  Mientras @escoge(@col(pConcepto;0);lcontador)>0      
    vConcepto = @escoge(@col(pConcepto;0);lcontador)
    vFecha = @col(pFechaInicio;0)[c0]
    Mientras @col(vFecha;0) <=@col(pFechaFin;0)
      tDocumentos.busca[@str(@col(vConcepto;0);0)&':'& @str(@col(vFecha;0);0)]    
      Mientras tDocumentos->encontro    
        Si tDocumentos(cIdConceptoDocumento)!=  @str(@col(vConcepto;0);0) o tDocumentos(cFecha)!=  @str(@col(vFecha;0);0)       
          tDocumentos.Saltareg[1]             
          Continua  
        Finsi
        Si tDocumentos(cAfectado)=0
          tDocumentos.Saltareg[1]
           Continua 
        Finsi
        Si @pos(@col(pEstado;0);tDocumentos(cEstadoContable))<0
          tDocumentos.Saltareg[1]
          Continua  
        Finsi
        //imprime
        tPolizas.busca[@str(tDocumentos(cIdPrePoliza);0)]
        //N.D.5010 Imprime el documento, si tiene póliza también la póliza
        ImprimeDocto() 

        Si tDocumentos(cIdprePolizaCancelacion)!= 0 
          tPolizas.busca[@str(tDocumentos(cIdprePolizaCancelacion);0)]
          Si tPolizas->encontro
            //imprime docto y poliza 
            ImprimeDocto() 
          Finsi
        Finsi  

        tDocumentos.Saltareg[1] 
      Finmientras
      vFecha = fFechaSiguiente(vFecha) [c0]
    FinMientras
    lcontador = lcontador + 1
  FinMientras
