using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;

namespace FineUIPro.Web.ManHours
{
    public partial class ManHours : PageBase
    {
        #region 加载
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetButtonPower();//权限设置

                //项目类型
                this.drpJobType.DataTextField = "ConstText";
                this.drpJobType.DataValueField = "ConstValue";
                this.drpJobType.DataSource = BLL.ConstService.GetConstListByGroupId(BLL.Const.ProjectPlanner_JobType);
                this.drpJobType.DataBind();
                Funs.FineUIPleaseSelectJobType(this.drpJobType);

                //项目状态
                this.drpJobStatus.DataTextField = "ConstText";
                this.drpJobStatus.DataValueField = "ConstValue";
                this.drpJobStatus.DataSource = BLL.ConstService.GetConstListByGroupId(BLL.Const.ProjectPlanner_JobStatus);
                this.drpJobStatus.DataBind();
                Funs.FineUIPleaseSelectJobStatus(this.drpJobStatus);

                BindDeptTree("");
                if (this.CurrUser.Account != BLL.Const.Gly && CurrUser.RoleId != BLL.Const.Role_PPE && CurrUser.DepartId != BLL.Const.CTEM_DepartId)
                {
                    txtUserName.Hidden = true;
                    this.tvUser.SelectedNodeID = "U@" + this.CurrUser.UserId;
                    hidpersonnel.Text = this.tvUser.SelectedNodeID;
                    BindGrid(hidpersonnel.Text);
                }
                else
                {
                    BindGrid("");
                }
                //右键的add和delete默认授权给PPE及CTE/M组
                var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId);
                if (user.RoleId == BLL.Const.Role_PPE || user.DepartId == BLL.Const.CTEM_DepartId || this.CurrUser.UserId == BLL.Const.GlyId)
                {
                    this.MenuAdd.Hidden = false;
                    this.btnMenuDel.Hidden = false;
                    this.Grid1.EnableRowDoubleClickEvent = true;
                }
                else
                {
                    this.MenuAdd.Hidden = true;
                    this.btnMenuDel.Hidden = true;
                    this.Grid1.EnableRowDoubleClickEvent = false;
                }
            }
        }
        #endregion

        #region 查询
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            string UserName = txtUserName.Text;
            BindDeptTree(UserName);
        }

        protected void rblAutoPostBack_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid(hidpersonnel.Text);
            //ShowNotify("选中项的值:" + rblAutoPostBack.SelectedValue);
        }
        #endregion

        #region 绑定数据
        private void BindGrid(string sId)
        {
            string JobNo = "";
            string JobType = "";
            string JobStatus = "";
            int Status = 1;
            int Layer = 0;
            string udsId = "";
            if (this.drpJobType.SelectedValue != BLL.Const._Null)
            {
                JobType = this.drpJobType.SelectedValue;
            }
            if (this.drpJobStatus.SelectedValue != BLL.Const._Null)
            {
                JobStatus = this.drpJobStatus.SelectedValue;
            }
            if (!string.IsNullOrEmpty(this.txtJobNo.Text.Trim()))
            {
                JobNo = this.txtJobNo.Text.Trim();
            }
            Status = int.Parse(rblAutoPostBack.SelectedValue);
            string[] sIdArr = sId.Split('@');
            if (sIdArr[0].ToString() == "U")
            {
                Layer = 1;
                udsId = sIdArr[1].ToString();
            }
            if (sIdArr[0].ToString() == "D")
            {
                Layer = 2;
                //if (sIdArr[1].ToString() != Const.CTE_DepartId)
                //{
                    udsId = sIdArr[1].ToString();
                //}
                //else
                //{
                //    udsId = "";
                //}
            }
            string ids = "";
            string d = CurrUser.DepartId;  // 获取当前用户部门ID
            string r = CurrUser.RoleId;    // 获取当前用户角色ID
            if (this.CurrUser.Account != BLL.Const.Gly && d != Const.CTEM_DepartId && r != Const.Role_PPE)
            {
                ids = this.CurrUser.UserId;
                Layer = 1;
            }
            else
            {
                ids = udsId;
            }
            int pageSize = Grid1.PageSize;
            int pageIndex = Grid1.PageIndex + 1;
            SqlParameter[] parameter = new SqlParameter[]
                    {
                        new SqlParameter("@JobNo",JobNo),
                        new SqlParameter("@JobType",JobType),
                        new SqlParameter("@JobStatus",JobStatus),
                        new SqlParameter("@sId",ids),
                        new SqlParameter("@pageSize",pageSize),
                        new SqlParameter("@pageIndex",pageIndex),
                        new SqlParameter("@Layer",Layer),
                        new SqlParameter("@Status",Status)
                    };
            DataSet ds = SQLHelper.RunProcedure("Proc_NewManHours_Plan", parameter, "t");
            DataTable table = ds.Tables[0];
            Grid1.RecordCount = int.Parse(ds.Tables[1].Rows[0]["recordsTotal"].ToString());
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        #endregion

        #region 下拉框选择事件
        /// <summary>
        /// 下拉框选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void drpJobType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (hidpersonnel.Text == "D@" + BLL.Const.CTE_DepartId)
            {
                BindGrid("");
            }
            else
            {
                BindGrid(hidpersonnel.Text);
            }
        }
        /// <summary>
        /// 下拉框选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void drpJobStatus_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (hidpersonnel.Text == "D@" + BLL.Const.CTE_DepartId)
            {
                BindGrid("");
            }
            else
            {
                BindGrid(hidpersonnel.Text);
            }
        }
        #endregion

        #region 加载树节点
        /// <summary>
        /// 加载部门人员
        /// </summary>
        private void BindDeptTree(string UserName)
        {
            this.tvUser.Nodes.Clear();
            TreeNode rootNode = new TreeNode();
            rootNode.Text = "CTE";
            rootNode.ToolTip = "CTE";
            rootNode.NodeID = "D@" + BLL.Const.CTE_DepartId;
            rootNode.Expanded = true;
            rootNode.EnableClickEvent = true;
            this.tvUser.Nodes.Add(rootNode);

            var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId);
            if (user != null)
            {
                if (this.CurrUser.Account == BLL.Const.Gly || user.RoleId == Const.Role_PPE || user.DepartId == Const.CTEM_DepartId)
                {
                    List<Model.Base_Depart> departs = BLL.DepartService.GetDepartListBySupCheckItem(BLL.Const.CTE_DepartId);

                    foreach (var item in departs)
                    {
                        TreeNode departNode = new TreeNode();//定义根节点
                        departNode.Text = item.DepartName;
                        departNode.NodeID = "D@" + item.DepartId;
                        departNode.ToolTip = item.DepartName;
                        departNode.EnableClickEvent = true;
                        rootNode.Nodes.Add(departNode);
                        BindDeptNode(departNode, item.DepartId, UserName);
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(user.DepartId))
                    {
                        Model.Base_Depart departs = BLL.DepartService.GetDepartById(user.DepartId);
                        if (departs != null)
                        {
                            TreeNode departNode = new TreeNode();//定义根节点
                            departNode.Text = departs.DepartName;
                            departNode.NodeID = "D@" + departs.DepartId;
                            departNode.ToolTip = departs.DepartName;
                            departNode.EnableClickEvent = true;
                            departNode.Expanded = true;
                            rootNode.Nodes.Add(departNode);
                            BindDeptNode(departNode, departs.DepartId, UserName);
                        }
                    }
                }
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="DTnode"></param>
        /// <param name="DepartId"></param>
        private void BindDeptNode(TreeNode DTnode, string DepartId, string UserName)
        {
            try
            {
                string strSql = @"SELECT UserId,UserName,DepartId FROM dbo.Sys_User 
                                  WHERE IsPost=1 AND  Account <> 'gly' 
                                       AND DepartId=@DepartId ";
                List<SqlParameter> listStr = new List<SqlParameter>();
                var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId);
                if (user != null)
                {
                    if (this.CurrUser.Account == BLL.Const.Gly || user.RoleId == Const.Role_PPE || user.DepartId == Const.CTEM_DepartId)
                    {
                        listStr.Add(new SqlParameter("@DepartId", DepartId));
                        if (!string.IsNullOrEmpty(UserName))
                        {
                            strSql += " AND UserName LIKE @UserName ";
                            listStr.Add(new SqlParameter("@UserName", "%" + UserName + "%"));
                        }
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(user.DepartId))
                        {
                            listStr.Add(new SqlParameter("@DepartId", user.DepartId));
                        }
                        strSql += " AND UserId =@userId ";
                        listStr.Add(new SqlParameter("@userId", this.CurrUser.UserId));
                    }
                }

                strSql += " ORDER BY UserName";
                SqlParameter[] parameter = listStr.ToArray();
                DataTable table = SQLHelper.GetDataTableRunText(strSql, parameter);
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    node.Text = table.Rows[i]["UserName"].ToString();
                    node.NodeID = "U@" + table.Rows[i]["UserId"].ToString();
                    node.Expanded = true;
                    node.EnableClickEvent = true;
                    DTnode.Nodes.Add(node);//把指定的节点添加到控件中
                }
            }
            catch (Exception ex)
            {
                Alert.ShowInParent(ex.ToString());
            }
        }
        #endregion

        #region 点击树节点
        /// <summary>
        ///  树节点选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvUser_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e)
        {
            string id = e.Node.NodeID.ToString();
            if (id == "D@" + BLL.Const.CTE_DepartId)
            {
                BindGrid("");
            }
            else
            {
                BindGrid(id);
            }
            hidpersonnel.Text = id;
        }
        #endregion

        #region 分页、排序
        /// <summary>
        /// 分页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid(hidpersonnel.Text);
        }

        /// <summary>
        /// 分页显示条数下拉框
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid(hidpersonnel.Text);
        }

        /// <summary>
        /// 排序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid(hidpersonnel.Text);
        }
        #endregion

        #region 编辑
        /// <summary>
        /// 编辑实际人工时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEdit_Click(object sender, EventArgs e)
        {
            string UserId = "";
            if (CurrUser.Account == Const.Gly)
            {
                if (string.IsNullOrEmpty(hidpersonnel.Text))
                {
                    Alert.ShowInParent("Please select personnel!");
                    return;
                }
                string[] sIdArr = hidpersonnel.Text.Split('@');
                if (sIdArr[0].ToString() == "U")
                {
                    UserId = sIdArr[1].ToString();
                }
                else
                {
                    Alert.ShowInParent("Please select personnel!");
                    return;
                }
            }
            else
            {
                UserId = CurrUser.UserId;
            }
            PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("ManHoursActual.aspx?UserId={0}", UserId, "编辑 - ")));

        }

        /// <summary>
        /// 编辑计划人工时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNew_Click(object sender, EventArgs e)
        {
            //if ((DateTime.Now.Day > 5 || (DateTime.Now.Day == 5 && DateTime.Now.Hour > 17)) && DateTime.Now.Day < 26)
            //{
            //    Alert.ShowInParent("StaffingPlan已冻结!提示:下月计划人工时从本月26号开放填写,到下月5号下午5点冻结!");
            //    return;
            //}
            string UserId = "";

            if (CurrUser.Account == Const.Gly)
            {
                if (string.IsNullOrEmpty(hidpersonnel.Text))
                {
                    Alert.ShowInParent("Please select personnel!");
                    return;
                }
                string[] sIdArr = hidpersonnel.Text.Split('@');
                if (sIdArr[0].ToString() == "U")
                {
                    UserId = sIdArr[1].ToString();
                }
                else
                {
                    Alert.ShowInParent("Please select personnel!");
                    return;
                }
            }
            else
            {
                UserId = CurrUser.UserId;
            }
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("ManHoursPlanEditNew.aspx?UserId={0}", UserId, "编辑 - ")));
        }

        /// <summary>
        /// 右键编辑事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuEdit_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInParent("Please select at least one record!");
                return;
            }
            string Id = Grid1.SelectedRowID;
            PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("AccountDisabled.aspx?ManHoursPlanId={0}", Id, "人工时 - ")));
            //  btnEdit_Click(null, null);
        }

        protected void btnMenuAdd_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInParent("Please select at least one project!");
                return;
            }
            string Id = Grid1.SelectedRowID;
            var p = from x in Funs.DB.ManHours_Plan where x.ManHoursPlanId == Id select x;
            if (p.Count() > 0)
            {
                PageContext.RegisterStartupScript(Window4.GetShowReference(String.Format("AddManHours.aspx?eprojectId={0}", p.First().EProjectId, "人工时 - ")));
            }
        }

        /// <summary>
        /// Grid行双击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInParent("Please select at least one record!");
                return;
            }
            string Id = Grid1.SelectedRowID;
            PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("AccountDisabled.aspx?ManHoursPlanId={0}", Id, "人工时 - ")));
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuDel_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length > 0)
            {
                foreach (int rowIndex in Grid1.SelectedRowIndexArray)
                {
                    string rowID = Grid1.SelectedRowID;
                    if (!string.IsNullOrEmpty(rowID))
                    {
                        BLL.PlanService.DeletePlanById(rowID);
                    }
                }
                ShowNotify("Deleted successfully!");
                BLL.Sys_LogService.AddLog(this.CurrUser.UserId, "Delete ManHours information");
                BindGrid("");
            }
        }
        #endregion

        #region 关闭弹出窗口
        /// <summary>
        /// 关闭窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window1_Close(object sender, EventArgs e)
        {
            BindGrid("");
        }

        /// <summary>
        /// 关闭窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window3_Close(object sender, EventArgs e)
        {
            BindGrid("");
        }
        #endregion

        #region 权限设置
        /// <summary>
        /// 菜单按钮权限
        /// </summary>
        private void GetButtonPower()
        {
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.UserId, BLL.Const.ManHoursMenuId);
            if (buttonList.Count() > 0)
            {
                if (buttonList.Contains(BLL.Const.BtnAccountDisabled))
                {
                    this.btnMenuEdit.Hidden = false;
                }
               
                if (buttonList.Contains(BLL.Const.BtnOtherPlanEdit))
                {
                    this.btnAddOther.Hidden = false;
                }
            }
        }
        #endregion

        protected void btnAddOther_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window4.GetShowReference(String.Format("AddManHours.aspx", "人工时 - ")));
        }
    }
}