{
===============================================================================
  Copyright (©) 2002. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 16-02-2004
  Versión actual: 1.0.3
  Fecha versión actual: 30-09-2005
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    28-09-2004    Se ha cambiado la una linea del procedimiento inicializar contador
                  con el fin de no machacar el campo serie si este ya viene relleno
    12-06-2005    Se añade el contador de Tareas
    30-09-2005    Se añade contador de albaranes de cliente
===============================================================================
}


unit Contadores;
{Clase que se encarga de toda la gestión de contadores de la aplicación, esta unidad
gunto la unidad RdxGestorContadores sustituirán a la antigua clase contador y sus hijas}

{
Para dar de alta un contador nuevo:
 - Añadir contador al tipo enumerado TRdxContadores.
 - Añadir el nombre de la tabla con la que se correspondera el contador a TablasContadores.
 - Añadir longitud del contador a LongitudContadores.
 - Añadir el tipo de contador que es en TipoContadores.
 - Añadir en el create del contador las caracteristicas de cada uno.

 - Seguir pasos de unidad RdxGestorContadores.
}

interface

uses Framework;

type

//Todos los contadores de la aplicación
  TContador = (     contProveedores,
                    contPedidosProveedor,
                    contClientes,
                    contPresupuestosCliente,
                    contAlmacenes,
                    contArticulos,
                    contFacturasProveedor,
                    contFacturasCliente,
                    contContratosCliente,
                    contPagosProveedor,
                    contPagosCliente,
                    contCaja,
                    contBanco,
                    contArticulosModelo,
                    contFacturasProforma,
                    contTareas,
                    contMovimientos,
                    contAlbaranesCliente

   );

//Estructura que representa a un contador
  TRegistroContador = record
    CodigoEmpresa : Variant;
    CodigoTabla : Variant;
    Tabla : Variant;
    EsComun : Boolean;
    Longitud : Variant;
    Seriado : Variant;
    Dia : Boolean;
    Mes : Boolean;
    Ano : Boolean;
    ContDia : Variant;
    ContMes : Variant;
    ContAno : Variant;
    Contador : Integer;
  end;

{  public
    property CodigoTabla : Variant read FCodigoTabla write FCodigoTabla;
    property Tabla : Variant read FTabla write FTabla;
    property Comun : Integer read FComun write FComun;
    property Longitud : Variant read FLongitud write FLongitud;
    property Seriado : Variant read FSeriado write FSeriado;
    property Dia : Boolean read FDia write FDia;
    property Mes : Boolean read FMes write FMes;
    property Ano : Boolean read FAno write FAno;
    property ContDia : Variant read FContDia write FContDia;
    property ContMes : Variant read FContMes write FContMes;
    property ContAno : Variant read FContAno write FContAno;
    property Contador : Integer read FContador write FContador;
    property CodigoEmpresa : Variant read FCodigoEmpresa write FCodigoEmpresa;
    constructor Create(Contador: TRdxContadores);
    destructor Destroy; override;
  end;
}

const

//Nombre de las tablas con las que están relacionados los contadores
    NombreTablasContadores : array [TContador] of String = (
               ('PROVEEDORES'),                 //contProveedores
               ('PEDIDOSPROVEEDOR'),            //contPedidosProveedor
               ('CLIENTES'),                    //contClientes
               ('PRESUPUESTOSCLIENTE'),				  //contPresupuestosCliente
               ('ALMACENES'),                   //contAlmacenes
               ('ARTICULOS'),                   //contArticulos
               ('FACTURASPROVEEDOR'),           //contFacturasProveedor
               ('FACTURASCLIENTE'),             //contFacturasCliente
               ('CONTRATOSCLIENTE'),            //contContratosCliente
               ('PAGOSPROVEEDORES'),            //contPagosProveedor
               ('PAGOSCLIENTE'),                //contPagosCliente
               ('CAJA'),                        //contCaja
               ('BANCO'),                       //contBanco
               ('ARTICULOSMODELO'),             //contArticulosModelo
               ('FACTURASPROFORMA'),            //contFacturasProforma
               ('TAREAS'),                      //contTareas
               ('MOVIMIENTOS'),                 //contMovimientos
               ('ALBARANESCLIENTE')             //contAlbaranesCliente
   );


procedure InicializarContador (lContador : TContador; var RegistroContador : TRegistroContador);

implementation
uses
  StrFunc, Variants, BaseDatos;

const
//Longitudes de los contadores
   LongitudContadores : array [TContador] of Integer = (
               (10),            //contProveedores
               (10),            //contPedidosProveedor
               (10),            //contClientes
               (-1),            //contAlmacenes
               (12),				    //contPresupuestosCliente
               (10),            //contArticulos
               (12),            //contFacturasProveedor
               (12),            //contFacturasCliente
               (12),            //contContratosCliente
               (12),            //contPagosProveedor
               (12),            //contPagosCliente
               (10),            //contCaja
               (10),            //contBanco
               (10),            //contArticulosModelo
               (12),            //contFacturasProforma
               (9),             //contTareas
               (12),            //contMovimientos
               (12)             //contAlbaranesCliente
   );

//Tipo de los contadores
// 1: Comun (Se creara un solo detalle), 0: Multimepresa (Se crearán tantos detalles como empresas haya)
   tcComunes = [contProveedores, contClientes, contPresupuestosCliente, contArticulos,
                contContratosCliente, contArticulosModelo, contTareas];

// Seriados de los contadores
   SeriadoContadores : array [TContador] of String = (
               ('SERIADO_PROVEEDOR'),               //contProveedores
               ('SERIADO_PEDPROVEEDOR'),            //contPedidosProveedor
               ('SERIADO_CLIENTE'),                 //contClientes
               ('SERIADO_PRESUPUESTO'),				      //contPresupuestosCliente
               ('SERIADO_ALMACEN'),                                //contAlmacenes
               ('SERIADO_ARTICULO'),                //contArticulos
               ('SERIADO_FACPROVEEDOR'),            //contFacturasProveedor
               ('SERIADO_FACCLIENTE'),              //contFacturasCliente
               ('SERIADO_CONTRATO'),                //contContratosCliente
               ('SERIADO_PAGPROVEEDOR'),            //contPagosProveedor
               ('SERIADO_PAGCLIENTE'),              //contPagosCliente
               (''),                                //contCaja
               (''),                                //contBanco
               ('SERIADO_ARTMODELO'),               //contArticulosModelo
               ('SERIADO_FACPROFORMA'),             //contFacturasProforma
               (''),                                //contTareas
               (''),                                //contMovimientos
               ('SERIADO_ALBARANESCLIENTE')         //contAlbaranesCliente
   );


   DiaContadores : array [TContador] of Boolean = (
               (False),            //contProveedores
               (False),            //contPedidosProveedor
               (False),            //contClientes
               (False),  	         //contPresupuestosCliente
               (False),            //contAlmacenes
               (False),            //contArticulos
               (False),            //contFacturasProveedor
               (False),            //contFacturasCliente
               (False),            //contContratosCliente
               (False),            //contPagosProveedor
               (False),            //contPagosCliente
               (False),            //contCaja
               (False),            //contBanco
               (False),            //contArticulosModelo
               (False),            //contFacturasProforma
               (False),            //contTareas
               (False),            //contMovimientos
               (False)             //contAlbaranesCliente
   );

   MesContadores : array [TContador] of Boolean = (
               (False),            //contProveedores
               (False),            //contPedidosProveedor
               (False),            //contClientes
               (False),  	         //contPresupuestosCliente
               (False),            //contAlmacenes
               (False),            //contArticulos
               (False),            //contFacturasProveedor
               (False),            //contFacturasCliente
               (False),            //contContratosCliente
               (False),            //contPagosProveedor
               (False),            //contPagosCliente
               (False),            //contCaja
               (False),            //contBanco
               (False),            //contArticulosModelo
               (False),            //contFacturasProforma
               (False),            //contTareas
               (False),            //contMovimientos
               (False)             //contAlbaranesCliente
   );

   AnoContadores : array [TContador] of Boolean = (
               (False),            //contProveedores
               (True),             //contPedidosProveedor
               (False),            //contClientes
               (True),  	         //contPresupuestosCliente
               (False),            //contAlmacenes
               (False),            //contArticulos
               (True),             //contFacturasProveedor
               (True),             //contFacturasCliente
               (True),             //contContratosCliente
               (False),            //contPagosProveedor
               (False),            //contPagosCliente
               (False),            //contCaja
               (False),            //contBanco
               (False),            //contArticulosModelo
               (True),             //contFacturasProforma
               (True),             //contTareas
               (False),            //contMovimientos
               (True)              //contAlbaranesCliente
   );

procedure InicializarContador (lContador : TContador; var RegistroContador : TRegistroContador);
begin
  with RegistroContador do
  begin
    Tabla := NombreTablasContadores[lContador];
    EsComun := (lContador in tcComunes);
    Longitud := LongitudContadores[lContador];
    if EsCadenaVacia(Seriado) then
    begin
//       Seriado := SeriadoContadores[lContador];
       case lContador of
         contProveedores:      Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contPedidosProveedor: Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contClientes:         Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contPresupuestosCliente: Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contAlmacenes:        Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contArticulos:        Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contFacturasProveedor:Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contFacturasCliente:  Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contContratosCliente: Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contPagosProveedor:   Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contPagosCliente:     Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contArticulosModelo:  Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contFacturasProforma: Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         contAlbaranesCliente: Seriado := dmBaseDatos.DarSerieConfiguracion(SeriadoContadores[lContador]);
         else Seriado := '';
       end;
    end;
    Dia := DiaContadores[lContador];
    Mes := MesContadores[lContador];
    Ano := AnoContadores[lContador];
    ContDia := NULL;
    ContMes := NULL;
    ContAno := NULL;
    Contador := 0;
  end;
end;


end.
