// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:     Reporte de Notas de Venta con desglose de porcentajes de impuesto y estado facturado
//
// Sistema:     ADMINPAQ  Versión v2.0 Windows
//
// Descripcion: Revisa las aperturas de cajas con corte del módulo de Punto de Venta y aquellas desglosa las ventas por 
//              porcentaje de impuesto, su estado y factura generada.
//
// Consideraciones :
// Creación  :  Roberto Del Alto Torres.  3/Junio/2003
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// Historia de modificaciones
//  Fecha      Nombre   IDLotus                     Descripcion
//  12/07/2007 LAP      N.D.4624    Los campos de fechas son campos cadena por lo que las busquedas y rango no sirven
//                                  Afortunadamente los cortes de caja toman la fecha de la PC por lo cual se graban
//                                  en forma consecutiva.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//======================================================================================================================
// PARAMETROS
//======================================================================================================================
Parametro pCajaInicial  = 'CAJA1'
Parametro pCajaFinal    = 'CAJA1'
Parametro pFechaInicial = '20030601'
Parametro pFechaFinal   = '20030630'
Parametro pCajeroInicial = ' '
Parametro pCajeroFinal  = 'z'
Parametro pTipoDoctos   = 0   // 0 = Todos, 1 = Facturados, 2 = No Facturados

//======================================================================================================================
//======================================================================================================================
Columnas 10;2, 2
USALETRA 'Arial'
ALTURA 9

//======================================================================================================================
//======================================================================================================================
UsaEmpresa tEmpresa;'ADMINPAQW'

UsaTabla tParametros = tEmpresa['MGW10000'] // Parametros de la Empresa

UsaTabla tCajas = tEmpresa['MGW10041'] // Catálogo de Cajas
tCajas.Usaindice['CCODIGOC01']

UsaTabla tAperCajas = tEmpresa['MGW10042'] // Catálogo de Cajas
tAperCajas.Usaindice['CAJAFECAPE']

UsaTabla tPagosNV = tEmpresa['MGW10043'] // Pago de Notas de Venta
tPagosNV.Usaindice['APERTDOC']

UsaTabla tAgentes = tEmpresa['MGW10001'] // Agentes
tAgentes.Usaindice['']

UsaTabla tDocumentos = tEmpresa['MGW10008'] // Documentos
tDocumentos.Usaindice['']

UsaTabla tMovimientos = tEmpresa['MGW10010'] // Movimientos
tMovimientos.Usaindice['iDoctoNumeroMovto']

UsaTabla tProducto = tEmpresa['MGW10005'] // Productos
tProducto.Usaindice['']


//======================================================================================================================
// VARIABLES GLOBALES 
//======================================================================================================================
kMeses = 'Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic'[C0]

//FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//======================================================================================================================
//FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//======================================================================================================================
//**********************************************************************************************************************
// 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
//**********************************************************************************************************************
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

//======================================================================================================================
//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}' & ' Reporte de Estado de Facturación de Notas de Venta'
    Texto '"@TC{0,0,0}@S{8}Hora: ' & @Hora()
    Imprime
    Texto '^@TC{0,0,0}@S{16}' & ' Del: ' & fEditaFecha(pFechaInicial) & ' Al: ' & fEditaFecha(pFechaFinal)
    Imprime 1
FINENCAB

//======================================================================================================================
//PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//======================================================================================================================
tParametros.BUSCA PRIMERO
Si pCajaInicial = ' '
   tCajas.BUSCA PRIMERO
   pCajaInicial = tCajas(ccodigoc01)

   tCajas.BUSCA ULTIMO
   pCajaFinal = tCajas(ccodigoc01)
FinSi

tAperCajas.Usaindice['APERTCAJA']   // cIdCaja + cIdApertura
MIENTRAS[tCajas.BUSCA[ pCajaInicial & '..' & pCajaFinal]; tCajas->Encontro; tCajas.BUSCA SIGUIENTE[1]]

  // Localización de la primer Apertura de la Caja en el rango de fechas
  tAperCajas.BUSCA[@Str(tCajas(cIdCaja);0)]   
  Mientras tAperCajas->Encontro Y (pFechaInicial > @SUBSTR(tAperCajas(cFecHoraAp);6;4) & @SUBSTR(tAperCajas(cFecHoraAp);0;2) & @SUBSTR(tAperCajas(cFecHoraAp);3;2))
    tAperCajas.BUSCA SIGUIENTE[1]
  FinMientras  
   
  Mientras tAperCajas->Encontro Y (@SUBSTR(tAperCajas(cFecHoraAp);6;4) & @SUBSTR(tAperCajas(cFecHoraAp);0;2) & @SUBSTR(tAperCajas(cFecHoraAp);3;2) <= pFechaFinal)

      tAgentes.BUSCA[ @STR(tAperCajas(cidagente);0) ]
      Si pCajeroInicial != ' '
         Si tAgentes->Encontro
            Si tAgentes(ccodigoagente) < pCajeroInicial O tAgentes(ccodigoagente) > pCajeroFinal
               tAperCajas.BUSCA SIGUIENTE[1]
               Continua
            FinSi
         FinSi
      FinSi 

      Si tAperCajas(cestadoape) = 1

         Texto 'Caja: ' & tCajas(ccodigoc01) & ' ' & tCajas(cnombrec01)
         Imprime
         Texto 'Fecha y Hora de Apertura: ' & @Substr(tAperCajas(cfechoraap);0;19)
         Imprime
         Texto 'Cajero: ' & tAgentes(ccodigoagente) & ' ' & tAgentes(cnombreagente)
         Imprime

         Texto '@L{-1}'
         Imprime
         NEGRITAS TRUE 
         Lista 'Folio','Factura','"Al 15%','"Al 10%','"Al 0%','"Exento','"Otros%','"IVA Otros%','"Total','"Estado'
         NEGRITAS FALSE
         Texto '@L{-1}'         
         Imprime

         Totales = ''
         MIENTRAS[ tPagosNV.BUSCA[ @STR(tAperCajas(cidapertur);0)]; tPagosNV->Encontro; tPagosNV.BUSCA SIGUIENTE[1] ]
          Si tPagosNV(ciddocum01) > 0 
            tDocumentos.BUSCA[ @STR(tPagosNV(ciddocum01);0) ]
            Si tDocumentos->Encontro 

               // Si documentos a imprimir son solo facturados,
               // verifica si el tiene facturación global o facturación por nota de venta
               Si pTipoDoctos = 1 Y ( tAperCajas(ciddocum01) = 0 Y tPagosNV(ciddocum03) = 0 )
                  Continua 
               FinSi

               // Si documentos a imprimir son los no facturados,
               // verifica si el tiene facturación global o facturación por nota de venta
               Si pTipoDoctos = 2 Y ( tAperCajas(ciddocum01) != 0 O tPagosNV(ciddocum03) != 0 )
                  Continua 
               FinSi

               Linea = ''
               Linea = tDocumentos(cseriedocumento) & ' ' & tDocumentos(cfolio)[C0]
               Linea = tDocumentos(ccancelado) = 1 ? '"Cancelado' : '"Afectado'[C9]

               Si tPagosNV(ciddocum03) != 0
                  tDocumentos.BUSCA[ @STR(tPagosNV(ciddocum03);0) ]
                  Linea = tDocumentos(cseriedocumento) & ' ' & tDocumentos(cfolio)[C1]
               SiNo
                  Si tAperCajas(ciddocum01) != 0
                     tDocumentos.BUSCA[ @STR(tAperCajas(ciddocum01);0) ]
                     Linea = tDocumentos(cseriedocumento) & ' ' & tDocumentos(cfolio)[C1]
                  FinSi
               FinSi

               Ventas = 0 
               MIENTRAS[ tMovimientos.BUSCA[ @STR(tPagosNV(ciddocum01);0)]; tMovimientos->Encontro; tMovimientos.BUSCA SIGUIENTE[1] ] 
                  Si tParametros(cnumimpu01) = 1
                     lImpuestos = tMovimientos(cporcent01)[C0]  
                     lImpuestos = tMovimientos(cimpuesto1)[C1]  
                     lImpuestos = tMovimientos(cporcent02)[C2]  
                     lImpuestos = tMovimientos(cimpuesto2)[C3]  
                     lImpuestos = tMovimientos(cporcent03)[C4]  
                     lImpuestos = tMovimientos(cimpuesto3)[C5]   
                  SiNo
                     Si tParametros(cnumimpu01) = 2
                        lImpuestos = tMovimientos(cporcent02)[C0]  
                        lImpuestos = tMovimientos(cimpuesto2)[C1]  
                        lImpuestos = tMovimientos(cporcent01)[C2]  
                        lImpuestos = tMovimientos(cimpuesto1)[C3]  
                        lImpuestos = tMovimientos(cporcent03)[C4]  
                        lImpuestos = tMovimientos(cimpuesto3)[C5]   
                     SiNo
                        lImpuestos = tMovimientos(cporcent03)[C0]  
                        lImpuestos = tMovimientos(cimpuesto3)[C1]  
                        lImpuestos = tMovimientos(cporcent01)[C2]  
                        lImpuestos = tMovimientos(cimpuesto1)[C3]  
                        lImpuestos = tMovimientos(cporcent02)[C4]  
                        lImpuestos = tMovimientos(cimpuesto2)[C5]   
                     FinSi 
                  FinSi 

                  lAplImpOtro = False
                  lBaseImpuesto = tMovimientos(cneto) - (tMovimientos(cdescuen01) + tMovimientos(cdescuen02) + tMovimientos(cdescuen03) + tMovimientos(cdescuen04) + tMovimientos(cdescuen05))[C0]

                  Si @COL(lImpuestos;0) = 15
                     Ventas = @COL(Ventas;0) + @COL(lBaseImpuesto;0)[C0]
                  SiNo  
                     Si @COL(lImpuestos;0) = 10
                        Ventas = @COL(Ventas;1) + @COL(lBaseImpuesto;0)[C1]
                     SiNo  
                        Si @COL(lImpuestos;0) = 0
                           tProducto.BUSCA[ @STR(tMovimientos(cidprodu01);0) ]
                           Si tProducto(cesexento) = 1
                              Ventas = @COL(Ventas;3) + @COL(lBaseImpuesto;0)[C3]
                           SiNo
                              Ventas = @COL(Ventas;2) + @COL(lBaseImpuesto;0)[C2]
                           FinSi 
                        SiNo  
                           Ventas = @COL(Ventas;4) + @COL(lBaseImpuesto;0)[C4]
                           Ventas = @COL(Ventas;5) + @COL(lImpuestos;1)[C5]
                           lAplImpOtro = True
                        FinSi
                     FinSi
                  FinSi

                  Si @COL(lImpuestos;3) != 0
                     Si !lAplImpOtro 
                        Ventas = @COL(Ventas;4) + @COL(lBaseImpuesto;0)[C4]
                        lAplImpOtro = True
                     FinSi 
                     Ventas = @COL(Ventas;5) + @COL(lImpuestos;3)[C5]
                  FinSi

                  Si @COL(lImpuestos;5) != 0
                     Si !lAplImpOtro 
                        Ventas = @COL(Ventas;4) + @COL(lBaseImpuesto;0)[C4]
                        lAplImpOtro = True
                     FinSi 
                     Ventas = @COL(Ventas;5) + @COL(lImpuestos;5)[C5]
                  FinSi
               FINMIENTRAS

               Linea = @COL(Ventas;0)[C2]
               Linea = @COL(Ventas;1)[C3]
               Linea = @COL(Ventas;2)[C4]
               Linea = @COL(Ventas;3)[C5]
               Linea = @COL(Ventas;4)[C6]
               Linea = @COL(Ventas;5)[C7]
               Linea = @COL(Ventas;0) + @COL(Ventas;1) + @COL(Ventas;2) + @COL(Ventas;3) + @COL(Ventas;4) + @COL(Ventas;5)[C8]  
               Imprime Linea

               Totales = Totales + Linea[C2..C8]
            FINSI
          FINSI
         FINMIENTRAS

         Texto '@L{2,3,4,5,6,7,8}'
         Imprime 
         Totales = 'Totales:'[C1]
         Imprime Totales

         SALTALIN 2
      FinSi

      tAperCajas.BUSCA SIGUIENTE[1]	       
   FINMIENTRAS
FINMIENTRAS


