unit uViewRecibosProvCompensados;

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, uDataModuleRecibosProveedor,
  uBizRecibosProveedor, uRecibosProveedorController, Grids, DBGrids, cxSpinEdit,
  dxLayoutControl, uDAInterfaces;
  
type
  IViewRecibosCompensados = interface
  ['{C683669A-002A-432D-BC20-3FA50BEA8721}']
    function GetReciboProveedor: IBizRecibosProveedor;
    procedure SetReciboProveedor(const Value: IBizRecibosProveedor);
    property ReciboProveedor: IBizRecibosProveedor read GetReciboProveedor write SetReciboProveedor;

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

  TfrViewRecibosProvCompensados = 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_PROVEEDOR: TcxGridDBColumn;
    cxGridViewNOMBRE_PROVEEDOR: 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;
    FReciboProveedor : IBizRecibosProveedor;
    FController : IRecibosProveedorController;

    procedure AnadirInterno; override;
    procedure EliminarInterno; override;

    function GetReciboProveedor: IBizRecibosProveedor;
    procedure SetReciboProveedor(const Value: IBizRecibosProveedor);

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

    function GetController : IRecibosProveedorController;
    procedure SetController (const Value : IRecibosProveedorController);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property ReciboProveedor: IBizRecibosProveedor read GetReciboProveedor write SetReciboProveedor;
    property Controller : IRecibosProveedorController read GetController write SetController;
  end;


implementation

{$R *.dfm}

uses
  uCustomView; 

{ TfrViewFacturasReciboProveedor }

procedure TfrViewRecibosProvCompensados.actAnadirUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (ReciboProveedor.SITUACION <> CTE_PAGADO);
end;

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

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

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

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

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

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

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

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

destructor TfrViewRecibosProvCompensados.Destroy;
begin
  inherited;
end;

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

function TfrViewRecibosProvCompensados.GetController: IRecibosProveedorController;
begin
  Result := FController;
end;

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

function TfrViewRecibosProvCompensados.GetReciboProveedor: IBizRecibosProveedor;
begin
  Result := FReciboProveedor;
end;

procedure TfrViewRecibosProvCompensados.SetController(
  const Value: IRecibosProveedorController);
begin
  FController := Value;
end;

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

procedure TfrViewRecibosProvCompensados.SetReciboProveedor(const Value: IBizRecibosProveedor);
begin
  FReciboProveedor := Value;
  FHayCambios := False;
  if Assigned(FReciboProveedor) then
    dsDetalles.DataTable := FReciboProveedor.RecibosCompensados.DataTable
  else
    dsDetalles.DataTable := NIL;

  actAnchoAutomatico.Execute;     
end;

end.
