// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// Reporte:             Promociones Ordenado por Código
//                      Promociones Ordenado por Nombre
//                     
//
// Sistema:     ADMINPAQ  Versión v1.0 Windows
//
// Descripcion: 
// 
//
//
// 
// Consideraciones :
// Creación  :  Luis Palau Castañeda.  12/septiembre/2001
// Revisiones :
// 13/03/2002 N.D. 233 - Se hace que el reporte despliegue los textos de
//                     clasificación 1 al 6 correctamente. (EGV)
//                     - Se hace que el reporte despliegue en el momento preciso
//                     los textos: CLASIFICACIONES DEL CLIENTE y
//                     CLASIFICACIONES DEL PRODUCTO.
//                     - Se cambiaron los filtros para desplegar los Productos y
//                     los Clientes que cumplen con una Promoción en específico:
//                     El Cliente o el Producto debe cumplir con todas las
//                     Clasificaciones que tiene la Promoción. Si la Promoción
//                     tiene un Valor de Clasificación 0 y el Cliente o el
//                     Producto sí tienen un valor asignado para esa
//                     Clasificación, se considera que el registro cumple para
//                     esa clasificación con el filtro.  
// 11/04/2002 ND-322 Se cambió el rango de fechas por la palabra 'PERMANENTE' para
//                   promociones de ese tipo.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// INCLUSION DE ARCHIVOS
      Incluye LibAdminPaq.rpt


// INICIO PARAMETROS
    Parametro pPromocionInicial = 'PROM'
    Parametro pPromocionFinal = 'z'
    Parametro pFechaInicial = '19770914' //
    Parametro pFechaFinal = '20021231' //




    Parametro pTipoReporte = 1 //1 Promociones Ordenado por Código
                                //2 Promociones Ordenado por Nombre



// INICIO APERTURA TABLAS

  UsaEmpresa tEmpresa;'AdminpaqW'

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

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

  //Promociones
  UsaTabla tPromociones = tEmpresa['mgw10029']
  tPromociones.Usaindice['cCodigoPromocion']

  //Productos
  UsaTabla tProductos = tEmpresa['mgw10005']
  tProductos.Usaindice['iCodigoTipo']


  //Clasificaciones2
  UsaTabla tClasificaciones2 = tEmpresa['mgw10020']
  tClasificaciones2.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 
  gDecimales = 2


//VARIABLES GLOBALES 
  
  gDelaFecha = ''
  gAlaFecha  = ''
  gRenglon = '' 
  gMoneda = ''
  vTipoAcumulado = 0
  vImporteModelo  =  0
  vIdEjercicio = 0
 
  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

//////////////////////////////////////////////////////////////////////////////////
//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}' & ' Promociones Ordenado por Código'
    Sino
      Texto '^@TC{0,0,0}@S{16}' & ' Promociones Ordenado por Nombre'
    Finsi

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

    
    

    NEGRITAS TRUE
    Altura 10


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


    //Código           Nombre(Promoción)                    Promoción   Vigencia
    //XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 9,999.99%   RANGO DE FECHAS   01/ENE/2001 AL 31/ENE/2001
    Columnas 20;2.4,0.15,6,0.15,1.8,0.15 ,3.6,0.15,4.95,0.15,0

    Texto ''
    Texto C0;'Código'
    Texto C2;'Nombre(Promoción)'
    Texto C4;'Promoción'
    Texto c6;'Vigencia' 
    Imprime   
    Texto ''


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

  
    NEGRITAS FALSE
    Altura 10
  FinEncab

//PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 gRenglon = '' 
 
  si pPromocionInicial = ' '
    tPromociones.Busca primero
  sino
    tPromociones.Busca [@str(pPromocionInicial;0) ]
  finsi


 Si pTipoReporte = 2
   tPromociones.Usaindice['cNombrePromocion']
   tPromociones.Busca primero
 Finsi



 Mientras tPromociones->Encontro
   si pPromocionFinal != ' '
     Si tPromociones(cCodigoPromocion)> @str(pPromocionFinal;0)
       tPromociones.Saltareg[1]
       Continua
     Finsi 
   finsi
   si pPromocionInicial != ' '
     Si tPromociones(cCodigoPromocion)< @str(pPromocionInicial;0)
       tPromociones.Saltareg[1]
       Continua
     Finsi 
   finsi

   Si tPromociones(cIdPromocion)= 0
     tPromociones.Saltareg[1]
     Continua
   Finsi
   //rango   I---    fecha_ini/fin    ---F
   seAcepta =0
   Si tPromociones(cFechaInicio)>= @col(pFechaInicial;0) y tPromociones(cFechaInicio)<= @col(pFechaFinal;0)
     seAcepta =1
   Finsi
   Si tPromociones(cFechaFin)>= @col(pFechaInicial;0) y tPromociones(cFechaFin)<= @col(pFechaFinal;0)
     seAcepta =1
   Finsi
   //rango      fecha_ini  I---F    fecha_fin
   Si tPromociones(cFechaInicio)< @col(pFechaInicial;0) y tPromociones(cFechaFin)> @col(pFechaFinal;0)
     seAcepta =1
   Finsi

   Si seAcepta =0 
     tPromociones.Saltareg[1]
     Continua
   Finsi


   Columnas 20;2.4,0.15,6,0.15,1.8,0.15 ,3.6,0.15,4.95,0.15,0
   //lista 
   gRenglon = tPromociones(cCodigoPromocion)[c0]
   gRenglon = tPromociones(cNombrePromocion)[c2]
   gRenglon = tPromociones(cPorcentajeDescuento)[c4]
   Si tPromociones(cFechaInicio) = '19800101' Y tPromociones(cFechaFin) = '29991231'
     gRenglon = 'PERMANENTE'[c6]
     gRenglon = ''[c8]
   SiNo
     gRenglon = 'Rango de fechas: '[c6]
     gRenglon = fEditaFecha(tPromociones(cFechaInicio)) & ' al ' &  fEditaFecha(tPromociones(cFechaFin))[c8]
   FinSi
   Imprime gRenglon
   gRenglon = ''
   Columnas 20;2.7,0.15,7.65 ,0.15 ,8.7, 0.15,0

   Si tPromociones(cVolumenMinimo) !=0 
     gRenglon = 'Cantidad mínima a vender: ' & @str(tPromociones(cVolumenMinimo);2) [c2]
   Sino
     gRenglon = 'Cantidad mínima a vender: No Aplica' [c2]
   Finsi
   Si tPromociones(cVolumenMaximo) !=0 
     gRenglon = 'Cantidad máxima a vender: ' & @str(tPromociones(cVolumenMaximo);2) [c4]
   Sino 
     gRenglon = 'Cantidad máxima a vender: No Aplica' [c4]
   Finsi
   Imprime gRenglon
   gRenglon = ''
   gRenglon = 'CLASIFICACIONES DEL CLIENTE' [c2]
   gRenglon = 'CLASIFICACIONES DEL PRODUCTO' [c4]
   Imprime gRenglon

   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifCliente1);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  1 :      ' & tClasificaciones2(cValorClasificacion) [c2]   
   Finsi
   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifProducto1);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  1 :      ' & tClasificaciones2(cValorClasificacion) [c4]   
   Finsi
   Imprime gRenglon
   gRenglon = ''

   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifCliente2);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  2 :      ' & tClasificaciones2(cValorClasificacion) [c2]
   Finsi
   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifProducto2);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  2 :      ' & tClasificaciones2(cValorClasificacion) [c4]
   Finsi
   Imprime gRenglon
   gRenglon = ''

   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifCliente3);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  3 :      ' & tClasificaciones2(cValorClasificacion) [c2]
   Finsi
   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifProducto3);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  3 :      ' & tClasificaciones2(cValorClasificacion) [c4]
   Finsi
   Imprime gRenglon
   gRenglon = ''

   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifCliente4);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  4 :      ' & tClasificaciones2(cValorClasificacion) [c2]
   Finsi
   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifProducto4);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  4 :      ' & tClasificaciones2(cValorClasificacion) [c4]
   Finsi
   Imprime gRenglon
   gRenglon = ''

   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifCliente5);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  5 :      ' & tClasificaciones2(cValorClasificacion) [c2]
   Finsi
   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifProducto5);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  5 :      ' & tClasificaciones2(cValorClasificacion) [c4]
   Finsi
   Imprime gRenglon
   gRenglon = ''

   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifCliente6);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  6 :      ' & tClasificaciones2(cValorClasificacion) [c2]
   Finsi
   tClasificaciones2.busca[ @str(tPromociones(cIdValorClasifProducto6);0)]
   Si tClasificaciones2->encontro
     gRenglon = 'Clasificación  6 :      ' & tClasificaciones2(cValorClasificacion) [c4]
   Finsi
   Imprime gRenglon
   gRenglon = ''

   

   //clientes y productos..
   //clientes
   texto '      Clientes al que aplica'
   Imprime 
   Columnas 20;2.7,0.15,2.7 ,0.15 ,8.7, 0.15,0

  gRenglon = '' 
  tClientes.Busca Primero


  Mientras tClientes->Encontro

   Si tClientes(cIdClienteProveedor)= 0
     tClientes.Saltareg[1]
     Continua
   Finsi
   Si tClientes(cTipoCliente)= 3
     tClientes.Saltareg[1]
     Continua
   Finsi

   // Por defecto se despliega el registro a menos que las condiciones que están
   // a continuación indiquen lo contrario. El registro será desplegado si las
   // clasificaciones de la Promoción corresponden con las del Cliente. Si la
   // Promoción tiene identificador 0 en la clasificación y el Cliente tiene
   // cualquier valor, se acepta el registro del Cliente.
   seAcepta= 1


     Si (tPromociones(cIdValorClasifCliente1) != tClientes(cIdValorClasifCliente1))y tPromociones(cIdValorClasifCliente1)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifCliente2) != tClientes(cIdValorClasifCliente2))y tPromociones(cIdValorClasifCliente2)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifCliente3) != tClientes(cIdValorClasifCliente3))y tPromociones(cIdValorClasifCliente3)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifCliente4) != tClientes(cIdValorClasifCliente4))y tPromociones(cIdValorClasifCliente4)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifCliente5) != tClientes(cIdValorClasifCliente5))y tPromociones(cIdValorClasifCliente5)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifCliente6) != tClientes(cIdValorClasifCliente6))y tPromociones(cIdValorClasifCliente6)  !=0
       seAcepta= 0
     Finsi

     Si seAcepta= 0 
       tClientes.Saltareg[1]
       Continua
     FInsi


   gRenglon = fMascarilla(tClientes(cCodigoCliente);tParametros(cMascarillaClientes))[c2]
   gRenglon = tClientes(cRazonSocial)[c4]
   Imprime gRenglon
   gRenglon = ''

   tClientes.Saltareg[1]
 FinMientras


 texto '      Productos a los que aplica'
 Imprime 
 Columnas 20;2.7,0.15,2.7 ,0.15 ,8.7, 0.15,0

 gRenglon = '' 
 tProductos.Busca Primero


 Mientras tProductos->Encontro

   Si tProductos(cIdProducto)= 0
     tProductos.Saltareg[1]
     Continua
   Finsi

   // Por defecto se despliega el registro a menos que las condiciones que están
   // a continuación indiquen lo contrario. El registro será desplegado si las
   // clasificaciones de la Promoción corresponden con las del Producto. Si la
   // Promoción tiene identificador 0 en la clasificación y el Producto tiene
   // cualquier valor, se acepta el registro del Producto.
   seAcepta= 1


     Si (tPromociones(cIdValorClasifProducto1) != tProductos(cIdValorClasificacion1)) y tPromociones(cIdValorClasifProducto1)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifProducto2) != tProductos(cIdValorClasificacion2))y tPromociones(cIdValorClasifProducto2)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifProducto3) != tProductos(cIdValorClasificacion3))y tPromociones(cIdValorClasifProducto3)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifProducto4) != tProductos(cIdValorClasificacion4))y tPromociones(cIdValorClasifProducto4)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifProducto5) != tProductos(cIdValorClasificacion5))y tPromociones(cIdValorClasifProducto5)  !=0
       seAcepta= 0
     Finsi
     Si (tPromociones(cIdValorClasifProducto6) != tProductos(cIdValorClasificacion6))y tPromociones(cIdValorClasifProducto6)  !=0
       seAcepta= 0
     Finsi

     Si seAcepta= 0 
       tProductos.Saltareg[1]
       Continua
     FInsi


   gRenglon = fMascarilla(tProductos(cCodigoProducto);tParametros(cMascarillaProducto))[c2]
   gRenglon = tProductos(cNombreProducto)[c4]
   Imprime gRenglon
   gRenglon = ''

   tProductos.Saltareg[1]
 FinMientras


   Texto ' ' 
   Imprime 

   


   tPromociones.Saltareg[1]
 FinMientras
