{
===============================================================================
  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 Empresa;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RdxBotones, StdCtrls, RdxMemo, RdxComboBox, RdxCampos, ExtCtrls,
  RdxTitulos, ComCtrls, RdxCheckBox, Grids, DBGrids, RdxPaneles,
  RdxBarras, Db, RdxFrame, RdxDBFrame, RdxFrameEmpresas, RXDBCtrl,
  RdxPageControl, IB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
  cxGridCardView, cxGridDBCardView, RxMemDS, Configuracion, cxMemo,
  cxDBEdit, cxContainer, cxTextEdit, cxMaskEdit, cxButtonEdit, AdvPanel,
  cxImage, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox,
  IBCustomDataSet, cxCalendar, TablaTrimestres, cxSpinEdit,
  TablaLibros, RdxEmpresaActiva, TablaEmpresas;

type
  TfrEmpresa = class(TRdxFrameEmpresas)
    pnlCuerpo: TPanel;
    brDoble: TRdxBarraInferior;
    bGuardar: TRdxBoton;
    bCancelar: TRdxBoton;
    brSimple: TRdxBarraInferior;
    bSalir: TRdxBoton;
    pnlTitulo: TRdxPanelTituloOperacion;
    dsEmpresas: TDataSource;
    pnlDatos: TAdvPanel;
    eNIFCIF: TLabel;
    eNombre: TLabel;
    eCorreo: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    NIF: TcxDBTextEdit;
    Nombre: TcxDBTextEdit;
    Correo: TcxDBTextEdit;
    Web: TcxDBTextEdit;
    NombreComercial: TcxDBTextEdit;
    dsLibros: TDataSource;
    dsTrimestres: TDataSource;
    RdxPagesControl1: TRdxPagesControl;
    pagDirecciones: TTabSheet;
    pagValores: TTabSheet;
    pagLogo: TTabSheet;
    bExaminar: TRdxBoton;
    Logotipo: TcxDBImage;
    eTrimestre: TLabel;
    cbxTrimestres: TcxComboBox;
    Label3: TLabel;
    cbxLibros: TcxComboBox;
    Label5: TLabel;
    IvaDefecto: TcxDBSpinEdit;
    Label4: TLabel;
    validezdefecto: TcxDBSpinEdit;
    Label7: TLabel;
    Label6: TLabel;
    Ano: TcxSpinEdit;
    GroupBox1: TGroupBox;
    eDireccion: TLabel;
    Calle1: TcxTextEdit;
    eProvincia: TLabel;
    Provincia1: TcxTextEdit;
    eNumero: TLabel;
    Numero1: TcxTextEdit;
    eCodigoPostal: TLabel;
    CodigoPostal1: TcxTextEdit;
    ePoblacion: TLabel;
    Poblacion1: TcxTextEdit;
    eTelefono: TLabel;
    Telefono1: TcxTextEdit;
    eFax: TLabel;
    Fax1: TcxTextEdit;
    GroupBox2: TGroupBox;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Calle2: TcxTextEdit;
    Provincia2: TcxTextEdit;
    Numero2: TcxTextEdit;
    CodigoPostal2: TcxTextEdit;
    Poblacion2: TcxTextEdit;
    Telefono2: TcxTextEdit;
    Fax2: TcxTextEdit;
    Label15: TLabel;
    IntervaloPagosCli: TcxDBSpinEdit;
    Label16: TLabel;
    procedure bAceptarClick(Sender: TObject);
    procedure bCancelarClick(Sender: TObject);
    procedure bSalirClick(Sender: TObject);

    procedure bExaminarClick(Sender: TObject);
    procedure GridBotonPoblacionClick(Sender: TObject; AButtonIndex: Integer);
    procedure GridBotonProvinciaClick(Sender: TObject; AButtonIndex: Integer);

  private
    FListaTrimestres: TListaTrimestres;
    FListaTiposLibro: TListaLibros;

    FCodigoProvincia : Variant;
    FCodigoPoblacion : Variant;
    FListaDirecciones : TListaDireccionesEmpresa;
    procedure ProvinciaSetText(Sender: TField; const Text: String);
    function crearElementosAsociados: boolean;
    procedure AsignarValoresDefecto;
    procedure GuardarDirecciones;
    procedure BorrarDirecciones;
    procedure CargarDirecciones;
    procedure LimpiarDirecciones;
    function EsVaciaDir1 : Boolean;
    function EsVaciaDir2 : Boolean;
  protected
    procedure ActivarModoAnadir; override;
    procedure ActivarModoModificar; override;
    procedure ActivarModoConsultar; override;
    procedure ActivarModoEliminar; override;
    function AnadirDatos : Boolean; override;
    function ModificarDatos : Boolean; override;
    function EliminarDatos : Boolean; override;
    function CancelarAnadir : Boolean; override;
    function CancelarModificar : Boolean; override;
    function CancelarEliminar : Boolean; override;
    function ComprobarDatos : Boolean; override;
    procedure VerModal; override;
    procedure SetCodigoProvincia (Value : Variant); virtual;
    procedure SetCodigoPoblacion (Value : Variant); virtual;
    procedure FreeContenido; override;
    procedure BuscarEmpresa; override;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
  public
    property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia;
    property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion;
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaEmpresas;
    property CodigoEmpresa;
  end;

var
  frEmpresa: TfrEmpresa;

implementation
{$R *.DFM}

uses
  RdxFrameVendedores, Mensajes, Provincias, Entidades, Poblaciones, Variants,
  Vendedores, BaseDatos, RdxFrameProvincias, RdxFramePoblaciones, TablaProvincias,
  StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, TablaVendedores,
  Literales, Constantes, Framework;

constructor TfrEmpresa.Create (AOwner : TComponent);
var
  i : integer;
begin
  inherited Create(AOwner);
  FCodigoProvincia := NULL;
  FCodigoPoblacion := NULL;
  FListaDirecciones := NIL;
  Entidad := entEmpresas;
  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;

  TablaEmpresas := TIBDataSet.Create(Self);
  dsEmpresas.DataSet := TablaEmpresas;
  with TablaEmpresas do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaEmpresas.sqlConsultar);
    InsertSQL.Assign(dmTablaEmpresas.sqlInsertar);
    ModifySQL.Assign(dmTablaEmpresas.sqlModificar);
    DeleteSQL.Assign(dmTablaEmpresas.sqlEliminar);
    RefreshSQL.Assign(dmTablaEmpresas.sqlConsultar);
  end;

  FListaTrimestres := TListaTrimestres.Create(tlcTriDefecto);
  cbxTrimestres.ItemIndex := FListaTrimestres.cargarLista(cbxTrimestres.Properties.Items);
  FListaTiposLibro := TListaLibros.Create(tltDefecto);
  cbxLibros.ItemIndex := FListaTiposLibro.cargarLista(cbxLibros);

  bCancelar.Cancel := True;
  bSalir.Cancel := True;
end;

procedure TfrEmpresa.bSalirClick(Sender: TObject);
begin
  try
    Rollback;
    CloseFrame;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrEmpresa.bAceptarClick(Sender: TObject);
begin
  if (RealizarOperacion) then
    CloseFrame;
end;

function TfrEmpresa.AnadirDatos : boolean;
begin
  Result := False;
  try
    GuardarDirecciones;
    TablaEmpresas.FieldByName('CODIGOTRIMESTRE').AsString := dmTablaTrimestres.darCodigoTrimestre(Ano.Value, cbxTrimestres.ItemIndex);
    TablaEmpresas.FieldByName('LIBRODEFECTO').AsString := FListaTiposLibro.Items[cbxLibros.ItemIndex].Codigo;
    TablaEmpresas.Post;
    //Creamos los trimestres y libros para la nueva empresa
    if (crearElementosAsociados) then
    begin
       CodigoEmpresa := TablaEmpresas.FieldByName('CODIGO').AsString;
       Commit;
       TablaEmpresas.Close;
       Result := True;
    end
    else
    begin
       VerMensajeFmt(msgCliCodCliRepetido, [CodigoEmpresa]);
       TablaEmpresas.Edit;
    end;

  except
    on E : EIBError do begin
      if E.IBErrorCode = isc_unique_key_violation then
      begin
        VerMensajeFmt(msgCliCodCliRepetido, [CodigoEmpresa]);
        TablaEmpresas.Edit;
      end
      else
        TratarExcepcion(E);
    end;
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrEmpresa.ModificarDatos : boolean;
begin
  Result := False;
  try

    TablaEmpresas.FieldByName('CODIGOTRIMESTRE').AsString := dmTablaTrimestres.darCodigoTrimestre(Ano.Value, cbxTrimestres.ItemIndex);
    TablaEmpresas.FieldByName('LIBRODEFECTO').AsString := FListaTiposLibro.Items[cbxLibros.ItemIndex].Codigo;
    TablaEmpresas.Post;
    GuardarDirecciones;

    //Creamos los trimestres y libros para la nueva empresa
    if (crearElementosAsociados) then
    begin
      Commit;
      TablaEmpresas.Close;

      //Refrescamos la empresa activa en el caso de se la empresa modificada
      if (EmpresaActiva.Codigo = CodigoEmpresa) then
        EmpresaActiva.refrescar;

      Result := True;
    end
    else
    begin
       VerMensajeFmt(msgCliCodCliRepetido, [CodigoEmpresa]);
       TablaEmpresas.Edit;
    end;

  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrEmpresa.EliminarDatos : boolean;
begin
  Result := False;

  if (VerMensajePregunta(msgEmpBorrarEmp) <> IDYES) then
    Exit;

  try
    TablaEmpresas.Delete;
    Commit;
    TablaEmpresas.Close;
    Result := True;
  except
    on E : EIBError do
    begin
      case E.IBErrorCode of
        isc_lock_conflict : VerMensajeFmt(msgCliCliBloqueado, [CodigoEmpresa]);
        else
          TratarExcepcion(E);
      end;
    end;
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrEmpresa.ActivarModoAnadir;
var
  CodNuevo : Variant;

begin
  dsEmpresas.AutoEdit := True;

  cbxTrimestres.Properties.ReadOnly := False;
  Ano.Properties.ReadOnly := False;
  cbxLibros.Properties.ReadOnly := False;

  Ano.Text := dmBaseDatos.DarAno;

  try
    CodNuevo := dmTablaEmpresas.DarNuevoCodigo;

    with TablaEmpresas do
    begin
      Close;
      Prepare;
      Open;
      //FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
      Insert;
      FieldByName('CODIGO').AsString := CodNuevo;
      FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
      FieldByName('USUARIO').AsString := dmBaseDatos.Usuario;
      FieldByName('IVADEFECTO').AsString := CTE_IVA_DEFECTO;
      FieldByName('VALIDEZDEFECTO').AsInteger := CTE_VAL_DEFECTO;
      FieldByName('INTERVALOPAGOSCLI').AsInteger := CTE_INT_DEFECTO;      

      //Asignamos trimestre actual
      cbxTrimestres.Text := dmTablaTrimestres.DarDescripcionTrimestreActual;
    end;
    LimpiarDirecciones;

//    Visible := True;
//    NombreComercial.SetFocus;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrEmpresa.ActivarModoModificar;
begin
  dsEmpresas.AutoEdit := True;

  cbxTrimestres.Properties.ReadOnly := False;
  Ano.Properties.ReadOnly := False;
  cbxLibros.Properties.ReadOnly := False;

  try
    with TablaEmpresas do
    begin
      Prepare;
      Open;
      //FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
      if RecordCount = 0 then
      begin
        VerMensajeFmt(msgCliNoExisteCli, [CodigoEmpresa]);
        CancelarModificar;
        CloseFrame;
        Exit;
      end;
      // Bloquear el Empresa
      Edit;
      Post;
      Edit;

      //Asignamos los valores por defecto
      AsignarValoresDefecto;
    end;
//    Visible := True;
//    NIF.SetFocus;
  except
    on E : EIBError do
    begin
      case E.IBErrorCode of
        isc_lock_conflict : begin
                              VerMensajeFmt(msgCliCliBloqueado, [CodigoEmpresa]);
                              CancelarModificar;
                              CloseFrame;
                              Exit;
                            end
        else
          TratarExcepcion(E);
      end;
    end;
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrEmpresa.ActivarModoConsultar;
begin
  dsEmpresas.AutoEdit := False;

  //Asignamos los valores por defecto
  AsignarValoresDefecto;

  cbxTrimestres.Properties.ReadOnly := True;
  Ano.Properties.ReadOnly := True;
  cbxLibros.Properties.ReadOnly := True;

  try
    with TablaEmpresas do
    begin
      Prepare;
      Open;
      if RecordCount = 0 then
      begin
        VerMensajeFmt(msgCliNoExisteCli, [CodigoEmpresa]);
        CancelarModificar;
        CloseFrame;
        Exit;
      end;
    end;

//    Visible := True;
//    NombreComercial.SetFocus;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrEmpresa.ActivarModoEliminar;
begin
  dsEmpresas.AutoEdit := False;

  //Asignamos los valores por defecto
  AsignarValoresDefecto;

  cbxTrimestres.Properties.ReadOnly := True;
  Ano.Properties.ReadOnly := True;
  cbxLibros.Properties.ReadOnly := True;

  try
    with TablaEmpresas do
    begin
      Prepare;
      Open;
      if RecordCount = 0 then
      begin
        VerMensajeFmt(msgCliNoExisteCli, [CodigoEmpresa]);
        CancelarModificar;
        CloseFrame;
        Exit;
      end;
    end;

//    Visible := True;
//    NombreComercial.SetFocus;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrEmpresa.BuscarEmpresa;
begin
  if Transaccion = NIL then
    exit;
  try
    TablaEmpresas.Close;

    LimpiarDirecciones;
    // Buscar la fila a tratar si es necesario
    if not esCadenaVacia(CodigoEmpresa) then
    begin
        TablaEmpresas.Params.ByName('CODIGO').AsString := CodigoEmpresa;

        if Assigned(FListaDirecciones) then
          FListaDirecciones.Free;
        FListaDirecciones := TListaDireccionesEmpresa.Create(CodigoEmpresa);
        CargarDirecciones;
    end;
    TablaEmpresas.Prepare;
    TablaEmpresas.Open;

  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrEmpresa.CancelarAnadir: Boolean;
begin
  Result := False;
  try
    RollBack;

    TablaEmpresas.Close;
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrEmpresa.CancelarEliminar: Boolean;
begin
  Result := False;
  try
    RollBack;
    TablaEmpresas.Close;
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrEmpresa.CancelarModificar: Boolean;
begin
  Result := False;
  try
    RollBack;
    TablaEmpresas.Close;
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

destructor TfrEmpresa.Destroy;
begin
  if Assigned(FListaDirecciones) then
    FListaDirecciones.Free;
    
  TablaEmpresas.Close;
  TablaEmpresas.UnPrepare;
  TablaEmpresas.Free;

  FListaTrimestres.Free;
  FListaTrimestres := Nil;
  FListaTiposLibro.Free;
  FListaTiposLibro := Nil;

  inherited;
end;

procedure TfrEmpresa.FreeContenido;
begin
  if (ContenidoModal is TRdxFrameEmpresas) then begin
    CodigoEmpresa := (ContenidoModal as TRdxFrameEmpresas).CodigoEmpresa;
    ActivarModo;
  end;
  if (ContenidoModal is TRdxFrameProvincias) then
    CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia;
  if (ContenidoModal is TRdxFramePoblaciones) then begin
    CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia;
    CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion;
  end;
  inherited FreeContenido;
end;

procedure TfrEmpresa.SetCodigoPoblacion(Value: Variant);
begin
  if (not EsCadenaVacia(Value)) then
  begin
    FCodigoPoblacion := Value;
//    Poblacion.DataBinding.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion);
  end;
end;

procedure TfrEmpresa.SetCodigoProvincia(Value: Variant);
begin
  if (not EsCadenaVacia(Value)) then
  begin
    FCodigoProvincia := Value;
//    Provincia.DataBinding.Field.AsString := dmTablaProvincias.DarNombreProvincia(FCodigoProvincia);
  end;
end;

procedure TfrEmpresa.VerModal;
begin
  if (ContenidoModal is TRdxFramePoblaciones) then
    (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia;
  inherited;
end;

procedure TfrEmpresa.bCancelarClick(Sender: TObject);
begin
  if (TratarCambios = IDOK) then
    CloseFrame;
end;

procedure TfrEmpresa.GridBotonPoblacionClick(Sender: TObject; AButtonIndex: Integer);
begin
{  if (esCadenaVacia(CodigoProvincia)) then begin
    VerMensaje(msgSinProvincia);
    Provincia.setFocus;
    Exit;
  end;
  CodigoProvincia := CodigoProvincia;
  CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]);
  WidthModal := 280;
  HeightModal := 460;
  ContenidoModal := TfrPoblaciones.Create(Self);}
end;

function TfrEmpresa.ComprobarDatos: Boolean;
begin
  Result := False;

  if Length(Trim(NombreComercial.Text)) = 0 then
  begin
    VerMensajeFmt(msgEmpFaltaAlgo,[msgEmpNombreComercial]);
    NombreComercial.SetFocus;
    exit;
  end;

  Result := True;
end;

procedure TfrEmpresa.GridBotonProvinciaClick(Sender: TObject; AButtonIndex: Integer);
begin
  CaptionModal := msgListaProvincias;
  WidthModal := 280;
  HeightModal := 460;
  ContenidoModal := TfrProvincias.Create(Self);
end;

procedure TfrEmpresa.bExaminarClick(Sender: TObject);
begin
  Logotipo.LoadFromFile;
end;

procedure TfrEmpresa.ProvinciaSetText(Sender: TField;
  const Text: String);
begin
  FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Text);
  Sender.AsString := Text;
end;

procedure TfrEmpresa.CambiarModo(ModoAnterior, Modo: TRdxModo);
begin
  inherited;

end;

function TfrEmpresa.crearElementosAsociados: boolean;
begin
Result := (dmTablaLibros.crearLibros(TablaEmpresas.FieldByName('CODIGO').AsVariant)
       AND dmTablaTrimestres.crearTrimestres(TablaEmpresas.FieldByName('CODIGO').AsVariant, Ano.Value));
end;

procedure TfrEmpresa.AsignarValoresDefecto;
var
  i : Integer;
begin
  //Asignamos el trimestre por defecto
  cbxTrimestres.Text := dmTablaTrimestres.darDescripcionTrimestre(TablaEmpresas.FieldByName('CODIGOTRIMESTRE').AsString);
  Ano.Text :=  FormatDateTime('yyyy', dmTablaTrimestres.darAnoTrimestre(CodigoEmpresa, TablaEmpresas.FieldByName('CODIGOTRIMESTRE').AsString));

  //Asignamos libro por defecto
  i := 0;
  while ((FListaTiposLibro.Items[i].Codigo <> TablaEmpresas.FieldByName('LIBRODEFECTO').AsString)
    and (i < FListaTiposLibro.Count - 1)) do inc (i);
  if (FListaTiposLibro.Items[i].Codigo = TablaEmpresas.FieldByName('LIBRODEFECTO').AsString) then
     cbxLibros.ItemIndex := i;
end;

procedure TfrEmpresa.CargarDirecciones;
begin
  with FListaDirecciones do
  begin
    if Count > 0 then
    begin
      Calle1.Text := Items[0].Calle;
      Numero1.Text := Items[0].Numero;
      Provincia1.Text := Items[0].Provincia;
      Poblacion1.Text := Items[0].Poblacion;
      CodigoPostal1.Text := Items[0].CodigoPostal;
      Telefono1.Text := Items[0].Telefono;
      Fax1.Text := Items[0].Fax;
    end;

    if Count > 1 then
    begin
      Calle2.Text := Items[1].Calle;
      Numero2.Text := Items[1].Numero;
      Provincia2.Text := Items[1].Provincia;
      Poblacion2.Text := Items[1].Poblacion;
      CodigoPostal2.Text := Items[1].CodigoPostal;
      Telefono2.Text := Items[1].Telefono;
      Fax2.Text := Items[1].Fax;
    end;
  end;
end;

procedure TfrEmpresa.GuardarDirecciones;
var
  Dir1,
  Dir2 : TDatosDireccionEmpresa;
  NumDirecciones : Integer;
begin
  if FListaDirecciones = Nil then
     exit;
     
  Dir1 := TDatosDireccionEmpresa.Create;
  Dir2 := TDatosDireccionEmpresa.Create;
  try

    while (FListaDirecciones.Count > 0) do
    begin
      FListaDirecciones.Items[0].Eliminar;
      FListaDirecciones.Delete(0);
    end;

    NumDirecciones := 0;
    if not EsVaciaDir1 then
    begin
      NumDirecciones := NumDirecciones + 1;
      Dir1.CodigoEmpresa := FCodigoEmpresa;
      Dir1.CodigoDireccion := NumDirecciones - 1;
      Dir1.Calle := Calle1.Text;
      Dir1.Numero := Numero1.Text;
      Dir1.Provincia := Provincia1.Text;
      Dir1.Poblacion := Poblacion1.Text;
      Dir1.CodigoPostal := CodigoPostal1.Text;
      Dir1.Telefono := Telefono1.Text;
      Dir1.Fax := Fax1.Text;
      Dir1.SalvarDatos;
    end;

    if not EsVaciaDir2 then
    begin
      NumDirecciones := NumDirecciones + 1;
      Dir2.CodigoEmpresa := FCodigoEmpresa;
      Dir2.CodigoDireccion := NumDirecciones - 1;
      Dir2.Calle := Calle2.Text;
      Dir2.Numero := Numero2.Text;
      Dir2.Provincia := Provincia2.Text;
      Dir2.Poblacion := Poblacion2.Text;
      Dir2.CodigoPostal := CodigoPostal2.Text;
      Dir2.Telefono := Telefono2.Text;
      Dir2.Fax := Fax2.Text;
      Dir2.SalvarDatos;      
    end;

  finally
    Dir1.Free;
    Dir2.Free;
  end;

{  with FListaDirecciones do
  begin

    if not EsVaciaDir1 then
    begin

  end;}
end;

procedure TfrEmpresa.LimpiarDirecciones;
begin
  Calle1.Text := '';
  Numero1.Text := '';
  Provincia1.Text := '';
  Poblacion1.Text := '';
  CodigoPostal1.Text := '';
  Telefono1.Text := '';
  Fax1.Text := '';

  Calle2.Text := '';
  Numero2.Text := '';
  Provincia2.Text := '';
  Poblacion2.Text := '';
  CodigoPostal2.Text := '';
  Telefono2.Text := '';
  Fax2.Text := '';
end;

function TfrEmpresa.EsVaciaDir1: Boolean;
begin
  if EsCadenaVacia(Calle1.Text) and EsCadenaVacia(Numero1.Text) and
      EsCadenaVacia(Provincia1.Text) and EsCadenaVacia(Poblacion1.Text) and
      EsCadenaVacia(CodigoPostal1.Text) and EsCadenaVacia(Telefono1.Text) and
      EsCadenaVacia(Fax1.Text) then
    Result := True
  else
    Result := False;
end;

function TfrEmpresa.EsVaciaDir2: Boolean;
begin
  if EsCadenaVacia(Calle2.Text) and EsCadenaVacia(Numero2.Text) and
      EsCadenaVacia(Provincia2.Text) and EsCadenaVacia(Poblacion2.Text) and
      EsCadenaVacia(CodigoPostal2.Text) and EsCadenaVacia(Telefono2.Text) and
      EsCadenaVacia(Fax2.Text) then
    Result := True
  else
    Result := False;
end;

procedure TfrEmpresa.BorrarDirecciones;
begin
  
end;

end.
