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

namespace FineUIPro.Web.common.ProjectSet
{
    public partial class ProjectUnit : PageBase
    {
        #region 加载
        protected void Page_Load(object sender, EventArgs e)
        {
            // 表头过滤
            FilterDataRowItem = FilterDataRowItemImplement;
            if (!IsPostBack)
            {
                this.drpProjectId.DataTextField = "ProjectCode";
                this.drpProjectId.DataValueField = "ProjectId";
                this.drpProjectId.DataSource = BLL.Base_ProjectService.GetProjectListByUserIdAndState(this.CurrUser.UserId, BLL.Const._False, CurrUser.LoginProjectArea);
                this.drpProjectId.DataBind();
                Funs.FineUIPleaseSelect(this.drpProjectId,Resources.Lan.PleaseSelect);

                ddlPageSize.SelectedValue = Grid1.PageSize.ToString();

                InitTreeMenu();//加载树
            }
        }

        private void BindGrid()
        {
            string strSql = @"select * from View_Common_Project_UnitList
                              where ProjectId=@ProjectId";

            SqlParameter[] parameter = new SqlParameter[]       
                    {
                        new SqlParameter("@ProjectId",this.tvProject.SelectedNodeID)
                    };

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

        #region 表头过滤
        protected void Grid1_FilterChange(object sender, EventArgs e)
        {
            BindGrid();
        }

        private bool FilterDataRowItemImplement(object sourceObj, string fillteredOperator, object fillteredObj, string column)
        {
            bool valid = false;
            if (column == "UnitCode")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal")
                {
                    if (sourceValue == fillteredValue)
                    {
                        valid = true;
                    }
                }
                else if (fillteredOperator == "contain")
                {
                    if (sourceValue.Contains(fillteredValue))
                    {
                        valid = true;
                    }
                }
            }

            else if (column == "UnitName")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal")
                {
                    if (sourceValue == fillteredValue)
                    {
                        valid = true;
                    }
                }
                else if (fillteredOperator == "contain")
                {
                    if (sourceValue.Contains(fillteredValue))
                    {
                        valid = true;
                    }
                }
            }
            return valid;
        }

        #endregion

        #region
        /// <summary>
        /// 加载树
        /// </summary>
        private void InitTreeMenu()
        {
            this.tvProject.Nodes.Clear();  
            List<Model.Base_Project> projectLists = BLL.Base_ProjectService.GetProjectListByUserIdAndState(this.CurrUser.UserId, Const._False, CurrUser.LoginProjectArea);
            if (this.drpProjectId.SelectedValue != BLL.Const._Null)
            {
                projectLists = projectLists.Where(e => e.ProjectId == this.drpProjectId.SelectedValue).ToList();
            }
            if (projectLists.Count() > 0)
            {
                TreeNode tn = null;
                foreach (var q in projectLists)
                {
                    tn = new TreeNode();
                    tn.Text = "[" + q.ProjectCode + "]" + q.ProjectName;
                    tn.NodeID = q.ProjectId;
                    tn.ToolTip = q.ProjectName;
                    tn.EnableClickEvent = true;
                    this.tvProject.Nodes.Add(tn);
                }
            }
        }       
        #endregion

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void drpProjectId_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.InitTreeMenu();
        }

        #region 点击TreeView
        /// <summary>
        /// 点击TreeView
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvProject_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            if (this.tvProject.SelectedNodeID != "0" && this.tvProject.SelectedNode!=null)
            {
                BindGrid();
            }
        }
        #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();
        }
        #endregion

        #region 排序
        /// <summary>
        /// 排序
        /// </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();
        }
        #endregion

        #region 分页选择下拉改变事件
        /// <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();
        }
        #endregion

        protected void btnSelectUnit_Click(object sender, EventArgs e)
        {
            if (tvProject.SelectedNode != null)
            {
                PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("SelectUnit.aspx?projectId={0}", tvProject.SelectedNodeID, "编辑 - ")));
            }
            else
            {
                Alert.ShowInTop(Resources.Lan.PleaseSelectProject, MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// Grid双击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("EditTeamGroup.aspx?projectId={0}&projectUnitId={1}", tvProject.SelectedNodeID, Grid1.SelectedRowID, "编辑 - ")));
        }

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

            string projectId = this.tvProject.SelectedNodeID;
            string unitIds = string.Empty;
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                unitIds = unitIds + Grid1.DataKeys[i][1].ToString() + ",";
                //var team = (from x in Funs.DB.Welder_TeamGroup where x.ProjectId == projectId && x.UnitId == unitId select x).ToList();
            }
            var teamUnit = from x in Funs.DB.Welder_TeamGroup
                           where x.ProjectId == projectId
                           group x by x.UnitId
                            into g
                           select new { g.Key };
            if (teamUnit.Count() > 0)
            {
                foreach (var unitId in teamUnit)
                {
                    if (!unitIds.Contains(unitId.Key))
                    {
                        var team = from x in Funs.DB.Welder_TeamGroup where x.ProjectId == projectId && x.UnitId == unitId.Key select x;
                        if (team.Count() > 0)
                        {
                            Funs.DB.Welder_TeamGroup.DeleteAllOnSubmit(team);
                            Funs.DB.SubmitChanges();
                        }
                    }
                }
                    
            }

           
           
        }
        #endregion
    }
}