using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.HSSE.CostGoods
{
    public partial class CostLedger : PageBase
    {
        #region 项目主键
        /// 
        /// 项目主键
        /// 
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        #endregion
        private static string headerStr;
        #region 加载
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.ProjectId = this.CurrUser.LoginProjectId;
                if (!string.IsNullOrEmpty(Request.Params["projectId"]) && Request.Params["projectId"] != this.CurrUser.LoginProjectId)
                {
                    this.ProjectId = Request.Params["projectId"];
                }
                Model.Base_Project project = BLL.ProjectService.GetProjectByProjectId(this.ProjectId);
                if (project.StartDate == null || project.EndDate == null)
                {
                    Alert.ShowInTop("请先设置项目的开始时间和结束时间!", MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    headerStr = string.Empty;
                    DateTime startTime;
                    DateTime endTime;
                    DateTime monthStartTime;
                    DateTime monthEndTime;
                    int sortIndex = 1;
                    List subUnits = BLL.ProjectUnitService.GetProjectUnitListByProjectIdUnitType(this.ProjectId, BLL.Const.ProjectUnitType_2);
                    DataTable dt = new DataTable();
                    dt.Columns.Add("R0");   //序号
                    dt.Columns.Add("R1");   //施工分包商
                    dt.Columns.Add("R2");   //HSE费用(元)
                    dt.Columns.Add("R3");   //审批支付、剩余
                    startTime = Convert.ToDateTime(Convert.ToDateTime(project.StartDate).ToString("yyyy-MM"));
                    endTime = Convert.ToDateTime(Convert.ToDateTime(project.EndDate).ToString("yyyy-MM"));
                    string monthStr = string.Empty;
                    while (endTime >= startTime)
                    {
                        monthStr += startTime.ToString("yyyy-MM") + "|";
                        startTime = startTime.AddMonths(1);
                    }
                    if (!string.IsNullOrEmpty(monthStr))
                    {
                        monthStr = monthStr.Substring(0, monthStr.LastIndexOf("|"));
                    }
                    string[] months = monthStr.Split('|');
                    //如果超过15个月,需要加宽GridView以保证样式
                    if (months.Length > 15)
                    {
                        int addNum = months.Length - 15;
                        this.gvCostLedger.Width = 1100 + addNum * 60;
                    }
                    string monthTitle = string.Empty;
                    for (int i = 0; i < months.Length; i++)
                    {
                        monthTitle += months[i] + ",";
                        dt.Columns.Add("M" + i);
                    }
                    if (!string.IsNullOrEmpty(monthTitle))
                    {
                        monthTitle = monthTitle.Substring(0, monthTitle.LastIndexOf(","));
                    }
                    dt.Columns.Add("合计");
                    headerStr += "序号#施工分包商#HSE费用(元)#步骤#审批金额";
                    headerStr += " " + monthTitle + "#合计";
                    foreach (Model.Project_ProjectUnit proUnit in subUnits)
                    {
                        var unit = BLL.UnitService.GetUnitByUnitId(proUnit.UnitId);
                        decimal? planCost = proUnit.PlanCostA + proUnit.PlanCostB ?? 0;
                        decimal planAmount = planCost ?? 0;
                        decimal lastCost = planAmount;
                        decimal totalCost = 0;
                        DataRow row1 = dt.NewRow();
                        DataRow row2 = dt.NewRow();
                        row1[0] = sortIndex;
                        row1[1] = unit.UnitName;
                        row1[2] = planAmount.ToString("0.00");
                        row1[3] = "审批支付";
                        row2[0] = sortIndex;
                        row2[1] = unit.UnitName;
                        row2[2] = planAmount.ToString("0.00");
                        row2[3] = "剩余";
                        int r = 4;
                        for (int i = 0; i < months.Length; i++)
                        {
                            DateTime month = Convert.ToDateTime(months[i] + "-01");
                            monthStartTime = month.AddMonths(-1).AddDays(25);
                            monthEndTime = month.AddDays(24);
                            decimal? costitem = BLL.CostManageItemService.GetCostsByUnitId(unit.UnitId, monthStartTime, monthEndTime);//分包商HSE费用申请总价
                            decimal? subPay = BLL.SubPayRegistrationService.GetSubPayRegistrationByUnitId(unit.UnitId, monthStartTime, monthEndTime);//分包商HSE费用投入登记
                            decimal? cost = null;
                            if (costitem != null && subPay != null)
                            {
                                cost = Convert.ToDecimal(costitem) + Convert.ToDecimal(subPay);
                            }
                            else
                            {
                                if (costitem != null)
                                {
                                    cost = Convert.ToDecimal(costitem);
                                }
                                else if (subPay != null)
                                {
                                    cost = Convert.ToDecimal(subPay);
                                }
                            }
                            if (cost != null)
                            {
                                decimal c = Convert.ToDecimal(cost);
                                row1[r + i] = c.ToString("0.00"); ;
                                totalCost += c;
                                if (lastCost == planAmount)
                                {
                                    lastCost = planAmount - c;
                                }
                                else
                                {
                                    lastCost = lastCost - c;
                                }
                                row2[r + i] = lastCost.ToString("0.00");
                            }
                        }
                        row1[r + months.Length] = totalCost.ToString("0.00"); ;
                        dt.Rows.Add(row1);
                        dt.Rows.Add(row2);
                        sortIndex++;
                    }
                    this.gvCostLedger.DataSource = dt;
                    this.gvCostLedger.DataBind();
                }
            }
        }
        #endregion
        #region Grid创建行
        protected void gvCostLedger_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                DynamicTHeaderHepler dHelper = new DynamicTHeaderHepler();
                dHelper.SplitTableHeader(e.Row, headerStr);
            }
        }
        #endregion
        #region 在控件被绑定后激发
        /// 
        /// 在控件被绑定后激发
        /// 
        /// 
        /// 
        protected void gvCostLedger_DataBound(object sender, EventArgs e)
        {
            int row1 = 1, t1 = 0, row2 = 1, t2 = 0, row0 = 1, t0 = 0;
            for (int i = 0; i < this.gvCostLedger.Rows.Count - 1; i++)
            {
                GridViewRow gvr = this.gvCostLedger.Rows[i];
                GridViewRow gvrNext = this.gvCostLedger.Rows[i + 1];
                if (gvr.Cells[0].Text == gvrNext.Cells[0].Text)
                {
                    gvrNext.Cells[0].Visible = false;
                    row0++;
                    this.gvCostLedger.Rows[t0].Cells[0].RowSpan = row0;
                }
                else
                {
                    t0 = row0 + t0;
                    row0 = 1;
                }
                if (gvr.Cells[1].Text == gvrNext.Cells[1].Text)
                {
                    gvrNext.Cells[1].Visible = false;
                    row1++;
                    this.gvCostLedger.Rows[t1].Cells[1].RowSpan = row1;
                }
                else
                {
                    t1 = row1 + t1;
                    row1 = 1;
                }
                if (gvr.Cells[2].Text == gvrNext.Cells[2].Text)
                {
                    gvrNext.Cells[2].Visible = false;
                    row2++;
                    this.gvCostLedger.Rows[t2].Cells[2].RowSpan = row2;
                }
                else
                {
                    t2 = row2 + t2;
                    row2 = 1;
                }
            }
        }
        #endregion
        #region 导出按钮
        /// 导出按钮
        /// 
        /// 
        /// 
        protected void btnOut_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.Write("");
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("HSSE合同HSE费用及支付台账", System.Text.Encoding.UTF8) + ".xls");
            Response.ContentType = "application/ms-excel";
            this.EnableViewState = false;
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            this.gvCostLedger.RenderControl(oHtmlTextWriter);
            Response.Write(oStringWriter.ToString());
            Response.Flush();
            Response.End();
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
        }
        #endregion
    }
}