{*******************************************************}
{                                                       }
{       Administración de puntos de venta               }
{                                                       }
{       Copyright (C) 2006 Rodax Software S.L.          }
{                                                       }
{*******************************************************}

unit uViewListaReferenciaGenerica;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxDataStorage, cxEdit, DB, cxDBData, DBTables, cxGridLevel,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxControls, cxGridCustomView, cxGrid, uBizReferenciaGenerica, dxPSGlbl,
  dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider,
  dxPSFillPatterns, dxPSEdgePatterns, cxCalendar, cxTextEdit,
  cxCurrencyEdit, dxPSCore, uDADataTable, StdCtrls;

type
  IViewListaReferenciaGenerica = interface(IViewGrid)
  ['{2D43B302-DAA6-45FE-BC72-BAD3591CCE67}']
    procedure VerPendientes;
    procedure VerEnEspera;
    procedure VerResueltos;
  end;

  TfrViewListaReferenciaGenerica = class(TfrViewGrid, IViewListaReferenciaGenerica)
    cxGridViewFECHA: TcxGridDBColumn;
    cxGridViewCENTRO: TcxGridDBColumn;
    cxGridViewVENDEDOR: TcxGridDBColumn;
    cxGridViewNUMTALON: TcxGridDBColumn;
    cxGridViewCODIGO: TcxGridDBColumn;
    cxGridViewPRODUCTO: TcxGridDBColumn;
    cxGridViewCOLOR: TcxGridDBColumn;
    cxGridViewTALLA: TcxGridDBColumn;
    cxGridViewVTAPROCESO: TcxGridDBColumn;
    cxGridViewVTAFINAL: TcxGridDBColumn;
    cxGridViewVTATERM: TcxGridDBColumn;
    cxGridViewVALTOT: TcxGridDBColumn;
    cxGridViewCODCENTRO: TcxGridDBColumn;
    cxGridViewCODVENDEDOR: TcxGridDBColumn;
    cxGridViewFECHACAMBIO: TcxGridDBColumn;
    cxStyleResuelto: TcxStyle;
    cxStyleEnEspera1semana: TcxStyle;
    cxStyleResueltoRectificado: TcxStyle;
    cxGridViewColumn1: TcxGridDBColumn;
    procedure cxGridViewCellDblClick(Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);
    procedure cxGridViewStylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    procedure cxGridViewMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FEstado : TRefGenEstado;
  public
    procedure VerPendientes;
    procedure VerEnEspera;
    procedure VerResueltos;
  end;


implementation

uses uDataModuleReferenciaGenerica, DateUtils, cxGridDBDataDefinitions;

{$R *.dfm}

procedure TfrViewListaReferenciaGenerica.cxGridViewCellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  inherited;
  if Assigned(FOnDblClick) then
    FOnDblClick(Sender);
end;

procedure TfrViewListaReferenciaGenerica.VerEnEspera;
begin
  cxGridViewFECHACAMBIO.Visible := True;
  cxGridViewFECHACAMBIO.Caption := 'En espera desde';  
  FEstado := rgEnEspera;  
end;

procedure TfrViewListaReferenciaGenerica.VerPendientes;
begin
  cxGridViewFECHACAMBIO.Visible := False;
  FEstado := rgPendiente;
end;

procedure TfrViewListaReferenciaGenerica.VerResueltos;
begin
  cxGridViewFECHACAMBIO.Visible := True;
  cxGridViewFECHACAMBIO.Caption := 'Fecha de rectificación';
  FEstado := rgResuelto;  
end;

procedure TfrViewListaReferenciaGenerica.cxGridViewStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
var
  AColumn : TcxGridDBColumn;
  AFecha : TDateTime;
begin
  inherited;

  // La fila es la cabecera de un grupo
  if ARecord.Expandable then
    Exit;

  if FEstado = rgResuelto then
  begin
    if AItem.Index in [cxGridViewPRODUCTO.Index, cxGridViewCOLOR.Index,
      cxGridViewTALLA.Index] then
      AStyle := cxStyleResueltoRectificado
    else
      AStyle := cxStyleResuelto;
    Exit;
  end;

  if FEstado = rgEnEspera then
  begin
    AColumn := cxGridViewFECHACAMBIO;
    if Assigned(AColumn) and (AColumn.Visible) then
    begin
      try
        AFecha := VarToDateTime(ARecord.Values[AColumn.Index]);
      except
        on Exception do
          AFecha := Now;
      end;

      if DaysBetween(Now, AFecha) > 7 then
        AStyle := cxStyleEnEspera1semana
    end;
  end;
end;

procedure TfrViewListaReferenciaGenerica.cxGridViewMouseDown(
  Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
var
  HT: TcxCustomGridHitTest;
  ARecord: TcxCustomGridRecord;
  AGroupIndex, I, AIndex: Integer;
  AList: TList;
  DC: TcxGridDBDataController;
begin
  inherited;
  HT := TcxGridSite(Sender).GridView.ViewInfo.GetHitTest(X, Y);
  if (HT is TcxGridRecordHitTest) and not (HT is TcxGridRecordCellHitTest)
    and not (HT is TcxGridExpandButtonHitTest) then
  begin
    DC := TcxGridDBTableView(TcxGridSite(Sender).GridView).DataController;
    AList := TList.Create;
    ShowHourglassCursor;
    TcxGridDBTableView(TcxGridSite(Sender).GridView).BeginUpdate;
    try
      AGroupIndex := DC.Groups.DataGroupIndexByRowIndex[TcxGridRecordHitTest(HT).GridRecord.Index];
      DC.Groups.LoadRecordIndexes(AList, AGroupIndex);
      for I := 0 to AList.Count - 1 do
      begin
        AIndex := DC.GetRowIndexByRecordIndex(Integer(AList[I]), True);
        DC.SelectRows(AIndex, AIndex);
      end;
    finally
      FreeAndNil(AList);
      TcxGridDBTableView(TcxGridSite(Sender).GridView).EndUpdate;      
      HideHourglassCursor;
    end;
  end;
end;

end.
