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, TBX, 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)
    actVariarPrecios: TAction;
    TBXItem18: TTBXItem;
    TBXSeparatorItem9: TTBXSeparatorItem;
    procedure actVariarPreciosExecute(Sender: TObject);
    procedure actVariarPreciosUpdate(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.actVariarPreciosExecute(Sender: TObject);
var
  AuxTop, AuxRow:Integer;
  APorcentaje: Variant;
  ATipoOperacion: Integer;

begin

  if (Controller as IDetallesPresupuestoClienteController).VariarPrecios(APorcentaje, ATipoOperacion) then
  begin
    ShowHourglassCursor;
    _FocusedView.BeginUpdate;
    try

      if Assigned(Controller) and Assigned(FPresupuesto.Detalles) then
      begin
        AuxTop := cxGridView.Controller.TopRowIndex;
        AuxRow := cxGridView.DataController.FocusedRowIndex;
        if ATipoOperacion = -1 then
           (Controller as IDetallesPresupuestoClienteController).AsignarDescuento(FPresupuesto.Detalles, darListaSeleccionados, APorcentaje)
        else if ATipoOperacion = 1 then
           (Controller as IDetallesPresupuestoClienteController).AplicarAumento(FPresupuesto.Detalles, darListaSeleccionados, APorcentaje);

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

procedure TfrViewDetallesPresupuestoCliente.actVariarPreciosUpdate(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.
