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 ProjectUser : PageBase
    {
        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 ProjectUser.ProjectUserId, ProjectUser.UserId, ProjectUser.ProjectId,
                                     ProjectUser.RoleIds, Sysuser.Account, Sysuser.UserName,
                                     Sysuser.UserCode, t.UnitTypeName AS UnitType, BaseUnit.UnitName
                              FROM dbo.Project_User AS ProjectUser
                              LEFT JOIN dbo.Sys_User AS Sysuser ON Sysuser.UserId = ProjectUser.UserId
                              LEFT JOIN dbo.Project_Unit AS ProjectUnit ON ProjectUnit.UnitId = Sysuser.UnitId AND ProjectUser.ProjectId =ProjectUnit.ProjectId
                              LEFT JOIN dbo.Base_Unit AS BaseUnit ON Sysuser.UnitId =BaseUnit.UnitId
                              LEFT JOIN dbo.Base_UnitType t ON t.UnitTypeId=ProjectUnit.UnitType
                              where ProjectUser.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();
        }

        #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 == "UserName")
            {
                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 btnSelectUser_Click(object sender, EventArgs e)
        {
            if (tvProject.SelectedNode != null)
            {
                PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("SelectUser.aspx?projectId={0}", tvProject.SelectedNodeID, "编辑 - ")));
            }
            else
            {
                Alert.ShowInTop(Resources.Lan.PleaseSelectProject, MessageBoxIcon.Warning);
            }
        }

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

        #region  删除数据
        /// <summary>
        /// 批量删除数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            if (CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.ProjectUserMenuId, Const.BtnSave))
            {               
                if (Grid1.SelectedRowIndexArray.Length > 0)
                {
                    foreach (int rowIndex in Grid1.SelectedRowIndexArray)
                    {
                        string projectUserId = Grid1.DataKeys[rowIndex][0].ToString();
                        BLL.Project_UserService.DeleteProject_UserByProjectUserId(projectUserId);
                    }
                    BindGrid();
                    //BLL.Sys_LogService.AddLog(BLL.Const.System_1, this.CurrUser.LoginProjectId, this.CurrUser.UserId, Resources.Lan.DeleteUserInformation);
                    ShowNotify(Resources.Lan.DeletedSuccessfully);
                }
            }
            else
            {
                ShowNotify(Resources.Lan.NoPrivilegePrompt);
            }
        }
        #endregion

        #region 格式化字符串
        /// <summary>
        /// 转换热处理类型
        /// </summary>
        /// <param name="pt"></param>
        /// <returns></returns>
        protected string ConvertRoleName(object roleIds)
        {
            string roleNames = string.Empty;
            if (roleIds != null)
            {
                string[] roles = roleIds.ToString().Split(',');
                foreach (string r in roles)
                {
                    var q = BLL.Sys_RoleService.GetRole(r);
                    if (q != null)
                    {
                        roleNames = roleNames + q.RoleName + ",";
                    }
                }
            }
            if (roleNames.Length > 0)
            {
                roleNames = roleNames.Substring(0, roleNames.Length - 1);
            }
            return roleNames;
        }
        #endregion
    }
}