using System;
using System.Collections;
using System.Data;
using System.Transactions;
using System.Web.UI;
using System.Web.UI.WebControls;
using DeiNiu.wms.Logical;
using DeiNiu.Utils;
using DeiNiu.wms.Data.Model;
public partial class DeptEmp : PageBase
{
    private LEmployee _logic; 
    protected void Page_Load(object sender, EventArgs e)
    {
   
        if (!IsPostBack)
        {
            _logic = new LEmployee();
             
            Databound();  
           
             //分配角色时初始化部门人员树
            
        }
        SessionSeting();
    }
    /// 
    /// bound the query list.
    /// 
    private void Databound()
    { 
         bindGV();
         UpdateSession();
        bindDept();
        bindDeptEmp();
 
        
    }
    /// 
    /// 绑定部门 
    /// 
    private void bindDept()
    {
        TreeDept.Nodes.Clear();
        BindTree(TreeDept, "0", TreeDept.SelectedNode, _logic.GetDepartments().DefaultView);
        SetTreeDeptChecked();
    }
    /// 
    /// 绑定部门及用户
    /// 
    private void bindDeptEmp()
    {
        TreeDeptEmp.Nodes.Clear();
        BindEmpTree(TreeDeptEmp, "0", TreeDeptEmp.SelectedNode, _logic.GetDepartments().DefaultView, _logic.GetActivedEmpDept().DefaultView);
      
       
         
    }
   
 
    public void BindEmpTree(TreeView tree, string id, TreeNode pNode, DataView deptdv,DataView empdv)
    {
        deptdv.RowFilter = "dep_mastdept = '" + id + "'";
        foreach (DataRowView row in deptdv)
        {
            TreeNode node = new TreeNode();
            node.Text = row["ID"].ToString() +  "_" + row["dep_name"] + "" ;
            node.Value = row["ID"].ToString();
             node.SelectAction = TreeNodeSelectAction.None;
            node.ShowCheckBox = false;
            node.Expanded = true;
                empdv.RowFilter = "de_dept=" + node.Value;
                foreach (DataRowView emrow in empdv)
                {
                    TreeNode tnEmp = new TreeNode("" + emrow["em_name"] + ""  , emrow["empId"].ToString()); 
                    node.ChildNodes.Add(tnEmp); 
                }
            if (pNode == null)
                //说明是根节点
            {
                tree.Nodes.Add(node);
                 
      
            }
            else
            { 
              
                pNode.ChildNodes.Add(node); 
               
            }
            BindEmpTree(tree,node.Value, node, new DataView(deptdv.Table), new DataView(empdv.Table));
        }
    }
    public void BindTree(TreeView tree, string id, TreeNode pNode, DataView deptdv )
    {
        deptdv.RowFilter = "dep_mastdept = '" + id + "'";
        foreach (DataRowView row in deptdv)
        {
             
            TreeNode node = new TreeNode();
            node.Text = row["ID"].ToString() +"_" + row["dep_name"].ToString() + "";
            node.Value = row["ID"].ToString();
            node.SelectAction = TreeNodeSelectAction.None;
           
          //  node.ShowCheckBox = Convert.ToInt16(row["dep_type"].ToString()) == 1;
          
            node.Expanded = true;
           
            if (pNode == null)
            //说明是根节点
            {
                tree.Nodes.Add(node);                
            }
            else
            {
                pNode.ChildNodes.Add(node);
            }
            BindTree(tree, node.Value, node, new DataView(deptdv.Table));
        }
    }
    private void SessionSeting()
    {
        if (IsPostBack)
        {
            _logic = (LEmployee)Session[appScope.PagelevelObj];   
        }
    }
    private void UpdateSession()
    {
       Session[appScope.PagelevelObj] = _logic;
    }
    
    /************************************** protected methods (event listeners) ********************************/
 
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if (TreeDeptEmp.SelectedNode== null)  return;
        ArrayList al = new ArrayList();
        GetCheckedNode(TreeDept.Nodes, al);
        _logic.Initialize();
//        using (TransactionScope trans = new TransactionScope())
        {
            try
            {
                _logic.GetDeptEmp.Delete(Convert.ToInt32(TreeDeptEmp.SelectedValue));
                foreach (string id in al)
                {
                    _logic.GetDeptEmp.de_dept = Convert.ToInt32(id);
                    _logic.GetDeptEmp.de_employee = Convert.ToInt32(TreeDeptEmp.SelectedValue);
                    _logic.GetDeptEmp.Add();
                } 
//                trans.Complete();
            }
            catch (MyException)
            {
                throw;
            }
            catch (Exception)
            {
                throw new Exception("出现异常,保存失败。");
            }
        }
      
       
        Databound();
    }
   
    //reset the page
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        _logic.Initialize();
        Page_Load(this, e);
       
    }
    /***************************************** internal methods ********************************************/
    /// 
    /// set data from page to shift object
    /// 
    private void SetDataBack()
    {
    }
 void GetCheckedNode(TreeNodeCollection tnc, ArrayList checkedvalues )
 {
        foreach(TreeNode node in tnc)
        {
            if(node.Checked)
    {
        checkedvalues.Add(node.Value);
                 
            }
            GetCheckedNode(node.ChildNodes, checkedvalues);
       }
}
    void SetCheckedNode(TreeNodeCollection tnc, ArrayList setcheckedvalues)
    {
        foreach (TreeNode node in tnc)
        { 
            node.Checked = setcheckedvalues.Contains(Convert.ToInt32(node.Value)); 
             
            SetCheckedNode(node.ChildNodes, setcheckedvalues);
        }
    }
    private void chgOperTxt(bool addNew)
    {
 
        btnSubmit.Enabled = true;
        
    }
    void SetTreeDeptChecked()
    {
       if( TreeDeptEmp.SelectedNode ==null) return;
        ArrayList deptList = new ArrayList();
        DataTable dt = _logic.GetDepartments(Convert.ToInt32(TreeDeptEmp.SelectedValue));
        foreach (DataRow dr in dt.Rows)
        {
            deptList.Add(dr["de_dept"]);
        }
        SetCheckedNode(TreeDept.Nodes, deptList); 
    }
     
    protected void TreeDeptEmp_SelectedNodeChanged(object sender, EventArgs e)
    {
        GvDept.SelectedIndex = -1;
        SetTreeDeptChecked();   
        bindGV();
       
    }
     
   
    void bindGV( )
    {
        //人员部门清单
        string nodevalue = TreeDeptEmp.SelectedValue;
        if (nodevalue.Length >0 && nodevalue  != "0")  //selected node is an employee
        {     
      
          lbEmDept.Text = TreeDeptEmp.SelectedNode.Text + " 人员部门清单";
          GvDept.DataSource = _logic.GetDepartments(Convert.ToInt32(nodevalue));
     
       
        }
        GvDept.DataBind();
       
    }
    protected void GvDept_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        if (GvDept.DataKeys != null)
        {
            string id = GvDept.DataKeys[e.RowIndex].Value.ToString();
            _logic.GetDeptEmp.ID = Convert.ToInt32(id);
            _logic.GetDeptEmp.getModel();
            _logic.GetDeptEmp.de_title = ((TextBox)GvDept.Rows[e.RowIndex].Cells[3].Controls[1]).Text;
           
            //_logic.GetTrainingDetail.operater =
            _logic.GetDeptEmp.Update();
        }
        GvDept.EditIndex = -1;
        GvDept.SelectedIndex = e.RowIndex;
        bindGV();
    }
    protected void GvDept_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GvDept.EditIndex = -1;
        GvDept.SelectedIndex = e.RowIndex;
        bindGV();
    }
    protected void GvDept_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GvDept.EditIndex = e.NewEditIndex;
        GvDept.SelectedIndex = e.NewEditIndex;
        bindGV();
    }
}