unit uEditorTiendaEmpresa;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, Mask, DBCtrls, DB, uDADataTable, PngSpeedButton,
  cxControls, cxContainer, cxEdit, cxTextEdit, cxHyperLinkEdit, cxDBEdit,
  uIEditorTiendaEmpresa, uTiendasEmpresaController, uBizEmpresasTiendas,
  cxCurrencyEdit, uDAInterfaces, cxGraphics, cxMaskEdit, cxDropDownEdit;

type
  TfEditorTiendaEmpresa = class(TForm, IEditorTiendaEmpresa)
    OKBtn: TButton;
    CancelBtn: TButton;
    Bevel1: TBevel;
    eDireccion: TDBEdit;
    cbPoblacion: TcxDBComboBox;
    cbProvincia: TcxDBComboBox;
    eCodigoPostal: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    dsTienda: TDADataSource;
    Label5: TLabel;
    eNombre: TDBEdit;
    Label6: TLabel;
    ePersonaContacto: TDBEdit;
    Label7: TLabel;
    eTelefono: TDBEdit;
    eMail: TcxDBHyperLinkEdit;
    PngSpeedButton3: TPngSpeedButton;
    Label8: TLabel;
    Label9: TLabel;
    eNotas: TDBMemo;
    Label11: TLabel;
    eMovil: TDBEdit;
    Label12: TLabel;
    eFax: TDBEdit;
    Bevel2: TBevel;
    eCodigoContable: TDBEdit;
    Label10: TLabel;
    procedure PngSpeedButton3Click(Sender: TObject);
    procedure eMailPropertiesEditValueChanged(Sender: TObject);
    procedure eMailPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure cbPoblacionPropertiesInitPopup(Sender: TObject);
    procedure cbProvinciaPropertiesInitPopup(Sender: TObject);
  private
    FProvincias : TStringList;
    FPoblaciones : TStringList;
    procedure CargarProvincias;
    procedure CargarPoblaciones;
  protected
    FController : ITiendasEmpresaController;
    FTienda: IBizEmpresaTienda;

    function GetController : ITiendasEmpresaController;
    procedure SetController (const Value : ITiendasEmpresaController);
    function GetTienda: IBizEmpresaTienda;
    procedure SetTienda(const Value: IBizEmpresaTienda);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Controller : ITiendasEmpresaController read GetController write SetController;
    property Tienda: IBizEmpresaTienda read GetTienda write SetTienda;
  end;

implementation

{$R *.dfm}
{$INCLUDE ..\..\..\FactuGES.inc}

uses
  Variants, uProvinciasPoblacionesController, uStringsUtils;


type
  THackcxDBHyperLinkEdit = class(TcxDBHyperLinkEdit);

{ TfEditorTiendaEmpresa }

procedure TfEditorTiendaEmpresa.CargarPoblaciones;
var 
  i : integer;
   AID : Integer;
begin
  AID := StrToInt(FProvincias.Values[cbProvincia.Text]);
  with TProvinciasPoblacionesController.Create do
  begin
    try
      FPoblaciones := DarListaPoblaciones(AID);
      with cbPoblacion.Properties.Items do
      begin
        BeginUpdate;
        try
          Clear;
          for i := 0 to FPoblaciones.Count - 1 do
            Add(FPoblaciones.Names[i]);
        finally
          EndUpdate;
        end;
      end;
    finally
      Free;
    end;
  end;
end;

procedure TfEditorTiendaEmpresa.CargarProvincias;
var
  i : integer;
begin
  with TProvinciasPoblacionesController.Create do
  begin
    try
      FProvincias := DarListaProvincias;

      with cbProvincia.Properties.Items do
      begin
        BeginUpdate;
        try
          Clear;
          for i := 0 to FProvincias.Count - 1 do
            Add(FProvincias.Names[i]);
        finally
          EndUpdate;
        end;
      end;
    finally
      Free;
    end;
  end;
end;

procedure TfEditorTiendaEmpresa.cbPoblacionPropertiesInitPopup(Sender: TObject);
begin
  ShowHourglassCursor;
  try
    FreeANDNIL(FPoblaciones);
    if not Assigned(FProvincias) then
      CargarProvincias;
    if not EsCadenaVacia(cbProvincia.Text) and (FProvincias.IndexOfName(cbProvincia.Text) <> -1) then
      CargarPoblaciones
  finally
    HideHourglassCursor;
  end;
end;

procedure TfEditorTiendaEmpresa.cbProvinciaPropertiesInitPopup(Sender: TObject);
begin
  ShowHourglassCursor; 
  try
    if not Assigned(FProvincias) then
      CargarProvincias;
  finally
    HideHourglassCursor;
  end;
end;

constructor TfEditorTiendaEmpresa.Create(AOwner: TComponent);
begin
  inherited;
  FController := NIL;
  FProvincias := NIL;
  FPoblaciones := NIL;
  
  {$IFDEF CONTABILIDAD}
    Bevel2.Visible := True;
    Label10.Visible := True;
    eCodigoContable.Visible := True;
  {$ELSE}
    Bevel2.Visible := False;
    Label10.Visible := False;
    eCodigoContable.Visible := False;
  {$ENDIF}
end;

destructor TfEditorTiendaEmpresa.Destroy;
begin
  if Assigned(FProvincias) then 
    FreeANDNIL(FProvincias);

  if Assigned(FPoblaciones) then
    FreeANDNIL(FPoblaciones);

  FController := NIL;
  inherited;
end;

procedure TfEditorTiendaEmpresa.eMailPropertiesEditValueChanged(Sender: TObject);
begin
  if not VarIsNull((Sender as TcxDBHyperLinkEdit).EditValue) then
     (Sender as TcxDBHyperLinkEdit).EditValue := StringReplace((Sender as TcxDBHyperLinkEdit).EditValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []);
end;

procedure TfEditorTiendaEmpresa.eMailPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
  if not VarIsNull(DisplayValue) then
     DisplayValue := StringReplace(DisplayValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []);
end;

function TfEditorTiendaEmpresa.GetController: ITiendasEmpresaController;
begin
  Result := FController;
end;

function TfEditorTiendaEmpresa.GetTienda: IBizEmpresaTienda;
begin
  Result := FTienda;
end;

procedure TfEditorTiendaEmpresa.PngSpeedButton3Click(Sender: TObject);
begin
  THackcxDBHyperLinkEdit(eMail).DoStart;
end;

procedure TfEditorTiendaEmpresa.SetController(const Value: ITiendasEmpresaController);
begin
  FController := Value;
end;

procedure TfEditorTiendaEmpresa.SetTienda(const Value: IBizEmpresaTienda);
begin
  FTienda := Value;
  if Assigned(FTienda) then
    dsTienda.DataTable := FTienda.DataTable
  else
    dsTienda.DataTable := NIL;
end;

end.
