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.ZHGL.Supervise
{
    public partial class SuperviseCheckReport : PageBase
    {
        #region 加载页面
        /// 
        /// 加载页面
        ///  
        /// 
        /// 绑定数据
        ///  
        private void BindGrid()
        {
            string strSql = @"SELECT S.SuperviseCheckReportId,S.SuperviseCheckReportCode,S.CheckDate,CU.UnitName as CheckUnitName,S.ProjectId,P.ProjectName,S.UnitId,u.UnitName,S.CheckTeam,S.EvaluationResult,S.AttachUrl,S.IsIssued
,case S.CheckMainType when '0' then '安全' when '1' then '质量' else '' end as CheckMainTypeName
,SType.CheckTypeName as CheckTypeName
FROM dbo.Supervise_SuperviseCheckReport AS S
LEFT JOIN dbo.Base_Project AS P ON P.ProjectId=S.ProjectId
LEFT JOIN dbo.Base_Unit AS U ON U.UnitId=S.UnitId
LEFT JOIN dbo.Base_Unit AS CU ON CU.UnitId=S.CheckUnitId
LEFT JOIN dbo.Base_SuperviseCheckType AS SType ON SType.CheckMainType=S.CheckMainType and SType.CheckTypeCode=S.CheckType
WHERE 1=1 ";
            List listStr = new List();
            if (!string.IsNullOrEmpty(this.txtName.Text.Trim()))
            {
                strSql += " AND (S.SuperviseCheckReportCode like @name OR P.ProjectName like @name OR u.UnitName like @name OR S.CheckTeam like @name OR S.EvaluationResult like @name)";
                listStr.Add(new SqlParameter("@name", "%" + this.txtName.Text.Trim() + "%"));
            }
            var thisUnit = BLL.CommonService.GetIsThisUnit();
            if (!string.IsNullOrEmpty(this.CurrUser.UnitId) && thisUnit.UnitId != this.CurrUser.UnitId)
            {
                //strSql += " AND P.UnitId = @UnitId";
                strSql += " AND (U.UnitId = @UnitId or CU.UnitId = @UnitId)";
                listStr.Add(new SqlParameter("@UnitId", this.CurrUser.UnitId));
            }
            if (this.drpCheckMainType.SelectedValue != null && this.drpCheckMainType.SelectedValue != BLL.Const._Null)
            {
                strSql += " AND S.CheckMainType = @CheckMainType";
                listStr.Add(new SqlParameter("@CheckMainType", this.drpCheckMainType.SelectedValue));
            }
            if (this.drpCheckType.SelectedValue != null && this.drpCheckType.SelectedValue != BLL.Const._Null)
            {
                strSql += " AND S.CheckType = @CheckType";
                listStr.Add(new SqlParameter("@CheckType", this.drpCheckType.SelectedValue));
            }
            SqlParameter[] parameter = listStr.ToArray();
            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();
            for (int i = 0; i < Grid1.Rows.Count; i++)
            {
                System.Web.UI.WebControls.LinkButton lbtnRectify = (System.Web.UI.WebControls.LinkButton)(Grid1.Rows[i].FindControl("lbtnRectify"));
                System.Web.UI.WebControls.Label lblRectify = (System.Web.UI.WebControls.Label)(Grid1.Rows[i].FindControl("lblRectify"));
                Model.Supervise_SuperviseCheckReport report = BLL.SuperviseCheckReportService.GetSuperviseCheckReportById(lbtnRectify.CommandArgument);
                if (report != null)
                {
                    if (report.IsIssued == "1")   //已下发
                    {
                        lbtnRectify.Visible = false;
                        Model.Supervise_SuperviseCheckRectify rectify = BLL.SuperviseCheckRectifyService.GetSuperviseCheckRectifyBySuperviseCheckReportId(lbtnRectify.CommandArgument);
                        string code = string.Empty;
                        if (rectify != null)
                        {
                            code = rectify.SuperviseCheckRectifyCode;
                            lblRectify.Text = "已下发:" + code;
                        }
                        else
                        {
                            lblRectify.Text = "定稿";
                        }
                    }
                    else
                    {
                        lbtnRectify.Visible = true;
                        lblRectify.Text = string.Empty;
                        Grid1.Rows[i].RowCssClass = "red";
                    }
                    Model.Supervise_SubUnitCheckRectify sub = BLL.SubUnitCheckRectifyService.GetSubUnitCheckRectifyBySuperviseCheckReportId(lbtnRectify.CommandArgument);
                    if (sub != null && sub.UpState == BLL.Const.UpState_3)
                    {
                        lbtnSubRec.Text = "报告单(已上报)";
                    }
                    else
                    {
                        lbtnSubRec.Text = "报告单";
                    }
                }
            }
        }
        #endregion
        #region 过滤表头、排序、分页、关闭窗口
        /// 
        /// 过滤表头
        ///  
        /// 
        /// 分页
        ///  
        /// 
        /// 排序
        ///  
        /// 
        /// 分页显示条数下拉框
        ///  
        /// 
        /// 关闭弹出窗
        ///  
        /// 
        /// 关闭弹出窗口
        ///  
        /// 
        /// Grid行事件
        ///  
        /// 
        /// Grid行双击事件
        ///  
        /// 
        /// 下发整改单
        ///  
        /// 
        /// 编辑按钮
        ///  
        /// 
        /// 批量删除
        ///  
        /// 
        /// 报告报告
        ///  
        /// 
        /// 获取按钮权限
        ///  
        /// 
        /// 导出方法
        ///  
        /// ");
            foreach (List rows in mht.MultiTable)
            {
                sb.Append("");
                foreach (object[] cell in rows)
                {
                    int rowspan = Convert.ToInt32(cell[0]);
                    int colspan = Convert.ToInt32(cell[1]);
                    GridColumn column = cell[2] as GridColumn;
                    sb.AppendFormat("{3} ",
                       rowspan != 1 ? " rowspan=\"" + rowspan + "\"" : "",
                       colspan != 1 ? " colspan=\"" + colspan + "\"" : "",
                      colspan != 1 ? " style=\"text-align:center;\"" : "",
                        column.HeaderText);
                }
                sb.Append(" ");
            }
            foreach (GridRow row in grid.Rows)
            {
                sb.Append("");
                foreach (GridColumn column in mht.Columns)
                {
                    string html = row.Values[column.ColumnIndex].ToString();
                    if (column.ColumnID == "tfNumber")
                    {
                        html = (row.FindControl("lblNumber") as AspNet.Label).Text;
                    }
                    if (column.ColumnID == "tfRectify")
                    {
                        html = (row.FindControl("lbtnRectify") as AspNet.LinkButton).Text;
                    }
                    if (column.ColumnID == "tfSubRec")
                    {
                        html = (row.FindControl("lbtnSubRec") as AspNet.LinkButton).Text;
                    }
                    sb.AppendFormat("{0} ", html);
                }
                sb.Append(" ");
            }
            sb.Append(" 
");
            return sb.ToString();
        }
        #region 多表头处理
        /// 
        /// 多表头处理
        ///  
        public class MultiHeaderTable
        {
            // 包含 rowspan,colspan 的多表头,方便生成 HTML 的 table 标签
            public List> MultiTable = new List>();
            // 最终渲染的列数组
            public List Columns = new List();
            public void ResolveMultiHeaderTable(GridColumnCollection columns)
            {
                List row = new List();
                foreach (GridColumn column in columns)
                {
                    object[] cell = new object[4];
                    cell[0] = 1;    // rowspan
                    cell[1] = 1;    // colspan
                    cell[2] = column;
                    cell[3] = null;
                    row.Add(cell);
                }
                ResolveMultiTable(row, 0);
                ResolveColumns(row);
            }
            private void ResolveColumns(List row)
            {
                foreach (object[] cell in row)
                {
                    GroupField groupField = cell[2] as GroupField;
                    if (groupField != null && groupField.Columns.Count > 0)
                    {
                        List subrow = new List();
                        foreach (GridColumn column in groupField.Columns)
                        {
                            subrow.Add(new object[]
                           {
                               1,
                                1,
                               column,
                                groupField
                            });
                        }
                        ResolveColumns(subrow);
                    }
                    else
                    {
                        Columns.Add(cell[2] as GridColumn);
                    }
                }
            }
            private void ResolveMultiTable(List row, int level)
            {
                List nextrow = new List();
                foreach (object[] cell in row)
                {
                    GroupField groupField = cell[2] as GroupField;
                    if (groupField != null && groupField.Columns.Count > 0)
                    {
                        // 如果当前列包含子列,则更改当前列的 colspan,以及增加父列(向上递归)的colspan
                        cell[1] = Convert.ToInt32(groupField.Columns.Count);
                        PlusColspan(level - 1, cell[3] as GridColumn, groupField.Columns.Count - 1);
                        foreach (GridColumn column in groupField.Columns)
                        {
                            nextrow.Add(new object[]
                           {
                               1,
                                1,
                                column,
                                groupField
                           });
                        }
                    }
                }
                MultiTable.Add(row);
                // 如果当前下一行,则增加上一行(向上递归)中没有子列的列的 rowspan
                if (nextrow.Count > 0)
                {
                    PlusRowspan(level);
                    ResolveMultiTable(nextrow, level + 1);
                }
            }
            private void PlusRowspan(int level)
            {
                if (level < 0)
                {
                    return;
                }
                foreach (object[] cells in MultiTable[level])
                {
                    GroupField groupField = cells[2] as GroupField;
                    if (groupField != null && groupField.Columns.Count > 0)
                    {
                        // ...
                    }
                    else
                    {
                        cells[0] = Convert.ToInt32(cells[0]) + 1;
                    }
                }
                PlusRowspan(level - 1);
            }
            private void PlusColspan(int level, GridColumn parent, int plusCount)
            {
                if (level < 0)
                {
                    return;
                }
                foreach (object[] cells in MultiTable[level])
                {
                    GridColumn column = cells[2] as GridColumn;
                    if (column == parent)
                    {
                        cells[1] = Convert.ToInt32(cells[1]) + plusCount;
                        PlusColspan(level - 1, cells[3] as GridColumn, plusCount);
                    }
                }
            }
        }
        #endregion
        #endregion
        #region 查询
        /// 
        /// 查询
        ///  
        /// 
        /// 检查大类下拉触发事件
        ///  
        ///