unit uViewRecibosRemesaProveedor;

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,
  uBizRemesasProveedor, uRemesasProveedorController, uDAInterfaces;
   
type
  IViewRecibosRemesaProveedor = interface
  ['{033DF6AF-C694-4C15-A48E-C7BA42DFF9FE}']
    function GetRemesaProveedor: IBizRemesaProveedor;
    procedure SetRemesaProveedor(const Value: IBizRemesaProveedor);
    property RemesaProveedor: IBizRemesaProveedor read GetRemesaProveedor write SetRemesaProveedor;

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

  TfrViewRecibosRemesaProveedor = class(TfrViewDetallesGenerico, IViewRecibosRemesaProveedor)
    cxGridViewIMPORTE: TcxGridDBColumn;
    cxGridViewOTROS_GASTOS: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    procedure CustomViewShow(Sender: TObject);
  protected
    FHayCambios : Boolean;
    FRemesa : IBizRemesaProveedor;
    FController : IRemesasProveedorController;
    FListaRecibosIniciales: TStringList;

    procedure AnadirInterno; override;
    procedure EliminarInterno; override;

    function GetRemesaProveedor: IBizRemesaProveedor;
    procedure SetRemesaProveedor(const Value: IBizRemesaProveedor);

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

    function GetController : IRemesasProveedorController;
    procedure SetController (const Value : IRemesasProveedorController);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property RemesaProveedor: IBizRemesaProveedor read GetRemesaProveedor write SetRemesaProveedor;
    property Controller : IRemesasProveedorController read GetController write SetController;
  end;


implementation

{$R *.dfm}

uses
  uBizRecibosProveedor, uCustomView;

{ TfrViewRecibosRemesaProveedor }

procedure TfrViewRecibosRemesaProveedor.AnadirInterno;
begin
  //inherited;  // No hacer el comportamiento normal
  if FController.ElegirRecibosProveedor(RemesaProveedor, FListaRecibosIniciales) then
  begin
    Modified := True;
  end;
end;

constructor TfrViewRecibosRemesaProveedor.Create(AOwner: TComponent);
begin
  inherited;
  FHayCambios := False;
  FListaRecibosIniciales := TStringList.Create;  
end;

procedure TfrViewRecibosRemesaProveedor.CustomViewShow(Sender: TObject);
begin
  inherited;

  FRemesa.Recibos.DataTable.First;
  while not FRemesa.Recibos.DataTable.eof do
  begin
    FListaRecibosIniciales.Add(IntToStr(FRemesa.Recibos.ID));
    FRemesa.Recibos.DataTable.next;
  end;
  FRemesa.Recibos.DataTable.First;
end;

destructor TfrViewRecibosRemesaProveedor.Destroy;
begin
  FListaRecibosIniciales.Free;
  inherited;
end;

procedure TfrViewRecibosRemesaProveedor.EliminarInterno;
begin
  //inherited;  // No hacer el comportamiento normal
  FController.EliminarReciboProveedor(RemesaProveedor);
  Modified := True;
end;

function TfrViewRecibosRemesaProveedor.GetController: IRemesasProveedorController;
begin
  Result := FController;
end;

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

function TfrViewRecibosRemesaProveedor.GetRemesaProveedor: IBizRemesaProveedor;
begin
  Result := FRemesa;
end;

procedure TfrViewRecibosRemesaProveedor.SetController(
  const Value: IRemesasProveedorController);
begin
  FController := Value;
end;

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

procedure TfrViewRecibosRemesaProveedor.SetRemesaProveedor(
  const Value: IBizRemesaProveedor);
begin
  FRemesa := Value;
  FHayCambios := False;
  if Assigned(FRemesa) then
    dsDetalles.DataTable := FRemesa.Recibos.DataTable
  else
    dsDetalles.DataTable := NIL; 
end;

end.
