unit U_QryPivotBaseList;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ToolWin,cxExportPivotGridLink,
  FrameDateSel10, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
     cxClasses, dxLayoutContainer,
  cxPivotDrillDownFormUnit,
  dxLayoutControl, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,
  Vcl.StdCtrls, Vcl.ExtCtrls, cxCustomData, cxStyles, dxBarBuiltInMenu,U_WindowFormdesign,
  cxCustomPivotGrid, cxPivotGrid, cxGridCustomPopupMenu, cxGridPopupMenu, math,
  Data.DB, Datasnap.DBClient, Data.Win.ADODB, cxDBPivotGrid,
  dxLayoutControlAdapters,   
      
    
     
     
    
    
    
    
    
    
     
      
     
   
    
  ;

type
  TfrmQryPivotBaseList = class(TForm)
    ToolBar3: TToolBar;
    Trefresh: TToolButton;
    Tprint: TToolButton;
    TprintGrid: TToolButton;
    TsaveGrid: TToolButton;
    TgridSet: TToolButton;
    Tclose: TToolButton;
    frmFrameDateSel1: TfrmFrameDateSel10;
    dxLayoutControl_query: TdxLayoutControl;
    dxLayoutControl_queryGroup_Root: TdxLayoutGroup;
    Panel_page: TPanel;
    LBCPAP: TLabel;
    Label31: TLabel;
    BTNP: TButton;
    BTLP: TButton;
    TCBNOR: TcxComboBox;
    ADOQueryBaseCmd: TADOQuery;
    ADOQueryBaseTemp: TADOQuery;
    ADOQueryList: TADOQuery;
    DataSource1: TDataSource;
    cxGridPopupMenu1: TcxGridPopupMenu;
    cxDBPivotGrid1: TcxDBPivotGrid;
    CheckBox_filter: TCheckBox;
    CheckBox_data: TCheckBox;
    CheckBox_row: TCheckBox;
    CheckBox_col: TCheckBox;
    dxLayoutItem1: TdxLayoutItem;
    dxLayoutItem2: TdxLayoutItem;
    dxLayoutItem3: TdxLayoutItem;
    dxLayoutItem4: TdxLayoutItem;
    procedure TprintClick(Sender: TObject);
    procedure TrefreshClick(Sender: TObject);
    procedure TcloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure cxDBPivotGrid1DblClick(Sender: TObject);
    procedure CheckBox_filterClick(Sender: TObject);
    procedure CheckBox_dataClick(Sender: TObject);
    procedure CheckBox_rowClick(Sender: TObject);
    procedure CheckBox_colClick(Sender: TObject);
  private
    fWindowDesign: TWindowFormdesign;
    CurrentPage, RecordsNumber: Integer;
    fDesignCode:string;
    procedure doQuery();
    procedure doQueryByCriteria();
    procedure initGrid();
  protected
    fParameters1: string;
    fParameters2: string;
    fParameters3: string;
    fParameters4: string;
    fParameters5: string;
    fParameters10: string;
    function GetPivotGrid: TcxCustomPivotGrid; virtual;
  public
    fExportFileName:string;
    fFormId: integer;
    fProcedureName:string; //�洢��������
    FLMType:string;   //�����ļ����ͱ�־
    ftimeType:string; //��������
    fQueryType:String; //��ѯ����
    FFiltration1:string; //��ӡ��������
    fCriteria:string;   //��������
    property PivotGrid: TcxCustomPivotGrid read GetPivotGrid;
    constructor Create(AOwner: TComponent; ACaption: string=''; Parameters1: string=''; Parameters2: string=''; Parameters3: string=''; Parameters4: string=''; Parameters5: string=''; Parameters10: string='';FormID:Integer=0);

  end;

var
  frmQryPivotBaseList: TfrmQryPivotBaseList;

implementation
uses
  U_RTFun, U_globalVar, U_dataLink,U_FormLayOutDesign, U_LabelPrint;
{$R *.dfm}

procedure TfrmQryPivotBaseList.CheckBox_colClick(Sender: TObject);
begin
  cxDBPivotGrid1.OptionsView.ColumnFields:= CheckBox_col.Checked;
end;

procedure TfrmQryPivotBaseList.CheckBox_dataClick(Sender: TObject);
begin
  cxDBPivotGrid1.OptionsView.DataFields:= CheckBox_data.Checked;
end;

procedure TfrmQryPivotBaseList.CheckBox_filterClick(Sender: TObject);
begin
  cxDBPivotGrid1.OptionsView.FilterFields:= CheckBox_filter.Checked;
end;

procedure TfrmQryPivotBaseList.CheckBox_rowClick(Sender: TObject);
begin
  cxDBPivotGrid1.OptionsView.RowFields:= CheckBox_row.Checked;
end;

constructor TfrmQryPivotBaseList.Create(AOwner: TComponent; ACaption: string=''; Parameters1: string=''; Parameters2: string=''; Parameters3: string=''; Parameters4: string=''; Parameters5: string=''; Parameters10: string='';FormID:Integer=0);
begin
  inherited Create(AOwner);
  if ACaption <> '' then
    Caption := ACaption;

  fParameters1 := Parameters1;
  fParameters2 := Parameters2;
  fParameters3 := Parameters3;
  fParameters4 := Parameters4;
  fParameters5 := Parameters5;
  fParameters10 := Parameters10;
  fFormId:=   FormID ;
end;

procedure TfrmQryPivotBaseList.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Sendmessage(application.MainForm.Handle, WM_CloseForm, 4, 0);

  Action:=cafree;
end;

procedure TfrmQryPivotBaseList.FormCreate(Sender: TObject);
var
  mFontSize:integer;
begin
   getSystemIni();
    if gFontSize<9 then
    begin
      mFontSize := 12;
    end
    else
    begin
      mFontSize:=gFontSize ;
    end;

  self.Font.Size := gFontSize;
  if trim(gFontName)<>'' then
    self.Font.Name:=gFontName;

  cxDBPivotGrid1.Align:=alClient;
  CurrentPage := 1;
  RecordsNumber := 500;
  fWindowDesign := TWindowFormdesign.Create();
  frmFrameDateSel1.begdate.Date:=SGetServerDate(ADOQueryBaseTemp);
  frmFrameDateSel1.enddate.Date:=frmFrameDateSel1.begdate.Date;
end;

procedure TfrmQryPivotBaseList.FormDestroy(Sender: TObject);
begin
    fWindowDesign.free;
end;

procedure TfrmQryPivotBaseList.FormShow(Sender: TObject);
begin
  fDesignCode := fDllFileName +'|'+self.name+ '|' + intTostr(fformId) + '|' + 'cxgrid1';
  if DParameters8<>'1' then
  begin
    fWindowDesign.FormStyleInit10(self, fFormId, ADOQueryBaseTemp, ADOQueryBaseCmd, '', fParameters10);
  end;
  TgridSet.Visible:=gIsCanDesign;
  if dxLayoutControl_query.Tag<>999 then
    readLayOut(dxLayoutControl_query,ADOQueryBaseTemp,PWideChar( fDllFileName+'|'+self.name+'|'+dxLayoutControl_query.Name+'.ini'));
  fWindowDesign.fProcedureName:=fProcedureName;
  //���Ӷ�̬����
  addQryContionByLay(ADOQueryBaseTemp,fformId,'cxgrid1',dxLayoutControl_query,7);
  initGrid();
end;

procedure TfrmQryPivotBaseList.TcloseClick(Sender: TObject);
begin
  close;
end;

procedure TfrmQryPivotBaseList.TprintClick(Sender: TObject);
begin
   cxExportPivotGridToXLSX(fExportFileName, cxDBPivotGrid1, True, True, '', nil);
end;

procedure TfrmQryPivotBaseList.TrefreshClick(Sender: TObject);
begin
  if frmFrameDateSel1.BegDate.Visible then
  begin
    frmFrameDateSel1.BegDate.SetFocus;
  end;
  CurrentPage := 1;
  initGrid();
end;

///////////////////////////////
///
procedure TfrmQryPivotBaseList.initGrid();
begin
  if fQueryType='criteria' then
  begin
     doQueryByCriteria() ;
  end
  else
  begin
    frmFrameDateSel1.jqModel.Checked:=true;
    doQuery() ;
  end;
end;


////////////////////////////////////
procedure TfrmQryPivotBaseList.cxDBPivotGrid1DblClick(Sender: TObject);
var
  ACrossCell: TcxPivotGridCrossCell;
begin
  with PivotGrid.HitTest do
  begin
    if HitAtDataCell then
    begin
      ACrossCell := (HitObject as TcxPivotGridDataCellViewInfo).CrossCell;
      if ACrossCell <> nil then
        cxShowDrillDownDataSource(ACrossCell);
    end;
  end;
end;

procedure TfrmQryPivotBaseList.doQuery();
var
  strwhere: string;
begin
  if fProcedureName='' then
  begin
    application.MessageBox('�洢�������Ʋ�������Ϊ��!','������Ϣ',0);
    exit;
  end;
  strwhere := GetProcedureParam(dxLayoutControl_query);

   try
     cxDBPivotGrid1.BeginUpdate();
     ADOQueryList.DisableControls;
     with ADOQueryList do
     begin
       close;
       Filtered := false;
       sql.Clear;
       sql.Add('exec '+fProcedureName);
       sql.Add('@timeType='+quotedstr(fTimeType));
       sql.Add(',@begDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.begdate.Date)));
       sql.Add(',@endDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.enddate.Date+1)));
       if frmFrameDateSel1.jqModel.Checked then
         sql.Add(',@jqModel=1')
       else
         sql.Add(',@jqModel=0');
       if Panel_page.Visible then
       begin
         sql.Add(',@pageIndex=' + inttostr(CurrentPage));
         sql.Add(',@pageSize=' + inttostr(RecordsNumber));
       end;
       sql.Add(',@criteria='+ quotedstr(fcriteria));
       if strwhere<>'' then
         sql.Add(','+strwhere);
        //  showMessage(sql.Text);
       //cxMemo1.Text:=  sql.Text ;
       open;
     end;
    // SCreateCDS(ADOQueryList, CDS_List);
     //SInitCDSData(ADOQueryList, CDS_List);
     if Panel_page.Visible then
     begin
       LBCPAP.Caption := inttostr(CurrentPage) + '/' + inttostr(ceil(ADOQueryList.FieldByName('TotalCount').AsInteger / RecordsNumber));
     end;
   finally
      ADOQueryList.EnableControls;
      cxDBPivotGrid1.EndUpdate;
   end;
end;


////////////////////////////////////
procedure TfrmQryPivotBaseList.doQueryByCriteria();
var
  mSqlWhere: string;
begin
  if fProcedureName='' then
  begin
    application.MessageBox('�洢�������Ʋ�������Ϊ��!','������Ϣ',0);
    exit;
  end;

   mSqlWhere := SLGetFilters(dxLayoutControl_query, 1, 2);
   if trim(mSqlWhere) <> '' then
   begin
      mSqlWhere := ' and ' + trim(mSqlWhere);
   end;
   mSqlWhere:=fCriteria + ' ' + mSqlWhere   ;
   try
     cxDBPivotGrid1.BeginUpdate();
     ADOQueryList.DisableControls;
     with ADOQueryList do
     begin
       close;
       Filtered := false;
       sql.Clear;
       sql.Add('exec '+fProcedureName);
       sql.Add('@timeType='+quotedstr(fTimeType));
       sql.Add(',@begDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.begdate.Date)));
       sql.Add(',@endDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.enddate.Date+1)));
       if Panel_page.Visible then
       begin
         sql.Add(',@pageIndex=' + inttostr(CurrentPage));
         sql.Add(',@pageSize=' + inttostr(RecordsNumber));
       end;
       sql.Add(',@criteria='+ quotedstr(mSqlWhere));

       //cxMemo1.Text:=  sql.Text ;
       open;
     end;
   //  SCreateCDS(ADOQueryList, CDS_List);
    // SInitCDSData(ADOQueryList, CDS_List);
     if Panel_page.Visible then
     begin
       LBCPAP.Caption := inttostr(CurrentPage) + '/' + inttostr(ceil(ADOQueryList.FieldByName('TotalCount').AsInteger / RecordsNumber));
     end;
   finally
      ADOQueryList.EnableControls;
      cxDBPivotGrid1.EndUpdate;
   end;
end;

function TfrmQryPivotBaseList.GetPivotGrid: TcxCustomPivotGrid;
begin
  Result := cxDBPivotGrid1;
end;

end.