unit uViewListaSubCuentas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, ExtCtrls, StdCtrls, DB, uDADataTable, cxGraphics,
  dxLayoutControl, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,
  cxControls, cxCheckBox, uSubCuentasController;

type
  IViewListaSubcuentas = interface(IViewBase)
  ['{5266EE90-D715-462A-9720-FF0D4078A496}']
    function GetTipoSubCuenta: TEnumTipoSubCuenta;
    procedure SetTipoSubCuenta(const Value: TEnumTipoSubCuenta);
    property TipoSubCuenta: TEnumTipoSubCuenta read GetTipoSubCuenta write SetTipoSubCuenta;
  end;

  TfrViewListaSubcuentas = class(TfrViewBase, IViewListaSubcuentas)
    cbSubCuentas: TcxComboBox;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item1: TdxLayoutItem;
    dxLayoutControl1Item2: TdxLayoutItem;
    eContabilizar: TcxCheckBox;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure CustomViewShow(Sender: TObject);

    procedure cbCajaBancoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    procedure eContabilizarPropertiesEditValueChanged(Sender: TObject);

  private
    FTipoSubCuenta: TEnumTipoSubCuenta;
    FIdSubCuenta : Integer;
    FListaSubCuentas : TStringList;
    function getIDCajaBanco: Integer;
    function GetTipoSubCuenta: TEnumTipoSubCuenta;
    procedure SetTipoSubCuenta(const Value: TEnumTipoSubCuenta);
  public
    property TipoSubCuenta: TEnumTipoSubCuenta read GetTipoSubCuenta write SetTipoSubCuenta;
    property IdSubCuenta: Integer read getIDCajaBanco;
    procedure ElegirSubCuenta(const AIdSubCuenta : Integer);
    procedure refrescar;
  end;


implementation
{$R *.dfm}

uses
  uFactuGES_App;

procedure TfrViewListaSubcuentas.cbCajaBancoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
  inherited;
  FIdSubCuenta := StrToInt(FListaSubCuentas.Values[DisplayValue]);
end;


procedure TfrViewListaSubcuentas.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FTipoSubCuenta := tTodas;
  FListaSubCuentas := Nil;
end;

procedure TfrViewListaSubcuentas.CustomViewDestroy(Sender: TObject);
begin
  inherited;
  cbSubCuentas.Properties.OnValidate := nil;
  eContabilizar.Properties.OnEditValueChanged := nil;
  FreeAndNIL(FListaSubCuentas);
end;

procedure TfrViewListaSubcuentas.CustomViewShow(Sender: TObject);
begin
  inherited;
  if Assigned(AppFactuGES.EjercicioActivo) then
  begin
    cbSubCuentas.Enabled := True;
    eContabilizar.Enabled := True;
    cbSubCuentas.Properties.OnValidate := cbCajaBancoPropertiesValidate;
    eContabilizar.Properties.OnEditValueChanged := eContabilizarPropertiesEditValueChanged;
  end
  else
  begin
    cbSubCuentas.Enabled := False;
    eContabilizar.Enabled := False;
    cbSubCuentas.Properties.OnValidate := Nil;
    eContabilizar.Properties.OnEditValueChanged := Nil;
  end;
end;

procedure TfrViewListaSubcuentas.eContabilizarPropertiesEditValueChanged(Sender: TObject);
begin
  inherited;
  refrescar;
end;

procedure TfrViewListaSubcuentas.ElegirSubCuenta(const AIdSubCuenta: Integer);
var
  i : integer;
begin
  //Si no hay ejercicio activo se desactivará la funcionalidad de contabilidad
  if Assigned(AppFactuGES.EjercicioActivo) then
     for i := 0 to FListaSubCuentas.Count-1 do
     begin
       if FListaSubCuentas.ValueFromIndex[i] = IntToStr(AIdSubCuenta) then
       begin
         cbSubCuentas.Text := FListaSubCuentas.Names[i];
         Break;
       end;
     end;
end;

function TfrViewListaSubcuentas.getIDCajaBanco: Integer;
begin
  Result := FIdSubCuenta;
end;

function TfrViewListaSubcuentas.GetTipoSubCuenta: TEnumTipoSubCuenta;
begin
  Result := FTipoSubCuenta; 
end;

procedure TfrViewListaSubcuentas.refrescar;
begin
  if not eContabilizar.Checked then
  begin
    cbSubCuentas.ItemIndex := 0;
    FIdSubCuenta := StrToInt(FListaSubCuentas.Values[cbSubCuentas.Text]); //Refrescamos el valor
    cbSubCuentas.Enabled := True;
  end
  else
  begin
    cbSubCuentas.ItemIndex := -1;
    cbSubCuentas.Enabled := False;
  end;
end;

procedure TfrViewListaSubcuentas.SetTipoSubCuenta(Const Value: TEnumTipoSubCuenta);
var
  i: Integer;
begin
  FTipoSubCuenta := Value;

  //Si no hay ejercicio activo se desactivará la funcionalidad de contabilidad
  if Assigned(AppFactuGES.EjercicioActivo) then
  begin
    with TSubCuentasController.create do
    begin

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

    //Ponemos la primera por defecto
    cbSubCuentas.ItemIndex := 0;
    FIdSubCuenta := StrToInt(FListaSubCuentas.Values[cbSubCuentas.Text]); //Refrescamos el valor
  end;
end;

end.
