unit uViewDetallesFacturaCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewDetallesBase, 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, StdActns, ExtActns,
  JvExStdCtrls, JvCombobox, JvColorCombo, TB2Item, TBX, TB2Dock, TB2Toolbar,
  uControllerDetallesArticulos, uViewDetallesArticulos, uBizFacturasCliente,
  uDAInterfaces;

type
  IViewDetallesFacturaCliente = interface(IViewDetallesArticulos)
  ['{0EEC7246-B2FD-4F93-AB15-AA12D6E67302}']
    function GetFactura: IBizFacturaCliente;
    procedure SetFactura(const Value: IBizFacturaCliente);
    property Factura: IBizFacturaCliente read GetFactura write SetFactura;
  end;

  TfrViewDetallesFacturaCliente = class(TfrViewDetallesArticulos)
  protected
    FFactura: IBizFacturaCliente;
    function GetFactura: IBizFacturaCliente;
    procedure SetFactura(const Value: IBizFacturaCliente);

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

    function EsTipoEditable(AItem: TcxCustomGridTableItem): Boolean; override;

  public
    property Factura: IBizFacturaCliente read GetFactura write SetFactura;
  end;

implementation
{$R *.dfm}

uses uCalculosUtils, uControllerDetallesBase, uDetallesFacturaClienteController;

{ TfrViewDetallesFacturaCliente }

function TfrViewDetallesFacturaCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin
	if (Factura.TIPO = CTE_TIPO_ABONO) then  
     Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID, -1)  
  else  
     Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID);  
end;

procedure TfrViewDetallesFacturaCliente.AnadirArticulosInterno;
begin
	if (Factura.TIPO = CTE_TIPO_ABONO) then  
    (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, true, -1)  
  else  
    (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente);  
end;

function TfrViewDetallesFacturaCliente.EsTipoEditable(AItem: TcxCustomGridTableItem): Boolean;
var
  IndiceCol : Integer;
begin
  Result := True;

  if (AItem.Index in [cxGridViewDESCUENTO.Index]) then
  begin
    IndiceCol := cxGridView.GetColumnByFieldName(CAMPO_TIPO).Index;
    if (AItem.GridView.Items[IndiceCol].EditValue <> TIPO_DETALLE_DESCUENTO)
    and (AItem.GridView.Items[IndiceCol].EditValue <> TIPO_DETALLE_CONCEPTO)  then
       Result := False
  end
  else
    Result := inherited EsTipoEditable(AItem);
end;

function TfrViewDetallesFacturaCliente.GetFactura: IBizFacturaCliente;
begin
  Result := FFactura;
end;

procedure TfrViewDetallesFacturaCliente.RellenarArticulosInterno;  
begin  
  if (Factura.TIPO = CTE_TIPO_ABONO) then  
    (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, False, -1)  
  else  
    (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, False);  
end;  

procedure TfrViewDetallesFacturaCliente.SetFactura(const Value: IBizFacturaCliente);
begin
  FFactura := Value;
end;

end.
