using BLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.HSSE.Hazard
{
    public partial class HazardListView : PageBase
    {
        #region 定义项
        /// 
        /// 类别Code
        /// 
        public string HazardSortCode
        {
            get
            {
                return (string)ViewState["HazardSortCode"];
            }
            set
            {
                ViewState["HazardSortCode"] = value;
            }
        }
        /// 
        /// 危险源辨识与评价清单Id
        /// 
        public string HazardListId
        {
            get
            {
                return (string)ViewState["HazardListId"];
            }
            set
            {
                ViewState["HazardListId"] = value;
            }
        }
        /// 
        /// 项目主键
        /// 
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        /// 
        /// 判断是否完全选
        /// 
        //private bool result = true;
        /// 
        /// 危险源集合
        /// 
        public static List hazardTemplates = new List();
        /// 
        /// 新增危险源集合
        /// 
        public static List newHazardTemplates = new List();
        /// 
        /// 类别集合
        /// 
        //private static List hazardSorts = new List();
        /// 
        /// 工作阶段ID集合
        /// 
        private static List workStageIds = new List();
        #endregion
        #region 加载
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.btnClose.OnClientClick = ActiveWindow.GetHideReference();
                this.ProjectId = this.CurrUser.LoginProjectId;
                if (!string.IsNullOrEmpty(Request.Params["projectId"]) && Request.Params["projectId"] != this.CurrUser.LoginProjectId)
                {
                    this.ProjectId = Request.Params["projectId"];
                }
                hazardTemplates.Clear();
                newHazardTemplates.Clear();
                this.HazardListId = Request.Params["HazardListId"];
                if (!string.IsNullOrEmpty(this.HazardListId))
                {
                    Model.Hazard_HazardList hazardList = Hazard_HazardListService.GetHazardList(this.HazardListId);
                    if (hazardList != null)
                    {
                        this.ProjectId = hazardList.ProjectId;
                        this.txtHazardListCode.Text = CodeRecordsService.ReturnCodeByDataId(this.HazardListId);
                        if (!string.IsNullOrEmpty(hazardList.WorkStage))
                        {
                            List workStages = hazardList.WorkStage.Split(',').ToList();
                            string workStageId = string.Empty;
                            string workStage = string.Empty;
                            foreach (string str in workStages)
                            {
                                workStageId += str + ",";
                                Model.Base_WorkStage c = BLL.WorkStageService.GetWorkStageById(str);
                                if (c != null)
                                {
                                    workStage += c.WorkStageName + ",";
                                }
                            }
                            if (!string.IsNullOrEmpty(workStage))
                            {
                                this.hdWorkStage.Text = workStageId.Substring(0, workStageId.LastIndexOf(","));
                                workStage = workStage.Substring(0, workStage.LastIndexOf(","));
                            }
                            this.txtWorkStage.Text = workStage;
                        }
                        this.hdWorkStage.Text = hazardList.WorkStage;
                        Model.Sys_User compileMan = BLL.UserService.GetUserByUserId(hazardList.CompileMan);
                        if (compileMan!=null)
                        {
                            this.txtCompileMan.Text = compileMan.UserName;
                        }
                        this.txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", hazardList.CompileDate);
                        Model.Sys_User controllingPerson = BLL.UserService.GetUserByUserId(hazardList.ControllingPerson);
                        if (controllingPerson!=null)
                        {
                            this.txtControllingPerson.Text = controllingPerson.UserName;
                        }
                        this.txtIdentificationDate.Text = string.Format("{0:yyyy-MM-dd}", hazardList.IdentificationDate);
                        this.txtWorkArea.Text = hazardList.WorkAreaName;
                        this.txtContents.Text = HttpUtility.HtmlDecode(hazardList.Contents);
                        //this.HazardSortSetDataBind();
                        this.SelectedCheckedHazardItem();
                    }
                }
            }
        }
        #endregion
        #region 筛选风险评价清单列表
        /// 
        /// 筛选风险评价清单列表
        /// 
        private void GetHazardTemplates()
        {
            List newHazardTemplates1 = new List();
            List newHazardTemplates2 = new List();
            if (this.drpHelperMethods.SelectedValue != null)
            {
                foreach (Model.HSSE_HazardTemplate hazardTemplate in hazardTemplates)
                {
                    for (int i = 0; i < this.drpHelperMethods.Items.Count; i++)
                    {
                        if (this.drpHelperMethods.Items[i].Selected)
                        {
                            if (hazardTemplate.HelperMethod == this.drpHelperMethods.Items[i].Value)
                            {
                                newHazardTemplates1.Add(hazardTemplate);
                            }
                        }
                    }
                }
            }
            else
            {
                newHazardTemplates1.AddRange(hazardTemplates);
            }
            if (this.drpHazardLevel.SelectedValue != null)
            {
                foreach (Model.HSSE_HazardTemplate hazardTemplate in newHazardTemplates1)
                {
                    for (int i = 0; i < this.drpHazardLevel.Items.Count; i++)
                    {
                        if (this.drpHazardLevel.Items[i].Selected)
                        {
                            if (hazardTemplate.HazardLevel.ToString() == this.drpHazardLevel.Items[i].Value)
                            {
                                newHazardTemplates2.Add(hazardTemplate);
                            }
                        }
                    }
                }
            }
            else
            {
                newHazardTemplates2.AddRange(newHazardTemplates1);
            }
            this.Grid1.DataSource = newHazardTemplates2;
            this.Grid1.DataBind();
        }
        #endregion
        #region 选中选择项
        /// 
        /// 选中选择项
        /// 
        private void SelectedCheckedHazardItem()
        {
            List newHazardTemplates = new List();
            List hazardSelectedItems = Hazard_HazardSelectedItemService.GetHazardSelectedItemsByHazardListId(HazardListId);           
            foreach (Model.Hazard_HazardSelectedItem hazardSelectedItem in hazardSelectedItems)
            {
                Model.Base_RiskLevel riskLevel = BLL.RiskLevelService.GetRiskLevel(hazardSelectedItem.HazardLevel);
                Model.HSSE_HazardTemplate newHazardTemplate = new Model.HSSE_HazardTemplate
                {
                    HazardId = hazardSelectedItem.HazardId,
                    HazardListTypeId = hazardSelectedItem.HazardListTypeId,
                    HazardItems = hazardSelectedItem.HazardItems,
                    DefectsType = hazardSelectedItem.DefectsType,
                    MayLeadAccidents = hazardSelectedItem.MayLeadAccidents,
                    HelperMethod = hazardSelectedItem.HelperMethod,
                    HazardJudge_L = hazardSelectedItem.HazardJudge_L,
                    HazardJudge_E = hazardSelectedItem.HazardJudge_E,
                    HazardJudge_C = hazardSelectedItem.HazardJudge_C,
                    HazardJudge_D = hazardSelectedItem.HazardJudge_D,
                    
                    ControlMeasures = hazardSelectedItem.ControlMeasures,
                    WorkStage = hazardSelectedItem.WorkStage.Trim()
                };
                if (riskLevel != null)
                {
                    newHazardTemplate.HazardLevel = riskLevel.RiskLevelName;
                }
                newHazardTemplates.Add(newHazardTemplate);
            }
            hazardTemplates = newHazardTemplates;
            this.Grid1.DataSource = hazardTemplates;
            this.Grid1.DataBind();
        }
        #endregion
        
        #region 依次展开此节点的所以上级节点
        /// 
        /// 依次展开此节点的所以上级节点
        /// 
        private void ExpandParents(TreeNode node)
        {
            if (node.NodeID != "0")
            {
                node.Expanded = true;
                node.Checked = true;
                ExpandParents(node.ParentNode);
            }
        }
        #endregion               
        #region 查找工作阶段及危险源清单
        /// 
        /// 查找工作阶段及危险源清单
        /// 
        /// 
        /// 
        protected void btnWorkStage_OnClick(object sender, EventArgs e)
        {
            Session["workStages"] = null;
            PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("HazardTemplate.aspx?HazardListId={0}&WorkStageIds={1}", this.HazardListId, this.hdWorkStage.Text, "工作阶段和危险源清单 - ")));
        }
        /// 
        /// 关闭查找工作阶段
        /// 
        /// 
        /// 
        protected void Window2_Close(object sender, WindowCloseEventArgs e)
        {
            if (Session["workStages"] != null)
            {
                string newWorkStages = string.Empty;
                string workStages = Session["workStages"].ToString();
                List templates = workStages.Split('|').ToList();
                foreach (var item in templates)
                {
                    Model.Technique_HazardList template = BLL.HazardListService.GetHazardListById(item.Split(',').ToList()[0]);
                    Model.Base_RiskLevel riskLevel = BLL.RiskLevelService.GetRiskLevel(template.HazardLevel);
                    Model.HSSE_HazardTemplate hazardTemplate = new Model.HSSE_HazardTemplate
                    {
                        HazardId = template.HazardId,
                        HazardListTypeId = template.HazardListTypeId,
                        WorkStage = item.Split(',').ToList()[1],
                        HazardItems = template.HazardItems,
                        DefectsType = template.DefectsType,
                        MayLeadAccidents = template.MayLeadAccidents,
                        HelperMethod = template.HelperMethod,
                        HazardJudge_L = template.HazardJudge_L,
                        HazardJudge_E = template.HazardJudge_E,
                        HazardJudge_C = template.HazardJudge_C,
                        HazardJudge_D = template.HazardJudge_D,
                        HazardLevel = template.HazardLevel,
                        ControlMeasures = template.ControlMeasures
                    };
                    if (riskLevel != null)
                    {
                        hazardTemplate.HazardLevel = riskLevel.RiskLevelName;
                    }
                    hazardTemplates.Add(hazardTemplate);
                    workStageIds.Add(item.Split(',').ToList()[1]);//把工作阶段放入集合里    
                }
                //获取工作阶段加载到文本中
                foreach (var i in workStageIds.Distinct().ToList())
                {
                    this.hdWorkStage.Text = i;
                    newWorkStages += WorkStageService.GetWorkStageById(this.hdWorkStage.Text).WorkStageName + ",";
                }
                if (!string.IsNullOrEmpty(newWorkStages))
                {
                    this.txtWorkStage.Text = newWorkStages.Substring(0, newWorkStages.LastIndexOf(","));
                }
                //循环集合是否存在相同项,如果存在,移除重复项
                for (int i = 0; i < hazardTemplates.Count(); i++)
                {
                    for (int j = hazardTemplates.Count() - 1; j > i; j--)
                    {
                        if (hazardTemplates[j].HazardId.Equals(hazardTemplates[i].HazardId))
                        {
                            hazardTemplates.Remove(hazardTemplates[j]);
                        }
                    }
                }
                this.Grid1.DataSource = hazardTemplates;
                this.Grid1.DataBind();
            }
        }
        #endregion
        #region 格式化字符串
        /// 
        /// 获取工作阶段
        /// 
        /// 
        /// 
        protected string ConvertWorkStage(object WorkStage)
        {
            string name = string.Empty;
            if (WorkStage != null)
            {
                string workStage = WorkStage.ToString().Trim();
                Model.Base_WorkStage c = BLL.WorkStageService.GetWorkStageById(workStage);
                if (c != null)
                {
                    name = c.WorkStageName;
                }
            }
            return name;
        }
        /// 
        /// 获取危险源编号
        /// 
        /// 
        /// 
        protected string ConvertHazardCode(object HazardId)
        {
            string hazardCode = string.Empty;
            if (HazardId != null)
            {
                Model.Technique_HazardList hazardList = BLL.HazardListService.GetHazardListById(HazardId.ToString());
                if (hazardList != null)
                {
                    hazardCode = hazardList.HazardCode;
                }
            }
            return hazardCode;
        }
        /// 
        /// 获取危险源类别
        /// 
        /// 
        /// 
        protected string ConvertSupHazardListTypeId(object hazardListTypeId)
        {
            if (hazardListTypeId != null)
            {
                Model.Technique_HazardListType hazardListType = HazardListTypeService.GetHazardListTypeById(hazardListTypeId.ToString());
                if (hazardListType != null)
                {
                    var hazard = HazardListTypeService.GetHazardListTypeById(hazardListType.SupHazardListTypeId);
                    if (hazard != null)
                    {
                        return hazard.HazardListTypeName;
                    }
                }
            }
            return null;
        }
        /// 
        /// 获取危险源项
        /// 
        /// 
        /// 
        protected string ConvertHazardListTypeId(object hazardListTypeId)
        {
            if (hazardListTypeId != null)
            {
                Model.Technique_HazardListType hazardListType = BLL.HazardListTypeService.GetHazardListTypeById(hazardListTypeId.ToString());
                if (hazardListType != null)
                {
                    return hazardListType.HazardListTypeName;
                }
            }
            return null;
        }
        #endregion
        #region 选择辅助方法
        /// 
        /// 选择辅助方法
        /// 
        /// 
        /// 
        protected void drpHelperMethods_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            string assistWays = "";
            for (int i = 0; i < this.drpHelperMethods.Items.Count; i++)
            {
                if (this.drpHelperMethods.Items[i].Selected)
                {
                    if (assistWays == "")
                    {
                        assistWays = this.drpHelperMethods.Items[i].Text;
                    }
                    else
                    {
                        assistWays += "," + this.drpHelperMethods.Items[i].Text;
                    }
                }
            }
            this.drpHelperMethods.Text = assistWays;
            GetHazardTemplates();
        }
        #endregion
        #region 选择危险级别
        /// 
        /// 选择危险级别
        /// 
        /// 
        /// 
        protected void drpHazardLevel_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            string hazardGrades = "";
            for (int i = 0; i < this.drpHazardLevel.Items.Count; i++)
            {
                if (this.drpHazardLevel.Items[i].Selected)
                {
                    if (hazardGrades == "")
                    {
                        hazardGrades = this.drpHazardLevel.Items[i].Text;
                    }
                    else
                    {
                        hazardGrades += "," + this.drpHazardLevel.Items[i].Text;
                    }
                }
            }
            this.drpHazardLevel.Text = hazardGrades;
            GetHazardTemplates();
        }
        #endregion      
        #region 格式化字符串
        /// 
        /// 转换工作阶段
        /// 
        /// 
        /// 
        protected string ConvertWorkStage(string workStage)
        {
            if (workStage != null)
            {
                string workStages = string.Empty;
                string[] strList = workStage.ToString().Split(',');
                foreach (string str in strList)
                {
                    Model.Base_WorkStage c = BLL.WorkStageService.GetWorkStageById(str);
                    if (c != null)
                    {
                        workStages += c.WorkStageName + ",";
                    }
                }
                if (!string.IsNullOrEmpty(workStages))
                {
                    workStages = workStages.Substring(0, workStages.LastIndexOf(","));
                }
                return workStages;
            }
            return "";
        }
        #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 = 500;
            Response.Write(GetGridTableHtml(Grid1));
            Response.End();
        }
#pragma warning disable CS0108 // “HazardListView.GetGridTableHtml(Grid)”隐藏继承的成员“PageBase.GetGridTableHtml(Grid)”。如果是有意隐藏,请使用关键字 new。
        /// 
        /// 导出方法
        /// 
        /// 
        /// 
        private string GetGridTableHtml(Grid grid)
#pragma warning restore CS0108 // “HazardListView.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("lblNumber") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfHazardId")
                    {
                        html = (row.FindControl("lblHazardId") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfHazardListTypeId")
                    {
                        html = (row.FindControl("lblHazardListTypeId") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfWorkStage")
                    {
                        html = (row.FindControl("lblWorkStage") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfWorkStages")
                    {
                        html = (row.FindControl("lblWorkStages") as AspNet.Label).Text;
                    }
                    sb.AppendFormat("| {0}", html);
                }
                sb.Append(" | 
");
            }
            sb.Append("
");
            return sb.ToString();
        }
        #endregion
        #region 附件上传
        /// 
        /// 上传附件
        /// 
        /// 
        /// 
        protected void btnAttachUrl_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.HazardListId))
            {
                PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("~/AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/HazardListAttachUrl&menuId={1}&type=-1", this.HazardListId, BLL.Const.ProjectHazardListMenuId)));
            }
        }
        #endregion
    }
}