unit U_JwlKcWlHelp;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxDataStorage, cxEdit, DB, cxDBData, cxTextEdit, cxGridLevel,strUtils,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxControls, cxGridCustomView, cxGrid, StdCtrls, ComCtrls, ToolWin,
  ImgList, DBClient, ADODB;
type
   PMyRec = ^TMyRec;
   TMyRec = record
   wbcode: string;
   Tvtem_str: string;
end;
type
  TfrmJwlKcWlHelp = class(TForm)
    ToolBar1: TToolBar;
    Tok: TToolButton;
    Tclose: TToolButton;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    edttj: TEdit;
    edtSpec: TEdit;
    CheckBox1: TCheckBox;
    dbGrid1: TcxGrid;
    tv1: TcxGridDBTableView;
    tv1mnumber1: TcxGridDBColumn;
    tv1mname1: TcxGridDBColumn;
    tv1model1: TcxGridDBColumn;
    tv1mareaname1: TcxGridDBColumn;
    tv1batchnum1: TcxGridDBColumn;
    tv1caizhi1: TcxGridDBColumn;
    tv1factoryName: TcxGridDBColumn;
    tv1endquan1: TcxGridDBColumn;
    tv1primaryunitname1: TcxGridDBColumn;
    dbGrid1Level1: TcxGridLevel;
    GroupBox1: TGroupBox;
    cxGrid2: TcxGrid;
    Tv2: TcxGridDBTableView;
    Tv2mnumber1: TcxGridDBColumn;
    Tv2mname1: TcxGridDBColumn;
    Tv2model1: TcxGridDBColumn;
    Tv2mareaname1: TcxGridDBColumn;
    Tv2batchnum1: TcxGridDBColumn;
    Tv2caizhi1: TcxGridDBColumn;
    Tv2factoryName: TcxGridDBColumn;
    Tv2primaryunitname1: TcxGridDBColumn;
    Tv2endquan1: TcxGridDBColumn;
    cxGrid2Level1: TcxGridLevel;
    ImageList24: TImageList;
    DataSource1: TDataSource;
    ADOQueryHelp: TADOQuery;
    CDS_sel: TClientDataSet;
    DataSourceSel: TDataSource;
    ADOConnection1: TADOConnection;
    Label3: TLabel;
    edt_zjm: TEdit;
    TreeView1: TTreeView;
    ADOQueryTmp: TADOQuery;
    ADOQueryChild: TADOQuery;
    procedure TokClick(Sender: TObject);
    procedure TcloseClick(Sender: TObject);
    procedure tv1DblClick(Sender: TObject);
    procedure Tv2DblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure edttjChange(Sender: TObject);
  private
    procedure DoQuery();
    procedure DoFilter();
    procedure AddSelRow();
    procedure InitTree();
    procedure AddChildNode(parentNode:TtreeNode;mNo:string);
  public
    FStoreCode:string;
    fIsRhl:Boolean;
  end;

var
  frmJwlKcWlHelp: TfrmJwlKcWlHelp;

implementation
uses
  U_formPas,U_global;
{$R *.dfm}
//////////////////////////////////////////////////////
  //
//////////////////////////////////////////////////////
procedure TfrmJwlKcWlHelp.DoQuery();
begin
  try
    adoqueryHelp.DisableControls ;
    with adoqueryHelp do
    begin
      close;
      sql.Clear;
      sql.Add('select distinct A.factory,A.factoryName,B.mNumber,B.mName,');
      sql.Add(''''' as BatchNum,C.zjm,'); 
      sql.Add('B.Model,B.primaryUnit,B.primaryUnitName'); 
      sql.Add('from kf_nowQuan A');
      sql.Add('inner join gy_material B on A.mNumber=B.mNumber');
      if fIsRhl then
        sql.Add('inner join sc_dyeInfo C on A.mNumber=C.dyeCode');
      if trim(FStoreCode)<>'' then
        sql.Add('where A.whcode='+quotedStr(trim(FStoreCode)));
      if not CheckBox1.Checked then
        sql.Add('and A.endQuan>0');
      //sql.Add('order by A.Mnumber');
      open;
    end;
    CreateCDS(adoqueryHelp,cds_sel);
  finally
    adoqueryHelp.EnableControls ;
  end;
end;

////////////////////////////////////////////////////
  //��������������
////////////////////////////////////////////////////
procedure TfrmJwlKcWlHelp.DoFilter();
var
  filterStr:string;
begin
  filterStr:='';
  //
  if trim(edttj.Text) <>'' then
   filterStr:=filterStr+' and mName like '+quotedStr('%'+trim(edttj.Text)+'%');
  //���
  if trim(edtSpec.Text)<>'' then
    filterStr:=filterStr+' and model like '+quotedStr('%'+trim(edtSpec.Text)+'%');
  //xjm
  if trim(edt_zjm.Text)<>'' then
    filterStr:=filterStr+' and zjm like '+quotedStr('%'+trim(edt_zjm.Text)+'%');

  try
    ADOQueryHelp.DisableControls ;
    if trim(filterStr)='' then
    begin
      ADOQueryHelp.Filtered:=false;
      ADOQueryHelp.EnableControls;
      exit;
    end;
    filterStr:=trim(RightBStr(filterStr,length(filterStr)-4));
    with ADOQueryHelp do
    begin
      filtered:=false;
      filter:=filterStr;
      filtered:=true;
    end;
  finally
    ADOQueryHelp.EnableControls;
  end;
end;
/////////////////////////////////////////////////////
  //�������ܣ�����ѡ��ļ�¼
////////////////////////////////////////////////////
procedure TfrmJwlKcWlHelp.AddSelRow();
var
  i:integer;
begin
  if CDS_Sel.Locate('mNumber;factory',VarArrayOf([trim(ADOQueryHelp.fieldbyname('mNumber').AsString),
                                                     // trim(ADOQueryHelp.fieldbyname('BatchNum').AsString),
                                                      trim(ADOQueryHelp.fieldbyname('factory').AsString)]),
                                                      []) then
  begin
    application.MessageBox(pchar('�Ѵ���ͬ�������εġ�'+trim(ADOQueryHelp.fieldbyname('mname').AsString)+'�����ϼ�¼!'),'��ʾ��Ϣ',0);
    exit;
  end;

  with CDS_Sel do
  begin
    CDS_Sel.append;
    for i:=0 to ADOQueryHelp.FieldCount-1 do
    begin
      fields[i].Value:=ADOQueryHelp.Fields[i].Value;
    end;
    CDS_Sel.Post;
  end;

end;
procedure TfrmJwlKcWlHelp.TokClick(Sender: TObject);
begin
  if adoqueryHelp.IsEmpty then
    ModalResult:=-1
  else
    modalResult:=1;
end;

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

procedure TfrmJwlKcWlHelp.tv1DblClick(Sender: TObject);
begin
  AddSelRow();
end;

procedure TfrmJwlKcWlHelp.Tv2DblClick(Sender: TObject);
begin
  if CDS_Sel.IsEmpty then exit;
  CDS_sel.Delete;
end;

procedure TfrmJwlKcWlHelp.FormCreate(Sender: TObject);
begin
  groupBox1.Align :=alClient;
  CDS_Sel.Close;
  with ADOConnection1 do
  begin
    Connected:=false;
    ConnectionString:=gConString;
    Connected:=true;
  end;
end;

procedure TfrmJwlKcWlHelp.FormShow(Sender: TObject);
begin
  DoQuery();
  edttj.SetFocus ;
end;

procedure TfrmJwlKcWlHelp.edttjChange(Sender: TObject);
begin
  Dofilter();
end;

procedure TfrmJwlKcWlHelp.InitTree();
var
   MyRecPtr: PMyRec;
   tmpstr :string;
   NodeXX,CNode :TTreeNode;
   array_Node:array of TTreeNOde;
   i:integer;
begin
  try
    	 New(MyRecPtr);
  	   MyRecPtr^.wbcode := 'ALL';
  	   MyRecPtr^.Tvtem_str := 'ȫ��';
       with TreeView1 do
  	   begin
         Items.Clear;
         CNode := Items.AddObject(nil, MyRecPtr^.Tvtem_str, MyRecPtr);
         CNode.ImageIndex := 1;
         CNode.SelectedIndex := 2;
  	   end;

       with TreeView1 do
  	   begin
         Items.Clear;
         CNode := Items.AddObject(nil, MyRecPtr^.Tvtem_str, MyRecPtr);
         CNode.ImageIndex := 1;
         CNode.SelectedIndex := 2;
  	   end;
  	   with TreeView1,ADOQueryTmp do
  	   begin
         close;
         sql.clear;
         sql.Add('select code,name from xc_code');
         sql.Add('where flag = ''DYETYPE'' AND valid = ''Y''');
         sql.Add('order by code');
         Open;
         if recordcount = 0 then
         begin
           application.MessageBox('�Բ���,��������δ����Ⱦ���ϻ�������:DYETYPE!','��ʾ��Ϣ',0);
           exit;
         end;

         setLength(array_Node, RecordCount);
         i:=0;
         while not Eof do
         begin
  			   New(MyRecPtr);
  			   MyRecPtr^.wbcode := trim(fieldbyname('code').Asstring);
           MyRecPtr^.Tvtem_str := trim(fieldbyname('name').Asstring);
           NodeXX := Items.AddChildObject(TreeView1.Items[0], MyRecPtr^.Tvtem_str, MyRecPtr);
           NodeXX.ImageIndex := 1;
           NodeXX.SelectedIndex := 2;
           array_Node[i]:=NodeXX;
           INC(i);
           next;
         end;
         Close;
      end;

     ///////////////////////////////////////
     with ADOQueryChild do
     begin
       close;
       filtered:=false;
       sql.Clear ;
       sql.Add('select * from xc_code');   //
       sql.Add('where CLASSFLAG=''DYECLASS'' and  valid=''Y''');
       Open;  
     end;
     for i:=0 to Length(array_Node)-1 do
     begin
       //�������䷽
       AddChildNode(array_Node[i],PMyRec(array_Node[i].Data)^.wbcode);
     end;

     TreeView1.Items[0].Selected := True;
     TreeView1.Items[0].Expand(true);
     //InitGrid();
   except
       ;
   end;

end;
//////////////////////////////////////////////////////////////////
  //�������ܣ������ӽڵ�
//////////////////////////////////////////////////////////////////
procedure TfrmJwlKcWlHelp.AddChildNode(parentNode:TtreeNode;mNo:string);
var
  NodeInfo: PMyRec;
  mNode:TtreeNode;
  i:integer;
  array_Node:array of TTreeNOde;
begin
  with ADOQueryChild do
  begin

    filtered:=false;
    filter:='flag ='''+PMyRec(parentNode.Data)^.wbcode+'''';
    filtered:=true;
    Open;

    if RecordCount<=0 then exit;
    //////////////////////
    setLength(array_Node, RecordCount);
    i:=0;
    while not Eof do
    begin
      with treeView1 do
      begin
        New(NodeInfo);

        //���
        NodeInfo^.wbcode:=trim(fieldByName('code').AsString);
        //����
        NodeInfo^.Tvtem_str :=fieldByName('Name').AsString
                              +'('+trim(fieldByName('code').AsString)+')';
        mNode:=Items.AddChildObject(parentNode, NodeInfo^.Tvtem_str, NodeInfo);
        array_Node[i]:=mNode;
        INC(i);
      end;
      Next;
    end;

     for i:=0 to Length(array_Node)-1 do
     begin
       //������
       AddChildNode(array_Node[i],PMyRec(array_Node[i].Data)^.wbcode);
     end;
  end;

end;


end.