using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using DeiNiu.wms.Logical;
using DeiNiu.Utils;
namespace ajax.Dict
{
    public partial class AuthorityMain :PageBase
    {
        private LAuthority _logic;
        protected void Page_Load(object sender, EventArgs e)
        {
  
            if (!IsPostBack)
            {
                _logic = new LAuthority();
                Databound();
            }
            SessionSeting();
        }
 
        /*****************************************   private methods   ******************************************/
        /// 
        /// bound the query list.
        /// 
        private void Databound()
        {
         
        
            //装载选定部门节点的部门数据
            DataView dv = new DataView(_logic.getAllActiveData().Tables[0]);
            if (TreeAuth.SelectedNode != null)
            {
                TreeAuth.SelectedNode.ChildNodes.Clear();
                BindTree(TreeAuth.SelectedNode.Value, TreeAuth.SelectedNode, dv);
          
            //绑定树列表里选中的部门下的所有部门数据
            dv.RowFilter = "auth_uplevel = '" + TreeAuth.SelectedValue + "'"; 
            }
            GridView1.DataSource = dv;
            GridView1.DataBind();
            UpdateSession();
            ClearDetail();
        }
        private void SessionSeting()
        {
            if (IsPostBack)
            {
                _logic = (LAuthority)Session[appScope.PagelevelObj]; 
            }
        }
        private void UpdateSession()
        {
           Session[appScope.PagelevelObj]  = _logic;
        }
        /// 
        /// set data from shift object to page
        /// 
        private void DetailDataBind()
        {
            //公共信息不可以有url,必须为public
            LAuthority ltmp = new LAuthority();
            ltmp.Initialize(Convert.ToInt32(TreeAuth.SelectedValue)); 
            chkPublic.Enabled = !ltmp.GetAuthority.auth_publicInfomation;
            chkPublicInfo.Enabled = !ltmp.GetAuthority.auth_publicInfomation;
            chkAlert.Enabled =!chkPublicInfo.Enabled;  //跑马灯的上级必须是公共信息
            if (chkPublicInfo.Checked)
            {
                txtLink.Enabled = false;
                txtFormClass.Enabled = false;
            }
            DataDetail.Visible = true;
            txtName.Text = _logic.GetAuthority.auth_name;
            txtDesc.Text = _logic.GetAuthority.auth_desc;
            txtLink.Text = _logic.GetAuthority.auth_link;
            txtFormClass.Text = _logic.GetAuthority.auth_class;
            chkPublic.Checked = _logic.GetAuthority.auth_public;
            chkPublicInfo.Checked = _logic.GetAuthority.auth_publicInfomation;
            chkSpecial.Checked = _logic.GetAuthority.auth_special;
            txtOrder.Text = _logic.GetAuthority.auth_order + "";
            //上级为公共信息,则下级也必须是
           if(ltmp.GetAuthority.auth_publicInfomation) 
            chkPublicInfo.Checked = ltmp.GetAuthority.auth_publicInfomation;
        if (ltmp.GetAuthority.auth_public) 
            chkPublic.Checked = ltmp.GetAuthority.auth_public;
            chkAlert.Checked = _logic.GetAuthority.auth_marqueen;
            chkPublic.Checked = _logic.GetAuthority.auth_public;
            chkEnable.Checked = _logic.GetAuthority.dr;
             ltmp = null;
         
//    chkStatus.Checked = _logic.GetRole.dr;
        }
        /************************************** protected methods (event listeners) ********************************/
        protected void btnAddnew_Click(object sender, EventArgs e)
        {
            chgOperTxt(true);
            _logic.Initialize();
            GridView1.SelectedIndex = -1;
            Databound();
            DetailDataBind();
       
        }
        protected void DetailsView1_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
        {
        }
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            chgOperTxt(false);
            if (GridView1.DataKeys != null)
            {
                string id = GridView1.DataKeys[e.NewEditIndex].Value.ToString();
                _logic.Initialize(int.Parse(id));
            }
            Databound();
            DetailDataBind();
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            SetDataBack();
            //shifts id eq 0 means this is new one,to add; else an old one, to update
    
            int oper = 0;
            oper = _logic.GetAuthority.ID > 0 ? _logic.GetAuthority.Update() : _logic.GetAuthority.Add();
            ClearDetail();
            Databound();
            lbEdit.Text = "";
        }
        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
        
            if (GridView1 != null)
            {
                if (GridView1.DataKeys != null)
                {
                    string id = GridView1.DataKeys[e.RowIndex].Value.ToString();
                    _logic.Initialize(int.Parse(id));
                }
            }
            /*
        _logic.GetRole.dr = false;
        _logic.GetRole.Update();
        
       */
            _logic.GetAuthority.Delete();
            ClearDetail();
            Databound();
        }
        protected void GridView1_PageIndexChanged(object sender, EventArgs e)
        {
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            Databound();
            //GridView1.DataSource = shiftLgc.getAllShifts().Tables[0];
            //     GridView1.DataBind();    
        }
        protected void GridView1_DataBinding(object sender, EventArgs e)
        {
        }
    
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
        }
        //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()
        {
            //    _logic.GetRole.operater = Session["CurrentUserID"].ToString();  todo: write a public method to handle operater,createtime,lastmodfied ... log info.
            if (!(_logic.GetAuthority.ID > 0)) 
            {
               // _logic.GetAuthority.lastmodified = DateTime.Now.ToString();
                _logic.GetAuthority.auth_uplevel = Convert.ToInt32(TreeAuth.SelectedValue);
            }
            _logic.GetAuthority.auth_name = txtName.Text;
            _logic.GetAuthority.auth_desc = txtDesc.Text; 
            _logic.GetAuthority.auth_link = txtLink.Text;
            _logic.GetAuthority.auth_class = txtFormClass.Text;
            _logic.GetAuthority.auth_public = chkPublic.Checked;
            _logic.GetAuthority.auth_publicInfomation =chkPublicInfo.Checked  ;
            _logic.GetAuthority.auth_marqueen =  chkAlert.Checked;             
            _logic.GetAuthority.auth_special = chkSpecial.Checked;
            _logic.GetAuthority.auth_order = Convert.ToInt16( txtOrder.Text.Trim());
            // _logic.GetAuthority.dr = chkEnable.Checked;
        }
        private void chgOperTxt(bool addNew)
        {
            DataDetail.Visible = true;
            lbEdit.Text = addNew ? "增加新记录" : "修改现有记录";
            btnSubmit.Enabled = true;
        }
        private void ClearDetail()
        {
            txtName.Text = ""; 
            txtDesc.Text = "";
            txtLink.Text ="";
            txtLink.Text = "";
            chkPublic.Checked = false;
            chkPublicInfo.Checked = false;
            DataDetail.Visible = false;
            chkSpecial.Checked = false;
        }
        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            chgOperTxt(false);
            if (GridView1.DataKeys != null)
            {
                string id = GridView1.DataKeys[GridView1.SelectedIndex].Value.ToString();
                _logic.Initialize(int.Parse(id));
            }
            Databound();
            DetailDataBind();
        }
        public void BindTree(string id, TreeNode pNode, DataView dv)
        {
            dv.RowFilter = "auth_uplevel = '" + id + "'";
            foreach (DataRowView row in dv)
            {
                TreeNode node = new TreeNode();
                node.Text = row["auth_name"].ToString();
                node.Value = row["ID"].ToString();
                if (pNode == null)
                    //说明是根节点
                {
            
                    TreeAuth.Nodes.Add(node);
                    node.Expanded = false;
      
                }
                else
                {
                    pNode.ChildNodes.Add(node);
                    node.Expanded = false;
                
                }
                BindTree(node.Value, node, new DataView(dv.Table));
            }
        }
   
        protected void TreeAuth_SelectedNodeChanged1(object sender, EventArgs e)
        {
            GridView1.SelectedIndex = -1;
            DataView dv = new DataView(_logic.getAllActiveData().Tables[0]);
            dv.RowFilter = "auth_uplevel = '" + TreeAuth.SelectedValue + "'";
            GridView1.DataSource = dv;
            GridView1.DataBind(); 
            ClearDetail();
            if(TreeAuth.SelectedNode.ChildNodes.Count>0)TreeAuth.SelectedNode.Expand();
        }
        protected void chkPublicInfo_CheckedChanged(object sender, EventArgs e)
        {
            switch (chkPublicInfo.Checked)
            {
                case true:
                    txtLink.Text = string.Empty;
                    txtLink.Enabled = false;
                    txtFormClass.Text = string.Empty;
                    txtFormClass.Enabled = false;
                    chkPublic.Checked = true;
                    chkPublic.Enabled = false;
                    break;
                case false:
                    txtLink.Text = _logic.GetAuthority.auth_link;
                    txtFormClass.Text = _logic.GetAuthority.auth_class;
                    txtFormClass.Enabled = true;
                    txtLink.Enabled = true ;
                    chkPublic.Checked = false;
                    chkPublic.Enabled = true;
                    break;
            }
        
        }
        protected void chkSpecial_CheckedChanged(object sender, EventArgs e)
        {
             
        }
  
        protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
        {
    
            CheckBox chk;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                chk = new CheckBox();
                chk.Text = "";
                chk.Enabled = false;
                chk.Checked = e.Row.Cells[4].Text.Trim().Equals("True");
                e.Row.Cells[4].Controls.Add(chk);
                chk = new CheckBox();
                chk.Text = "";
                chk.Enabled = false;
                chk.Checked = e.Row.Cells[5].Text.Trim().Equals("True");
                e.Row.Cells[5].Controls.Add(chk);
            }
        }
    }
}