unit uViewAlmacen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, ExtCtrls, StdCtrls, Buttons, DB, uDADataTable,
  DBCtrls, Grids, DBGrids, uBizAlmacenes, Mask, ComCtrls, uCustomView,
  JvComponent, JvFormAutoSize, cxControls, cxContainer, cxEdit, cxTextEdit,
  cxDBEdit, dxLayoutControl, uDAInterfaces, cxGraphics, cxMaskEdit, cxDropDownEdit;

type
  IViewAlmacen = interface(IViewBase)
  ['{F44F8AEF-CB9C-44D5-93DA-53D6AB6A2D29}']
    function GetAlmacen: IBizAlmacen;
    procedure SetAlmacen(const Value: IBizAlmacen);
    property Almacen: IBizAlmacen read GetAlmacen write SetAlmacen;
  end;
  
  TfrViewAlmacen = class(TfrViewBase, IViewAlmacen)
    DADataSource: TDADataSource;
    ePersonaContacto: TcxDBTextEdit;
    eTlfTelefono: TcxDBTextEdit;
    eTlfMovil: TcxDBTextEdit;
    eFax: TcxDBTextEdit;
    dxLayoutControlAlmacenGroup_Root: TdxLayoutGroup;
    dxLayoutControlAlmacen: TdxLayoutControl;
    dxLayoutControlAlmacenGroup1: TdxLayoutGroup;
    dxLayoutControlAlmacenItem3: TdxLayoutItem;
    eNombre: TcxDBTextEdit;
    dxLayoutControlAlmacenItem4: TdxLayoutItem;
    dxLayoutControlAlmacenGroup2: TdxLayoutGroup;
    dxLayoutControlAlmacenItem1: TdxLayoutItem;
    dxLayoutControlAlmacenItem5: TdxLayoutItem;
    dxLayoutControlAlmacenItem6: TdxLayoutItem;
    dxLayoutControlAlmacenGroup3: TdxLayoutGroup;
    dxLayoutControlAlmacenGroup4: TdxLayoutGroup;
    dxLayoutControlAlmacenItem10: TdxLayoutItem;
    eCalle: TcxDBTextEdit;
    dxLayoutControlAlmacenItem2: TdxLayoutItem;
    cbPoblacion: TcxDBComboBox;
    dxLayoutControlAlmacenItem7: TdxLayoutItem;
    eCodigoPostal: TcxDBTextEdit;
    dxLayoutControlAlmacenItem9: TdxLayoutItem;
    cbProvincia: TcxDBComboBox;
    dxLayoutControlAlmacenGroup6: TdxLayoutGroup;
    procedure cbProvinciaPropertiesInitPopup(Sender: TObject);
    procedure cbPoblacionPropertiesInitPopup(Sender: TObject);
  protected
    FAlmacen: IBizAlmacen;
    FProvincias : TStringList;
    FPoblaciones : TStringList;
    procedure CargarProvincias;
    procedure CargarPoblaciones;
    function GetAlmacen: IBizAlmacen;
    procedure SetAlmacen(const Value: IBizAlmacen);
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy;
    property Almacen: IBizAlmacen read GetAlmacen write SetAlmacen;
  end;
  
implementation

uses
  uDataModuleAlmacenes, uProvinciasPoblacionesController, uStringsUtils;


{$R *.dfm}

{ TfrViewAlmacenes }

{
******************************* TfrViewAlmacenes ********************************
}

procedure TfrViewAlmacen.CargarPoblaciones;
var
  i : integer;
  AID : Integer;
begin
  AID := StrToInt(FProvincias.Values[cbProvincia.Text]);
  with TProvinciasPoblacionesController.Create do
    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;

procedure TfrViewAlmacen.CargarProvincias;
var
  i : integer;
begin
  with TProvinciasPoblacionesController.Create do
    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;

procedure TfrViewAlmacen.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 TfrViewAlmacen.cbProvinciaPropertiesInitPopup(Sender: TObject);
begin
  ShowHourglassCursor;
  try
    if not Assigned(FProvincias) then
      CargarProvincias;
  finally
    HideHourglassCursor;
  end;
end;

constructor TfrViewAlmacen.Create(AOwner: TComponent);
begin
  inherited;
  FProvincias := NIL;
  FPoblaciones := NIL;
end;

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

  if Assigned(FPoblaciones) then
    FreeANDNIL(FPoblaciones);
end;

function TfrViewAlmacen.GetAlmacen: IBizAlmacen;
begin
  Result := FAlmacen;
end;

procedure TfrViewAlmacen.SetAlmacen(const Value: IBizAlmacen);
begin
  FAlmacen := Value;
  if Assigned(FAlmacen) then
    DADataSource.DataTable := FAlmacen.DataTable
  else
    DADataSource.DataTable := NIL;
end;

end.

