unit uViewFacturasProveedor;

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, dxPScxGrid6Lnk, ActnList, uDADataTable,
  cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid,
  cxImage, Grids, DBGrids, uBizFacturasProveedor, cxGridCustomPopupMenu,
  cxGridPopupMenu, cxCalendar, cxCurrencyEdit, uViewFiltroBase, TB2Item, SpTBXItem,
  TB2Toolbar, SpTBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces;
   
type
  IViewFacturasProveedor = interface(IViewGrid)
  ['{F0015E71-D890-4266-B7F4-7BCB38AFA0DE}']
    function GetFacturas: IBizFacturaProveedor;
    procedure SetFacturas(const Value: IBizFacturaProveedor);
    property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas;
  end;

  TfrViewFacturasProveedor = class(TfrViewGrid, IViewFacturasProveedor)
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewFECHA_FACTURA: 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;
    cxStylePagada: TcxStyle;
    cxGridPendientes: TcxGridLevel;
    cxGridParcial: TcxGridLevel;
    cxStyleAbono: TcxStyle;
    cxGridPagadas: TcxGridLevel;
    cxGridViewREFERENCIA_COMISION: TcxGridDBColumn;
    cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn;
    cxStylePendientes: TcxStyle;
    cxStyleParciales: TcxStyle;
    actProveedor: TAction;
    actProvincia: TAction;
    TBXItem2: TSpTBXItem;
    TBXSeparatorItem1: TSpTBXSeparatorItem;
    TBXItem3: TSpTBXItem;
    TBXSeparatorItem2: TSpTBXSeparatorItem;
    cxGridViewTIPO: TcxGridDBColumn;
    cxGridViewFECHA_VENCIMIENTO: TcxGridDBColumn;
    procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
      ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
      out AStyle: TcxStyle);
    procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
    procedure actProveedorExecute(Sender: TObject);
    procedure actProveedorUpdate(Sender: TObject);
    procedure actProvinciaExecute(Sender: TObject);
    procedure actProvinciaUpdate(Sender: TObject);
    procedure cxGridViewDataControllerCompare(
      ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
      AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);

  private
    //Filtros relativos a la vista
    procedure AnadirFiltroSituaciones;
    procedure AnadirFiltroFechas;

  protected
    FFacturas: IBizFacturaProveedor;
    function GetFacturas: IBizFacturaProveedor;
    procedure SetFacturas(const Value: IBizFacturaProveedor);
  public
    procedure AnadirOtrosFiltros; override;
    property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas;
  end;


implementation

uses
  uDataModuleFacturasProveedor, DateUtils, uViewGridBase, uReferenciasUtils,
  cxVariants;

{$R *.dfm}

{ TfrViewFacturasProveedor }

procedure TfrViewFacturasProveedor.actProveedorExecute(Sender: TObject);
begin
  if (cxGridViewNOMBRE.GroupIndex < 0) then
  begin
    cxGridViewNOMBRE.GroupIndex := cxGridView.GroupedColumnCount;
    cxGridViewNOMBRE.Visible := False;
  end
  else
  begin
    cxGridViewNOMBRE.GroupIndex := -1;
    cxGridViewNOMBRE.Visible := True;
  end;
end;

procedure TfrViewFacturasProveedor.actProveedorUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewNOMBRE.GroupIndex < 0);
end;

procedure TfrViewFacturasProveedor.actProvinciaExecute(Sender: TObject);
begin
  if (cxGridViewPROVINCIA.GroupIndex < 0) then
  begin
    cxGridViewPROVINCIA.GroupIndex := cxGridView.GroupedColumnCount;
    cxGridViewPROVINCIA.Visible := False;
  end
  else
  begin
    cxGridViewPROVINCIA.GroupIndex := -1;
    cxGridViewPROVINCIA.Visible := True;
  end;
end;

procedure TfrViewFacturasProveedor.actProvinciaUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewPROVINCIA.GroupIndex < 0);
end;

procedure TfrViewFacturasProveedor.AnadirFiltroFechas;
var
  Columna: TcxGridDBColumn;
  Fecha1, Fecha2: Variant;
  FFiltro : TcxFilterCriteriaItemList;
begin
  Fecha1 := frViewFiltroBase1.edtFechaIniFiltro.EditValue;
  Fecha2 := frViewFiltroBase1.edtFechaFinFiltro.EditValue;

  if  not VarIsNull(Fecha1)
  and not VarIsNull(Fecha2) then
  begin
    cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare];
    FFiltro := AddFilterGrid(fboAnd);

    Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName('FECHA_FACTURA');
    FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2));
  end;
end;

procedure TfrViewFacturasProveedor.AnadirFiltroSituaciones;
var
  FFiltro : TcxFilterCriteriaItemList;
begin
  FFiltro := AddFilterGrid(fboAnd);

  case cxGrid.ActiveLevel.Index of
    1   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PENDIENTE, CTE_PENDIENTE);
    2   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PARCIAMENTE_PAGADA, CTE_PARCIAMENTE_PAGADA);
    3   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PAGADA, CTE_PAGADA);
  end;
end;

procedure TfrViewFacturasProveedor.AnadirOtrosFiltros;
begin
  inherited;

  AnadirFiltroSituaciones;
  AnadirFiltroFechas;

  //Finalmente activamos el filtro si tenemos algo
  if cxGridView.DataController.Filter.IsEmpty
  then cxGridView.DataController.Filter.Active := False
  else cxGridView.DataController.Filter.Active := True;
  cxGrid.ActiveLevel.GridView := cxGridView;
end;

procedure TfrViewFacturasProveedor.cxGridActiveTabChanged(Sender: TcxCustomGrid;
  ALevel: TcxGridLevel);
begin
  inherited;
  RefrescarFiltro;
end;

procedure TfrViewFacturasProveedor.cxGridViewDataControllerCompare(
  ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
  AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
begin
  inherited;
  if ((AItemIndex = cxGridViewREFERENCIA.Index) or
      (AItemIndex = cxGridViewREFERENCIA_COMISION.Index) or
      (AItemIndex = cxGridViewREFERENCIA_PROVEEDOR.Index)) and
     (VarType(V1) = VarType(V2)) and (VarType(V1) = varString) then
    Compare := CompararReferencias(V1, V2)
  else
    Compare := VarCompare(V1, V2);
end;

procedure TfrViewFacturasProveedor.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 := UPPERCASE(VarToStr(ARecord.DisplayTexts[IndiceCol]));
    if (ASituacion = CTE_PAGADA) then
      AStyle.TextColor := cxStylePagada.TextColor
    else if (ASituacion = CTE_PENDIENTE) then
      AStyle.TextColor := cxStylePendientes.TextColor
    else if (ASituacion = CTE_PARCIAMENTE_PAGADA) then
      AStyle.TextColor := cxStyleParciales.TextColor;

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

function TfrViewFacturasProveedor.GetFacturas: IBizFacturaProveedor;
begin
  Result := FFacturas;
end;

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

end.
