{
===============================================================================
  Copyright (©) 2005. 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: 30-10-2005
  Versión actual: 1.0.0
  Fecha versión actual: 30-10-2005
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit TablaAlbaranesCliente;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
  //Particulares
  IBCustomDataSet, cxGrid, StdCtrls, cxButtonEdit, cxEdit, cxMemo,

  //Aplicacion
  Framework, StrFunc, Entidades, Constantes, BaseDatos, RdxEmpresaActiva,

  //Contador
  Contadores, RdxGestorContadores;

type
  TDatosAlbaranCliente = class(TObjeto)
  private
    //
  protected
    procedure ObtenerDatos; override;
    procedure AssignTo(Dest: TPersistent); override;
  public
    Codigo : String;
    FechaAlta : TDateTime;
    Usuario : String;
    FechaAlbaran : TDateTime;
    CodigoCliente : String;
    NIFCIF : String;
    Nombre : String;
    Calle : String;
    Numero : String;
    Piso : String;
    CodigoPostal : String;
    Poblacion : String;
    Provincia : String;
    Telefono1 : String;
    Telefono2 : String;
    Movil1 : String;
    Movil2 : String;
    Fax : String;
    PersonaContacto : String;
    BaseImponible : double;
    Descuento : integer;
    ImporteDescuento : double;
    Iva : integer;
    ImporteIva : double;
    ImporteTotal : double;
    Observaciones : String;
    constructor Create(CodigoAlbaran : String); overload;
    constructor Create; overload; override;
    destructor Destroy; override;
  end;

  TListaAlbaranesCliente = class(TListaObjetos)
  private
    FSQL : String;
    function GetAlbaran(Index: Integer): TDatosAlbaranCliente;
  protected
    procedure AssignTo(Dest: TPersistent); override;
    procedure ObtenerLista; override;
  public
    constructor Create(oSQL : String); overload;
    constructor Create; overload; override;
    property Items[Index: Integer] : TDatosAlbaranCliente read GetAlbaran;
  end;

/////////////////////////////////////////////////////////////////////////////////

  TdmTablaAlbaranesCliente = class(TDataModule)
  private
    procedure IniciarSQLAlbaran;
    procedure IniciarSQLDetalles;
    procedure IniciarSQLGrids;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlEliminar : TStrings;
    sqlConsultarGrid : TStrings;
    sqlInsertarDetalles : TStrings;
    sqlModificarDetalles : TStrings;
    sqlConsultarDetalles : TStrings;
    sqlEliminarDetalles : TStrings;
    sqlConsultarGridDetalles : TStrings;

    //Metodos que llamaran a contador
    function DarNuevoCodigo : String;
    function IncrementarCodigo : boolean;
    function DecrementarCodigo : boolean;
    function InsertarContador : boolean;
    function ValidarCodigo(Codigo : String) : Boolean;
    function FormatearCodigo(Codigo : String) : String;

    function FormatearNumConcepto(NumConcepto : String) : String;
    function ExisteCodigo(Codigo : String) : Boolean;
    procedure InicializarGridDetalles(var Grid: TcxGrid);
    procedure InicializarGrid(var Grid: TcxGrid);
    procedure InicializarTabla(Tabla: TPTabla);
    procedure InicializarTablaDetalles(Tabla: TPTabla);
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    function EsUltima(Codigo : String): Boolean;
  end;

var
  dmTablaAlbaranesCliente: TdmTablaAlbaranesCliente;

implementation
{$R *.DFM}

uses
  TablaEmpresas;

{ TdmTablaAlbaranesCliente }

constructor TdmTablaAlbaranesCliente.Create(AOwner: TComponent);
begin
  inherited;
  { Cabecera }
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;

  { Detalles }
  sqlInsertarDetalles := TStringList.Create;
  sqlModificarDetalles := TStringList.Create;
  sqlConsultarDetalles := TStringList.Create;
  sqlEliminarDetalles := TStringList.Create;

  { Grids }
  sqlConsultarGrid := TStringList.Create;
  sqlConsultarGridDetalles := TStringList.Create;

  IniciarSQLAlbaran;
  IniciarSQLDetalles;
  IniciarSQLGrids;
end;

function TdmTablaAlbaranesCliente.DarNuevoCodigo: String;
begin
  Result := GestorContadores.darNuevoCodigo(contAlbaranesCliente);
end;

destructor TdmTablaAlbaranesCliente.Destroy;
begin
  { Cabecera }
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;

  { Detalles }
  sqlInsertarDetalles.Free;
  sqlModificarDetalles.Free;
  sqlConsultarDetalles.Free;
  sqlEliminarDetalles.Free;

  { Grids }
  sqlConsultarGrid.Free;
  sqlConsultarGridDetalles.Free;
  inherited;
end;

function TdmTablaAlbaranesCliente.ExisteCodigo(Codigo: String): Boolean;
var
  oSQL : TIBSQL;
  Contador : String;
begin
  Result := False;
  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGO ');
    SQL.Add('from ALBARANESCLIENTE ');
    SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
    SQL.Add(' and CODIGO = :CODIGO');
    try
      ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
      ParamByName('CODIGO').AsString := Codigo;
      Prepare;
      ExecQuery;
      Contador := Fields[0].AsString;
      Result := (Codigo = Contador);
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

function TdmTablaAlbaranesCliente.FormatearCodigo(Codigo: String): String;
begin
  Result := GestorContadores.formatearCodigo(contAlbaranesCliente, Codigo);
end;

function TdmTablaAlbaranesCliente.FormatearNumConcepto(
  NumConcepto: String): String;
var
  Concepto : Integer;
begin
  Concepto := StrToInt(NumConcepto);
  Result :=  format('%.10d', [Concepto]);
end;

function TdmTablaAlbaranesCliente.IncrementarCodigo: boolean;
begin
  Result := GestorContadores.IncrementarValor(contAlbaranesCliente);
end;

procedure TdmTablaAlbaranesCliente.InicializarGridDetalles(var Grid: TcxGrid);
var
  Columna : TcxGridDBColumn;
begin
  with (Grid.ActiveView as TcxGridDBTableView) do
  begin
    ClearItems;
    OptionsView.Footer := True;
    {Columna CODIGOEMPRESA}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOEMPRESA';
    Columna.Visible := False;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    {Columna CODIGOALBARAN}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOALBARAN';
    Columna.Visible := False;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    {Columna NUMCONCEPTO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NUMCONCEPTO';
    Columna.Visible := False;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    {Columna CODIGOARTICULO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOARTICULO';
    Columna.Caption := 'Cód. artículo';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    Columna.Visible := False;
    Columna.PropertiesClassName := 'TcxButtonEditProperties';
    with TcxButtonEditProperties(Columna.Properties) do
    begin
      Buttons[0].Kind := bkEllipsis;
    end;
    {Columna DESCRIPCION}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'DESCRIPCION';
    Columna.Caption := 'Descripción servicio/artículo';
    Columna.Width := tamColDescripcion;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    Columna.PropertiesClassName := 'TcxMemoProperties';
    with TcxMemoProperties(Columna.Properties) do
      ScrollBars := ssVertical;

    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := 'Total: #,0 conceptos';
        Kind := skCount;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;

    {Columna CANTIDAD}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CANTIDAD';
    Columna.Caption := 'Cantidad';
    Columna.Width := tamColCantidad;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    Columna.PropertiesClassName := 'TcxCalcEditProperties';

    {Columna IMPORTEUNIDAD}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'IMPORTEUNIDAD';
    Columna.Caption := 'Importe unidad';
    Columna.Width := tamColImporte;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    Columna.PropertiesClassName := 'TcxCalcEditProperties';

    {Columna IMPORTETOTAL}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'IMPORTETOTAL';
    Columna.Caption := 'Importe total';
    Columna.Width := tamColImporte;
    Columna.Options.Filtering := False;
    Columna.Options.Sorting := False;
    Columna.Options.Editing := False;

    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := DISPLAY_EUROS2;
        Kind := skSum;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;
  end;
end;

procedure TdmTablaAlbaranesCliente.InicializarGrid(var Grid: TcxGrid);
var
  Columna : TcxGridDBColumn;
begin
  with (Grid.ActiveView as TcxGridDBTableView) do
  begin
    ClearItems;
    OptionsView.Footer := True;
    {Columna CODIGO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGO';
    Columna.Caption := 'Código';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := 'Total: 0 albaranes';
        Kind := skCount;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;

    {Columna FECHAALBARAN}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'FECHAALBARAN';
    Columna.Caption := 'Fecha';
    Columna.Width := tamColFecha;
    Columna.Options.Filtering := False;
    Columna.SortOrder := soDescending;
    {Columna CODIGOCLIENTE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOCLIENTE';
    Columna.Caption := 'Cód. cliente';
    Columna.Width := tamColCodigo;
    Columna.Options.Filtering := False;
    {Columna NIFCIF}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NIFCIF';
    Columna.Caption := 'NIF/CIF';
    Columna.Width := tamColNIFCIF;
    Columna.Options.Filtering := False;
    {Columna NOMBRE}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'NOMBRE';
    Columna.Caption := 'Nombre';
    Columna.Width := tamColNombre;
    Columna.Options.Filtering := False;
    {Columna IMPORTETOTAL}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'IMPORTETOTAL';
    Columna.Caption := 'Importe total';
    Columna.HeaderAlignmentHorz := taRightJustify;
    Columna.Width := tamColImporte;
    Columna.Options.Filtering := False;
  end;
end;

procedure TdmTablaAlbaranesCliente.InicializarTablaDetalles(Tabla: TPTabla);
begin
  with Tabla^.Fields do
  begin
    if FindField('CANTIDAD') <> NIL then
      with (FieldByName('CANTIDAD') as TNumericField) do begin
        DisplayFormat := DISPLAY_CANTIDAD;
        EditFormat := EDIT_CANTIDAD;
      end;

    if FindField('IMPORTEUNIDAD') <> NIL then
      with (FieldByName('IMPORTEUNIDAD') as TFloatField) do begin
        DisplayFormat := DISPLAY_EUROS4;
        EditFormat := EDIT_EUROS4;
      end;

    if FindField('IMPORTETOTAL') <> NIL then
      with (FieldByName('IMPORTETOTAL') as TFloatField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;
  end;
end;

procedure TdmTablaAlbaranesCliente.InicializarTabla(
  Tabla: TPTabla);
begin
  with Tabla^.Fields do
  begin
    if FindField('BASEIMPONIBLE') <> NIL then
      with (FieldByName('BASEIMPONIBLE') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;

    if FindField('DESCUENTO') <> NIL then
      with (FieldByName('DESCUENTO') as TFloatField) do begin
        DisplayFormat := DISPLAY_DTO;
        EditFormat := EDIT_DTO;
      end;

    if FindField('IMPORTEDESCUENTO') <> NIL then
      with (FieldByName('IMPORTEDESCUENTO') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;

    if FindField('IVA') <> NIL then
      with (FieldByName('IVA') as TFloatField) do begin
        DisplayFormat := DISPLAY_DTO;
        EditFormat := EDIT_DTO;
      end;

    if FindField('IMPORTEIVA') <> NIL then
      with (FieldByName('IMPORTEIVA') as TIBBCDField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;

    if FindField('IMPORTETOTAL') <> NIL then
      with (FieldByName('IMPORTETOTAL') as TNumericField) do begin
        DisplayFormat := DISPLAY_EUROS2;
        EditFormat := EDIT_EUROS2;
      end;
  end;
end;

procedure TdmTablaAlbaranesCliente.IniciarSQLDetalles;
begin
  with sqlInsertarDetalles do
  begin
    Add('INSERT INTO DETALLESALBARANESCLIENTE ( ');
    Add('CODIGOEMPRESA, CODIGOALBARAN, NUMCONCEPTO, ');
    Add('CODIGOARTICULO, DESCRIPCION, CANTIDAD, ');
    Add('IMPORTEUNIDAD, IMPORTETOTAL) ');
    Add('VALUES ( ');
    Add(':CODIGOEMPRESA, :CODIGOALBARAN, :NUMCONCEPTO, ');
    Add(':CODIGOARTICULO, :DESCRIPCION, :CANTIDAD, ');
    Add(':IMPORTEUNIDAD, :IMPORTETOTAL) ');
  end;

  with sqlModificarDetalles do
  begin
    Add('UPDATE DETALLESALBARANESCLIENTE SET  ');
    Add('CODIGOARTICULO = :CODIGOARTICULO, ');
    Add('DESCRIPCION = :DESCRIPCION, ');
    Add('CANTIDAD = :CANTIDAD, ');
    Add('IMPORTEUNIDAD = :IMPORTEUNIDAD, ');
    Add('IMPORTETOTAL = :IMPORTETOTAL ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND  ');
    Add('(CODIGOALBARAN = :CODIGOALBARAN) AND  ');
    Add('(NUMCONCEPTO = :NUMCONCEPTO) ');
  end;

  with sqlEliminarDetalles do
  begin
    Add('delete from DETALLESALBARANESCLIENTE ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND  ');
    Add('(CODIGOALBARAN = :CODIGOALBARAN) AND  ');
    Add('(NUMCONCEPTO = :NUMCONCEPTO) ');
  end;

  with sqlConsultarDetalles do
  begin
    Add('select CODIGOALBARAN, NUMCONCEPTO, CODIGOARTICULO, ');
    Add('DESCRIPCION, CANTIDAD, IMPORTEUNIDAD, IMPORTETOTAL ');
    Add('from DETALLESALBARANESCLIENTE ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND  ');
    Add('(CODIGOALBARAN = :CODIGOALBARAN) AND  ');
    Add('(NUMCONCEPTO = :NUMCONCEPTO) ');
  end;
end;

procedure TdmTablaAlbaranesCliente.IniciarSQLGrids;
begin
  with sqlConsultarGrid do
  begin
    Add('select CODIGO, FECHAALTA, FECHAALBARAN,');
    Add('CODIGOCLIENTE, NIFCIF, NOMBRE, IMPORTETOTAL ');
    Add('from ALBARANESCLIENTE ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA)');
  end;

  with sqlConsultarGridDetalles do
  begin
    Add('select CODIGOEMPRESA, CODIGOALBARAN, NUMCONCEPTO, CODIGOARTICULO, ');
    Add('DESCRIPCION, CANTIDAD, IMPORTEUNIDAD, IMPORTETOTAL ');
    Add('from DETALLESALBARANESCLIENTE ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA)');
    Add('AND (CODIGOALBARAN = :CODIGOALBARAN)');
    Add('order by CODIGOALBARAN, NUMCONCEPTO');
  end;
end;

procedure TdmTablaAlbaranesCliente.IniciarSQLAlbaran;
begin
  with sqlInsertar do
  begin
    Add('INSERT INTO ALBARANESCLIENTE ');
    Add('(CODIGOEMPRESA, CODIGO, FECHAALTA, FECHAALBARAN, ');
    Add('CODIGOCLIENTE, NIFCIF, NOMBRE, ');
    Add('CALLE, NUMERO, PISO, ');
    Add('CODIGOPOSTAL, POBLACION, PROVINCIA, ');
    Add('TELEFONO1, TELEFONO2, MOVIL1, ');
    Add('MOVIL2, FAX, PERSONACONTACTO, ');
    Add('BASEIMPONIBLE, DESCUENTO, IMPORTEDESCUENTO, ');
    Add('IVA, IMPORTEIVA, IMPORTETOTAL, OBSERVACIONES,');
    Add('USUARIO) VALUES ');
    Add('(:CODIGOEMPRESA, :CODIGO, :FECHAALTA, ');
    Add(':FECHAALBARAN, ');
    Add(':CODIGOCLIENTE, :NIFCIF, ');
    Add(':NOMBRE, :CALLE, :NUMERO, ');
    Add(':PISO, :CODIGOPOSTAL, ');
    Add(':POBLACION, :PROVINCIA, ');
    Add(':TELEFONO1, :TELEFONO2, ');
    Add(':MOVIL1, :MOVIL2, ');
    Add(':FAX, :PERSONACONTACTO, ');
    Add(':BASEIMPONIBLE, :DESCUENTO, ');
    Add(':IMPORTEDESCUENTO, :IVA, ');
    Add(':IMPORTEIVA, :IMPORTETOTAL, ');
    Add(':OBSERVACIONES, :USUARIO)');
  end;

  with sqlModificar do
  begin
    Add('UPDATE ALBARANESCLIENTE SET ');
    Add('FECHAALBARAN = :FECHAALBARAN, ');
    Add('CODIGOCLIENTE = :CODIGOCLIENTE, ');
    Add('NIFCIF = :NIFCIF, ');
    Add('NOMBRE = :NOMBRE, ');
    Add('CALLE = :CALLE, ');
    Add('NUMERO = :NUMERO, ');
    Add('PISO = :PISO, ');
    Add('CODIGOPOSTAL = :CODIGOPOSTAL, ');
    Add('POBLACION = :POBLACION, ');
    Add('PROVINCIA = :PROVINCIA, ');
    Add('TELEFONO1 = :TELEFONO1, ');
    Add('TELEFONO2 = :TELEFONO2, ');
    Add('MOVIL1 = :MOVIL1, ');
    Add('MOVIL2 = :MOVIL2, ');
    Add('FAX = :FAX, ');
    Add('PERSONACONTACTO = :PERSONACONTACTO, ');
    Add('BASEIMPONIBLE = :BASEIMPONIBLE, ');
    Add('DESCUENTO = :DESCUENTO, ');
    Add('IMPORTEDESCUENTO = :IMPORTEDESCUENTO, ');
    Add('IVA = :IVA, ');
    Add('IMPORTEIVA = :IMPORTEIVA, ');
    Add('IMPORTETOTAL = :IMPORTETOTAL, ');
    Add('OBSERVACIONES = :OBSERVACIONES ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA)');
    Add(' AND (CODIGO = :CODIGO)');
  end;

  with sqlEliminar do
  begin
    Add('delete from ALBARANESCLIENTE ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA)');
    Add(' AND (CODIGO = :CODIGO)');
  end;

  with sqlConsultar do
  begin
    Add('SELECT * FROM ALBARANESCLIENTE ');
    Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA)');
    Add(' AND (CODIGO = :CODIGO)');
  end;
end;

function TdmTablaAlbaranesCliente.InsertarContador: boolean;
begin
  Result := GestorContadores.InsertarContador(contAlbaranesCliente);
end;

function TdmTablaAlbaranesCliente.ValidarCodigo(Codigo: String): Boolean;
begin
  Result := GestorContadores.validarCodigo(contAlbaranesCliente, Codigo);
end;

function TdmTablaAlbaranesCliente.DecrementarCodigo: boolean;
begin
  Result := GestorContadores.decrementarValor(contAlbaranesCliente);
end;

function TdmTablaAlbaranesCliente.EsUltima(Codigo: String): Boolean;
var
  oSQL : TIBSQL;
begin
  Result := False;
  if EsCadenaVacia(Codigo) then
    Exit;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select count(*) ');
    SQL.Add('from ALBARANESCLIENTE ');
    SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA ');
    SQL.Add('and CODIGO > :CODIGO ');
    try
      ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
      ParamByName('CODIGO').AsString := Codigo;
      Prepare;
      ExecQuery;
      if Fields[0].AsInteger = 0 then
        Result := True;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

{ TDatosAlbaranCliente }

procedure TDatosAlbaranCliente.AssignTo(Dest: TPersistent);
begin
  inherited;
//
end;

constructor TDatosAlbaranCliente.Create(CodigoAlbaran: String);
begin
  inherited Create;
  Codigo := CodigoAlbaran;
  ObtenerDatos;
end;

constructor TDatosAlbaranCliente.Create;
begin
  inherited Create;
end;

destructor TDatosAlbaranCliente.Destroy;
begin
  inherited;
end;

procedure TDatosAlbaranCliente.ObtenerDatos;
var
  oSQL : TIBSQL;
begin
  if EsCadenaVacia(Codigo) then
    Exit;

  oSQL := TIBSQL.Create(nil);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select * from ALBARANESCLIENTE ');
    SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
    SQL.Add(' and CODIGO = :CODIGO');
    try
      ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
      ParamByName('CODIGO').AsString := Codigo;
      Prepare;
      ExecQuery;

      if (RecordCount > 0) then
      begin
          FechaAlta := FieldByName('FECHAALTA').AsDateTime;
          Usuario := FieldByName('USUARIO').AsString;
          FechaAlbaran := FieldByName('FECHAALBARAN').AsDateTime;
          CodigoCliente := FieldByName('CODIGOCLIENTE').AsString;
          NifCif := FieldByName('NIFCIF').AsString;
          Nombre := FieldByName('NOMBRE').AsString;
          Calle := FieldByName('CALLE').AsString;
          Numero := FieldByName('NUMERO').AsString;
          Piso := FieldByName('PISO').AsString;
          CodigoPostal := FieldByName('CODIGOPOSTAL').AsString;
          Poblacion := FieldByName('POBLACION').AsString;
          Provincia := FieldByName('PROVINCIA').AsString;
          Telefono1 := FieldByName('TELEFONO1').AsString;
          Telefono2 := FieldByName('TELEFONO2').AsString;
          Movil1 := FieldByName('MOVIL1').AsString;
          Movil2 := FieldByName('MOVIL2').AsString;
          Fax := FieldByName('FAX').AsString;
          PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
          BaseImponible := FieldByName('BASEIMPONIBLE').AsFloat;
          Descuento := FieldByName('DESCUENTO').AsInteger;
          Iva := FieldByName('IVA').AsInteger;
          ImporteDescuento := FieldByName('IMPORTEDESCUENTO').AsFloat;
          ImporteIva := FieldByName('IMPORTEIVA').AsFloat;
          ImporteTotal := FieldByName('IMPORTETOTAL').AsFloat;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

{ TListaAlbaranesCliente }

procedure TListaAlbaranesCliente.AssignTo(Dest: TPersistent);
begin
  inherited;
//
end;

constructor TListaAlbaranesCliente.Create(oSQL: String);
begin
  inherited Create;
  FSQL := oSQL;
  ObtenerLista;
end;

constructor TListaAlbaranesCliente.Create;
begin
  inherited Create;
  FSQL := 'select CODIGO from ALBARANESCLIENTE';
  FSQL := FSQL + ' where CODIGOEMPRESA = :CODIGOEMPRESA';
  ObtenerLista;
end;

function TListaAlbaranesCliente.GetAlbaran(Index: Integer): TDatosAlbaranCliente;
begin
  Result := TDatosAlbaranCliente(FLista.Items[Index]);
end;

procedure TListaAlbaranesCliente.ObtenerLista;
var
  oSQL : TIBSQL;
  Albaran : TDatosAlbaranCliente;
begin
  oSQL := TIBSQL.Create(nil);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Text := FSQL;
    try
      ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
      Prepare;
      ExecQuery;
      while not EOF do begin
        Albaran := TDatosAlbaranCliente.Create(FieldByName('CODIGO').AsString);
        FLista.Add(Albaran);
        Next;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

end.
