unit uViewFacturasCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewGrid, uViewPreview, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl,
  dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider,
  dxPSFillPatterns, dxPSEdgePatterns, cxImageComboBox, cxTextEdit, ImgList,
  PngImageList, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  dxPSCore, dxPScxCommon, dxPScxGridLnk, ActnList, uDADataTable,
  cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid,
  cxImage, Grids, DBGrids, uBizFacturasCliente, cxGridCustomPopupMenu,
  cxGridPopupMenu, cxCalendar, cxCurrencyEdit;

type
  IViewFacturasCliente = interface(IViewGrid)
  ['{927A005F-5D71-4C37-B9E7-10292F9D467C}']
    function GetFacturas: IBizFacturaCliente;
    procedure SetFacturas(const Value: IBizFacturaCliente);
    property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas;
  end;

  TfrViewFacturasCliente = class(TfrViewGrid, IViewFacturasCliente)
    PngImageList: TPngImageList;
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewICONO: TcxGridDBColumn;
    cxGridViewFECHA_FACTURA: TcxGridDBColumn;
    cxGridViewVENCIMIENTO: TcxGridDBColumn;
    cxGridViewSITUACION: TcxGridDBColumn;
    cxGridViewBASE_IMPONIBLE: TcxGridDBColumn;
    cxGridViewIMPORTE_DESCUENTO: TcxGridDBColumn;
    cxGridViewDESCUENTO: TcxGridDBColumn;
    cxGridViewIMPORTE_IVA: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    cxGridViewIVA: TcxGridDBColumn;
    cxGridViewNIF_CIF: TcxGridDBColumn;
    cxGridViewCALLE: TcxGridDBColumn;
    cxGridViewPROVINCIA: TcxGridDBColumn;
    cxGridViewCODIGO_POSTAL: TcxGridDBColumn;
    cxGridViewPOBLACION: TcxGridDBColumn;
    cxGridViewFECHA_VENCIMIENTO: TcxGridDBColumn;
    cxStylePagada: TcxStyle;
    cxGridPendientes: TcxGridLevel;
    cxGridPagadas: TcxGridLevel;
    cxStyleAbono: TcxStyle;
    procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
      ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
      out AStyle: TcxStyle);
    procedure cxGridActiveTabChanged(Sender: TcxCustomGrid;
      ALevel: TcxGridLevel);
  protected
    FNivelFiltrado : TcxFilterCriteriaItemList;
    FFacturas: IBizFacturaCliente;
    function GetFacturas: IBizFacturaCliente;
    procedure SetFacturas(const Value: IBizFacturaCliente);
    procedure FilterChanged(Sender : TObject); override;
  public
    property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas;
  end;


implementation

uses
  uDataModuleFacturasCliente, DateUtils;

{$R *.dfm}

{ TfrViewFacturasCliente }

procedure TfrViewFacturasCliente.cxGridActiveTabChanged(Sender: TcxCustomGrid;
  ALevel: TcxGridLevel);
begin
  inherited;
  FreeAndNil(FNivelFiltrado);
  FilterChanged(Self);
end;

procedure TfrViewFacturasCliente.cxGridViewStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
var
  IndiceCol: Integer;
  ASituacion: string;
begin
  inherited;

  if Assigned(ARecord) then
  begin
    IndiceCol := cxGridViewSITUACION.Index;
    ASituacion := VarToStr(ARecord.DisplayTexts[IndiceCol]);
    if ASituacion = SITUACION_PAGADO then
      AStyle := cxStylePagada;

    IndiceCol := cxGridViewIMPORTE_TOTAL.Index;
    if (Pos('-', ARecord.DisplayTexts[IndiceCol]) > 0) then
      AStyle := cxStyleAbono;

  end;
end;

procedure TfrViewFacturasCliente.FilterChanged(Sender: TObject);
var
  AItemList: TcxFilterCriteriaItemList;
  AItemList2: TcxFilterCriteriaItemList;
begin
  inherited;

  cxGridView.DataController.Filter.BeginUpdate;

  AItemList := cxGridView.DataController.Filter.Root;
  AItemList2 := AItemList.AddItemList(fboAnd);
  FNivelFiltrado := AItemList2;

  case cxGrid.ActiveLevel.Index of
    1   : AItemList2.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PENDIENTE, SITUACION_PENDIENTE);
    2   : AItemList2.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PAGADO, SITUACION_PAGADO);
  end;
  AItemList := AItemList2;

  if cxGridView.DataController.Filter.IsEmpty
  then cxGridView.DataController.Filter.Active := False
  else cxGridView.DataController.Filter.Active := True;

  cxGridView.DataController.Filter.EndUpdate;
  cxGrid.ActiveLevel.GridView := cxGridView;

end;

function TfrViewFacturasCliente.GetFacturas: IBizFacturaCliente;
begin
  Result := FFacturas;
end;

procedure TfrViewFacturasCliente.SetFacturas(const Value: IBizFacturaCliente);
begin
  FFacturas := Value;
  if Assigned(FFacturas) then
    dsDataSource.DataTable := FFacturas.DataTable;
end;

end.
