using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Web.UI;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.HSSE.Technique
{
    public partial class HazardList : PageBase
    {
        #region 加载页面
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Funs.DropDownPageSize(this.ddlPageSize);
                ////权限按钮方法
                this.GetButtonPower();             
                InitTreeMenu();
            }
        }
        #endregion
        #region 加载树
        /// 
        /// 初始化树
        /// 
        private void InitTreeMenu()
        {
            trHazardListType.Nodes.Clear();
            trHazardListType.ShowBorder = false;
            trHazardListType.ShowHeader = false;
            trHazardListType.EnableIcons = true;
            trHazardListType.AutoScroll = true;
            trHazardListType.EnableSingleClickExpand = true;
            TreeNode rootNode = new TreeNode
            {
                Text = "危险源辨识与评价清单",
                NodeID = "0",
                Expanded = true
            };
            this.trHazardListType.Nodes.Add(rootNode);
            BoundTree(rootNode.Nodes, "0");
        }
        private void BoundTree(TreeNodeCollection nodes, string menuId)
        {
            var dt = GetNewHazardListType(menuId);
            if (dt.Count() > 0)
            {
                TreeNode tn = null;
                foreach (var dr in dt)
                {
                    tn = new TreeNode
                    {
                        Text = dr.HazardListTypeName,
                        ToolTip = dr.HazardListTypeName,
                        NodeID = dr.HazardListTypeId,
                        EnableClickEvent = true
                    };
                    nodes.Add(tn);
                    BoundTree(tn.Nodes, dr.HazardListTypeId);
                }
            }
        }
        #endregion
        #region 得到菜单方法
        /// 
        /// 得到菜单方法
        /// 
        /// 
        /// 
        private List GetNewHazardListType(string parentId)
        {
            string hazardListTypeName = string.Empty;
            if (!string.IsNullOrEmpty(this.txtHazardListType.Text.Trim()))
            {
                hazardListTypeName = this.txtHazardListType.Text.Trim();
            }
            if (parentId == "0")
            {
                return (from x in Funs.DB.Technique_HazardListType where (x.IsCompany == false || x.IsCompany == null) && x.SupHazardListTypeId == "0" && x.HazardListTypeName.Contains(hazardListTypeName) orderby x.HazardListTypeCode select x).ToList();
            }
            else
            {
                return (from x in Funs.DB.Technique_HazardListType where (x.IsCompany == false || x.IsCompany == null) && x.SupHazardListTypeId == parentId orderby x.HazardListTypeCode select x).ToList();
            }
        }
        #endregion
        #region 增加数节点数据
        /// 
        /// 增加树节点数据
        /// 
        /// 
        /// 
        protected void btnMenuNew2_Click(object sender, EventArgs e)
        {
            if (this.trHazardListType.SelectedNode != null)
            {
                Model.Technique_HazardListType hazardListType = BLL.HazardListTypeService.GetHazardListTypeById(this.trHazardListType.SelectedNode.NodeID);
                if ((hazardListType != null && hazardListType.IsEndLevel == false) || this.trHazardListType.SelectedNode.NodeID == "0")   //根节点或者非末级节点,可以增加
                {
                    PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("HazardListTypeEdit.aspx?SupHazardListTypeId={0}&&IsCompany=False", this.trHazardListType.SelectedNode.NodeID, "编辑 - ")));
                }
                else
                {
                    ShowNotify("选择的项已是末级!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 编辑树
        /// 
        /// 编辑
        /// 
        /// 
        /// 
        protected void btnMenuEdit2_Click(object sender, EventArgs e)
        {
            if (this.trHazardListType.SelectedNode != null)
            {
                if (this.trHazardListType.SelectedNode.NodeID != "0")   //非根节点可以编辑
                {
                    PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("HazardListTypeEdit.aspx?HazardListTypeId={0}", this.trHazardListType.SelectedNode.NodeID, "编辑 - ")));
                }
                else
                {
                    ShowNotify("根节点无法编辑!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 删除树
        /// 
        /// 删除
        /// 
        /// 
        /// 
        protected void btnMenuDelete2_Click(object sender, EventArgs e)
        {
            if (this.trHazardListType.SelectedNode != null)
            {
                var hazardList = BLL.HazardListTypeService.GetHazardListTypeById(this.trHazardListType.SelectedNode.NodeID);
                if (hazardList != null && BLL.HazardListTypeService.IsDeleteHazardListType(this.trHazardListType.SelectedNode.NodeID))
                {
                    BLL.LogService.AddSys_Log(this.CurrUser, hazardList.HazardListTypeCode, hazardList.HazardListTypeId, BLL.Const.HazardListMenuId, Const.BtnDelete);
                    BLL.HazardListTypeService.DeleteHazardListTypeById(this.trHazardListType.SelectedNode.NodeID);
                    InitTreeMenu();
                }
                else
                {
                    ShowNotify("存在下级菜单或已增加资源数据或者为内置项,不允许删除!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择删除项!", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 点击树节点
        /// 
        /// 点击树节点
        /// 
        /// 
        /// 
        protected void trHazardListType_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 绑定Grid
        /// 
        /// 绑定Grid
        /// 
        private void BindGrid()
        {
            string strSql = @"SELECT H.HazardId,T.HazardListTypeId,T.HazardListTypeCode,T.HazardListTypeName,H.HazardCode,H.HazardItems,H.DefectsType,"
                                     + @" H.MayLeadAccidents,H.HelperMethod,H.HazardJudge_L,H.HazardJudge_E,H.HazardJudge_C,H.HazardJudge_D,Const0007.ConstText AS HazardLevel,"
                                     + @"  H.ControlMeasures,H.CompileMan,H.CompileDate,H.AuditMan,H.AuditDate,H.IsPass,U.UserName AS CompileManName,UR.UserName AS AuditManName"
                                     + @" FROM Technique_HazardList AS H"
                                     + @" LEFT JOIN Technique_HazardListType AS T ON T.HazardListTypeId = H.HazardListTypeId"
                                     + @" LEFT JOIN Sys_User AS U ON U.UserId = H.CompileMan"
                                     + @" LEFT JOIN Sys_User AS UR ON UR.UserId = H.AuditMan"
                                     + @" LEFT JOIN Sys_Const AS Const0007 ON Const0007.ConstValue = H.HazardLevel and Const0007.GroupId = '" + ConstValue.Group_0007 + "'"
                                     + @"  WHERE T.HazardListTypeId = @HazardListTypeId ";
            List listStr = new List
            {
                new SqlParameter("@HazardListTypeId", this.trHazardListType.SelectedNode.NodeID)
            };
            if (!string.IsNullOrEmpty(this.HazardCode.Text.Trim()))
            {
                strSql += " AND HazardCode LIKE @HazardCode";
                listStr.Add(new SqlParameter("@HazardCode", "%" + this.HazardCode.Text.Trim() + "%"));
            }
            if (!string.IsNullOrEmpty(this.HazardListTypeCode.Text.Trim()))
            {
                strSql += " AND HazardListTypeCode LIKE @HazardListTypeCode";
                listStr.Add(new SqlParameter("@HazardListTypeCode", "%" + this.HazardListTypeCode.Text.Trim() + "%"));
            }
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        #endregion
        #region 文本框查询事件
        /// 
        /// 查询
        /// 
        /// 
        /// 
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            this.BindGrid();
            BLL.LogService.AddSys_Log(this.CurrUser, string.Empty, string.Empty, BLL.Const.HazardListMenuId, Const.BtnQuery);
        }
        #endregion
        #region 表分页、排序
        /// 
        /// 页索引改变事件
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }
        /// 
        /// Grid排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid();
        }
        /// 
        /// 分页下拉选择事件
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        #endregion
        #region Grid行双击事件
        /// 
        /// 双击行事件
        /// 
        /// 
        /// 
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            this.EditData();
        }
        #endregion
        #region 增加明细
        /// 
        /// 增加危险源清单事件
        /// 
        /// 
        /// 
        protected void btnNewDetail_Click(object sender, EventArgs e)
        {
            if (this.trHazardListType.SelectedNode != null)
            {
                if (this.trHazardListType.SelectedNode.Nodes.Count == 0)
                {
                    PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("HazardListEdit.aspx?HazardListTypeId={0}", this.trHazardListType.SelectedNode.NodeID, "编辑 - ")));
                }
                else
                {
                    ShowNotify("请选择末级节点!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify("请选择树节点!", MessageBoxIcon.Warning);
            }
        }
        #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;
            }
            string hazardId = Grid1.SelectedRowID;
            PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("HazardListEdit.aspx?HazardId={0}", hazardId, "编辑 - ")));
        }
        #endregion
        #region 删除明细
        /// 
        /// 右键删除事件
        /// 
        /// 
        /// 
        protected void btnMenuDelete_Click(object sender, EventArgs e)
        {
            this.DeleteData();
        }
        /// 
        /// 删除方法
        /// 
        private void DeleteData()
        {
            if (Grid1.SelectedRowIndexArray.Length > 0)
            {
                foreach (int rowIndex in Grid1.SelectedRowIndexArray)
                {
                    string rowID = Grid1.DataKeys[rowIndex][0].ToString();
                    var hazard = BLL.HazardListService.GetHazardListById(rowID);
                    if (hazard != null)
                    {
                        var selectItem = BLL.Hazard_HazardSelectedItemService.GetHazardSelectedItemByHazardId(rowID);
                        if (selectItem != null)
                        {
                            string value = "在项目级危险源评价清单中已使用该资源,无法删除!";
                            var hazardList = BLL.Hazard_HazardListService.GetHazardList(selectItem.HazardListId);
                            if (hazardList != null)
                            {
                                var project = BLL.ProjectService.GetProjectByProjectId(hazardList.ProjectId);
                                if (project != null)
                                {
                                    value = "在项目:" + project.ProjectName + "中;危险源辨识评价清单:" + hazardList.HazardListCode + "中已使用该资源,无法删除!";
                                }
                            }
                            Alert.ShowInTop(value, MessageBoxIcon.Warning);
                            return;
                        }
                        BLL.LogService.AddSys_Log(this.CurrUser, hazard.HazardCode, hazard.HazardId, BLL.Const.HazardListMenuId, Const.BtnDelete);
                        BLL.HazardListService.DeleteHazardListById(rowID);
                    }
                }
                BindGrid();
                ShowNotify("删除数据成功!");
            }
        }
        #endregion     
        #region 导出
        /// 
        /// 关闭导出窗口
        /// 
        /// 
        /// 
        protected void Window5_Close(object sender, WindowCloseEventArgs e)
        {
            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
            Response.ContentType = "application/excel";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.Write(GetGridTableHtml(Grid1, e.CloseArgument.Split('#')));
            Response.End();
        }
        /// 
        /// 导出
        /// 
        ///  param >
        /// < param name="columns">
        /// 
        private string GetGridTableHtml(Grid grid, string[] columns)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("");
            List columnHeaderTexts = new List(columns);
            List columnIndexs = new List();
            sb.Append("");
            sb.Append("");
            foreach (GridColumn column in grid.Columns)
            {
                if (columnHeaderTexts.Contains(column.HeaderText))
                {
                    sb.AppendFormat("| {0}", column.HeaderText);
                    columnIndexs.Add(column.ColumnIndex);
                }
            }
            sb.Append(" | 
");
            foreach (GridRow row in grid.Rows)
            {
                sb.Append("");
                int columnIndex = 0;
                foreach (object value in row.Values)
                {
                    if (columnIndexs.Contains(columnIndex))
                    {
                        string html = value.ToString();
                        if (html.StartsWith(Grid.TEMPLATE_PLACEHOLDER_PREFIX))
                        {
                            // 模板列                            
                            string templateID = html.Substring(Grid.TEMPLATE_PLACEHOLDER_PREFIX.Length);
                            Control templateCtrl = row.FindControl(templateID);
                            html = GetRenderedHtmlSource(templateCtrl);
                        }
                        //else
                        //{
                        //    // 处理CheckBox             
                        //    if (html.Contains("f-grid-static-checkbox"))
                        //    {
                        //        if (!html.Contains("f-checked"))
                        //        {
                        //            html = "×";
                        //        }
                        //        else
                        //        {
                        //            html = "√";
                        //        }
                        //    }
                        //    // 处理图片                           
                        //    if (html.Contains("![]() {0}", html);
                    }
                    columnIndex++;
                }
                sb.Append("
{0}", html);
                    }
                    columnIndex++;
                }
                sb.Append("
");
            }
            sb.Append("
");
            return sb.ToString();
        }
        ///         
        /// 获取控件渲染后的HTML源代码        
        ///         
        ///         
        ///         
        private string GetRenderedHtmlSource(Control ctrl)
        {
            if (ctrl != null)
            {
                using (StringWriter sw = new StringWriter())
                {
                    using (HtmlTextWriter htw = new HtmlTextWriter(sw))
                    {
                        ctrl.RenderControl(htw);
                        return sw.ToString();
                    }
                }
            }
            return String.Empty;
        }
        #endregion
        #region 关闭窗口
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            InitTreeMenu();
        }
        protected void Window2_Close(object sender, WindowCloseEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 获取按钮权限
        /// 
        /// 获取按钮权限
        /// 
        /// 
        /// 
        private void GetButtonPower()
        {
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.HazardListMenuId);
            if (buttonList.Count() > 0)
            {
                if (buttonList.Contains(BLL.Const.BtnAdd))
                {
                    this.btnMenuNew2.Hidden = false;
                    this.btnNewDetail.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnModify))
                {
                    this.btnMenuEdit2.Hidden = false;
                    this.btnMenuEdit.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnDelete))
                {
                    this.btnMenuDelete2.Hidden = false;
                    this.btnMenuDelete.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnOut))
                {
                    this.btnOut.Hidden = false;
                    this.btnAllOut.Hidden = false;
                }
                if (buttonList.Contains(BLL.Const.BtnIn))
                {
                    this.btnImport.Hidden = false;
                }
            }
        }
        #endregion
        #region 导入
        /// 
        /// 导入按钮
        /// 
        /// 
        /// 
        protected void btnImport_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window6.GetShowReference(String.Format("HazardListIn.aspx?IsCompany=False", "导入 - ")));    
        }
        #endregion
        #region 查询危险源类别
        /// 
        /// 查询危险源类别
        /// 
        /// 
        /// 
        protected void Text_TextChanged(object sender, EventArgs e)
        {
            InitTreeMenu();
            BLL.LogService.AddSys_Log(this.CurrUser, string.Empty, string.Empty, BLL.Const.HazardListMenuId, Const.BtnQuery);
        }
        #endregion
        /// 
        /// 导出
        /// 
        /// 
        /// 
        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 = Grid1.RecordCount;
            BindGrid();
            Response.Write(GetGridTableHtmlPage(Grid1));
            Response.End();
        }
        #region 导出方法
        /// 
        /// 导出方法
        /// 
        /// 
        /// 
        public static string GetGridTableHtmlPage(Grid grid)
        {
            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" && (row.FindControl("lbNumber") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbNumber") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfHazardCode" && (row.FindControl("lbHazardCode") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbHazardCode") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfHazardItems" && (row.FindControl("lbHazardItems") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbHazardItems") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfDefectsType" && (row.FindControl("lbDefectsType") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbDefectsType") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfMayLeadAccidents" && (row.FindControl("lbMayLeadAccidents") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbMayLeadAccidents") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfHelperMethod" && (row.FindControl("lbHelperMethod") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbHelperMethod") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfControlMeasures" && (row.FindControl("lbControlMeasures") as AspNet.Label) != null)
                    {
                        html = (row.FindControl("lbControlMeasures") as AspNet.Label).Text;
                    }
                    sb.AppendFormat("| {0}", html);
                }
                sb.Append(" | 
");
            }
            sb.Append("
");
            return sb.ToString();
        }
        #endregion
        protected void btnAllOut_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window6.GetShowReference(String.Format("HazardListOut.aspx?IsCompany=False", "导出 - "),"导出",1200,650));
        }
        /// 
        /// 从集团获取
        /// 
        /// 
        /// 
        protected void btnGet_Click(object sender, EventArgs e)
        {
            var returnValue = CNCECHSSEWebService.getTechnique_HazardList();
            if (returnValue.code == 1)
            {
                ShowNotify(returnValue.message, MessageBoxIcon.Success);
            }
            else
            {
                Alert.ShowInTop(returnValue.message, MessageBoxIcon.Success);
            }
        }
    }
}