CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/HSSE/CostGoods/CostLedger.aspx.cs

260 lines
11 KiB
C#
Raw Normal View History

2021-04-30 10:28:37 +08:00
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
}
}