unit uViewSubCuentaContacto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, ExtCtrls, StdCtrls, Buttons, DB, uDADataTable,
  DBCtrls, Grids, DBGrids, uBizContactos, Mask, ComCtrls, uCustomView,
  JvComponent, JvFormAutoSize, cxControls, cxContainer, cxEdit, cxTextEdit,
  cxDBEdit, dxLayoutControl, uDAInterfaces, cxGraphics, cxDropDownEdit,
  cxImageComboBox, cxMaskEdit, cxCalendar, ImgList, PngImageList, ActnList,
  cxCurrencyEdit, uSubCuentasController, cxCheckBox;

type
  IViewSubCuenta = interface(IViewBase)
  ['{F01E0772-4D72-41DD-AFEF-4BA6548A1FC6}']
    function GetContacto: IBizContacto;
    procedure SetContacto(const Value: IBizContacto);
    property Contacto: IBizContacto read GetContacto write SetContacto;
  end;

  TfrViewSubCuentaContacto = class(TfrViewBase, IViewSubCuenta)
    DADataSource: TDADataSource;
    layoutApunteGroup_Root: TdxLayoutGroup;
    layoutApunte: TdxLayoutControl;
    layoutApunteGroup1: TdxLayoutGroup;
    layoutApunteItem2: TdxLayoutItem;
    eRefSubCuenta: TcxDBTextEdit;
    layoutApunteItem4: TdxLayoutItem;
    BitBtn3: TBitBtn;
    actLista: TActionList;
    actElegirSubCuenta: TAction;
    layoutApunteItem5: TdxLayoutItem;
    eSubCuenta: TcxDBTextEdit;
    layoutApunteGroup3: TdxLayoutGroup;
    actVerSubcuenta: TAction;
    actAnadirSubcuenta: TAction;
    layoutApunteItem1: TdxLayoutItem;
    BitBtn1: TBitBtn;
    layoutApunteItem3: TdxLayoutItem;
    BitBtn2: TBitBtn;
    layoutApunteItem6: TdxLayoutItem;
    cbIgnorarContabilidad: TcxDBCheckBox;
    layoutApunteGroup2: TdxLayoutGroup;
    SmallImages: TPngImageList;
    layoutApunteItem7: TdxLayoutItem;
    rdTipoSubcuenta: TDBRadioGroup;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure actElegirSubCuentaExecute(Sender: TObject);
    procedure actAnadirSubcuentaExecute(Sender: TObject);
    procedure actVerSubcuentaExecute(Sender: TObject);
    procedure cbIgnorarContabilidadPropertiesChange(Sender: TObject);
    procedure actElegirSubCuentaUpdate(Sender: TObject);
    procedure actAnadirSubcuentaUpdate(Sender: TObject);
    procedure actVerSubcuentaUpdate(Sender: TObject);
    procedure CustomViewShow(Sender: TObject);
  protected
    FController : ISubcuentasController;
    FContacto: IBizContacto;
    function GetContacto: IBizContacto;
    procedure SetContacto(const Value: IBizContacto);

  public
    property Contacto: IBizContacto read GetContacto write SetContacto;
  end;

implementation
{$R *.dfm}

uses uFactuGes_App;

{ TfrViewSubCuenta }

{
******************************* TfrViewSubCuenta ********************************
}

procedure TfrViewSubCuentaContacto.actAnadirSubcuentaExecute(Sender: TObject);
begin
  inherited;
  if Supports(FContacto, IBizCliente) then
     FController.AnadirSubCuentaContacto((Contacto as IBizCliente).SubCuentas, CTE_CUENTASCLIENTE)
  else if Supports(FContacto, IBizProveedor) then
     FController.AnadirSubCuentaContacto((Contacto as IBizProveedor).SubCuentas, CTE_CUENTASPROVEEDOR);
end;

procedure TfrViewSubCuentaContacto.actAnadirSubcuentaUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (not (cbIgnorarContabilidad.Checked))
                              and (DADataSource.DataTable.IsEmpty);
end;

procedure TfrViewSubCuentaContacto.actElegirSubCuentaExecute(Sender: TObject);
begin
  inherited;
  if Supports(FContacto, IBizCliente) then
     FController.ElegirSubCuentaContacto((Contacto as IBizCliente).SubCuentas, CTE_CUENTASCLIENTE)
  else if Supports(FContacto, IBizProveedor) then
     FController.ElegirSubCuentaContacto((Contacto as IBizProveedor).SubCuentas, CTE_CUENTASPROVEEDOR);
end;

procedure TfrViewSubCuentaContacto.actElegirSubCuentaUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (not (cbIgnorarContabilidad.Checked))
                                 and (DADataSource.DataTable.IsEmpty);
end;

procedure TfrViewSubCuentaContacto.actVerSubcuentaExecute(Sender: TObject);
begin
  inherited;
  if Supports(FContacto, IBizCliente) then
     FController.VerSubCuentaContacto((Contacto as IBizCliente).SubCuentas)
  else if Supports(FContacto, IBizProveedor) then
     FController.VerSubCuentaContacto((Contacto as IBizProveedor).SubCuentas);
end;

procedure TfrViewSubCuentaContacto.actVerSubcuentaUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (not eRefSubCuenta.DataBinding.Field.IsNull)
                                and (not cbIgnorarContabilidad.Checked);
end;

procedure TfrViewSubCuentaContacto.cbIgnorarContabilidadPropertiesChange(Sender: TObject);
begin
  inherited;
  if cbIgnorarContabilidad.Checked then
  begin
    if Supports(FContacto, IBizCliente) then
       FController.EliminarSubCuentaContacto((Contacto as IBizCliente).SubCuentas)
    else if Supports(FContacto, IBizProveedor) then
       FController.EliminarSubCuentaContacto((Contacto as IBizProveedor).SubCuentas);
  end
  else
    //Rellenar automaticamente la cuenta según la tienda a la que pertenezca
end;

{
function TfrViewApunte.GetController: IApuntesController;
begin
  Result := FController;
end;
}

procedure TfrViewSubCuentaContacto.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FController := TSubcuentasController.Create;
end;

procedure TfrViewSubCuentaContacto.CustomViewDestroy(Sender: TObject);
begin
  FController := Nil;
  inherited;
end;

procedure TfrViewSubCuentaContacto.CustomViewShow(Sender: TObject);
begin
  inherited;
  //Solo se activará la vista de contabilidad si existe un ejercicio activo
  if Assigned(AppFactuGES.EjercicioActivo) then
  begin
    layoutApunte.Enabled := True;
    actLista.State := asNormal;
    cbIgnorarContabilidad.Enabled := True;
    BitBtn1.Enabled := True;
    BitBtn2.Enabled := True;
    BitBtn3.Enabled := True;
    rdTipoSubcuenta.Enabled := True;
  end
  else
  begin
    layoutApunte.Enabled := False;
    actLista.State := asSuspended;
    cbIgnorarContabilidad.Enabled := False;
    BitBtn1.Enabled := False;
    BitBtn2.Enabled := False;
    BitBtn3.Enabled := False;
    rdTipoSubcuenta.Enabled := False;    
  end;
end;

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

procedure TfrViewSubCuentaContacto.SetContacto(const Value: IBizContacto);
begin
  FContacto := Value;
  if Assigned(FContacto) then
  begin
    if Supports(FContacto, IBizCliente) then
       DADataSource.DataTable := (FContacto as IBizCliente).SubCuentas.DataTable
    else if Supports(FContacto, IBizProveedor) then
       DADataSource.DataTable := (FContacto as IBizProveedor).SubCuentas.DataTable;
  end
  else
    DADataSource.DataTable := NIL;
end;

end.

