unit uViewRecibosCliCompensados;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewDetallesGenerico, cxStyles, cxCustomData, cxGraphics, cxFilter,
  cxData, cxDataStorage, cxEdit, DB, cxDBData, ActnList, ImgList, PngImageList,
  uDADataTable, ComCtrls, ToolWin, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView,
  cxGrid, cxImageComboBox, cxCurrencyEdit, uDataModuleRecibosCliente,
  uBizRecibosCliente, uRecibosClienteController, Grids, DBGrids, cxSpinEdit,
  dxLayoutControl, uDAInterfaces;
  
type
  IViewRecibosCompensados = interface
  ['{C683669A-002A-432D-BC20-3FA50BEA8721}']
    function GetReciboCliente: IBizRecibosCliente;
    procedure SetReciboCliente(const Value: IBizRecibosCliente);
    property ReciboCliente: IBizRecibosCliente read GetReciboCliente write SetReciboCliente;

    function GetController : IRecibosClienteController;
    procedure SetController (const Value : IRecibosClienteController);
    property Controller : IRecibosClienteController read GetController write SetController;
  end;

  TfrViewRecibosCliCompensados = class(TfrViewDetallesGenerico, IViewRecibosCompensados)
    actExpandir: TAction;
    actContraer: TAction;
    ToolButton3: TToolButton;
    ToolButton8: TToolButton;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    cxGridViewID_RECIBO_COMPENSADO: TcxGridDBColumn;
    cxGridViewSITUACION: TcxGridDBColumn;
    cxGridViewFECHA_EMISION: TcxGridDBColumn;
    cxGridViewFECHA_VENCIMIENTO: TcxGridDBColumn;
    cxGridViewNIF_CIF_CLIENTE: TcxGridDBColumn;
    cxGridViewNOMBRE_CLIENTE: TcxGridDBColumn;
    cxGridViewIMPORTE: TcxGridDBColumn;
    cxGridViewOTROS_GASTOS: TcxGridDBColumn;
    cxGridViewRecId: TcxGridDBColumn;
    procedure actExpandirExecute(Sender: TObject);
    procedure actContraerExecute(Sender: TObject);
    procedure CustomViewShow(Sender: TObject);
    procedure actEliminarUpdate(Sender: TObject);
    procedure actExpandirUpdate(Sender: TObject);
    procedure actContraerUpdate(Sender: TObject);
    procedure actAnadirUpdate(Sender: TObject);
  protected
    FHayCambios : Boolean;
    FReciboCliente : IBizRecibosCliente;
    FController : IRecibosClienteController;

    procedure AnadirInterno; override;
    procedure EliminarInterno; override;

    function GetReciboCliente: IBizRecibosCliente;
    procedure SetReciboCliente(const Value: IBizRecibosCliente);

    function GetModified: Boolean; override;
    procedure SetModified(const Value: Boolean); override;

    function GetController : IRecibosClienteController;
    procedure SetController (const Value : IRecibosClienteController);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property ReciboCliente: IBizRecibosCliente read GetReciboCliente write SetReciboCliente;
    property Controller : IRecibosClienteController read GetController write SetController;
  end;


implementation

{$R *.dfm}

uses
  uCustomView; 

{ TfrViewFacturasReciboCliente }

procedure TfrViewRecibosCliCompensados.actAnadirUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (ReciboCliente.SITUACION <> CTE_COBRADO);
end;

procedure TfrViewRecibosCliCompensados.actContraerExecute(Sender: TObject);
begin
  inherited;
  cxGridView.ViewData.Collapse(True);
end;

procedure TfrViewRecibosCliCompensados.actContraerUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := HayDatos;
end;

procedure TfrViewRecibosCliCompensados.actEliminarUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := ((cxGridView.Controller.SelectedRowCount > 0)
                              and (cxGridView.Controller.SelectedRows[0].HasCells)
                              and (ReciboCliente.SITUACION <> CTE_COBRADO));
end;

procedure TfrViewRecibosCliCompensados.actExpandirExecute(Sender: TObject);
begin
  inherited;
  cxGridView.ViewData.Expand(True);
end;

procedure TfrViewRecibosCliCompensados.actExpandirUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := HayDatos;
end;

procedure TfrViewRecibosCliCompensados.AnadirInterno;
begin
  //inherited;  // No hacer el comportamiento normal
  if FController.ElegirRecibosCompensados(ReciboCliente) then
     Modified := True;
end;

constructor TfrViewRecibosCliCompensados.Create(AOwner: TComponent);
begin
  inherited;
  FHayCambios := False;
end;

procedure TfrViewRecibosCliCompensados.CustomViewShow(Sender: TObject);
begin
  inherited;
  cxGridView.OptionsSelection.MultiSelect := False;
end;

destructor TfrViewRecibosCliCompensados.Destroy;
begin
  inherited;
end;

procedure TfrViewRecibosCliCompensados.EliminarInterno;
begin
  if cxGridView.Controller.SelectedRowCount > 0 then
     if cxGridView.Controller.SelectedRows[0].HasCells then
//  ViewGrid._FocusedView.Controller.SelectedRecordCount
  FController.QuitarReciboCompensado(ReciboCliente);
  Modified := True;
end;

function TfrViewRecibosCliCompensados.GetController: IRecibosClienteController;
begin
  Result := FController;
end;

function TfrViewRecibosCliCompensados.GetModified: Boolean;
begin
  Result := FHayCambios or inherited GetModified;
end;

function TfrViewRecibosCliCompensados.GetReciboCliente: IBizRecibosCliente;
begin
  Result := FReciboCliente;
end;

procedure TfrViewRecibosCliCompensados.SetController(
  const Value: IRecibosClienteController);
begin
  FController := Value;
end;

procedure TfrViewRecibosCliCompensados.SetModified(const Value: Boolean);
begin
  FHayCambios := Value;
  inherited;
end;

procedure TfrViewRecibosCliCompensados.SetReciboCliente(const Value: IBizRecibosCliente);
begin
  FReciboCliente := Value;
  FHayCambios := False;
  if Assigned(FReciboCliente) then
    dsDetalles.DataTable := FReciboCliente.RecibosCompensados.DataTable
  else
    dsDetalles.DataTable := NIL;

  actAnchoAutomatico.Execute;     
end;

end.
