using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BLL;
using System.IO;
using System.Data.SqlClient;
using Newtonsoft.Json.Linq;
using AspNet = System.Web.UI.WebControls;

namespace FineUIPro.Web.CQMS.WBS
{
    public partial class ProjectControlItemInitSet : PageBase
    {
        #region  页面加载
        /// <summary>
        /// 页面加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (!BLL.WorkPackageProjectService.IsExitWorkPackageProject(this.CurrUser.LoginProjectId))
                {
                    //拷贝项目WBS数据
                    var workPackageInits = from x in Funs.DB.WBS_WorkPackageInit select x;
                    foreach (var workPackageInit in workPackageInits)
                    {
                        Model.WBS_WorkPackageProject workPackageProject = new Model.WBS_WorkPackageProject();
                        workPackageProject.WorkPackageCode = workPackageInit.WorkPackageCode;
                        workPackageProject.ProjectId = this.CurrUser.LoginProjectId;
                        workPackageProject.ProjectType = workPackageInit.ProjectType;
                        workPackageProject.PackageContent = workPackageInit.PackageContent;
                        workPackageProject.SuperWorkPack = workPackageInit.SuperWorkPack;
                        workPackageProject.IsChild = workPackageInit.IsChild;
                        workPackageProject.PackageCode = workPackageInit.PackageCode;
                        workPackageProject.ProjectType = workPackageInit.ProjectType;
                        BLL.WorkPackageProjectService.AddWorkPackageProject(workPackageProject);
                    }
                    var controlItemInits = from x in Funs.DB.WBS_ControlItemInit select x;
                    foreach (var controlItemInit in controlItemInits)
                    {
                        Model.WBS_ControlItemProject controlItemProject = new Model.WBS_ControlItemProject();
                        controlItemProject.ControlItemCode = controlItemInit.ControlItemCode;
                        controlItemProject.ProjectId = this.CurrUser.LoginProjectId;
                        controlItemProject.WorkPackageCode = controlItemInit.WorkPackageCode;
                        controlItemProject.ControlItemContent = controlItemInit.ControlItemContent;
                        controlItemProject.ControlPoint = controlItemInit.ControlPoint;
                        controlItemProject.ControlItemDef = controlItemInit.ControlItemDef;
                        controlItemProject.Weights = controlItemInit.Weights;
                        controlItemProject.HGForms = controlItemInit.HGForms;
                        controlItemProject.SHForms = controlItemInit.SHForms;
                        controlItemProject.Standard = controlItemInit.Standard;
                        controlItemProject.ClauseNo = controlItemInit.ClauseNo;
                        controlItemProject.CheckNum = 1;
                        BLL.ControlItemProjectService.AddControlItemProject(controlItemProject);
                    }
                }
                GetButtonPower();
                InitTreeMenu();
            }
        }
        #endregion

        #region  加载树
        /// <summary>
        /// 加载树
        /// </summary>
        private void InitTreeMenu()
        {
            this.trWBS.Nodes.Clear();
            this.trWBS.ShowBorder = false;
            this.trWBS.ShowHeader = false;
            this.trWBS.EnableIcons = true;
            this.trWBS.AutoScroll = true;
            this.trWBS.EnableSingleClickExpand = true;

            TreeNode rootNode1 = new TreeNode();
            rootNode1.Text = "建筑工程";
            rootNode1.NodeID = "1";
            rootNode1.CommandName = "ProjectType";
            //rootNode1.EnableExpandEvent = true;
            rootNode1.EnableClickEvent = true;
            this.trWBS.Nodes.Add(rootNode1);
            this.GetNodes(rootNode1.Nodes, rootNode1.NodeID);

            TreeNode rootNode2 = new TreeNode();
            rootNode2.Text = "安装工程";
            rootNode2.NodeID = "2";
            rootNode2.CommandName = "ProjectType";
            //rootNode2.EnableExpandEvent = true;
            rootNode2.EnableClickEvent = true;
            this.trWBS.Nodes.Add(rootNode2);
            this.GetNodes(rootNode2.Nodes, rootNode2.NodeID);
        }

        #region  遍历节点方法
        /// <summary>
        /// 遍历节点方法
        /// </summary>
        /// <param name="nodes">节点集合</param>
        /// <param name="parentId">父节点</param>
        private void GetNodes(TreeNodeCollection nodes, string parentId)
        {
            List<Model.WBS_WorkPackageProject> workPackages = new List<Model.WBS_WorkPackageProject>();
            if (parentId.Length == 1) //工程类型节点
            {
                workPackages = (from x in Funs.DB.WBS_WorkPackageProject
                                where x.SuperWorkPack == null && x.ProjectId == this.CurrUser.LoginProjectId && x.ProjectType == parentId
                                orderby x.PackageCode ascending
                                select x).ToList();
            }
            else
            {
                workPackages = (from x in Funs.DB.WBS_WorkPackageProject
                                where x.SuperWorkPack == parentId && x.ProjectId == this.CurrUser.LoginProjectId
                                orderby x.PackageCode ascending
                                select x).ToList();
            }
            foreach (var q in workPackages)
            {
                TreeNode newNode = new TreeNode();
                newNode.Text = q.PackageContent;
                newNode.NodeID = q.WorkPackageCode;
                newNode.CommandName = "WorkPackage";
                newNode.EnableClickEvent = true;
                nodes.Add(newNode);
            }

            for (int i = 0; i < nodes.Count; i++)
            {
                GetNodes(nodes[i].Nodes, nodes[i].NodeID);
            }
        }
        #endregion
        #endregion

        #region  展开树
        /// <summary>
        /// 展开树
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void trWBS_NodeExpand(object sender, TreeNodeEventArgs e)
        {
            e.Node.Nodes.Clear();
            if (e.Node.CommandName == "ProjectType")   //展开工程类型
            {
                var workPackages = from x in Funs.DB.WBS_WorkPackageProject where x.ProjectType == e.NodeID && x.SuperWorkPack == null orderby x.WorkPackageCode select x;
                foreach (var workPackage in workPackages)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = workPackage.PackageContent;
                    newNode.NodeID = workPackage.WorkPackageCode;
                    newNode.CommandName = "WorkPackage";
                    newNode.EnableExpandEvent = true;
                    newNode.EnableClickEvent = true;
                    e.Node.Nodes.Add(newNode);
                    var childWorkPackages = from x in Funs.DB.WBS_WorkPackageProject where x.SuperWorkPack == workPackage.WorkPackageCode select x;
                    if (childWorkPackages.Count() > 0)
                    {
                        TreeNode emptyNode = new TreeNode();
                        emptyNode.Text = "";
                        emptyNode.NodeID = "";
                        newNode.Nodes.Add(emptyNode);
                    }
                }
            }
            else if (e.Node.CommandName == "WorkPackage")   //展开分部节点
            {
                var workPackages = from x in Funs.DB.WBS_WorkPackageProject where x.SuperWorkPack == e.Node.NodeID orderby x.WorkPackageCode select x;
                if (workPackages.Count() > 0)   //存在子分部工程
                {
                    foreach (var workPackage in workPackages)
                    {
                        TreeNode newNode = new TreeNode();
                        newNode.Text = workPackage.PackageContent;
                        newNode.NodeID = workPackage.WorkPackageCode;
                        newNode.CommandName = "WorkPackage";
                        newNode.EnableExpandEvent = true;
                        newNode.EnableClickEvent = true;
                        e.Node.Nodes.Add(newNode);
                        var childWorkPackages = from x in Funs.DB.WBS_WorkPackageProject where x.SuperWorkPack == workPackage.WorkPackageCode select x;
                        if (childWorkPackages.Count() > 0)
                        {
                            TreeNode emptyNode = new TreeNode();
                            emptyNode.Text = "";
                            emptyNode.NodeID = "";
                            newNode.Nodes.Add(emptyNode);
                        }
                    }
                }
            }
        }
        #endregion

        #region  Tree点击事件
        /// <summary>
        /// Tree点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void trWBS_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            this.cbAllHGForms.Checked = false;
            this.cbAllSHForms.Checked = false;
            BindGrid();
        }
        #endregion

        #region  修改关闭窗口
        /// <summary>
        /// 关闭窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            ShowNotify("修改成功!", MessageBoxIcon.Success);

            GetSelectTreeNode();
        }
        #endregion

        #region  增加关闭窗口
        /// <summary>
        /// 增加关闭窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window2_Close(object sender, WindowCloseEventArgs e)
        {
            ShowNotify("增加成功!", MessageBoxIcon.Success);

            GetSelectTreeNode();
        }
        #endregion

        #region  关闭窗口
        /// <summary>
        /// 关闭窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window3_Close(object sender, WindowCloseEventArgs e)
        {
            ShowNotify("保存成功!", MessageBoxIcon.Success);
            BindGrid();
        }
        #endregion

        #region 右键增加、修改、删除方法
        /// <summary>
        /// 右键修改事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuEdit_Click(object sender, EventArgs e)
        {
            if (this.trWBS.SelectedNode != null)
            {
                if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.ControlItemProjectSetMenuId, BLL.Const.BtnModify))
                {
                    if (this.trWBS.SelectedNode.CommandName != "ProjectType")   //非工程类型节点可以修改
                    {
                        this.hdSelectId.Text = this.trWBS.SelectedNode.NodeID;

                        string openUrl = String.Format("WorkPackageProjectEdit.aspx?type=modify&Id={0}", this.trWBS.SelectedNode.NodeID, "编辑 - ");
                        PageContext.RegisterStartupScript(Window1.GetSaveStateReference(hdSelectId.ClientID)
                                    + Window1.GetShowReference(openUrl));
                    }
                    else
                    {
                        ShowNotify("工程类型节点无法修改!", MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// 增加
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuAdd_Click(object sender, EventArgs e)
        {
            if (this.trWBS.SelectedNode != null)
            {
                if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.ControlItemProjectSetMenuId, BLL.Const.BtnAdd))
                {
                    if (this.trWBS.SelectedNode.CommandName != "ProjectType")   //非工程类型节点可以增加
                    {
                        Model.WBS_WorkPackageProject workPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(this.trWBS.SelectedNodeID, this.CurrUser.LoginProjectId);
                        if (workPackageProject.IsChild == true)
                        {
                            string openUrl = String.Format("WorkPackageProjectEdit.aspx?type=add&Id={0}", this.trWBS.SelectedNode.NodeID, "增加 - ");

                            PageContext.RegisterStartupScript(Window2.GetSaveStateReference(hdSelectId.ClientID)
                                    + Window2.GetShowReference(openUrl));
                        }
                        //PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("WBSSetCopy.aspx?Id={0}&Type={1}", this.trWBS.SelectedNode.NodeID, this.trWBS.SelectedNode.CommandName, "拷贝 - ")));
                        else
                        {
                            ShowNotify("已是末级,无法添加子级节点!", MessageBoxIcon.Warning);
                        }
                    }
                    else
                    {
                        ShowNotify("工程类型节点无法增加!", MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// 右键删除事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuDelete_Click(object sender, EventArgs e)
        {
            if (this.trWBS.SelectedNode != null)
            {
                if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.ControlItemProjectSetMenuId, BLL.Const.BtnDelete))
                {
                    if (this.trWBS.SelectedNode.CommandName != "ProjectType")   //非工程类型节点可以删除
                    {
                        string id = this.trWBS.SelectedNodeID;
                        var workPackage = Funs.DB.WBS_WorkPackage.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId && x.InitWorkPackageCode == this.trWBS.SelectedNodeID);
                        if (workPackage != null)
                        {
                            ShowNotify("WBS定制中已使用该数据,无法删除!", MessageBoxIcon.Warning);
                        }
                        else
                        {
                            DeleteData();
                        }
                    }
                    else
                    {
                        ShowNotify("工程类型节点无法删除!", MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// 删除方法
        /// </summary>
        private void DeleteData()
        {
            string id = this.trWBS.SelectedNodeID;
            this.hdSelectId.Text = this.trWBS.SelectedNode.ParentNode.NodeID;
            if (this.trWBS.SelectedNode.CommandName == "WorkPackage")
            {
                Model.WBS_WorkPackageProject workPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(id, this.CurrUser.LoginProjectId);
                if (workPackageProject != null)
                {
                    List<Model.WBS_WorkPackageProject> childWorkPackageProjects1 = BLL.WorkPackageProjectService.GetWorkPackageProjectsBySuperWorkPack(id, this.CurrUser.LoginProjectId);
                    if (childWorkPackageProjects1.Count > 0)   //存在子分部分项
                    {
                        this.hdSelectId.Text = workPackageProject.WorkPackageCode;
                        foreach (var childWorkPackageProject1 in childWorkPackageProjects1)
                        {
                            List<Model.WBS_WorkPackageProject> childWorkPackageProjects2 = BLL.WorkPackageProjectService.GetWorkPackageProjectsBySuperWorkPack(childWorkPackageProject1.WorkPackageCode, this.CurrUser.LoginProjectId);
                            if (childWorkPackageProjects2.Count > 0)
                            {
                                foreach (var childWorkPackageProject2 in childWorkPackageProjects2)
                                {
                                    BLL.ControlItemProjectService.DeleteAllControlItemProject(childWorkPackageProject2.WorkPackageCode, this.CurrUser.LoginProjectId);
                                    BLL.WorkPackageProjectService.DeleteWorkPackageProject(childWorkPackageProject2.WorkPackageCode, this.CurrUser.LoginProjectId);
                                }
                            }
                            BLL.ControlItemProjectService.DeleteAllControlItemProject(childWorkPackageProject1.WorkPackageCode, this.CurrUser.LoginProjectId);
                            BLL.WorkPackageProjectService.DeleteWorkPackageProject(childWorkPackageProject1.WorkPackageCode, this.CurrUser.LoginProjectId);
                        }
                    }
                    BLL.ControlItemProjectService.DeleteAllControlItemProject(id, this.CurrUser.LoginProjectId);
                    BLL.WorkPackageProjectService.DeleteWorkPackageProject(id, this.CurrUser.LoginProjectId);
                }
            }
            BLL.LogService.AddSys_Log(this.CurrUser, id, id, BLL.Const.ControlItemProjectSetMenuId, "删除分部分项信息!");
            ShowNotify("删除成功!", MessageBoxIcon.Success);

            GetSelectTreeNode();
        }
        #endregion

        /// <summary>
        /// 增加
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNew_Click(object sender, EventArgs e)
        {
            if (this.trWBS.SelectedNode != null)
            {
                if (this.trWBS.SelectedNode.CommandName != "ProjectType")   //非工程类型节点可以增加
                {
                    Model.WBS_WorkPackageProject workPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(this.trWBS.SelectedNodeID, this.CurrUser.LoginProjectId);
                    if (workPackageProject.IsChild == false)
                    {
                        //string openUrl = String.Format("ControlItemProjectEdit.aspx?type=add&WorkPackageCode={0}", this.trWBS.SelectedNode.NodeID, "增加 - ");
                        //PageContext.RegisterStartupScript(Window3.GetSaveStateReference(hdSelectId.ClientID)
                        //        + Window2.GetShowReference(openUrl));
                        PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("ControlItemProjectEdit.aspx?type=add&WorkPackageCode={0}", this.trWBS.SelectedNode.NodeID, "新增 - ")));
                    }
                    else
                    {
                        ShowNotify("不是末级,无法添加工作包!", MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    ShowNotify("工程类型节点无法增加工作包!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            decimal weights = 0;
            foreach (JObject mergedRow in Grid1.GetMergedData())
            {
                JObject values = mergedRow.Value<JObject>("values");

                try
                {
                    weights += Convert.ToDecimal(values.Value<string>("Weights"));
                }
                catch (Exception)
                {

                }
            }
            if (weights != 100)
            {
                Alert.ShowInTop("权重值不是100,请调整后再保存!", MessageBoxIcon.Warning);
                return;
            }
            foreach (JObject mergedRow in Grid1.GetMergedData())
            {
                JObject values = mergedRow.Value<JObject>("values");
                int i = mergedRow.Value<int>("index");
                string controlItemCode = values.Value<string>("ControlItemCode");
                Model.WBS_ControlItemProject controlItemProject = BLL.ControlItemProjectService.GetControlItemProjectByCode(controlItemCode, this.CurrUser.LoginProjectId);
                controlItemProject.ControlPoint = values.Value<string>("ControlPoint");
                try
                {
                    controlItemProject.Weights = Convert.ToDecimal(values.Value<string>("Weights"));
                }
                catch (Exception)
                {
                    controlItemProject.Weights = null;
                }
                controlItemProject.ControlItemDef = values.Value<string>("ControlItemDef");
                controlItemProject.Standard = values.Value<string>("Standard");
                controlItemProject.ClauseNo = values.Value<string>("ClauseNo");
                try
                {
                    controlItemProject.CheckNum = Convert.ToInt32(values.Value<string>("CheckNum"));
                }
                catch (Exception)
                {
                    controlItemProject.CheckNum = null;
                }
                AspNet.CheckBoxList cblHGForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblHGForms"));
                string hGForms = string.Empty;
                for (int j = 0; j < cblHGForms1.Items.Count; j++)
                {
                    if (cblHGForms1.Items[j].Selected)
                    {
                        hGForms += cblHGForms1.Items[j].Text + ",";
                    }
                }
                if (!string.IsNullOrEmpty(hGForms))
                {
                    hGForms = hGForms.Substring(0, hGForms.LastIndexOf(","));
                }
                controlItemProject.HGForms = hGForms;
                AspNet.CheckBoxList cblSHForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblSHForms"));
                string sHForms = string.Empty;
                for (int j = 0; j < cblSHForms1.Items.Count; j++)
                {
                    if (cblSHForms1.Items[j].Selected)
                    {
                        sHForms += cblSHForms1.Items[j].Text + ",";
                    }
                }
                if (!string.IsNullOrEmpty(sHForms))
                {
                    sHForms = sHForms.Substring(0, sHForms.LastIndexOf(","));
                }
                controlItemProject.SHForms = sHForms;
                BLL.ControlItemProjectService.UpdateControlItemProject(controlItemProject);
                //更新项目定制内容
                var controlItemAndCycles = from x in Funs.DB.WBS_ControlItemAndCycle where x.ProjectId == CurrUser.LoginProjectId && x.InitControlItemCode == controlItemProject.ControlItemCode select x;
                if (controlItemAndCycles.Count() > 0)
                {
                    foreach (var item in controlItemAndCycles)
                    {
                        item.ControlPoint = controlItemProject.ControlPoint;
                        item.Weights = controlItemProject.Weights;
                        item.ControlItemDef = controlItemProject.ControlItemDef;
                        item.Standard = controlItemProject.Standard;
                        item.ClauseNo = controlItemProject.ClauseNo;
                        item.CheckNum = controlItemProject.CheckNum;
                        item.HGForms = controlItemProject.HGForms;
                        item.SHForms = controlItemProject.SHForms;
                    }
                }
            }
            ShowNotify("保存成功!", MessageBoxIcon.Success);
        }

        #region Grid双击事件
        /// <summary>
        /// Grid行双击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            btnMenuModify_Click(null, null);
        }
        #endregion
        #region 编辑
        /// <summary>
        /// 编辑按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuModify_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("ControlItemProjectEdit.aspx?type=modify&ControlItemCode={0}&WorkPackageCode={1}", this.Grid1.SelectedRowID, this.trWBS.SelectedNodeID, "新增 - ")));
        }
        #endregion

        #region 删除
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnMenuDel_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            var controlItemAndCycle = Funs.DB.WBS_ControlItemAndCycle.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId && x.InitControlItemCode == Grid1.SelectedRowID);
            if (controlItemAndCycle != null)
            {
                ShowNotify("WBS定制中已使用该数据,无法删除!", MessageBoxIcon.Warning);
            }
            else
            {
                BLL.ControlItemProjectService.DeleteControlItemProject(Grid1.SelectedRowID, this.CurrUser.LoginProjectId);
                BLL.LogService.AddSys_Log(this.CurrUser, Grid1.SelectedRowID, Grid1.SelectedRowID, BLL.Const.ControlItemProjectSetMenuId, "删除工作包");
                Grid1.DataBind();
                BindGrid();
                Alert.ShowInTop("删除数据成功!", MessageBoxIcon.Success);
            }
        }
        #endregion

        #region  绑定数据
        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_FilterChange(object sender, EventArgs e)
        {
            BindGrid();
        }

        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }

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

        /// <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();
        }

        /// <summary>
        /// 加载Grid
        /// </summary>
        private void BindGrid()
        {
            string strSql = @"SELECT ControlItemCode,WorkPackageCode,ControlItemContent,ControlPoint,ControlItemDef,Weights,HGForms,SHForms,Standard,ClauseNo,CheckNum"
                     + @" FROM WBS_ControlItemProject ";
            List<SqlParameter> listStr = new List<SqlParameter>();
            strSql += " where WorkPackageCode = @WorkPackageCode and ProjectId=@ProjectId";
            listStr.Add(new SqlParameter("@WorkPackageCode", this.trWBS.SelectedNodeID));
            listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);

            Grid1.RecordCount = tb.Rows.Count;
            tb = GetFilteredTable(Grid1.FilteredData, tb);
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
            Model.WBS_WorkPackageProject workPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(this.trWBS.SelectedNodeID, this.CurrUser.LoginProjectId);
            if (workPackageProject != null)
            {
                if (workPackageProject.ProjectType == "1")  //建筑工程
                {
                    this.Grid1.Columns[4].HeaderText = "对应的建筑资料表格";
                    this.Grid1.Columns[5].Hidden = true;
                    this.lbHd.Width = System.Web.UI.WebControls.Unit.Pixel(480);
                    this.cbAllHGForms.Label = "全选对应的建筑资料表格";
                    this.cbAllHGForms.LabelWidth = System.Web.UI.WebControls.Unit.Pixel(175);
                    this.cbAllSHForms.Hidden = true;
                }
                else    //安装工程
                {
                    this.Grid1.Columns[4].HeaderText = "对应的化工资料表格";
                    this.Grid1.Columns[5].Hidden = false;
                    this.lbHd.Width = System.Web.UI.WebControls.Unit.Pixel(380);
                    this.cbAllHGForms.Label = "全选对应的化工资料表格";
                    this.cbAllHGForms.LabelWidth = System.Web.UI.WebControls.Unit.Pixel(175);
                    this.cbAllSHForms.Hidden = false;
                }
            }
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                Model.WBS_ControlItemInit c = BLL.ControlItemInitService.GetControlItemInitByCode(this.Grid1.Rows[i].RowID.ToString());
                Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.Rows[i].RowID.ToString(), this.CurrUser.LoginProjectId);
                List<string> hGForms = new List<string>();
                if (c != null && !string.IsNullOrEmpty(c.HGForms))
                {
                    hGForms = c.HGForms.Split(',').ToList();
                }
                string[] phGForms = cp.HGForms.Split(',');
                foreach (var item in phGForms)   //项目工作包表格中增加的表格也要显示
                {
                    hGForms.Add(item);
                }
                hGForms = hGForms.Distinct().ToList();
                AspNet.CheckBoxList cblHGForms = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblHGForms"));
                cblHGForms.Items.Clear();
                foreach (var hGForm in hGForms)   //加载基础库的表格数据
                {
                    if (!string.IsNullOrEmpty(hGForm))
                    {
                        AspNet.ListItem li = new AspNet.ListItem();
                        li.Text = hGForm;
                        li.Value = hGForm;
                        cblHGForms.Items.Add(li);
                    }
                }
                for (int j = 0; j < cblHGForms.Items.Count; j++)
                {
                    if (cp.HGForms.Contains(cblHGForms.Items[j].Value))   //项目库中包含的表格选中
                    {
                        cblHGForms.Items[j].Selected = true;
                    }
                }
                List<string> sHForms = new List<string>();
                if (c != null && !string.IsNullOrEmpty(c.SHForms))
                {
                    sHForms = c.SHForms.Split(',').ToList();
                }
                string[] psHForms = cp.SHForms.Split(',');
                foreach (var item in psHForms)    //项目工作包表格中增加的表格也要显示
                {
                    sHForms.Add(item);
                }
                sHForms = sHForms.Distinct().ToList();
                AspNet.CheckBoxList cblSHForms = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblSHForms"));
                cblSHForms.Items.Clear();
                foreach (var sHForm in sHForms)   //加载基础库的表格数据
                {
                    if (!string.IsNullOrEmpty(sHForm))
                    {
                        AspNet.ListItem li = new AspNet.ListItem();
                        li.Text = sHForm;
                        li.Value = sHForm;
                        cblSHForms.Items.Add(li);
                    }
                }
                for (int j = 0; j < cblSHForms.Items.Count; j++)
                {
                    if (cp.SHForms.Contains(cblSHForms.Items[j].Value))   //项目库中包含的表格选中
                    {
                        cblSHForms.Items[j].Selected = true;
                    }
                }
            }
        }
        #endregion

        #region 根据所给Id定位到对应分部分项
        /// <summary>
        /// 根据所给Id定位到对应具体的工程类型、单位工程、子单位工程、分部、子分部、分项、子分项
        /// </summary>
        private void GetSelectTreeNode()
        {
            string projectType = string.Empty;
            string workPackageCode1 = string.Empty;
            string workPackageCode2 = string.Empty;
            Model.WBS_WorkPackageProject workPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(this.hdSelectId.Text, this.CurrUser.LoginProjectId);
            if (workPackageProject != null)
            {
                if (workPackageProject.SuperWorkPack == null)   //选中第一级分部分项
                {
                    projectType = workPackageProject.ProjectType;
                }
                else
                {
                    Model.WBS_WorkPackageProject pWorkPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(workPackageProject.SuperWorkPack, this.CurrUser.LoginProjectId);
                    {
                        if (pWorkPackageProject.SuperWorkPack == null)    //选中第二级分部分项
                        {
                            projectType = pWorkPackageProject.ProjectType;
                            workPackageCode1 = pWorkPackageProject.WorkPackageCode;
                        }
                        else
                        {
                            Model.WBS_WorkPackageProject ppWorkPackageProject = BLL.WorkPackageProjectService.GetWorkPackageProjectByWorkPackageCode(pWorkPackageProject.SuperWorkPack, this.CurrUser.LoginProjectId);
                            projectType = ppWorkPackageProject.ProjectType;
                            workPackageCode1 = ppWorkPackageProject.WorkPackageCode;
                            workPackageCode2 = pWorkPackageProject.WorkPackageCode;
                        }
                    }
                }
            }
            InitTreeMenu();
            for (int i = 0; i < trWBS.Nodes.Count; i++)
            {
                if (trWBS.Nodes[i].NodeID == projectType)
                {
                    trWBS.Nodes[i].Expanded = true;
                    if (!string.IsNullOrEmpty(workPackageCode1))
                    {
                        for (int j = 0; j < trWBS.Nodes[i].Nodes.Count; j++)
                        {
                            if (trWBS.Nodes[i].Nodes[j].NodeID == workPackageCode1)
                            {
                                trWBS.Nodes[i].Nodes[j].Expanded = true;
                                if (!string.IsNullOrEmpty(workPackageCode2))
                                {
                                    for (int k = 0; k < trWBS.Nodes[i].Nodes[j].Nodes.Count; k++)
                                    {
                                        if (trWBS.Nodes[i].Nodes[j].Nodes[k].NodeID == workPackageCode2)
                                        {
                                            trWBS.Nodes[i].Nodes[j].Nodes[k].Expanded = true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            this.trWBS.SelectedNodeID = this.hdSelectId.Text;
            //BindGrid();
        }
        #endregion

        #region 获取按钮权限
        /// <summary>
        /// 获取按钮权限
        /// </summary>
        /// <param name="button"></param>
        /// <returns></returns>
        private void GetButtonPower()
        {
            if (Request.Params["value"] == "0")
            {
                return;
            }
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.ControlItemProjectSetMenuId);
            if (buttonList.Count() > 0)
            {
                if (buttonList.Contains(BLL.Const.BtnAdd))
                {
                    this.btnNew.Hidden = false;
                    this.btnMenuAdd.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnModify))
                {
                    this.btnMenuEdit.Hidden = false;
                    this.btnMenuModify.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnSave))
                {
                    this.btnSave.Hidden = false;
                    this.btnRset.Hidden = false;
                    this.btnAllRset.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnDelete))
                {
                    this.btnMenuDelete.Hidden = false;
                    this.btnMenuDel.Hidden = false;
                }
            }
        }
        #endregion

        #region  表格选择事件
        protected void cblHGForms_SelectedIndexChanged(object sender, EventArgs e)
        {
            AspNet.CheckBoxList cblHGForms = sender as AspNet.CheckBoxList;
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                AspNet.CheckBoxList cblHGForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblHGForms"));
                if (cblHGForms1.ClientID == cblHGForms.ClientID)
                {
                    Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.SelectedRowID, this.CurrUser.LoginProjectId);
                    string hGForms = string.Empty;
                    for (int j = 0; j < cblHGForms.Items.Count; j++)
                    {
                        if (cblHGForms.Items[j].Selected)
                        {
                            hGForms += cblHGForms.Items[j].Text + ",";
                        }
                    }
                    if (!string.IsNullOrEmpty(hGForms))
                    {
                        hGForms = hGForms.Substring(0, hGForms.LastIndexOf(","));
                    }
                    cp.HGForms = hGForms;
                    BLL.ControlItemProjectService.UpdateControlItemProject(cp);
                }
            }
        }

        protected void cblSHForms_SelectedIndexChanged(object sender, EventArgs e)
        {
            AspNet.CheckBoxList cblSHForms = sender as AspNet.CheckBoxList;
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                AspNet.CheckBoxList cblSHForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblSHForms"));
                if (cblSHForms1.ClientID == cblSHForms.ClientID)
                {
                    Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.SelectedRowID, this.CurrUser.LoginProjectId);
                    if (cp != null)
                    {
                        string sHForms = string.Empty;
                        for (int j = 0; j < cblSHForms.Items.Count; j++)
                        {
                            if (cblSHForms.Items[j].Selected)
                            {
                                sHForms += cblSHForms.Items[j].Text + ",";
                            }
                        }
                        if (!string.IsNullOrEmpty(sHForms))
                        {
                            sHForms = sHForms.Substring(0, sHForms.LastIndexOf(","));
                        }
                        cp.SHForms = sHForms;
                        BLL.ControlItemProjectService.UpdateControlItemProject(cp);
                    }
                }
            }
        }
        #endregion

        #region  按级别显示事件
        /// <summary>
        /// 第一级
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLevel1_Click(object sender, EventArgs e)
        {
            this.trWBS.CollapseAllNodes();
            for (int i = 0; i < trWBS.Nodes.Count; i++)
            {
                trWBS.Nodes[i].Expanded = true;
            }
        }

        /// <summary>
        /// 第二级
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLevel2_Click(object sender, EventArgs e)
        {
            this.trWBS.CollapseAllNodes();
            for (int i = 0; i < trWBS.Nodes.Count; i++)
            {
                trWBS.Nodes[i].Expanded = true;
                for (int j = 0; j < trWBS.Nodes[i].Nodes.Count; j++)
                {
                    trWBS.Nodes[i].Nodes[j].Expanded = true;
                }
            }
        }

        /// <summary>
        /// 第三级
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLevel3_Click(object sender, EventArgs e)
        {
            this.trWBS.CollapseAllNodes();
            for (int i = 0; i < trWBS.Nodes.Count; i++)
            {
                trWBS.Nodes[i].Expanded = true;
                for (int j = 0; j < trWBS.Nodes[i].Nodes.Count; j++)
                {
                    trWBS.Nodes[i].Nodes[j].Expanded = true;
                    for (int k = 0; k < trWBS.Nodes[i].Nodes[j].Nodes.Count; k++)
                    {
                        trWBS.Nodes[i].Nodes[j].Nodes[k].Expanded = true;
                    }
                }
            }
        }
        #endregion

        #region 恢复默认
        protected void btnRset_Click(object sender, EventArgs e)
        {
            if (this.trWBS.SelectedNode != null && this.trWBS.SelectedNode.Nodes.Count == 0)  //末级节点
            {
                //删除新增项
                var q = BLL.ControlItemProjectService.GetItemsByWorkPackageCode(this.trWBS.SelectedNodeID, this.CurrUser.LoginProjectId);
                foreach (var item in q)
                {
                    Model.WBS_ControlItemInit init = BLL.ControlItemInitService.GetControlItemInitByCode(item.ControlItemCode);
                    if (init == null)
                    {
                        BLL.ControlItemProjectService.DeleteControlItemProject(item.ControlItemCode, this.CurrUser.LoginProjectId);
                    }
                }
                //恢复默认
                var q2 = BLL.ControlItemInitService.GetItemsByWorkPackageCode(this.trWBS.SelectedNodeID);
                foreach (var item in q2)
                {
                    var cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(item.ControlItemCode, this.CurrUser.LoginProjectId);
                    if (cp != null)
                    {
                        cp.ControlItemContent = item.ControlItemContent;
                        cp.ControlPoint = item.ControlPoint;
                        cp.ControlItemDef = item.ControlItemDef;
                        cp.Weights = item.Weights;
                        cp.HGForms = item.HGForms;
                        cp.SHForms = item.SHForms;
                        cp.Standard = item.Standard;
                        cp.ClauseNo = item.ClauseNo;
                        cp.CheckNum = 1;
                        BLL.ControlItemProjectService.UpdateControlItemProject(cp);
                    }
                    else
                    {
                        Model.WBS_ControlItemProject controlItemProject = new Model.WBS_ControlItemProject();
                        controlItemProject.ControlItemCode = item.ControlItemCode;
                        controlItemProject.ProjectId = this.CurrUser.LoginProjectId;
                        controlItemProject.WorkPackageCode = item.WorkPackageCode;
                        controlItemProject.ControlItemContent = item.ControlItemContent;
                        controlItemProject.ControlPoint = item.ControlPoint;
                        controlItemProject.ControlItemDef = item.ControlItemDef;
                        controlItemProject.Weights = item.Weights;
                        controlItemProject.HGForms = item.HGForms;
                        controlItemProject.SHForms = item.SHForms;
                        controlItemProject.Standard = item.Standard;
                        controlItemProject.ClauseNo = item.ClauseNo;
                        controlItemProject.CheckNum = 1;
                        BLL.ControlItemProjectService.AddControlItemProject(controlItemProject);
                    }
                }
                ShowNotify("恢复默认成功!", MessageBoxIcon.Success);
                BindGrid();
            }
            else
            {
                Alert.ShowInTop("请选择树节点的末级!", MessageBoxIcon.Warning);
            }
        }

        protected void btnAllRset_Click(object sender, EventArgs e)
        {
            var controlItemProjects = from x in Funs.DB.WBS_ControlItemProject where x.ProjectId == this.CurrUser.LoginProjectId select x;
            Funs.DB.WBS_ControlItemProject.DeleteAllOnSubmit(controlItemProjects);
            var workPackageProjects = from x in Funs.DB.WBS_WorkPackageProject where x.ProjectId == this.CurrUser.LoginProjectId select x;
            Funs.DB.WBS_WorkPackageProject.DeleteAllOnSubmit(workPackageProjects);
            Funs.DB.SubmitChanges();
            //拷贝项目WBS数据
            var workPackageInits = from x in Funs.DB.WBS_WorkPackageInit select x;
            foreach (var workPackageInit in workPackageInits)
            {
                Model.WBS_WorkPackageProject workPackageProject = new Model.WBS_WorkPackageProject();
                workPackageProject.WorkPackageCode = workPackageInit.WorkPackageCode;
                workPackageProject.ProjectId = this.CurrUser.LoginProjectId;
                workPackageProject.ProjectType = workPackageInit.ProjectType;
                workPackageProject.PackageContent = workPackageInit.PackageContent;
                workPackageProject.SuperWorkPack = workPackageInit.SuperWorkPack;
                workPackageProject.IsChild = workPackageInit.IsChild;
                workPackageProject.PackageCode = workPackageInit.PackageCode;
                workPackageProject.ProjectType = workPackageInit.ProjectType;
                BLL.WorkPackageProjectService.AddWorkPackageProject(workPackageProject);
            }
            var controlItemInits = from x in Funs.DB.WBS_ControlItemInit select x;
            foreach (var controlItemInit in controlItemInits)
            {
                Model.WBS_ControlItemProject controlItemProject = new Model.WBS_ControlItemProject();
                controlItemProject.ControlItemCode = controlItemInit.ControlItemCode;
                controlItemProject.ProjectId = this.CurrUser.LoginProjectId;
                controlItemProject.WorkPackageCode = controlItemInit.WorkPackageCode;
                controlItemProject.ControlItemContent = controlItemInit.ControlItemContent;
                controlItemProject.ControlPoint = controlItemInit.ControlPoint;
                controlItemProject.ControlItemDef = controlItemInit.ControlItemDef;
                controlItemProject.Weights = controlItemInit.Weights;
                controlItemProject.HGForms = controlItemInit.HGForms;
                controlItemProject.SHForms = controlItemInit.SHForms;
                controlItemProject.Standard = controlItemInit.Standard;
                controlItemProject.ClauseNo = controlItemInit.ClauseNo;
                controlItemProject.CheckNum = 1;
                BLL.ControlItemProjectService.AddControlItemProject(controlItemProject);
            }
            ShowNotify("全部恢复默认成功!", MessageBoxIcon.Success);
            InitTreeMenu();
            //BindGrid();
        }
        #endregion

        #region  全选化工表格
        protected void cbAllHGForms_CheckedChanged(object sender, CheckedEventArgs e)
        {
            CheckBox cblAllHGForms = sender as CheckBox;
            BindGrid();
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                AspNet.CheckBoxList cblHGForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblHGForms"));
                Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.Rows[i].RowID, this.CurrUser.LoginProjectId);
                for (int j = 0; j < cblHGForms1.Items.Count; j++)
                {
                    if (cblAllHGForms.Checked)
                    {
                        cblHGForms1.Items[j].Selected = true;
                    }
                    else
                    {
                        cblHGForms1.Items[j].Selected = false;
                    }
                }
            }

            //CheckBox cblAllHGForms = sender as CheckBox;
            //for (int i = 0; i < this.Grid1.Rows.Count; i++)
            //{
            //    AspNet.CheckBoxList cblHGForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblHGForms"));
            //    Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.Rows[i].RowID, this.CurrUser.LoginProjectId);
            //    string hGForms = string.Empty;
            //    for (int j = 0; j < cblHGForms1.Items.Count; j++)
            //    {
            //        if (cblAllHGForms.Checked)
            //        {
            //            hGForms += cblHGForms1.Items[j].Text + ",";
            //        }
            //    }
            //    if (!string.IsNullOrEmpty(hGForms))
            //    {
            //        hGForms = hGForms.Substring(0, hGForms.LastIndexOf(","));
            //    }
            //    cp.HGForms = hGForms;
            //    BLL.ControlItemProjectService.UpdateControlItemProject(cp);
            //}
            //BindGrid();
        }
        #endregion

        #region  全选化工表格
        protected void cbAllSHForms_CheckedChanged(object sender, CheckedEventArgs e)
        {
            CheckBox cblAllSHForms = sender as CheckBox;
            BindGrid();
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                AspNet.CheckBoxList cblSHForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblSHForms"));
                Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.Rows[i].RowID, this.CurrUser.LoginProjectId);
                for (int j = 0; j < cblSHForms1.Items.Count; j++)
                {
                    if (cblAllSHForms.Checked)
                    {
                        cblSHForms1.Items[j].Selected = true;
                    }
                    else
                    {
                        cblSHForms1.Items[j].Selected = false;
                    }
                }
            }

            //CheckBox cblAllSHForms = sender as CheckBox;
            //for (int i = 0; i < this.Grid1.Rows.Count; i++)
            //{
            //    AspNet.CheckBoxList cblSHForms1 = (AspNet.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblSHForms"));
            //    Model.WBS_ControlItemProject cp = BLL.ControlItemProjectService.GetControlItemProjectByCode(this.Grid1.Rows[i].RowID, this.CurrUser.LoginProjectId);
            //    string hGForms = string.Empty;
            //    for (int j = 0; j < cblSHForms1.Items.Count; j++)
            //    {
            //        if (cblAllSHForms.Checked)
            //        {
            //            hGForms += cblSHForms1.Items[j].Text + ",";
            //        }
            //    }
            //    if (!string.IsNullOrEmpty(hGForms))
            //    {
            //        hGForms = hGForms.Substring(0, hGForms.LastIndexOf(","));
            //    }
            //    cp.SHForms = hGForms;
            //    BLL.ControlItemProjectService.UpdateControlItemProject(cp);
            //}
            //BindGrid();
        }
        #endregion
    }
}