260 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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 项目主键
 | ||
|         /// <summary>
 | ||
|         /// 项目主键
 | ||
|         /// </summary>
 | ||
|         public string ProjectId
 | ||
|         {
 | ||
|             get
 | ||
|             {
 | ||
|                 return (string)ViewState["ProjectId"];
 | ||
|             }
 | ||
|             set
 | ||
|             {
 | ||
|                 ViewState["ProjectId"] = value;
 | ||
|             }
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         private static string headerStr;
 | ||
| 
 | ||
|         #region 加载
 | ||
|         /// <summary>
 | ||
|         /// 加载页面
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         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<Model.Project_ProjectUnit> 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 在控件被绑定后激发
 | ||
|         /// <summary>
 | ||
|         /// 在控件被绑定后激发
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         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 导出按钮
 | ||
|         /// 导出按钮
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         protected void btnOut_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             Response.Clear();
 | ||
|             Response.Buffer = true;
 | ||
|             Response.Charset = "GB2312";
 | ||
|             Response.ContentEncoding = System.Text.Encoding.UTF8;
 | ||
|             Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");
 | ||
| 
 | ||
|             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
 | ||
|     }
 | ||
| } |