using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.HSSE.SitePerson
{
    public partial class PersonList : PageBase
    {
        #region 定义项
        /// 
        /// 人员主键
        /// 
        public string PersonId
        {
            get
            {
                return (string)ViewState["PersonId"];
            }
            set
            {
                ViewState["PersonId"] = value;
            }
        }
        /// 
        /// 项目id
        /// 
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        #endregion
        #region 加载页面
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {            
            if (!IsPostBack)
            {
                Funs.DropDownPageSize(this.ddlPageSize);
                this.ProjectId = this.CurrUser.LoginProjectId;
                if (!string.IsNullOrEmpty(Request.Params["projectId"]) && Request.Params["projectId"] != this.ProjectId)
                {
                    this.ProjectId = Request.Params["projectId"];
                }
                ////权限按钮方法
                this.GetButtonPower();
                this.btnMenuDelete.OnClientClick = Grid1.GetNoSelectionAlertReference("请至少选择一项!");
                this.btnMenuDelete.ConfirmText = String.Format("你确定要删除选中的  行数据吗?", Grid1.GetSelectedCountReference());
                this.ddlPageSize.SelectedValue = this.Grid1.PageSize.ToString();
                BLL.WorkPostService.InitWorkPostDropDownList(this.drpPost, true);
                this.InitTreeMenu();//加载树
            }
        }
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.tvProjectAndUnit.Nodes.Clear();
            var project = BLL.ProjectService.GetProjectByProjectId(this.ProjectId);
            if (project != null)
            {
                var personLists = BLL.PersonService.GetPersonList(project.ProjectId);
                TreeNode rootNode = new TreeNode();
                rootNode = new TreeNode
                {
                    Text = project.ProjectName,
                    NodeID = project.ProjectId
                };
                if (personLists.Count() > 0)
                {
                    var personIn = personLists.Where(x => x.ProjectId == project.ProjectId && x.IsUsed == true
                        && x.InTime <= DateTime.Now && (!x.OutTime.HasValue || x.OutTime > DateTime.Now)).ToList();
                    rootNode.ToolTip = "当前项目人员总数:" + personLists.Count() + ";在场人员数:" + personIn.Count() + ";离场人员数:" + (personLists.Count() - personIn.Count());
                }
                else
                {
                    rootNode.ToolTip = "当前项目人员总数:0";
                }
                rootNode.Expanded = true;
                rootNode.EnableClickEvent = true;
                this.tvProjectAndUnit.Nodes.Add(rootNode);
                GetUnitLists(rootNode.Nodes, project.ProjectId, personLists);
            }
        }
        /// 
        /// 加载单位
        /// 
        /// 
        /// 
        private void GetUnitLists(TreeNodeCollection nodes, string parentId, List personLists)
        {
            List unitLists = BLL.UnitService.GetUnitByProjectIdList(parentId);
            if (unitLists.Count() > 0)
            {
                if (BLL.ProjectUnitService.GetProjectUnitTypeByProjectIdUnitId(parentId, this.CurrUser.UnitId))
                {
                    unitLists = unitLists.Where(x => x.UnitId == this.CurrUser.UnitId).ToList();
                }
                //添加其他单位/无单位人员
                Model.Base_Unit otherUnit = new Model.Base_Unit
                {
                    UnitId = "0",
                    UnitName = "其他"
                };
                unitLists.Add(otherUnit);
                TreeNode newNode = null;
                foreach (var q in unitLists)
                {
                    newNode = new TreeNode
                    {
                        Text = q.UnitName,
                        NodeID = q.UnitId + "|" + parentId,
                        ToolTip = q.UnitName
                    };
                    if (personLists.Count() > 0)
                    {
                        var personUnitLists = personLists.Where(x => x.UnitId == q.UnitId);
                        if (q.UnitId == "0")
                        {
                            personUnitLists = personLists.Where(x => x.UnitId == null);
                        }
                        if (personUnitLists.Count() > 0)
                        {
                            var personIn = personUnitLists.Where(x => x.InTime <= System.DateTime.Now && x.IsUsed == true
                            && (!x.OutTime.HasValue || x.OutTime >= System.DateTime.Now));
                            newNode.ToolTip = q.UnitName + "人员总数:" + personUnitLists.Count() + ";在场人员数:" + personIn.Count() + ";离场人员数:" + (personUnitLists.Count() - personIn.Count());
                        }
                        else
                        {
                            newNode.ToolTip = q.UnitName + "人员总数:0";
                        }
                    }
                    else
                    {
                        newNode.ToolTip = q.UnitName + "人员总数:0";
                    }
                    newNode.EnableClickEvent = true;
                    nodes.Add(newNode);
                }
            }
        }
        /// 
        /// 绑定数据
        /// 
        private void BindGrid()
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                string unitId = string.Empty;
                if (this.tvProjectAndUnit != null && !string.IsNullOrEmpty(this.tvProjectAndUnit.SelectedNodeID))
                {
                    var str = this.tvProjectAndUnit.SelectedNodeID.Split('|');
                    if (str.Count() > 1)
                    {
                        unitId = str[0];
                    }
                }
                var getData = PersonService.getListData(this.ProjectId, unitId, this.txtPersonName.Text.Trim(), this.txtIdentityCard.Text.Trim(),
                 this.drpTreamGroup.SelectedValue, Funs.GetStringByArray(this.drpPost.SelectedValueArray), this.ckTrain.Checked, this.rblPost.SelectedValue, this.ckJT.Checked,
                 this.ckIdCardInfoNotOK.Checked, Grid1);
                Grid1.RecordCount = PersonService.count;
                Grid1.DataSource = getData;
                Grid1.DataBind();
                for (int i = 0; i < Grid1.Rows.Count; i++)
                {
                    string idCard = Grid1.Rows[i].Values[3].ToString();
                    if (!IDCardValid.CheckIDCard(idCard))
                    {
                        Grid1.Rows[i].RowCssClass = "Red";
                    }
                }
            }
        }
        #endregion
        #region 点击TreeView
        /// 
        /// 点击TreeView
        /// 
        /// 
        /// 
        protected void tvProjectAndUnit_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            this.drpTreamGroup.Items.Clear();
            if (this.tvProjectAndUnit.SelectedNodeID.Contains("|"))
            {
                string id = this.tvProjectAndUnit.SelectedNodeID;
                string unitId = string.Empty;
                string projectId = string.Empty;
                var str = id.Split('|');
                if (str.Count() > 1)
                {
                    unitId = str[0];
                    projectId = str[1];
                }
                BLL.TeamGroupService.InitTeamGroupProjectUnitDropDownList(this.drpTreamGroup, projectId, unitId, true);
                BindGrid();
            }
            else
            {
                BindGrid();
            }
        }
        #endregion
        #region 页索引改变事件
        /// 
        /// 页索引改变事件
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }
        #endregion
        #region 排序
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid();
        }
        #endregion
        #region 分页选择下拉改变事件
        /// 
        /// 分页选择下拉改变事件
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        #endregion
        #region 增加按钮
        /// 
        /// 增加按钮
        /// 
        /// 
        /// 
        protected void btnNew_Click(object sender, EventArgs e)
        {
            if (this.tvProjectAndUnit.SelectedNodeID.Contains("|"))
            {
                string id = this.tvProjectAndUnit.SelectedNodeID;
                string[] str = id.Split('|');
                if (str.Count() > 1)
                {
                    string unitId = id.Split('|')[0];
                    string projectId = id.Split('|')[1];
                    PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("PersonListEdit.aspx?ProjectId={0}&&UnitId={1}", projectId, unitId, "编辑 - ")));
                }
            }
            else
            {
                Alert.ShowInTop("请选择单位!", MessageBoxIcon.Warning);
                return;
            }
        }
        #endregion
        #region 编辑
        /// 
        /// 右键编辑事件
        /// 
        /// 
        /// 
        protected void btnMenuEdit_Click(object sender, EventArgs e)
        {
            this.EditData();
        }
        /// 
        /// 编辑
        /// 
        private void EditData()
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            this.PersonId = Grid1.SelectedRowID;
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("PersonListEdit.aspx?PersonId={0}", this.PersonId, "编辑 - ")));           
        }
        /// 
        /// Grid双击事件
        /// 
        /// 
        /// 
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            this.EditData();
        }
        #endregion
       
        #region 删除
        /// 
        /// 右键删除事件
        /// 
        /// 
        /// 
        protected void btnMenuDelete_Click(object sender, EventArgs e)
        {
            this.DeleteData();
        }
        /// 
        /// 删除方法
        /// 
        private void DeleteData()
        {
            if (Grid1.SelectedRowIndexArray.Length > 0)
            {
                string message = string.Empty;
                foreach (int rowIndex in Grid1.SelectedRowIndexArray)
                {
                    string rowID = Grid1.DataKeys[rowIndex][0].ToString();
                    var getV = BLL.PersonService.GetPersonById(rowID);
                    if (getV != null)
                    {
                        string rowMessage = this.judgementDelete(rowID, getV.PersonName);
                        if (string.IsNullOrEmpty(rowMessage))
                        {
                            BLL.LogService.AddSys_Log(this.CurrUser, getV.PersonName, getV.PersonId, BLL.Const.PersonListMenuId, BLL.Const.BtnDelete);
                            BLL.PersonService.DeletePerson(rowID);
                        }
                        else
                        {
                            message += rowMessage;
                        }
                    }
                }
                BindGrid();
                if (string.IsNullOrEmpty(message))
                {
                    ShowNotify("删除数据成功!", MessageBoxIcon.Success);
                }
                else
                {
                    Alert.ShowInParent(message, MessageBoxIcon.Warning);
                }
            }
        }
        /// 
        /// 判断是否可删除
        /// 
        /// 
        /// 
        /// 
        private string judgementDelete(string rowID, string name)
        {
            string content = string.Empty;
            ///违规人员
            var getViolation = from x in Funs.DB.Check_ViolationPerson where x.PersonId == rowID select x;
            foreach (var item in getViolation)
            {
                content += "违规人员【" + item.ViolationPersonCode + "】";
            }
            ///培训记录
            var getTrainRecord = from x in Funs.DB.EduTrain_TrainRecordDetail
                                 join y in Funs.DB.EduTrain_TrainRecord on x.TrainingId equals y.TrainingId
                                 where x.PersonId == rowID select y;
            foreach (var item in getTrainRecord)
            {
                content += "培训记录【" + item.TrainingCode + "】";
            }
            ///考试计划 - 考试记录           
            var getTestRecode = from x in Funs.DB.Training_TestRecord
                                join y in Funs.DB.Training_TestPlan on x.TestPlanId equals y.TestPlanId
                                where x.TestManId == rowID
                                 select y;
            foreach (var item in getTestRecode)
            {
                content += "考试计划【" + item. PlanCode+ "】";
            }
            ///人员绩效
            var getPerfomances = from x in Funs.DB.Perfomance_PersonPerfomance
                                 where x.PersonId == rowID
                                 select x;
            foreach (var item in getPerfomances)
            {
                content += "人员绩效【" + item.PersonPerfomanceCode + "】";
            }
            var getPerson = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.PersonId == rowID && x.RealNameAddTime.HasValue);
            if (getPerson != null)
            {
                content += "人员【" + getPerson.PersonName + "】已上传集团。";
            }
            if (!string.IsNullOrEmpty(content))
            {
                content += "中已使用该人员【" + name + "】!";
            }
            return content;
        }
        #endregion
        #region 关闭弹出窗口
        /// 
        /// 关闭弹出窗口
        /// 
        /// 
        /// 
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 判断按钮权限
        /// 
        /// 判断按钮权限
        /// 
        private void GetButtonPower()
        {
            if (Request.Params["value"] == "0")
            {
                return;
            }
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.PersonListMenuId);
            if (buttonList.Count() > 0)
            {
                if (buttonList.Contains(BLL.Const.BtnAdd))
                {
                    this.btnNew.Hidden = false;
                    this.btnImport.Hidden = false;
                    this.btnPersonOut.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnModify))
                {
                    this.btnMenuEdit.Hidden = false;
                    this.btnPersonUnit.Hidden = false;
                    btnMenuBlack.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnDelete))
                {
                    this.btnMenuDelete.Hidden = false;
                    this.btnPersonUnit.Hidden = false;
                }
            }
        }
        #endregion
        #region 导入
        /// 
        /// 导入按钮
        /// 
        /// 
        /// 
        protected void btnImport_Click(object sender, EventArgs e)
        {
            //if (this.tvProjectAndUnit.SelectedNodeID.Contains("|"))
            //{
            //    string id = this.tvProjectAndUnit.SelectedNodeID;
            //    string unitId = string.Empty;
            //    string projectId = string.Empty;
            //    unitId = id.Split('|')[0];
            //    projectId = id.Split('|')[1];
            //}
            //else
            //{
            //    Alert.ShowInTop("请选择单位!", MessageBoxIcon.Warning);
            //    return;
            //}
            PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("PersonIn.aspx?ProjectId={0}", this.CurrUser.LoginProjectId, "导入 - ")));
        }
        /// 
        /// 关闭导入弹出窗口
        /// 
        /// 
        /// 
        protected void Window2_Close(object sender, WindowCloseEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 导出按钮
        /// 导出按钮
        /// 
        /// 
        /// 
        protected void btnOut_Click(object sender, EventArgs e)
        {
            Response.ClearContent();
            string filename = Funs.GetNewFileName();
            Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("人员信息" + filename, System.Text.Encoding.UTF8) + ".xls");
            Response.ContentType = "application/excel";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            this.Grid1.PageSize = this.Grid1.RecordCount;
            BindGrid();
            Response.Write(GetGridTableHtml(Grid1));
            Response.End();
        }
#pragma warning disable CS0108 // “PersonList.GetGridTableHtml(Grid)”隐藏继承的成员“PageBase.GetGridTableHtml(Grid)”。如果是有意隐藏,请使用关键字 new。
        /// 
        /// 导出方法
        /// 
        /// 
        /// 
        private string GetGridTableHtml(Grid grid)
#pragma warning restore CS0108 // “PersonList.GetGridTableHtml(Grid)”隐藏继承的成员“PageBase.GetGridTableHtml(Grid)”。如果是有意隐藏,请使用关键字 new。
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("");
            sb.Append("");
            sb.Append("");
            foreach (GridColumn column in grid.Columns)
            {
                sb.AppendFormat("| {0}", column.HeaderText);
            }
            sb.Append(" | 
");
            foreach (GridRow row in grid.Rows)
            {
                sb.Append("");
                foreach (GridColumn column in grid.Columns)
                {
                    string html = row.Values[column.ColumnIndex].ToString();
                    if (column.ColumnID == "tfNumber")
                    {
                        html = (row.FindControl("labNumber") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfI")
                    {
                        html = (row.FindControl("lbI") as AspNet.Label).Text;                        
                    }
                    //sb.AppendFormat("| {0}", html);
                    sb.AppendFormat(" | {0}", html);
                }
                sb.Append(" | 
");
            }
            sb.Append("
");
            return sb.ToString();
        }
        #endregion
        #region 批量出场
        /// 
        /// 批量出场按钮
        /// 
        /// 
        /// 
        protected void btnPersonOut_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("PersonOut.aspx?ProjectId={0}", this.CurrUser.LoginProjectId, "批量出场 - ")));
        }    
        
        /// 
        /// 批量单位转换
        /// 
        /// 
        /// 
        protected void btnPersonUnit_Click(object sender, EventArgs e)
        {
            if (BLL.CommonService.IsMainUnitOrAdmin(this.CurrUser.UserId))
            {
                PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("PersonUnitRefresh.aspx", "批量单位转换 - ")));
            }
            else
            {
                ShowNotify("非软件管理单位用户,不能调整人员单位!", MessageBoxIcon.Warning);
            }
        }
        /// 
        /// 关闭导入弹出窗口
        /// 
        /// 
        /// 
        protected void Window3_Close(object sender, WindowCloseEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 查询
        /// 
        /// 查询
        /// 
        /// 
        /// 
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            this.BindGrid();
        }
        #endregion     
            
        /// 
        /// 批量生成二维码
        /// 
        /// 
        /// 
        protected void btnQR_Click(object sender, EventArgs e)
        {
            var getPersons = from x in Funs.DB.SitePerson_Person
                             where x.ProjectId == this.CurrUser.LoginProjectId && x.IdentityCard != null && x.QRCodeAttachUrl == null
                             select x;
            int num = 0;
            if (getPersons.Count() > 0)
            {
                foreach (var item in getPersons)
                {
                    string url =  CreateQRCodeService.CreateCode_Simple("person$" + item.IdentityCard);
                    if (!string.IsNullOrEmpty(url))
                    {
                        item.QRCodeAttachUrl = url;
                        Funs.DB.SubmitChanges();
                        num++;
                    }
                }
            }
            ShowNotify("操作完成,新生成二维码"+ num.ToString()+"条", MessageBoxIcon.Success);
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        protected void btnPhoto_Click(object sender, EventArgs e)
        {
            var getPersons = from x in Funs.DB.SitePerson_Person
                             where x.ProjectId == this.ProjectId && x.HeadImage == null && x.PhotoUrl != null
                             select x;
            int num = 0;
            foreach (var item in getPersons)
            {
                item.HeadImage = AttachFileService.SetImageToByteArray(Funs.RootPath + item.PhotoUrl);
                Funs.DB.SubmitChanges();
                num++;
            }
            ShowNotify("操作完成,新转二进制照片" + num.ToString() + "条", MessageBoxIcon.Success);
        }
        protected void drpPost_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.drpPost.SelectedValueArray = Funs.RemoveDropDownListNull(this.drpPost.SelectedValueArray);
        }
        protected void btnPersonStates_Click(object sender, EventArgs e)
        {
            var getPersons = from x in Funs.DB.SitePerson_Person
                             where x.ProjectId == this.CurrUser.LoginProjectId && x.ExchangeTime.HasValue
                             select x;
            int pcount = getPersons.Count();
            if (pcount > 0)
            {
                foreach (var item in getPersons)
                {
                    item.ExchangeTime = null;
                    item.ExchangeTime2 = null;
                    Funs.DB.SubmitChanges();
                }
            }
            Alert.ShowInTop("操作完成,重置人员" + pcount.ToString() + "条", MessageBoxIcon.Success);
        }
        #region 加入黑名单
        protected void btnMenuBlack_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            this.PersonId = Grid1.SelectedRowID;
            var result = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.PersonId == PersonId);
            if (result != null)
            {
                result.IsBlacklist = true;
                Funs.DB.SubmitChanges();
                BindGrid();
            }
        }
        #endregion
    }
}