{
===============================================================================
  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: 03-11-2002
  Versión actual: 1.0.0
  Fecha versión actual: 03-11-2002
===============================================================================
  Modificaciones:

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

unit TablaSucursalesCliente;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
  //Particulares
  Contnrs, cxGridDBCardView, cxButtonEdit, cxEdit, 

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

type
////////////////////////////////////////////////////////////////////////////////
//TDatosSucursal
////////////////////////////////////////////////////////////////////////////////
  TDatosSucursal = class(TPersistent)
  public
    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;
    Correo : String;
    PersonaContacto : String;
  end;

  TListaSucursales = class(TPersistent)
  private
    FLista : TObjectList;
    FCodigoCliente : String;
    function GetCount : Integer;
    function GetSucursal(Index: Integer): TDatosSucursal;
  protected
    procedure ObtenerLista; virtual;
  public
    constructor Create(CodigoCliente : String);
    destructor Destroy; override;
    property Count : Integer read GetCount;
    property Sucursal[Index: Integer] : TDatosSucursal read GetSucursal;
  end;

////////////////////////////////////////////////////////////////////////////////
//TdmTablaSucursalesCliente
////////////////////////////////////////////////////////////////////////////////
  TdmTablaSucursalesCliente = class(TDataModule)
  private
    procedure IniciarSQL;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlEliminar : TStrings;
    sqlGrid : TStrings;
    function FormatearCodigo(Codigo : String) : String;
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    procedure InicializarGridSucursales (var vGrid: TcxGridDBCardView);
  end;

var
  dmTablaSucursalesCliente: TdmTablaSucursalesCliente;

implementation

{$R *.DFM}

constructor TdmTablaSucursalesCliente.Create (AOwner : TComponent);
begin
  inherited;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlGrid := TStringList.Create;
  IniciarSQL;
end;

destructor TdmTablaSucursalesCliente.Destroy;
begin
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;
  sqlGrid.Free;
  inherited;
end;

procedure TdmTablaSucursalesCliente.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('INSERT INTO SUCURSALESCLIENTE (');
    Add('CODIGOCLIENTE, CODIGO, TIPO, FECHAALTA, ');
    Add('NIFCIF, NOMBRE, CALLE, NUMERO, PISO, ');
    Add('CODIGOPOSTAL, POBLACION, PROVINCIA, ');
    Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, ');
    Add('FAX, CORREO, PERSONACONTACTO, USUARIO) ');
    Add('VALUES (:CODIGOCLIENTE, :CODIGO, :TIPO, ');
    Add(':FECHAALTA, :NIFCIF, :NOMBRE, :CALLE, ');
    Add(':NUMERO, :PISO, :CODIGOPOSTAL, ');
    Add(':POBLACION, :PROVINCIA, :TELEFONO1, ');
    Add(':TELEFONO2, :MOVIL1, :MOVIL2, ');
    Add(':FAX, :CORREO, :PERSONACONTACTO, :USUARIO)');
  end;

  with sqlModificar do
  begin
    Add('UPDATE SUCURSALESCLIENTE SET ');
    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('CORREO = :CORREO, ');
    Add('PERSONACONTACTO = :PERSONACONTACTO ');
    Add('WHERE (CODIGOCLIENTE = :CODIGOCLIENTE) AND ');
    Add('(CODIGO = :CODIGO)');
  end;

  with sqlEliminar do
  begin
    Add('delete from SUCURSALESCLIENTE ');
    Add('where CODIGO = :CODIGO and ');
    Add('CODIGOCLIENTE = :CODIGOCLIENTE');
  end;

  with sqlConsultar do
  begin
    Add('select CODIGOCLIENTE, CODIGO, TIPO, FECHAALTA, ');
    Add('NIFCIF, NOMBRE, CALLE, NUMERO, PISO, CODIGOPOSTAL, POBLACION, ');
    Add('PROVINCIA, TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, ');
    Add('PERSONACONTACTO, USUARIO');
    Add('from SUCURSALESCLIENTE ');
    Add('where CODIGO = :CODIGO and ');
    Add('CODIGOCLIENTE = :CODIGOCLIENTE');
  end;

  with sqlGrid do
  begin
    Add('select CODIGOCLIENTE, CODIGO, TIPO, FECHAALTA, ');
    Add('NIFCIF, NOMBRE, CALLE, NUMERO, PISO, CODIGOPOSTAL, POBLACION, ');
    Add('PROVINCIA, TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, ');
    Add('PERSONACONTACTO, USUARIO');
    Add('from SUCURSALESCLIENTE ');
    Add('where CODIGOCLIENTE = :CODIGOCLIENTE ');
    Add('order by CODIGO');
  end;
end;

function TdmTablaSucursalesCliente.FormatearCodigo(Codigo : String) : String;
begin
  Result := StrPadLeft(Codigo, 10, '0');
end;

procedure TdmTablaSucursalesCliente.InicializarGridSucursales (var vGrid: TcxGridDBCardView);
var
  Columna : TcxGridDBCardViewRow;
begin
  with vGrid do begin
    {Columna RDB$DB_KEY}
{    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'RDB$DB_KEY';
    Columna.Caption := 'RDB$DB_KEY';
    Columna.Visible := False;}
    {Columna CODIGO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CODIGO';
    Columna.Caption := 'Código';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.Visible := False;
    {Columna CODIGOCLIENTE}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CODIGOCLIENTE';
    Columna.Caption := 'Cód.Cliente';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.Visible := False;
    {Columna NIFCIF}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'NIFCIF';
    Columna.Caption := 'NIF/CIF';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna NOMBRE}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'NOMBRE';
    Columna.Caption := 'Nombre';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna CALLE}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CALLE';
    Columna.Caption := 'Calle';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna NUMERO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'NUMERO';
    Columna.Caption := 'Número';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna PISO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'PISO';
    Columna.Caption := 'Piso';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna CODIGOPOSTAL}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CODIGOPOSTAL';
    Columna.Caption := 'Cód. postal';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna PROVINCIA}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'PROVINCIA';
    Columna.Caption := 'Provincia';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.PropertiesClassName := 'TcxButtonEditProperties';
    with TcxButtonEditProperties(Columna.Properties) do
    begin
      Buttons[0].Kind := bkEllipsis;
    end;
    {Columna POBLACION}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'POBLACION';
    Columna.Caption := 'Población';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.PropertiesClassName := 'TcxButtonEditProperties';
    with TcxButtonEditProperties(Columna.Properties) do
    begin
      Buttons[0].Kind := bkEllipsis;
    end;
    {Columna TELEFONO1}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'TELEFONO1';
    Columna.Caption := 'Tlf. 1';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna TELEFONO2}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'TELEFONO2';
    Columna.Caption := 'Tlf. 2';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna MOVIL1}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'MOVIL1';
    Columna.Caption := 'Móvil 1';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna MOVIL2}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'MOVIL2';
    Columna.Caption := 'Móvil 2';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna FAX}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'FAX';
    Columna.Caption := 'Fax';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna CORREO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CORREO';
    Columna.Caption := 'Correo electrónico';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna PERSONACONTACTO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'PERSONACONTACTO';
    Columna.Caption := 'Pers. de contacto';
    Columna.CaptionAlignmentHorz := taRightJustify;
    {Columna USUARIO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'USUARIO';
    Columna.Caption := 'Usuario';
    Columna.Visible := False;
    Columna.CaptionAlignmentHorz := taRightJustify;
  end;
end;

{ TListaSucursales }

constructor TListaSucursales.Create(CodigoCliente: String);
begin
  FCodigoCliente := CodigoCliente;
  FLista := TObjectList.Create;
  ObtenerLista;
end;

destructor TListaSucursales.Destroy;
begin
  FLista.Free;
  FLista := NIL;
  inherited;
end;

function TListaSucursales.GetCount: Integer;
begin
  Result := FLista.Count;
end;

function TListaSucursales.GetSucursal(Index: Integer): TDatosSucursal;
begin
  Result := TDatosSucursal(FLista.Items[Index]);
end;

procedure TListaSucursales.ObtenerLista;
var
  oSQL : TIBSQL;
  Sucursal : TDatosSucursal;
begin
  oSQL := TIBSQL.Create(nil);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGOCLIENTE, CODIGO, TIPO, ');
    SQL.Add('FECHAALTA, USUARIO, NIFCIF, ');
    SQL.Add('NOMBRE, CALLE, NUMERO, ');
    SQL.Add('PISO, CODIGOPOSTAL, POBLACION, ');
    SQL.Add('PROVINCIA, TELEFONO1, TELEFONO2, ');
    SQL.Add('MOVIL1, MOVIL2, FAX, ');
    SQL.Add('CORREO, PERSONACONTACTO ');
    SQL.Add('from SUCURSALESCLIENTE ');
    SQL.Add('where CODIGOCLIENTE = :CODIGOCLIENTE and ');
    SQL.Add('TIPO = ''S'' ');
    SQL.Add('order by CODIGO');
    try
      ParamByName('CODIGOCLIENTE').AsString := FCodigoCliente;
      Prepare;
      ExecQuery;
      while not EOF do begin
        Sucursal := TDatosSucursal.Create;
        with Sucursal do
        begin
          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;
          Correo := FieldByName('CORREO').AsString;
          PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
        end;
        FLista.Add(Sucursal);
        Next;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

end.
