unit uViewDetallesPresupuestoCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewDetallesArticulos, cxStyles, cxCustomData, cxGraphics, cxFilter,
  cxData, cxDataStorage, cxEdit, DB, cxDBData, ImgList, PngImageList,
  uDADataTable, ActnList, ComCtrls, ToolWin, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  cxGrid, cxImageComboBox, cxTextEdit, cxMaskEdit, cxCheckBox, cxCurrencyEdit,
  Grids, DBGrids, StdCtrls, ExtCtrls, cxRichEdit, ExtActns, StdActns,
  JvExStdCtrls, JvCombobox, JvColorCombo, TB2Item, SpTBXItem, TB2Dock, TB2Toolbar,
  uControllerDetallesArticulos, uBizPresupuestosCliente, uDAInterfaces, Buttons,
  Mask, DBCtrls, cxButtonEdit, cxDropDownEdit, Menus, cxGridCustomPopupMenu,
  cxGridPopupMenu, cxDBLookupComboBox, cxCalc, cxEditRepositoryItems,
  uViewDetallesArticulosParaVenta;

type
  IViewDetallesPresupuestoCliente = interface(IViewDetallesArticulos)
  ['{3AF39FF4-291E-4E87-AF9A-93C240A744CD}']
    function GetPresupuesto: IBizPresupuestoCliente;
    procedure SetPresupuesto(const Value: IBizPresupuestoCliente);
    property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;
  end;

  TfrViewDetallesPresupuestoCliente = class(TfrViewDetallesArticulosParaVenta, IViewDetallesPresupuestoCliente)
    actAsignarDescuento: TAction;
    TBXItem18: TSpTBXItem;
    TBXSeparatorItem9: TSpTBXSeparatorItem;
    procedure actAsignarDescuentoExecute(Sender: TObject);
    procedure actAsignarDescuentoUpdate(Sender: TObject);
  protected
    FPresupuesto: IBizPresupuestoCliente;
    function GetPresupuesto: IBizPresupuestoCliente;
    procedure SetPresupuesto(const Value: IBizPresupuestoCliente);

    procedure AnadirArticulosInterno; override;
    procedure RellenarArticulosInterno; override;
    function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;

  public
    property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;
  end;

implementation
{$R *.dfm}

uses uControllerDetallesBase, uDetallesPresupuestoClienteController;

{ TfrViewDetallesPresupuestoProveedor }

procedure TfrViewDetallesPresupuestoCliente.actAsignarDescuentoExecute(Sender: TObject);
var
  AuxTop, AuxRow:Integer;
  ADescuento: Variant;

begin

  ADescuento := (Controller as IDetallesPresupuestoClienteController).PedirDescuento;

  ShowHourglassCursor;
  _FocusedView.BeginUpdate;
  try

    if Assigned(Controller) and Assigned(FPresupuesto.Detalles) then
    begin
      AuxTop := cxGridView.Controller.TopRowIndex;
      AuxRow := cxGridView.DataController.FocusedRowIndex;

      (Controller as IDetallesPresupuestoClienteController).AsignarDescuento(FPresupuesto.Detalles, darListaSeleccionados, ADescuento);

       _FocusedView.DataController.SelectRows(AuxRow,AuxRow);
       _FocusedView.Controller.TopRowIndex := AuxTop;
    end
  finally
    _FocusedView.EndUpdate;
    HideHourglassCursor;
  end;
end;

procedure TfrViewDetallesPresupuestoCliente.actAsignarDescuentoUpdate(Sender: TObject);
begin
  inherited;

  if not DADataSource.DataTable.IsEmpty then
    (Sender as TAction).Enabled := not (DADataSource.DataTable.State in dsEditModes)
    and (_FocusedView.DataController.GetSelectedCount > 0)
    and (FPresupuesto.Detalles.TIPO_DETALLE = TIPO_DETALLE_CONCEPTO)
  else
    (Sender as TAction).Enabled := False;
end;

function TfrViewDetallesPresupuestoCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin
  Result := (Controller as IDetallesPresupuestoClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Presupuesto.Cliente.ID);
end;

procedure TfrViewDetallesPresupuestoCliente.AnadirArticulosInterno;
begin
  (Controller as IDetallesPresupuestoClienteController).AnadirArticulos(Detalles, Presupuesto.Cliente);
end;

function TfrViewDetallesPresupuestoCliente.GetPresupuesto: IBizPresupuestoCliente;
begin
  Result := FPresupuesto;
end;

procedure TfrViewDetallesPresupuestoCliente.RellenarArticulosInterno;
begin
  (Controller as IDetallesPresupuestoClienteController).AnadirArticulos(Detalles, Presupuesto.Cliente, False);
end;

procedure TfrViewDetallesPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente);
begin
  FPresupuesto := Value;
end;

end.
