using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web
{
    public partial class SelectProject : PageBase
    {
        #region 加载
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Funs.DropDownPageSize(this.ddlPageSize);
                if (this.CurrUser != null && this.CurrUser.PageSize.HasValue)
                {
                    Grid1.PageSize = this.CurrUser.PageSize.Value;
                }
                this.ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
                // 绑定表格
                this.BindGrid(ckState.SelectedValue, "");
            }
        }
        #endregion
        #region 绑定数据
        /// 
        /// 绑定数据
        /// 
        //private void BindGrid()
        //{
        //    string strSql = @"SELECT distinct Project.ProjectId,"
        //                  + @"Project.ProjectCode,"
        //                  + @"Project.ProjectName,"
        //                  + @"Project.ProjectState,"
        //                  + @"ProjectType.ProjectTypeName AS ProjectTypeName,"
        //                  + @"sysConst.ConstText as ProjectStateName2"
        //                  + @" FROM dbo.Project_ProjectUser AS ProjectUser "
        //                  + @" LEFT JOIN dbo.Sys_User AS Users ON ProjectUser.UserId = Users.UserId"
        //                  + @" LEFT JOIN dbo.Base_Project AS Project ON Project.ProjectId = ProjectUser.ProjectId"
        //                  + @" LEFT JOIN Base_ProjectType AS ProjectType ON Project.ProjectType =ProjectType.ProjectTypeId"
        //                  + @" LEFT JOIN Sys_Const AS sysConst ON Project.ProjectState2 =sysConst.ConstValue AND sysConst.GroupId= '" + BLL.ConstValue.GroupId_ProjectState + "' "
        //                  + @" WHERE 1=1";
        //    List listStr = new List();
        //    if (!string.IsNullOrEmpty(this.CurrUser.UserId) && this.CurrUser.UserId != BLL.Const.hfnbdId && this.CurrUser.UserId != BLL.Const.sysglyId)
        //    {
        //        strSql += " AND Users.UserId=@UserId";
        //        listStr.Add(new SqlParameter("@UserId", this.CurrUser.UserId));
        //    }
        //    if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim()))
        //    {
        //        strSql += " AND ProjectName LIKE @ProjectName";
        //        listStr.Add(new SqlParameter("@ProjectName", "%" + this.txtProjectName.Text.Trim() + "%"));
        //    }
        //    if (this.ckState.SelectedValue != "0")
        //    {
        //        if (this.ckState.SelectedValue == "1")
        //        {
        //            strSql += " AND (ProjectState = '1' OR ProjectState IS NULL)";
        //        }
        //        else
        //        {
        //            strSql += " AND (ProjectState = @states )";
        //            listStr.Add(new SqlParameter("@states", this.ckState.SelectedValue));
        //        }
        //    }
        //    SqlParameter[] parameter = listStr.ToArray();
        //    DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
        //    Grid1.RecordCount = tb.Rows.Count;
        //    Grid1.DataSource = this.GetPagedDataTable(Grid1, tb);
        //    Grid1.DataBind();
        //}
        private void BindGrid(string proState, string urlType = "")
        {
            if (this.CurrUser.UserId == Const.sysglyId || this.CurrUser.UserId == Const.hfnbdId || this.CurrUser.UserId == Const.sedinId)
            {
                string strSql = @"select Project.ProjectId,Project.ProjectCode,Project.ProjectName,Project.ProjectState,ProjectType.ProjectTypeName AS ProjectTypeName,sysConst.ConstText as ProjectStateName2 from Base_Project as Project"
                              + @" LEFT JOIN Base_ProjectType AS ProjectType ON Project.ProjectType =ProjectType.ProjectTypeId"
                              + @" LEFT JOIN Sys_Const AS sysConst ON Project.ProjectState2 =sysConst.ConstValue AND sysConst.GroupId= '" + BLL.ConstValue.GroupId_ProjectState + "' "
                      + @" WHERE 1=1";
                List listStr = new List();
                if (proState != "0")
                {
                    if (proState == "2")
                    {
                        strSql += " AND (Project.ProjectState = '2' )";
                    }
                    else if (proState == "3")
                    {
                        strSql += " AND (Project.ProjectState = '3' )";
                    }
                    else
                    {
                        strSql += " AND (Project.ProjectState = '1' OR Project.ProjectState IS NULL)";
                    }
                }
                if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim()))
                {
                    strSql += " AND ProjectName LIKE @ProjectName";
                    listStr.Add(new SqlParameter("@ProjectName", "%" + this.txtProjectName.Text.Trim() + "%"));
                }
                SqlParameter[] parameter = listStr.ToArray();
                DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                Grid1.RecordCount = tb.Rows.Count;
                Grid1.DataSource = this.GetPagedDataTable(Grid1, tb);
                Grid1.DataBind();
            }
            else
            {
                var getUser = UserService.GetUserByUserId(this.CurrUser.UserId);
                if (getUser != null)
                {
                    /// 获取角色类型
                    var getRoleP = Funs.DB.Sys_RolePower.FirstOrDefault(x => x.RoleId == getUser.RoleId && x.IsOffice == false);
                    //如果是项目级别,获取到他的类型后,并且还要单位是五环的
                    if (!string.IsNullOrEmpty(urlType))
                    {
                        //五环的能看所有项目,否则只能看项目用户中有自己或者所属单位是自己单位的
                        if (getRoleP != null && getUser.UnitId == Const.UnitId_CWCEC)
                        {
                            string strSql = @"select Project.ProjectId,Project.ProjectCode,Project.ProjectName,Project.ProjectState,ProjectType.ProjectTypeName AS ProjectTypeName,sysConst.ConstText as ProjectStateName2 from Base_Project as Project"
                               + @" LEFT JOIN Base_ProjectType AS ProjectType ON Project.ProjectType =ProjectType.ProjectTypeId"
                               + @" LEFT JOIN Sys_Const AS sysConst ON Project.ProjectState2 =sysConst.ConstValue AND sysConst.GroupId= '" + BLL.ConstValue.GroupId_ProjectState + "' "
                       + @" WHERE 1=1";
                            List listStr = new List();
                            if (proState != "0")
                            {
                                if (proState == "2")
                                {
                                    strSql += " AND (Project.ProjectState = '2' )";
                                }
                                else if (proState == "3")
                                {
                                    strSql += " AND (Project.ProjectState = '3' )";
                                }
                                else
                                {
                                    strSql += " AND (Project.ProjectState = '1' OR Project.ProjectState IS NULL)";
                                }
                            }
                            if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim()))
                            {
                                strSql += " AND ProjectName LIKE @ProjectName";
                                listStr.Add(new SqlParameter("@ProjectName", "%" + this.txtProjectName.Text.Trim() + "%"));
                            }
                            SqlParameter[] parameter = listStr.ToArray();
                            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                            Grid1.RecordCount = tb.Rows.Count;
                            Grid1.DataSource = this.GetPagedDataTable(Grid1, tb);
                            Grid1.DataBind();
                        }
                        else
                        {
                            string strSql = @"select distinct p.ProjectId,p.ProjectCode,p.ProjectName from Base_Project p
                                                left join Project_ProjectUser as pu on pu.ProjectId = p.ProjectId
                                                LEFT JOIN Base_ProjectType AS ProjectType ON p.ProjectType =ProjectType.ProjectTypeId
                                                LEFT JOIN Sys_Const AS sysConst ON p.ProjectState2 =sysConst.ConstValue AND sysConst.GroupId=@groupId
                                                where ((pu.UserId=@userId and pu.IsPost='true') or p.UnitId=@unitId)
                                                and p.ProjectState = @state"
                                            + @" WHERE 1=1";
                            List listStr = new List();
                            listStr.Add(new SqlParameter("@userId", this.CurrUser.UserId));
                            listStr.Add(new SqlParameter("@unitId", getUser.UnitId));
                            if (proState != "0")
                            {
                                listStr.Add(new SqlParameter("@state", proState));
                            }                            
                            listStr.Add(new SqlParameter("@groupId", BLL.ConstValue.GroupId_ProjectState));
                            if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim()))
                            {
                                strSql += " AND p.ProjectName LIKE @ProjectName";
                                listStr.Add(new SqlParameter("@ProjectName", "%" + this.txtProjectName.Text.Trim() + "%"));
                            }
                            SqlParameter[] parameter = listStr.ToArray();
                            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                            Grid1.RecordCount = tb.Rows.Count;
                            Grid1.DataSource = this.GetPagedDataTable(Grid1, tb);
                            Grid1.DataBind();
                        }
                    }
                    else
                    {
                        if (getRoleP != null)
                        {
                            string strSql = @"select Project.ProjectId,Project.ProjectCode,Project.ProjectName,Project.ProjectState,ProjectType.ProjectTypeName AS ProjectTypeName,sysConst.ConstText as ProjectStateName2 from Base_Project as Project"
                               + @" LEFT JOIN Base_ProjectType AS ProjectType ON Project.ProjectType =ProjectType.ProjectTypeId"
                               + @" LEFT JOIN Sys_Const AS sysConst ON Project.ProjectState2 =sysConst.ConstValue AND sysConst.GroupId= '" + BLL.ConstValue.GroupId_ProjectState + "' "
                       + @" WHERE 1=1";
                            List listStr = new List();
                            if (proState != "0")
                            {
                                if (proState == "2")
                                {
                                    strSql += " AND (Project.ProjectState = '2' )";
                                }
                                else if (proState == "3")
                                {
                                    strSql += " AND (Project.ProjectState = '3' )";
                                }
                                else
                                {
                                    strSql += " AND (Project.ProjectState = '1' OR Project.ProjectState IS NULL)";
                                }
                            }
                            if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim()))
                            {
                                strSql += " AND p.ProjectName LIKE @ProjectName";
                                listStr.Add(new SqlParameter("@ProjectName", "%" + this.txtProjectName.Text.Trim() + "%"));
                            }
                            SqlParameter[] parameter = listStr.ToArray();
                            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                            Grid1.RecordCount = tb.Rows.Count;
                            Grid1.DataSource = this.GetPagedDataTable(Grid1, tb);
                            Grid1.DataBind();
                        }
                        else
                        {
                            string strSql = @"select distinct p.ProjectId,p.ProjectCode,p.ProjectName from Base_Project p
                                                left join Project_ProjectUser as pu on pu.ProjectId = p.ProjectId
                                                LEFT JOIN Base_ProjectType AS ProjectType ON p.ProjectType =ProjectType.ProjectTypeId
                                                LEFT JOIN Sys_Const AS sysConst ON p.ProjectState2 =sysConst.ConstValue AND sysConst.GroupId= @groupId
                                                where pu.UserId=@userId and pu.IsPost='true'
                                                and p.ProjectState = @state";
                            List listStr = new List();
                            listStr.Add(new SqlParameter("@userId", this.CurrUser.UserId));
                            if (proState != "0")
                            {
                                listStr.Add(new SqlParameter("@state", proState));
                            }
                            listStr.Add(new SqlParameter("@groupId", BLL.ConstValue.GroupId_ProjectState));
                            if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim()))
                            {
                                strSql += " AND p.ProjectName LIKE @ProjectName";
                                listStr.Add(new SqlParameter("@ProjectName", "%" + this.txtProjectName.Text.Trim() + "%"));
                            }
                            SqlParameter[] parameter = listStr.ToArray();
                            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                            Grid1.RecordCount = tb.Rows.Count;
                            Grid1.DataSource = this.GetPagedDataTable(Grid1, tb);
                            Grid1.DataBind();
                        }
                    }
                }
            }
        }
        #endregion
        #region Grid
        /// 
        /// 
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            BindGrid(ckState.SelectedValue, "");
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid(ckState.SelectedValue, "");
        }
        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
        {
            BindGrid(ckState.SelectedValue, "");
        }
        #endregion
        #region 双击行事件
        /// 
        /// 双击事件
        /// 
        /// 
        /// 
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            if (!string.IsNullOrEmpty(Grid1.SelectedRowID))
            {
                string url = "~/indexProject.aspx?projectId=" + Grid1.SelectedRowID;
                UserService.UpdateLastUserInfo(this.CurrUser.UserId, null, false, Grid1.SelectedRowID);
                PageContext.Redirect(url, "_top");
            }
            else
            {
                ShowNotify("请选择项目进入!", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 查询
        /// 
        /// 查询
        /// 
        /// 
        /// 
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            this.BindGrid(ckState.SelectedValue, "");
        }
        #endregion
   
        /// 
        /// 进入项目现场
        /// 
        /// 
        /// 
        protected void btnEnter_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(Grid1.SelectedRowID))
            {
                string url = "~/indexProject.aspx?projectId=" + Grid1.SelectedRowID;
                UserService.UpdateLastUserInfo(this.CurrUser.UserId, null, false, Grid1.SelectedRowID);
                PageContext.Redirect(url, "_top");
            }
            else
            {
                ShowNotify("请选择项目进入!", MessageBoxIcon.Warning);
            }
        }
    }
}