unit uViewControGridStockEDIInventario;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewControlGrid, DB, uDADataTable, cxStyles, cxCustomData,
  cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData,
  cxTextEdit, cxGridLevel, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid,
  cxCurrencyEdit, cxCalendar, dxPSGlbl, dxPSUtl, dxPrnPg, dxBkgnd, dxWrap,
  dxPrnDev, dxPSEngn, dxPSCompsProvider, dxPSFillPatterns,
  dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGridLnk, dxPgsDlg,
  cxDropDownEdit, StdCtrls, cxSpinEdit, uViewGrid, cxMemo,
  cxEditRepositoryItems, uDataModuleStock, uDAInterfaces, TBXDkPanels,
  uViewParametrosCentro, uCustomView, uViewBase, uViewParametrosControlGrid,
  uViewParametrosColeccion, TB2Dock, uBizStock, uViewParametrosFecha;

type
  IViewControlGridStockEDIInventario = interface(IViewGrid)
  ['{38BB8BB9-E15D-4D49-970E-14418C4EB1E4}']
    function GetItems: IBizStockEDIInventario;
    procedure SetItems(const Value: IBizStockEDIInventario);
    property Items: IBizStockEDIInventario read GetItems write SetItems;
  end;

  TfrViewControlGridStockEDIInventario = class(TfrViewGrid, IViewControlGridStockEDIInventario)
    dxComponentPrinterLink1: TdxGridReportLink;
    cxEditRepository1: TcxEditRepository;
    cxEditDia: TcxEditRepositoryTextItem;
    cxEditImporte: TcxEditRepositoryCurrencyItem;
    cxGridViewRecID: TcxGridDBColumn;
    cxGridViewCENTRO: TcxGridDBColumn;
    cxGridViewCODIGO: TcxGridDBColumn;
    cxGridViewPRODUCTO: TcxGridDBColumn;
    cxGridViewTIPO_PRODUCTO: TcxGridDBColumn;
    cxGridViewGRUPO_PRODUCTO: TcxGridDBColumn;
    cxGridViewCOLECCION: TcxGridDBColumn;
    cxGridViewCOLOR: TcxGridDBColumn;
    cxGridViewI38: TcxGridDBColumn;
    cxGridViewI40: TcxGridDBColumn;
    cxGridViewI42: TcxGridDBColumn;
    cxGridViewI44: TcxGridDBColumn;
    cxGridViewI46: TcxGridDBColumn;
    cxGridViewI48: TcxGridDBColumn;
    cxGridViewTI: TcxGridDBColumn;
    cxGridViewK38: TcxGridDBColumn;
    cxGridViewK40: TcxGridDBColumn;
    cxGridViewK42: TcxGridDBColumn;
    cxGridViewK44: TcxGridDBColumn;
    cxGridViewK46: TcxGridDBColumn;
    cxGridViewK48: TcxGridDBColumn;
    cxGridViewTK: TcxGridDBColumn;
    cxGridViewD38: TcxGridDBColumn;
    cxGridViewD40: TcxGridDBColumn;
    cxGridViewD42: TcxGridDBColumn;
    cxGridViewD44: TcxGridDBColumn;
    cxGridViewD46: TcxGridDBColumn;
    cxGridViewD48: TcxGridDBColumn;
    cxGridViewDT: TcxGridDBColumn;
    cxStyleEntrada: TcxStyle;
    cxStyleSalida: TcxStyle;
    cxStyleRepositoryInforme: TcxStyleRepository;
    cxStyleContentInforme: TcxStyle;
    cxStyleFooterInforme: TcxStyle;
    cxStyleGroupInforme: TcxStyle;
    cxStyleHeaderInforme: TcxStyle;
    cxStyleSelectionInforme: TcxStyle;
    cxStyleTotales: TcxStyle;
    TBXDockablePanel1: TTBXDockablePanel;
    frViewParametrosColeccion1: TfrViewParametrosColeccion;
    frViewParametrosCentro1: TfrViewParametrosCentro;
    pnlAgrupaciones: TTBXAlignmentPanel;
    TBXButton3: TTBXButton;
    TBXLabel1: TTBXLabel;
    frViewParametrosFecha1: TfrViewParametrosFecha;
    procedure cxGridViewDTCustomDrawCell(Sender: TcxCustomGridTableView;
      ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
      var ADone: Boolean);
    procedure cxGridViewStylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    procedure cxGridViewI38GetDataText(Sender: TcxCustomGridTableItem;
      ARecordIndex: Integer; var AText: String);
    procedure cxGridViewTEStylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
  protected
    FItems : IBizStockEDIInventario;
    function GetItems: IBizStockEDIInventario;
    procedure SetItems(const Value: IBizStockEDIInventario);

  public
    property Items: IBizStockEDIInventario read GetItems write SetItems;
    procedure Preview; override;
    procedure Print; override;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Refresh;
  end;

implementation
{$R *.dfm}

uses
  uViewGridBase;

{ TfrViewControlGridResumenVentas }

procedure TfrViewControlGridStockEDIInventario.Preview;
begin
  inherited;
  dxComponentPrinterLink1.ReportTitle.Text := 'Diferencias con último inventario de colección ' + frViewParametrosColeccion1.ccbColeccion.Text + ' en centro(s) ' + frViewParametrosCentro1.ccbCentro.Text;
  dxComponentPrinterLink1.Preview;
end;

procedure TfrViewControlGridStockEDIInventario.Print;
begin
  inherited;
  dxComponentPrinterLink1.ReportTitle.Text := 'Diferencias con último inventario de colección ' + frViewParametrosColeccion1.ccbColeccion.Text + ' en centro(s) ' + frViewParametrosCentro1.ccbCentro.Text;
  dxComponentPrinterLink1.Print(True, Nil);
end;

procedure TfrViewControlGridStockEDIInventario.cxGridViewDTCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  inherited;
  if not VarIsNull(AViewInfo.Value) then
    if Pos('-', AViewInfo.Value) > 0 then
       ACanvas.Canvas.Font.Color := $000000CC;
end;

constructor TfrViewControlGridStockEDIInventario.Create(AOwner: TComponent);
begin
  inherited;
  FItems := Nil;
  frViewParametrosColeccion1.Refresh;
  frViewParametrosCentro1.Refresh;
end;

procedure TfrViewControlGridStockEDIInventario.SetItems(const Value: IBizStockEDIInventario);
begin
  FItems := Value;
  if Assigned(FItems) then
     dsDataSource.DataTable := FItems.DataTable;
end;

procedure TfrViewControlGridStockEDIInventario.cxGridViewStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
  inherited;
  //
  if Assigned(AItem) then
    if (AItem.Index = cxGridViewTI.Index) or
       (AItem.Index = cxGridViewTK.Index) or
       (AItem.Index = cxGridViewDT.Index) then
       AStyle := cxStyleTotales;
end;

procedure TfrViewControlGridStockEDIInventario.cxGridViewI38GetDataText(
  Sender: TcxCustomGridTableItem; ARecordIndex: Integer;
  var AText: String);
begin
  inherited;
  if AText = '0' then
    AText := '';
end;

procedure TfrViewControlGridStockEDIInventario.cxGridViewTEStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
  inherited;
  AStyle := cxStyleTotales;
end;

destructor TfrViewControlGridStockEDIInventario.Destroy;
begin
  FItems := Nil;
  inherited;
end;

procedure TfrViewControlGridStockEDIInventario.Refresh;
var
  AColeccionesList : TStringList;
  ACentrosList : TStringList;
  AFecha : Variant;
  AWhereColeccion : String;
  AWhereCentro : String;
  AWhereFecha : String;
  AWhere : String;
  i : integer;
begin
  AColeccionesList := Nil;
  ACentrosList := Nil;

  if Assigned(FItems) then
     Items.DataTable.Active := False;
  AColeccionesList := frViewParametrosColeccion1.ColeccionesSeleccionadas;
  ACentrosList := frViewParametrosCentro1.CodigoCentrosSeleccionados;
  AFecha := frViewParametrosFecha1.Fecha;

  ShowHourglassCursor;
  try
    if Assigned(AColeccionesList) then
    begin
       AWhereColeccion := '';
       if AColeccionesList.Count = 0 then
       begin
          ShowMessage('Debe seleccionar al menos una colección en los parámetros de la consulta.');
          Exit;
       end
       else begin
          AWhereColeccion := AWhereColeccion + ' COLECCION in (';
          for i := 0 to AColeccionesList.Count - 1 do
          begin
            if i > 0 then
              AWhereColeccion := AWhereColeccion + ', ';
            AWhereColeccion := AWhereColeccion + '''' + AColeccionesList[i] + '''';
          end;
          AWhereColeccion := AWhereColeccion + ')';
        end;
    end;

    if Assigned(ACentrosList) then
    begin
       AWhereCentro := '';
       if ACentrosList.Count = 0 then
       begin
          ShowMessage('Debe seleccionar al menos un centro en los parámetros de la consulta.');
          Exit;
       end
       else begin
          AWhereCentro := AWhereCentro + ' CENTRO in (';
          for i := 0 to ACentrosList.Count - 1 do
          begin
            if i > 0 then
              AWhereCentro := AWhereCentro + ', ';
            AWhereCentro := AWhereCentro + '''' + ACentrosList[i] + '''';
          end;
          AWhereCentro := AWhereCentro + ')';
        end;
    end;

    AWhereFecha := '';
    if not VarIsNull(AFecha) then
       AWhereFecha := '(FECHA >= ''' + VarToStr(AFecha) + ''')';

    AWhere := '';
    if AWhereColeccion <> '' then
       AWhere := AWhere + AWhereColeccion;

    if AWhereCentro <> '' then
    begin
       if AWhere <> '' then
          AWhere := AWhere + ' AND ';
       AWhere := AWhere + AWhereCentro;
    end;

    if AWhereFecha <> '' then
    begin
       if AWhere <> '' then
          AWhere := AWhere + ' AND ';
       AWhere := AWhere + AWhereFecha;
    end;

    Items.DataTable.Where.Clear;
    Items.DataTable.Where.AddText(AWhere, False);
    Items.DataTable.Active := True;

  finally
    HideHourglassCursor;
    FreeAndNIL(AColeccionesList);
    FreeAndNIL(ACentrosList);
  end;
end;

function TfrViewControlGridStockEDIInventario.GetItems: IBizStockEDIInventario;
begin
  Result := FItems;
end;

end.

