unit U_SYDept;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxGraphics, cxCustomData, cxStyles, cxTL, cxMaskEdit, DB, ADODB,
  cxInplaceContainer, cxDBTL, cxControls, cxTLData, ComCtrls, ToolWin, StdCtrls,
  ExtCtrls, DBClient, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData,
  cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  cxClasses, cxGridCustomView, cxGrid, cxTextEdit, cxLookAndFeels,
  cxLookAndFeelPainters, cxTLdxBarBuiltInMenu, cxNavigator, U_BaseList,
  dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges;

type
  TfrmSYDept = class(TfrmBaseList)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    TBAdd: TToolButton;
    TBDel: TToolButton;
    TBClose: TToolButton;
    cxDBTreeList1: TcxDBTreeList;
    cxDBTreeList1cxDBTreeListColumn2: TcxDBTreeListColumn;
    DataSource1: TDataSource;
    ADOQueryTree: TADOQuery;
    ToolButton1: TToolButton;
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    DPTopName: TEdit;
    DPName: TEdit;
    DPNo: TEdit;
    CDS_Tree: TClientDataSet;
    Label4: TLabel;
    ToolButton2: TToolButton;
    Label5: TLabel;
    DPOrder: TEdit;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBRafreshClick(Sender: TObject);
    procedure TBCloseClick(Sender: TObject);
    procedure TBAddClick(Sender: TObject);
    procedure cxDBTreeList1Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure TBDelClick(Sender: TObject);
    procedure DPNameKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    PState: Integer;
    FCPID, FTopID: string;
    procedure InitTree();
  public
    { Public declarations }
  end;

var
  frmSYDept: TfrmSYDept;

implementation

uses
  U_DataLink, U_RTFun;

{$R *.dfm}

procedure TfrmSYDept.InitTree();
var
  i: Integer;
begin
  try
    ADOQueryTree.DisableControls;
    with ADOQueryTree do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from SY_Dept order by DPlevel,DPOrder,DPName');
      Open;
    end;
    SCreateCDS(ADOQueryTree, CDS_Tree);
    SInitCDSData(ADOQueryTree, CDS_Tree);
    //cxDBTreeList1.Items[0].Expand(false);
    cxDBTreeList1.Items[0].Expand(True);
  finally
    ADOQueryTree.EnableControls;
  end;
  //cxDBTreeList1.Items[1].Expand(False);
end;

procedure TfrmSYDept.FormDestroy(Sender: TObject);
begin
  inherited;
  frmSYDept := nil;
end;

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

procedure TfrmSYDept.TBRafreshClick(Sender: TObject);
begin
  InitTree();
end;

procedure TfrmSYDept.TBCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmSYDept.TBAddClick(Sender: TObject);
begin
  PState := 11;
  DPTopName.Text := Trim(CDS_Tree.fieldbyname('DPName').AsString);
  //FTopID:=Trim(ADOQueryTree.fieldbyname('CPID').AsString);
  FCPID := '';
  DPName.Text := '';
  DPNo.Text := '';
  DPName.SetFocus;
end;

procedure TfrmSYDept.cxDBTreeList1Click(Sender: TObject);
begin
  PState := 22;
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from SY_Dept where DPID=''' + Trim(CDS_Tree.fieldbyname('DPParent').AsString) + '''');
    Open;
  end;
  FCPID := Trim(CDS_Tree.fieldbyname('DPID').AsString);
  DPTopName.Text := Trim(ADOQueryTemp.fieldbyname('DPName').AsString);
  DPName.Text := Trim(CDS_Tree.fieldbyname('DPName').AsString);
  DPNo.Text := Trim(CDS_Tree.fieldbyname('DPNo').AsString);
  DPOrder.Text := Trim(CDS_Tree.fieldbyname('DPOrder').AsString);
end;

procedure TfrmSYDept.ToolButton1Click(Sender: TObject);
var
  maxId: string;
  FInt: Integer;
begin
  if Trim(DPName.Text) = '' then
  begin
    Application.MessageBox('�������Ʋ���Ϊ�գ�', '��ʾ', 0);
    Exit;
  end;
  {if Trim(DPNo.Text)='' then
  begin
    Application.MessageBox('�����벻��Ϊ�գ�','��ʾ',0);
    Exit;
  end;}
  if Trim(DPOrder.Text) = '' then
  begin
    DPOrder.Text := '99';
  end;
  if TryStrToInt(Trim(DPOrder.Text), FInt) = False then
  begin
    Application.MessageBox('˳��ŷǷ�����!', '��ʾ', 0);
    Exit;
  end;
  try
    ADOQueryCmd.Connection.BeginTrans;
    if PState = 11 then
    begin
      if GetLSNo(ADOQueryCmd, maxId, 'DP', 'SY_Dept', 3, 1) = False then
      begin
        ADOQueryCmd.Connection.RollbackTrans;
        Application.MessageBox('������ʧ�ܣ�', '��ʾ', 0);
        Exit;
      end;
    end
    else
    begin
      maxId := Trim(FCPID);
    end;
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('select * from SY_Dept where DPID=''' + Trim(FCPID) + '''');
      Open;
    end;
    with ADOQueryCmd do
    begin
      if PState = 11 then
      begin
        Append;
        FieldByName('DPID').Value := Trim(maxId);
        FieldByName('DPName').Value := Trim(DPName.Text);
        FieldByName('DPNo').Value := Trim(DPNo.Text);
        FieldByName('DPParent').Value := Trim(CDS_Tree.fieldbyname('DPID').AsString);
        FieldByName('DPLevel').Value := CDS_Tree.fieldbyname('DPLevel').AsInteger + 1;
        FieldByName('DPOrder').Value := StrToInt(Trim(DPOrder.Text));
        Post;
      end
      else if PState = 22 then
      begin
        Edit;
        FieldByName('DPID').Value := Trim(maxId);
        FieldByName('DPName').Value := Trim(DPName.Text);
        FieldByName('DPNo').Value := Trim(DPNo.Text);
        FieldByName('DPOrder').Value := StrToInt(Trim(DPOrder.Text));
        //FieldByName('CPParent').Value:=Trim(ADOQueryTree.fieldbyname('CPID').AsString);
        //FieldByName('CPOrder').Value:=ADOQueryTree.fieldbyname('CPOrder').AsInteger+1;
        Post;
      end;
    end;
    ADOQueryCmd.Connection.CommitTrans;
    Application.MessageBox('����ɹ�!', '��ʾ', 0);
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Application.MessageBox('����ʧ��!', '��ʾ', 0);
  end;
end;

procedure TfrmSYDept.TBDelClick(Sender: TObject);
begin
  if ADOQueryTree.FieldByName('DPLevel').AsInteger = 0 then
    Exit;
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from SY_Dept where DPParent=''' + Trim(CDS_Tree.fieldbyname('DPID').AsString) + '''');
    Open;
    if not IsEmpty then
    begin
      Application.MessageBox('�Ѿ������¼���֯����ɾ����', '��ʾ', 0);
      Exit;
    end;
  end;
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from SY_User where DPID=''' + Trim(CDS_Tree.fieldbyname('DPID').AsString) + '''');
    Open;
    if not IsEmpty then
    begin
      Application.MessageBox('����֯������Ա����ɾ����', '��ʾ', 0);
      Exit;
    end;
  end;
  if Application.MessageBox('ȷ��Ҫɾ��������', '��ʾ', 32 + 4) <> IDYES then
    Exit;
  with ADOQueryCmd do
  begin
    Close;
    SQL.Clear;
    sql.Add('delete SY_Dept where DPID=''' + Trim(CDS_Tree.fieldbyname('DPID').AsString) + '''');
    sql.Add('delete SY_Dept where DPParent=''' + Trim(CDS_Tree.fieldbyname('DPID').AsString) + '''');
    ExecSQL;
  end;
  InitTree();
end;

procedure TfrmSYDept.DPNameKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    DPNo.SetFocus;
end;

procedure TfrmSYDept.FormShow(Sender: TObject);
begin
  inherited;
  InitTree();
end;

end.