unit U_TatClothCKHZList2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
  cxEdit, DB, cxDBData, cxGridCustomTableView, cxGridTableView,
  cxGridBandedTableView, cxGridDBBandedTableView, cxGridLevel, cxClasses,
  cxControls, cxGridCustomView, cxGridDBTableView, cxGrid, StdCtrls, ComCtrls,
  ExtCtrls, ToolWin, cxGridCustomPopupMenu, cxGridPopupMenu, ADODB, DBClient,
  cxDropDownEdit, cxCheckBox, RM_Common, RM_Class, RM_e_Xls, RM_Dataset,
  RM_System, RM_GridReport, Menus, cxCalendar, MovePanel, Math, Clipbrd,
  cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, cxTextEdit, dxSkinsCore,
  dxSkinsDefaultPainters, dxDateRanges, dxBarBuiltInMenu, U_BaseInput, cxPC,
  System.StrUtils, dxScrollbarAnnotations, U_BaseList, System.ImageList,
  Vcl.ImgList;

type
  TfrmTatClothCKHZList2 = class(TfrmBaseInput)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    TBExport: TToolButton;
    TBClose: TToolButton;
    Panel1: TPanel;
    ADOQueryCmd: TADOQuery;
    ADOQueryMain: TADOQuery;
    ADOQueryTemp: TADOQuery;
    DS_1: TDataSource;
    GPM_1: TcxGridPopupMenu;
    Label2: TLabel;
    BegDate: TDateTimePicker;
    EndDate: TDateTimePicker;
    CDS_1: TClientDataSet;
    begtime: TDateTimePicker;
    endTime: TDateTimePicker;
    IsJYTime: TCheckBox;
    ToolButton4: TToolButton;
    PM_1: TPopupMenu;
    PM11: TMenuItem;
    N1: TMenuItem;
    Label1: TLabel;
    C_Width: TEdit;
    N2: TMenuItem;
    N3: TMenuItem;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    v1Column22: TcxGridDBColumn;
    Tv1IOTime: TcxGridDBColumn;
    Tv1DRMID: TcxGridDBColumn;
    Tv1ToCoName: TcxGridDBColumn;
    Tv1Column3: TcxGridDBColumn;
    Tv1issp: TcxGridDBColumn;
    Tv1C_GramWeight: TcxGridDBColumn;
    v1Column23: TcxGridDBColumn;
    v1Column10: TcxGridDBColumn;
    Tv1NetWeight: TcxGridDBColumn;
    Tv1PF: TcxGridDBColumn;
    cxGrid1Level1: TcxGridLevel;
    Tv1C_Width: TcxGridDBColumn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure ConNoMChange(Sender: TObject);
    procedure TBCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBExportClick(Sender: TObject);
    procedure orderNoKeyPress(Sender: TObject; var Key: Char);
    procedure BTNPClick(Sender: TObject);
    procedure BTLPClick(Sender: TObject);
    procedure TCBNORChange(Sender: TObject);
    procedure JYTypeChange(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure cxPageControl1Change(Sender: TObject);
    procedure CDS_1BeforeOpen(DataSet: TDataSet);
    procedure Tv1DataControllerFilterBeforeChange(Sender: TcxDBDataFilterCriteria; ADataSet: TDataSet; const AFilterText: string);

    procedure Tv1TcxGridDBDataControllerTcxDataSummaryFooterSummaryItems6GetText(Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean; var AText: string);
    procedure ToolButton4Click(Sender: TObject);
    procedure PM11Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure IsJYTimeClick(Sender: TObject);
    procedure C_NameKeyPress(Sender: TObject; var Key: Char);
    procedure IOTypeChange(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
  private
    CurrentPage, RecordsNumber: Integer;
    lstCust: TStringList;
    procedure InitGrid();
    procedure SetStatus();
    procedure CopyColumnSummaryToClipboard(AColumn: TcxGridColumn);
    procedure InitGrid3();
    { Private declarations }
  public
    fDRMID: string;
    fissp: string;
    fC_Name: string;
    fioType: string;
    fToCoID: string;
    fEndDateTime, fBegDateTime: TDateTime;

    { Public declarations }
  end;

var
  frmTatClothCKHZList2: TfrmTatClothCKHZList2;

implementation

uses
  U_DataLink, U_RTFun, U_LabelPrint;

{$R *.dfm}

procedure TfrmTatClothCKHZList2.SetStatus();
begin
  if fToCoID <> '' then
  begin
    Tv1DRMID.Visible := False;
  end;
end;

procedure TfrmTatClothCKHZList2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  FreeAndNil(lstCust);
  Action := caFree;
end;

procedure TfrmTatClothCKHZList2.FormCreate(Sender: TObject);
begin
  inherited;
  lstCust := TStringList.Create;
  EndDate.DateTime := SGetServerDateTime(ADOQueryTemp);
  BegDate.DateTime := EndDate.DateTime - 20;
end;

procedure TfrmTatClothCKHZList2.InitGrid();
var
  WSql: string;
begin

  WSql := SGetFilters(Panel1, 1, 2);
  if Trim(WSql) <> '' then
    WSql := ' and ' + WSql;
  if IsJYTime.Checked then
  begin
    WSql := WSql + ' and A.IOTime>=' + quotedstr(FormatDateTime('yyyy-MM-dd', BegDate.DateTime));
    WSql := WSql + ' and A.IOTime<' + quotedstr(FormatDateTime('yyyy-MM-dd', enddate.DateTime + 1));
  end;

  try
    ADOQueryMain.DisableControls;

    with ADOQueryMain do
    begin
      Filtered := False;
      Close;
      sql.Clear;

      sql.Add('SELECT A.C_CODE,A.C_Name,A.C_width,A.C_GramWeight,A.IONO as DRMID');
      sql.Add(',CAST(ioTime AS DATE) as ioTime ');
      sql.Add(', (SELECT COName FROM BS_Company X WHERE X.CoID = B.ToCoID) as COName');
      sql.Add(' ,COUNT(*) as js, SUM(A.meter) as Meter,SUM(A.NetWeight) as NetWeight ');
      sql.Add(', CAST(A.C_Width AS DECIMAL(18,2))/100 * SUM(A.meter) as pf');
      SQL.Add(',ISNULL(A.issp, '''') as issp ');
      sql.Add(' FROM V_Tat_Cloth_IO A   ');
      sql.Add(' left JOIN Tat_Cloth_DR_Main B on A.IONo = B.DRMID ');
      sql.Add(' where A.IONo LIKE ''RSG%'' and A.IOFlag = ''出库'' ');
//      sql.Add(' and  (select COName from BS_Company X where X.CoAbbrName = max(B.ToCoName))= ' + QuotedStr(Trim(fconame)));
      sql.Add(' and A.C_Name = ' + QuotedStr(Trim(fC_Name)));
//      sql.Add(' and B.ToCoID = ' + QuotedStr(Trim(fToCoID)));
      sql.Add(' and isnull(A.issp,'''') = ' + QuotedStr(Trim(fissp)));
      sql.Add(WSql);

      SQL.Add(' group by A.C_CODE,A.C_width,A.C_GramWeight,A.IONO,A.C_Name,isnull(A.issp,''''),B.ToCoID,CAST(ioTime AS DATE)');
//      sql.Add(' HAVING(select COName from BS_Company X where X.CoAbbrName = max(B.ToCoName))= ' + QuotedStr(Trim(fconame)));
      SQL.Add(' order by A.IONO,A.C_CODE,CAST(A.C_width AS INT),A.C_GramWeight,CAST(ioTime AS DATE)');

//           showmessage(sql.text);
      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);

  finally
    ADOQueryMain.EnableControls;
    TV1.DataController.Filter.Clear;
  end;

end;

procedure TfrmTatClothCKHZList2.InitGrid3();
var
  WSql: string;
begin

  WSql := SGetFilters(Panel1, 1, 2);
  if Trim(WSql) <> '' then
    WSql := ' and ' + WSql;
  if IsJYTime.Checked then
  begin
    WSql := WSql + ' and A.IOTime>=' + quotedstr(FormatDateTime('yyyy-MM-dd', BegDate.DateTime));
    WSql := WSql + ' and A.IOTime<' + quotedstr(FormatDateTime('yyyy-MM-dd', enddate.DateTime + 1));
  end;

  try
    ADOQueryMain.DisableControls;

    with ADOQueryMain do
    begin
      Filtered := False;
      Close;
      sql.Clear;

      sql.Add('SELECT A.C_CODE,A.C_Name,A.C_width,A.C_GramWeight');
      sql.Add(',CAST(ioTime AS DATE) as ioTime ');
      sql.Add(', (SELECT COName FROM BS_Company X WHERE X.CoID = B.ToCoID) as COName');
      sql.Add(' ,COUNT(*) as js, SUM(A.meter) as Meter,SUM(A.NetWeight) as NetWeight ');
      sql.Add(', CAST(A.C_Width AS DECIMAL(18,2))/100 * SUM(A.meter) as pf');
      SQL.Add(',ISNULL(A.issp, '''') as issp ');
      sql.Add(' FROM V_Tat_Cloth_IO A   ');
      sql.Add(' left JOIN Tat_Cloth_DR_Main B on A.IONo = B.DRMID ');
      sql.Add(' where A.IONo LIKE ''RSG%'' and A.IOFlag = ''出库'' ');
//      sql.Add(' and  (select COName from BS_Company X where X.CoAbbrName = max(B.ToCoName))= ' + QuotedStr(Trim(fconame)));
//      sql.Add(' and A.C_Name = ' + QuotedStr(Trim(fC_Name)));
      sql.Add(' and B.ToCoID = ' + QuotedStr(Trim(fToCoID)));
//      sql.Add(' and isnull(A.issp,'''') = ' + QuotedStr(Trim(fissp)));
      sql.Add(WSql);

      SQL.Add(' group by A.C_CODE,A.C_width,A.C_GramWeight,A.C_Name,isnull(A.issp,''''),B.ToCoID,CAST(ioTime AS DATE)');
//      sql.Add(' HAVING(select COName from BS_Company X where X.CoAbbrName = max(B.ToCoName))= ' + QuotedStr(Trim(fconame)));
      SQL.Add(' order by A.C_CODE,CAST(A.C_width AS INT),A.C_GramWeight,CAST(ioTime AS DATE)');

//           showmessage(sql.text);
      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);

  finally
    ADOQueryMain.EnableControls;
    TV1.DataController.Filter.Clear;
  end;

end;

procedure TfrmTatClothCKHZList2.IOTypeChange(Sender: TObject);
begin

  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.IsJYTimeClick(Sender: TObject);
begin
  inherited;
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.TBRafreshClick(Sender: TObject);
begin
  CurrentPage := 1;
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.CDS_1BeforeOpen(DataSet: TDataSet);
begin

  lstCust.Clear;
end;

procedure TfrmTatClothCKHZList2.ConNoMChange(Sender: TObject);
begin
  if ADOQueryMain.Active then
  begin
    SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
  end;
end;

procedure TfrmTatClothCKHZList2.cxPageControl1Change(Sender: TObject);
begin
  CurrentPage := 1;
  SetStatus();
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.C_NameKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if Key = #13 then
  begin
    if fToCoID = '' then
    begin
      InitGrid();
    end
    else
    begin
      InitGrid3();
    end;
  end;
end;

procedure TfrmTatClothCKHZList2.TBCloseClick(Sender: TObject);
begin

  Close;
end;

procedure TfrmTatClothCKHZList2.FormShow(Sender: TObject);
begin
  inherited;
  if fToCoID = '' then
  begin
    ReadCxGrid(trim(self.Caption) + 'Tv1', Tv1, '成品出库汇总2无客户');
  end
  else
  begin
    ReadCxGrid(trim(self.Caption) + 'Tv1', Tv1, '成品出库汇总2有客户');
  end;
  CurrentPage := 1;
  RecordsNumber := 500;
//  canshu1 := Trim(Self.fParameters1);

  EndDate.DateTime := fEndDateTime;
  BegDate.DateTime := fBegDateTime;
  SetStatus();
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;

end;

procedure TfrmTatClothCKHZList2.TBExportClick(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    exit;
  with CDS_1 do
  begin
    Filtered := false;
    Filter := ' ssel = 1';
    Filtered := true;
  end;
  TcxGridToExcel(Self.Caption, cxGrid1);
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.orderNoKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    CurrentPage := 1;
    if fToCoID = '' then
    begin
      InitGrid();
    end
    else
    begin
      InitGrid3();
    end;
  end;
end;

procedure TfrmTatClothCKHZList2.PM11Click(Sender: TObject);
begin
  SelOKNo(CDS_1, false);
end;

procedure TfrmTatClothCKHZList2.Tv1DataControllerFilterBeforeChange(Sender: TcxDBDataFilterCriteria; ADataSet: TDataSet; const AFilterText: string);
begin
  lstCust.Clear;
end;

procedure TfrmTatClothCKHZList2.Tv1TcxGridDBDataControllerTcxDataSummaryFooterSummaryItems6GetText(Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean; var AText: string);
begin
  if lstCust <> nil then
    AText := IntToStr(lstCust.Count);
end;

procedure TfrmTatClothCKHZList2.BTNPClick(Sender: TObject);
begin
  if CurrentPage < CDS_1.FieldByName('TotalCount').AsInteger / RecordsNumber then
    CurrentPage := CurrentPage + 1;
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.BTLPClick(Sender: TObject);
begin
  if CurrentPage > 1 then
    CurrentPage := CurrentPage - 1;
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.TCBNORChange(Sender: TObject);
begin

  CurrentPage := 1;
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.JYTypeChange(Sender: TObject);
begin
  CurrentPage := 1;
  if fToCoID = '' then
  begin
    InitGrid();
  end
  else
  begin
    InitGrid3();
  end;
end;

procedure TfrmTatClothCKHZList2.N1Click(Sender: TObject);
begin

  SelOKNo(CDS_1, true);
end;

procedure TfrmTatClothCKHZList2.N2Click(Sender: TObject);
begin
  Clipboard.SetTextBuf(PChar(Trim(CDS_1.fieldbyname(TV1.Controller.FocusedColumn.DataBinding.FilterFieldName).AsString)));
end;

procedure TfrmTatClothCKHZList2.N3Click(Sender: TObject);
begin
  CopyColumnSummaryToClipboard(TV1.Controller.FocusedColumn);
end;

procedure TfrmTatClothCKHZList2.CopyColumnSummaryToClipboard(AColumn: TcxGridColumn);
var
  AView: TcxGridDBTableView;
  SummaryIndex: Integer;
  SummaryText: string;
begin
  AView := Tv1;

  // 查找指定列的汇总项
  SummaryIndex := AView.DataController.Summary.FooterSummaryItems.IndexOfItemLink(AColumn);
  if SummaryIndex <> -1 then
  begin
    SummaryText := AView.DataController.Summary.FooterSummaryTexts[SummaryIndex];
    Clipboard.AsText := SummaryText;
  end
  else
    ShowMessage('未找到该列的汇总数据');
end;

procedure TfrmTatClothCKHZList2.ToolButton2Click(Sender: TObject);
var
  WSql: string;
begin
  if CDS_1.IsEmpty then
    Exit;
  if not CDS_1.Locate('SSel', True, []) then
  begin
    Application.MessageBox('没有选择数据!', '提示', 0);
    Exit;
  end;
  WSql := '';
  CDS_1.DisableControls;
  with CDS_1 do
  begin
    First;
    while not Eof do
    begin
      if CDS_1.fieldbyname('SSel').AsBoolean then
      begin
        if WSql <> '' then
        begin
          WSql := WSql + ',' + QuotedStr(Trim(CDS_1.fieldbyname('CIID').AsString));
        end
        else
        begin
          WSql := QuotedStr(Trim(CDS_1.fieldbyname('CIID').AsString));
        end;
      end;
      Next;
    end;
  end;
  CDS_1.Locate('SSel', True, []);
  CDS_1.EnableControls;
  try
    frmLabelPrint := TfrmLabelPrint.Create(Application);
    with frmLabelPrint do
    begin
      FLMType := 'TradeClothStk';
      FFiltration1 := WSql;
      if ShowModal = 1 then
      begin

      end;
    end;
  finally
    frmLabelPrint.Free;
  end;
end;

procedure TfrmTatClothCKHZList2.ToolButton4Click(Sender: TObject);
begin
  if fToCoID = '' then
  begin
    WriteCxGrid(trim(self.Caption) + 'Tv1', Tv1, '成品出库汇总2无客户');
  end
  else
  begin
    WriteCxGrid(trim(self.Caption) + 'Tv1', Tv1, '成品出库汇总2有客户');
  end;

end;

end.

