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 | |||
|  |     } | |||
|  | } |