using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.CQMS.WBS.Control
{
    public partial class DivisionDivideAndCrop : PageBase
    {
        #region 定义变量
        /// 
        /// 被选择项列表
        /// 
        public List SelectedList
        {
            get
            {
                return (List)ViewState["SelectedList"];
            }
            set
            {
                ViewState["SelectedList"] = value;
            }
        }
        /// 
        /// 未被选择项列表
        /// 
        public List NoSelectedList
        {
            get
            {
                return (List)ViewState["NoSelectedList"];
            }
            set
            {
                ViewState["NoSelectedList"] = value;
            }
        }
        #endregion
        #region 加载
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.SelectedList = new List();
                this.NoSelectedList = new List();
                GetButtonPower();
                InitTreeMenu();
                BindGrid();
            }
        }
        #endregion
        #region  加载树
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.trUnitWork.Nodes.Clear();
            this.trUnitWork.ShowBorder = false;
            this.trUnitWork.ShowHeader = false;
            this.trUnitWork.EnableIcons = true;
            this.trUnitWork.AutoScroll = true;
            this.trUnitWork.EnableSingleClickExpand = true;
            List supUnitWorkList = BLL.UnitWorkService.GetUnitWorkLists(this.CurrUser.LoginProjectId);
            if (supUnitWorkList.Count() > 0)
            {
                foreach (var item in supUnitWorkList)
                {
                    TreeNode node = new TreeNode();
                    node.Text = item.UnitWorkName;
                    node.NodeID = item.UnitWorkId;
                    node.CommandName = "supUnitWork";
                    node.EnableClickEvent = true;
                    node.EnableExpandEvent = true;
                    this.trUnitWork.Nodes.Add(node);
                    TreeNode emptyNode = new TreeNode();
                    emptyNode.Text = "";
                    emptyNode.NodeID = "";
                    node.Nodes.Add(emptyNode);
                }
            }
        }
        #endregion
        #region  展开树
        /// 
        /// 展开树
        /// 
        /// 
        /// 
        protected void trUnitWork_NodeExpand(object sender, TreeNodeEventArgs e)
        {
            e.Node.Nodes.Clear();
            if (e.Node.CommandName == "supUnitWork")  //展开单位工程节点
            {
                var unitWorks = from x in Funs.DB.WBS_UnitWork
                                where x.SuperUnitWork == e.Node.NodeID
                                orderby x.UnitWorkCode
                                select x;
                foreach (var unitWork in unitWorks)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = unitWork.UnitWorkName;
                    newNode.NodeID = unitWork.UnitWorkId;
                    newNode.CommandName = "unitWork";
                    newNode.EnableExpandEvent = true;
                    newNode.EnableClickEvent = true;
                    e.Node.Nodes.Add(newNode);
                    var installation3s = from x in Funs.DB.WBS_UnitWork where x.SuperUnitWork == unitWork.UnitWorkId orderby x.UnitWorkCode select x;
                    if (installation3s.Count() > 0)
                    {
                        TreeNode emptyNode = new TreeNode();
                        emptyNode.Text = "";
                        emptyNode.NodeID = "";
                        newNode.Nodes.Add(emptyNode);
                    }
                }
            }
        }
        #endregion
        #region 节点选择事件
        /// 
        /// tv节点选中事件
        /// 
        /// 
        /// 
        protected void trUnitWork_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                if (this.Grid1.SelectedRowIDArray.Contains(this.Grid1.Rows[i].RowID))
                {
                    SelectedList.Add(this.Grid1.Rows[i].RowID);
                }
                else
                {
                    NoSelectedList.Add(this.Grid1.Rows[i].RowID);
                }
            }
            BindGrid();
        }
        #endregion
        #region 数据绑定和事件
        /// 
        /// 数据绑定
        /// 
        public void BindGrid()
        {
            string strSql = @"select * from(select a.DivisionId,a.ProjectId,a.ParentId,a.DivisionLevel,a.BranchEngineeringCode,a.BranchEngineeringName,a.SubBranchEngineeringName,a.ProEngineeringCode,a.ProEngineeringName,a.ProEngineeringNum,a.Remark,a.AddUser,a.OperateTime,a.Sort,a.Status from Division_SubProjects as a where isnull(a.ProjectId,'')='' ";
            string strSql1 = @"select a.DivisionId,a.ProjectId,a.ParentId,a.DivisionLevel,a.BranchEngineeringCode,a.BranchEngineeringName,a.SubBranchEngineeringName,a.ProEngineeringCode,a.ProEngineeringName,a.ProEngineeringNum,a.Remark,a.AddUser,a.OperateTime,a.Sort,a.Status from Division_SubProjects as a inner join Base_Project as b on a.ProjectId=b.ProjectId where a.ProjectId=@ProjectId ";
            List listStr = new List();
            listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
            SqlParameter[] parameter = listStr.ToArray();
            var zxsql = strSql + " union all " + strSql1 + " ) as t order by t.BranchEngineeringCode,t.Sort,t.DivisionLevel,t.ProEngineeringNum asc";
            DataTable tb = SQLHelper.GetDataTableRunText(zxsql, parameter);
            Grid1.DataSource = tb;
            Grid1.DataBind();
            var selectIds = (from x in Funs.DB.WBS_DivisionDivide where x.UnitWorkId == this.trUnitWork.SelectedNodeID select x.DivisionId).ToList();
            if (selectIds.Count() > 0)
            {
                this.Grid1.SelectedRowIDArray = selectIds.ToArray();
            }
        }
        #endregion
        #region 保存
        /// 
        /// 保存按钮
        /// 
        /// 
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.trUnitWork.SelectedNodeID))
            {
                SelectedList.Clear();
                NoSelectedList.Clear();
                for (int i = 0; i < this.Grid1.Rows.Count; i++)
                {
                    if (this.Grid1.SelectedRowIDArray.Contains(this.Grid1.Rows[i].RowID))
                    {
                        SelectedList.Add(this.Grid1.Rows[i].RowID);
                    }
                    else
                    {
                        NoSelectedList.Add(this.Grid1.Rows[i].RowID);
                    }
                }
                foreach (var item in SelectedList.Distinct())
                {
                    Model.WBS_DivisionDivide divisionDivide = BLL.DivisionDivideService.GetDivisionDivideByDivisionId(this.trUnitWork.SelectedNodeID, item);
                    if (divisionDivide == null)
                    {
                        Model.WBS_DivisionDivide newdivisiondivide = new Model.WBS_DivisionDivide();
                        newdivisiondivide.DivisionDivideId = SQLHelper.GetNewID(typeof(Model.WBS_DivisionDivide));
                        newdivisiondivide.ProjectId = this.CurrUser.LoginProjectId;
                        newdivisiondivide.UnitWorkId = this.trUnitWork.SelectedNodeID;
                        newdivisiondivide.DivisionId = item;
                        BLL.DivisionDivideService.AddDivisionDivide(newdivisiondivide);
                    }
                }
                NoSelectedList = NoSelectedList.Distinct().ToList();
                var q = NoSelectedList.Distinct().ToList();
                foreach (var item in q)
                {
                    foreach (var i in SelectedList.Distinct())
                    {
                        if (item == i)
                        {
                            NoSelectedList.Remove(item);
                        }
                    }
                }
                foreach (var item in NoSelectedList)
                {
                    Model.WBS_DivisionDivide divisionDivide = BLL.DivisionDivideService.GetDivisionDivideByDivisionId(this.trUnitWork.SelectedNodeID,item);
                    if (divisionDivide != null)
                    {
                        BLL.DivisionDivideService.DeleteDivisionDivideByDivisionId(item);
                    }
                }
                ShowNotify("保存成功!", MessageBoxIcon.Success);
            }
            else
            {
                Alert.ShowInTop("请先选择单位工程/子单位工程!", MessageBoxIcon.Warning);
                return;
            }
        }
        #endregion
        #region 导入
        /// 
        /// 导入
        /// 
        /// 
        /// 
        protected void btnImport_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("DivisionDivideAndCropDataIn.aspx", "导入 - ")));
        }
        #endregion        
        #region 拷贝
        /// 
        /// 拷贝
        /// 
        /// 
        /// 
        protected void btnCopy_Click(object sender, EventArgs e)
        {
            bool isOk = false;
            if (!string.IsNullOrEmpty(this.trUnitWork.SelectedNodeID))
            {
                var unitwork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(this.trUnitWork.SelectedNodeID);
                if (unitwork != null)
                {
                    Model.WBS_UnitWork newSupUnitWork = new Model.WBS_UnitWork();
                    newSupUnitWork.UnitWorkId = SQLHelper.GetNewID(typeof(Model.WBS_UnitWork));
                    newSupUnitWork.UnitWorkCode = unitwork.UnitWorkCode;
                    newSupUnitWork.UnitWorkName = unitwork.UnitWorkName;
                    newSupUnitWork.ProjectId = this.CurrUser.LoginProjectId;
                    newSupUnitWork.SuperUnitWork = unitwork.SuperUnitWork;
                    BLL.UnitWorkService.AddUnitWork(newSupUnitWork);
                    isOk = true;
                    var divisionDivides = BLL.DivisionDivideService.GetDivisionDivideByUnitWorkId(this.trUnitWork.SelectedNodeID);
                    if (divisionDivides != null)
                    {
                        foreach (var item in divisionDivides)
                        {
                            Model.WBS_DivisionDivide newDivisionDivide = new Model.WBS_DivisionDivide();
                            newDivisionDivide.DivisionDivideId = SQLHelper.GetNewID(typeof(Model.WBS_DivisionDivide));
                            newDivisionDivide.ProjectId = this.CurrUser.LoginProjectId;
                            newDivisionDivide.UnitWorkId = newSupUnitWork.UnitWorkId;
                            newDivisionDivide.DivisionId = item.DivisionId;
                            BLL.DivisionDivideService.AddDivisionDivide(newDivisionDivide);
                            isOk = true;
                        }
                    }
                    var unitworkList = BLL.UnitWorkService.GetUnitWorksBySupUnitWork(this.trUnitWork.SelectedNodeID);
                    if (unitworkList.Count() > 0)
                    {
                        foreach (var item in unitworkList)
                        {
                            Model.WBS_UnitWork newUnitWork = new Model.WBS_UnitWork();
                            newUnitWork.UnitWorkId = SQLHelper.GetNewID(typeof(Model.WBS_UnitWork));
                            newUnitWork.UnitWorkCode = item.UnitWorkCode;
                            newUnitWork.UnitWorkName = item.UnitWorkName;
                            newUnitWork.ProjectId = this.CurrUser.LoginProjectId;
                            newUnitWork.SuperUnitWork = newSupUnitWork.UnitWorkId;
                            BLL.UnitWorkService.AddUnitWork(newUnitWork);
                            isOk = true;
                            var divisionDivideLists = BLL.DivisionDivideService.GetDivisionDivideByUnitWorkId(item.UnitWorkId);
                            if (divisionDivideLists != null)
                            {
                                foreach (var divis in divisionDivideLists)
                                {
                                    Model.WBS_DivisionDivide newDivisionDivide = new Model.WBS_DivisionDivide();
                                    newDivisionDivide.DivisionDivideId = SQLHelper.GetNewID(typeof(Model.WBS_DivisionDivide));
                                    newDivisionDivide.ProjectId = this.CurrUser.LoginProjectId;
                                    newDivisionDivide.UnitWorkId = newUnitWork.UnitWorkId;
                                    newDivisionDivide.DivisionId = divis.DivisionId;
                                    BLL.DivisionDivideService.AddDivisionDivide(newDivisionDivide);
                                    isOk = true;
                                }
                            }
                        }
                    }
                }
            }
            if (isOk)
            {
                ShowNotify("拷贝成功!", MessageBoxIcon.Success);
            }
            else
            {
                ShowNotify("拷贝失败!", MessageBoxIcon.Success);
            }
        }
        #endregion
        #region 修改
        /// 
        /// 修改
        /// 
        /// 
        /// 
        protected void btnEdit_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.trUnitWork.SelectedNodeID))
            {
                var unitWork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(this.trUnitWork.SelectedNodeID);
                if (unitWork != null)
                {
                    PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("../../../ProjectData/UnitWorkEdit.aspx?Id={0}&&SuperId={1}", this.trUnitWork.SelectedNode.NodeID, unitWork.SuperUnitWork, "编辑 - ")));
                }                
            }
        }
        #endregion
        #region 关闭弹出窗体
        /// 
        /// 关闭弹出窗体
        /// 
        /// 
        /// 
        protected void Window2_Close(object sender, WindowCloseEventArgs e)
        {
            InitTreeMenu();
        }
        #endregion
        #region 获取按钮权限
        /// 
        /// 获取按钮权限
        /// 
        /// 
        /// 
        private void GetButtonPower()
        {
            if (Request.Params["value"] == "0")
            {
                return;
            }
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.DivisionDivideAndCropMenuId);
            if (buttonList.Count() > 0)
            {
                if (buttonList.Contains(BLL.Const.BtnSave))
                {
                    this.btnSave.Hidden = false;
                    this.btnImport.Hidden = false;
                    this.btnCopy.Hidden = false;
                    this.btnEdit.Hidden = false;
                }
            }
        }
        #endregion
    }
}