unit uEditorElegirDireccionEntrega;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, Mask, DBCtrls, DB, uDADataTable,
  cxControls, cxContainer, cxEdit, cxTextEdit, cxDBEdit,
  uIEditorElegirDireccionEntrega, uCustomView, uBizContactos,
  uViewBase, uViewBarraSeleccion, JvExControls, JvComponent,
  DBCGrids, uBizDireccionesContacto, uDAInterfaces, ActnList,
  uDireccionesContactoController;

type
  TfEditorElegirDireccionEntrega = class(TForm, IEditorElegirDireccionEntrega)
    dsDirecciones: TDADataSource;
    frViewBarraSeleccion1: TfrViewBarraSeleccion;
    lblTitle: TLabel;
    lblComments: TLabel;
    DBCtrlGrid1: TDBCtrlGrid;
    eCalle: TDBText;
    ePoblacion: TDBText;
    eTelefono: TDBText;
    eProvincia: TDBText;
    ePersonaContacto: TDBText;
    eNombre: TDBText;
    eCodigoPostal: TDBText;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    rdxDestino1: TRadioButton;
    RadioButton1: TRadioButton;
    ActionList1: TActionList;
    actDirSocial: TAction;
    actOtro: TAction;
    dsContacto: TDADataSource;
    pnlDirSocial: TPanel;
    DBText1: TDBText;
    Label3: TLabel;
    DBText2: TDBText;
    Label5: TLabel;
    DBText3: TDBText;
    DBText4: TDBText;
    DBText5: TDBText;
    DBText7: TDBText;
    Label6: TLabel;
    DBText6: TDBText;
    procedure frViewBarraSeleccion1actSeleccionarExecute(Sender: TObject);
    procedure frViewBarraSeleccion1actCancelarExecute(Sender: TObject);
    procedure DBCtrlGrid1DblClick(Sender: TObject);
    procedure ComponenteDblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure actDirSocialExecute(Sender: TObject);
    procedure actOtroExecute(Sender: TObject);
    procedure actOtroUpdate(Sender: TObject);
  private
    procedure ColorearTextoDirSocial(AColor : TColor);
    procedure ColorearTextoDirOtra(AColor : TColor);    
  protected
    FDirecciones: IBizDireccionesContacto;
    FContacto : IBizContacto;
    FDireccionesController : IDireccionesContactoController;
    function GetContacto: IBizContacto;
    procedure SetContacto(const Value: IBizContacto);

    procedure SetMensaje (const AValue: String);
    function GetMensaje: String;

    function GetDireccionSeleccionada: IBizDireccionesContacto;

    procedure RefrescarEstado;
  published
  public
    property Mensaje : String read GetMensaje write SetMensaje;
    property Contacto : IBizContacto read GetContacto write SetContacto;
    property DireccionSeleccionada: IBizDireccionesContacto read GetDireccionSeleccionada;
  end;

implementation
{$R *.dfm}

uses
  uStringsUtils, Variants, uDialogUtils;

{ TfEditorDireccionEntrega }

procedure TfEditorElegirDireccionEntrega.DBCtrlGrid1DblClick(Sender: TObject);
begin
  frViewBarraSeleccion1.actSeleccionar.Execute;
end;

procedure TfEditorElegirDireccionEntrega.FormCreate(Sender: TObject);
begin
  FDireccionesController := TDireccionesContactoController.Create;
end;

procedure TfEditorElegirDireccionEntrega.FormDestroy(Sender: TObject);
begin
  FDireccionesController := NIL;
end;

procedure TfEditorElegirDireccionEntrega.FormShow(Sender: TObject);
begin
  if Assigned(FContacto) then
  begin
    if Supports(FContacto, IBizCliente) then
    begin
      Caption := 'Elegir una dirección de cliente';
  		lblTitle.Caption := 'Seleccione una dirección de cliente';
    end;
    if Supports(FContacto, IBizProveedor) then
    begin
      Caption := 'Elegir una dirección de proveedor';
      lblTitle.Caption := 'Seleccione una dirección de proveedor';
    end;
  end;

  actDirSocial.Checked := True;
  RefrescarEstado;
end;

procedure TfEditorElegirDireccionEntrega.actDirSocialExecute(Sender: TObject);
begin
  actDirSocial.Checked := True;
  RefrescarEstado;
end;

procedure TfEditorElegirDireccionEntrega.actOtroExecute(Sender: TObject);
begin
  actOtro.Checked := True;
  RefrescarEstado;
end;

procedure TfEditorElegirDireccionEntrega.actOtroUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := (FDirecciones.RecordCount > 0)
end;

procedure TfEditorElegirDireccionEntrega.ComponenteDblClick(Sender: TObject);
begin
  DBCtrlGrid1DblClick(Sender);
end;

procedure TfEditorElegirDireccionEntrega.frViewBarraSeleccion1actCancelarExecute(
  Sender: TObject);
begin
  ModalResult := mrCancel;
end;

procedure TfEditorElegirDireccionEntrega.frViewBarraSeleccion1actSeleccionarExecute(
  Sender: TObject);
begin
  ModalResult := mrOk;
end;

function TfEditorElegirDireccionEntrega.GetContacto: IBizContacto;
begin
  Result := FContacto;
end;

function TfEditorElegirDireccionEntrega.GetDireccionSeleccionada: IBizDireccionesContacto;
begin
  Result := FDireccionesController.Nuevo;
  if actOtro.Checked then
  begin
    with Result do
    begin
      ID := FDirecciones.ID;
      NOMBRE := FDirecciones.NOMBRE;
      CALLE := FDirecciones.CALLE;
      POBLACION := FDirecciones.POBLACION;
      CODIGO_POSTAL := FDirecciones.CODIGO_POSTAL;
      PROVINCIA := FDirecciones.PROVINCIA;
      TELEFONO := FDirecciones.TELEFONO;
      FAX := FDirecciones.FAX;
      MOVIL := FDirecciones.MOVIL;
      EMAIL := FDirecciones.EMAIL;
      PERSONA_CONTACTO := FDirecciones.PERSONA_CONTACTO;
    end;
  end
  else begin
    with Result do
    begin
      DataTable.FieldByName('ID').AsVariant := Null;
      NOMBRE := FContacto.NOMBRE;
      CALLE := FContacto.CALLE;
      POBLACION := FContacto.POBLACION;
      CODIGO_POSTAL := FContacto.CODIGO_POSTAL;
      PROVINCIA := FContacto.PROVINCIA;
      TELEFONO := FContacto.TELEFONO_1;
      FAX := FContacto.FAX;
      MOVIL := FContacto.MOVIL_1;
      EMAIL := FContacto.EMAIL_1;
      PERSONA_CONTACTO := FContacto.PERSONA_CONTACTO;
    end;
  end;
end;

function TfEditorElegirDireccionEntrega.GetMensaje: String;
begin
  Result := lblComments.Caption;
end;

procedure TfEditorElegirDireccionEntrega.RefrescarEstado;
begin
  if (actOtro.Checked) then
  begin
    DBCtrlGrid1.Enabled := True;
    DBCtrlGrid1.Color := clWindow;
    pnlDirSocial.Enabled := False;
    pnlDirSocial.Color := clBtnFace;

    ColorearTextoDirOtra(clWindowText);
    ColorearTextoDirSocial(clGray);
  end;

  if (actDirSocial.Checked) then
  begin
    DBCtrlGrid1.Enabled := False;
    DBCtrlGrid1.Color := clBtnFace;
    pnlDirSocial.Enabled := True;
    pnlDirSocial.Color := clWindow;

    ColorearTextoDirSocial(clWindowText);
    ColorearTextoDirOtra(clGray);
  end;
end;

procedure TfEditorElegirDireccionEntrega.ColorearTextoDirOtra(AColor: TColor);
begin
  eNombre.Font.Color := AColor;
  eCalle.Font.Color := AColor;
  ePoblacion.Font.Color := AColor;
  eProvincia.Font.Color := AColor;
  eTelefono.Font.Color := AColor;
  ePersonaContacto.Font.Color := AColor;
  eCodigoPostal.Font.Color := AColor;
end;

procedure TfEditorElegirDireccionEntrega.ColorearTextoDirSocial(AColor: TColor);
begin
  DBText1.Font.Color := AColor;
  DBText2.Font.Color := AColor;
  DBText3.Font.Color := AColor;
  DBText4.Font.Color := AColor;
  DBText5.Font.Color := AColor;
  DBText6.Font.Color := AColor;
  DBText7.Font.Color := AColor;
end;

procedure TfEditorElegirDireccionEntrega.SetContacto(const Value: IBizContacto);
begin
  FContacto := Value;
  if Assigned(FContacto) then
  begin
    FDirecciones := FContacto.Direcciones;
    dsContacto.DataTable := FContacto.DataTable;
    dsDirecciones.DataTable := FDirecciones.DataTable;
  end
  else begin
    FDirecciones := NIL;
    dsDirecciones.DataTable := NIL;
    dsContacto.DataTable := NIL;
  end;
end;

procedure TfEditorElegirDireccionEntrega.SetMensaje(const AValue: String);
begin
  if not EsCadenaVacia(AValue) then
  	lblComments.Caption := AValue
  else
    lblComments.Caption := ' ';
end;

end.
