修改进度模块

This commit is contained in:
2023-08-25 11:03:03 +08:00
parent 2804d7c4df
commit 112e97ae43
17 changed files with 2615 additions and 3 deletions
@@ -0,0 +1,105 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CompleteInput.aspx.cs" Inherits="FineUIPro.Web.JDGL.Check.CompleteInput" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>全项目录入</title>
<style type="text/css">
.f-grid-row.noEdit {
pointer-events: none;
}
.f-grid-colheader-text {
white-space: normal;
word-break: break-all;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
ShowHeader="false" Layout="VBox" BoxConfigAlign="Stretch">
<Items>
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="项目情况" BoxFlex="1" AllowColumnLocking="true"
runat="server" EnableCollapse="true" DataKeyNames="Id,Name,ShowId" EnableTree="true" EnableColumnLines="true" ClicksToEdit="1" AllowCellEditing="true"
TreeColumn="Name" DataIDField="Id" DataParentIDField="SupId" ExpandAllTreeNodes="true">
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" runat="server">
<Items>
<f:TextBox runat="server" ID="hdId" Hidden="true"></f:TextBox>
<f:ToolbarFill runat="server"></f:ToolbarFill>
<f:Button ID="btnSave" Icon="SystemSave" runat="server" ToolTip="保存"
OnClick="btnSave_Click">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<%--<f:RowNumberField HeaderText="序号"/>--%>
<f:RenderField Width="100px" ColumnID="Code" DataField="Code" FieldType="String" EnableLock="true" Locked="true"
HeaderText="序号" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:BoundField Width="350px" ColumnID="Name" DataField="Name" HeaderTextAlign="Center" EnableLock="true" Locked="true"
HeaderText="工作内容" />
<f:RenderField Width="100px" ColumnID="PreWorkCode" DataField="PreWorkCode" FieldType="String" EnableLock="true" Locked="true"
HeaderText="前置工作内容编号" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:TemplateField Width="60px" HeaderText="里程碑点" HeaderTextAlign="Center" ID="IsMileStone" TextAlign="Center" EnableLock="true" Locked="true">
<ItemTemplate>
<asp:CheckBox ID="cbIsMileStone" runat="server" Enabled="false"></asp:CheckBox>
</ItemTemplate>
</f:TemplateField>
<f:RenderField Width="80px" ColumnID="JDWeights" DataField="JDWeights" FieldType="Double" EnableLock="true" Locked="true"
HeaderText="权重(%)" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="80px" ColumnID="Unit" DataField="Unit" FieldType="String" EnableLock="true" Locked="true"
HeaderText="单位" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="PlanProjectQuantity" DataField="PlanProjectQuantity" FieldType="Double" EnableLock="true" Locked="true"
HeaderText="概算工程量" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="PlanCost" DataField="PlanCost" FieldType="Double" EnableLock="true" Locked="true"
HeaderText="概算费用" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="RealProjectQuantity" DataField="RealProjectQuantity" FieldType="Double" EnableLock="true" Locked="true"
HeaderText="实际工程量" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="PlanStartDate" DataField="PlanStartDate" FieldType="Date"
Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderText="计划开始时间" HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="PlanEndDate" DataField="PlanEndDate" FieldType="Date"
Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderText="计划完成时间" HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="RealStartDate" DataField="RealStartDate" FieldType="Date"
Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderText="实际开始时间" HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="RealEndDate" DataField="RealEndDate" FieldType="Date"
Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderText="实际完成时间" HeaderTextAlign="Center">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="afteredit" Handler="onGridAfterEdit" />
</Listeners>
</f:Grid>
</Items>
</f:Panel>
</form>
<script type="text/javascript">
var hdIdClientID = '<%= hdId.ClientID %>';
function onGridAfterEdit(event, value, params) {
var me = this, columnId = params.columnId, rowId = params.rowId;
var str = F(hdIdClientID).ooIl1;
if (str == undefined) {
str = rowId;
}
else {
str = str + "," + rowId;
}
F(hdIdClientID).setValue(str);
}
</script>
</body>
</html>
@@ -0,0 +1,331 @@
using BLL;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.Check
{
public partial class CompleteInput : PageBase
{
#region
/// <summary>
/// 列数量
/// </summary>
public int ColumnNum
{
get
{
return (int)ViewState["ColumnNum"];
}
set
{
ViewState["ColumnNum"] = value;
}
}
/// <summary>
/// 上传预设的虚拟路径
/// </summary>
private string initPath = Const.ExcelUrl;
/// <summary>
/// 错误集合
/// </summary>
public static string errorInfos = string.Empty;
/// <summary>
/// 月份集合
/// </summary>
public static List<DateTime> months = new List<DateTime>();
#endregion
/// <summary>
/// 加载表头
/// </summary>
protected void Page_Init(object sender, EventArgs e)
{
InitGrid();
}
#region
/// <summary>
/// 表头
/// </summary>
private void InitGrid()
{
ColumnNum = 0;
months.Clear();
var project = Funs.DB.Base_Project.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId);
if (project != null)
{
DateTime startDate, endDate, startMonth, endMonth;
if (project.StartDate != null)
{
startDate = Convert.ToDateTime(project.StartDate);
endDate = DateTime.Now;
if (project.EndDate != null)
{
endDate = Convert.ToDateTime(project.EndDate);
}
startMonth = Convert.ToDateTime(startDate.Year + "-" + startDate.Month + "-01");
endMonth = Convert.ToDateTime(endDate.Year + "-" + endDate.Month + "-01");
do
{
months.Add(startMonth);
startMonth = startMonth.AddMonths(1);
} while (startMonth <= endMonth);
}
for (int i = 0; i < months.Count; i++)
{
RenderField rdPlan = new RenderField();
rdPlan.ColumnID = string.Format("{0:yyyy-MM}", months[i]) + "Plan";
rdPlan.Width = Unit.Pixel(100);
rdPlan.DataField = "PlanNum" + (i + 1).ToString();
rdPlan.FieldType = FieldType.Double;
rdPlan.HeaderText = string.Format("{0:yyyy年MM月}", months[i]) + "<br/>概算工程量";
rdPlan.HeaderTextAlign = TextAlign.Center;
NumberBox numPlan = new NumberBox();
numPlan.NoNegative = true;
numPlan.NoDecimal = false;
rdPlan.Editor.Add(numPlan);
Grid1.Columns.Add(rdPlan);
RenderField rdThis = new RenderField();
rdThis.ColumnID = string.Format("{0:yyyy-MM}", months[i]) + "This";
rdThis.Width = Unit.Pixel(100);
rdThis.DataField = "ThisNum" + (i + 1).ToString();
rdThis.FieldType = FieldType.Double;
rdThis.HeaderText = string.Format("{0:yyyy年MM月}", months[i]) + "<br/>实际工程量";
rdThis.HeaderTextAlign = TextAlign.Center;
NumberBox numReal = new NumberBox();
numReal.NoNegative = true;
numReal.NoDecimal = false;
rdThis.Editor.Add(numReal);
Grid1.Columns.Add(rdThis);
}
RenderField rdId = new RenderField();
rdId.ColumnID = "ShowId";
rdId.Width = Unit.Pixel(350);
rdId.DataField = "ShowId";
rdId.FieldType = FieldType.String;
rdId.HeaderText = "ShowId";
rdId.HeaderTextAlign = TextAlign.Center;
Grid1.Columns.Add(rdId);
rdId.Hidden = true;
ColumnNum = 9 + months.Count * 2 + 1;
}
}
#endregion
#region
/// <summary>
/// 加载页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
errorInfos = string.Empty;
string Id = Request.Params["Id"];
DataTable table = BLL.WorkPackageService.GetAllTreeDataTable(this.CurrUser.LoginProjectId, string.Empty);
Grid1.DataSource = table;
Grid1.DataBind();
for (int i = 0; i < this.Grid1.Rows.Count; i++)
{
if (string.IsNullOrEmpty(this.Grid1.Rows[i].DataKeys[2].ToString()))
{
System.Web.UI.WebControls.CheckBox cbIsMileStone = (System.Web.UI.WebControls.CheckBox)(this.Grid1.Rows[i].FindControl("cbIsMileStone"));
cbIsMileStone.Visible = false;
foreach (GridColumn column in Grid1.Columns)
{
if (column.ColumnIndex != 0 && column.ColumnIndex != 1)
{
this.Grid1.Rows[i].CellCssClasses[column.ColumnIndex] = "f-grid-cell-uneditable";
}
}
}
else
{
System.Web.UI.WebControls.CheckBox cbIsMileStone = (System.Web.UI.WebControls.CheckBox)(this.Grid1.Rows[i].FindControl("cbIsMileStone"));
Model.WBS_WorkPackage workPackage = BLL.WorkPackageService.GetWorkPackageByWorkPackageId(this.Grid1.Rows[i].DataKeys[2].ToString());
if (workPackage != null && workPackage.IsMileStone == true)
{
cbIsMileStone.Checked = true;
}
}
}
}
}
#endregion
#region
/// <summary>
/// 保存按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSave_Click(object sender, EventArgs e)
{
Save();
ShowNotify("保存成功!", MessageBoxIcon.Success);
//PageContext.RegisterStartupScript(ActiveWindow.GetHideReference());
}
private void Save()
{
decimal changePlanNum = 0, changeThisNum = 0, //当月总变化完成成本、完成预算
oldPlanNum = 0, oldThisNum = 0,
PlanNum = 0, ThisNum = 0;
Model.SGGLDB db = Funs.DB;
var oldViewInfos = from x in db.WBS_WorkPackage
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var unitWorks = from x in db.WBS_UnitWork
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
string[] ids = this.hdId.Text.Split(',');
if (ids.Length > 0)
{
foreach (JObject mergedRow in Grid1.GetMergedData())
{
JObject values = mergedRow.Value<JObject>("values");
int i = mergedRow.Value<int>("index");
if (this.Grid1.Rows[i].DataKeys[2] != null && ids.Contains(this.Grid1.Rows[i].DataKeys[2].ToString()))
{
Model.WBS_WorkPackage WorkPackage = oldViewInfos.FirstOrDefault(x => x.WorkPackageId == this.Grid1.Rows[i].DataKeys[2].ToString());
if (WorkPackage != null)
{
string WorkPackageId = WorkPackage.WorkPackageId;
BLL.WorkPackageService.UpdateWorkPackage(WorkPackage);
for (int j = 0; j < months.Count; j++)
{
oldPlanNum = 0;
oldThisNum = 0;
changePlanNum = 0;
changeThisNum = 0;
string planNum = values.Value<string>(string.Format("{0:yyyy-MM}", months[j]) + "Plan");
string thisNum = values.Value<string>(string.Format("{0:yyyy-MM}", months[j]) + "This");
Model.WBS_WorkPackageDetail WorkPackageDetail = BLL.WorkPackageDetailService.GetWorkPackageDetailByWorkPackageIdAndMonths(WorkPackageId, months[j]);
if (WorkPackageDetail != null)
{
oldPlanNum = WorkPackageDetail.PlanNum ?? 0;
oldThisNum = WorkPackageDetail.ThisNum ?? 0;
WorkPackageDetail.PlanNum = Funs.GetNewDecimalOrZero(planNum);
WorkPackageDetail.ThisNum = Funs.GetNewDecimalOrZero(thisNum);
PlanNum = WorkPackageDetail.PlanNum ?? 0;
ThisNum = WorkPackageDetail.ThisNum ?? 0;
}
else
{
WorkPackageDetail = new Model.WBS_WorkPackageDetail();
WorkPackageDetail.WorkPackageDetailId = SQLHelper.GetNewID();
WorkPackageDetail.WorkPackageId = WorkPackageId;
WorkPackageDetail.Months = months[j];
WorkPackageDetail.PlanNum = Funs.GetNewDecimalOrZero(planNum);
WorkPackageDetail.ThisNum = Funs.GetNewDecimalOrZero(thisNum);
PlanNum = WorkPackageDetail.PlanNum ?? 0;
ThisNum = WorkPackageDetail.ThisNum ?? 0;
db.WBS_WorkPackageDetail.InsertOnSubmit(WorkPackageDetail);
}
//累加变化值,计算总的变化值
changePlanNum += PlanNum - oldPlanNum;
changeThisNum += ThisNum - oldThisNum;
////更新分部分项
UpdateWorkPackageParent(db, WorkPackage.SuperWorkPackageId, months[j], changePlanNum, changeThisNum);
////更新单位工程
Model.WBS_WorkPackageParentDetail unitWorkDetail = BLL.WorkPackageParentDetailService.GetWorkPackageParentDetailByParentIdAndMonths(WorkPackage.UnitWorkId, months[j]);
if (unitWorkDetail != null)
{
unitWorkDetail.PlanNum += changePlanNum;
unitWorkDetail.ThisNum += changeThisNum;
//BLL.WorkPackageParentDetailService.UpdateWorkPackageParentDetail(unitWorkDetail);
}
else
{
unitWorkDetail = new Model.WBS_WorkPackageParentDetail();
unitWorkDetail.WorkPackageParentDetailId = SQLHelper.GetNewID();
unitWorkDetail.ParentId = WorkPackage.UnitWorkId;
unitWorkDetail.Months = months[j];
unitWorkDetail.PlanNum = changePlanNum;
unitWorkDetail.ThisNum = changeThisNum;
//BLL.WorkPackageParentDetailService.AddWorkPackageParentDetail(unitWorkDetail);
db.WBS_WorkPackageParentDetail.InsertOnSubmit(unitWorkDetail);
}
////更新建筑、安装工程
Model.WBS_UnitWork unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == WorkPackage.UnitWorkId);
if (unitWork != null)
{
Model.WBS_WorkPackageParentDetail projectType = BLL.WorkPackageParentDetailService.GetWorkPackageParentDetailByParentIdAndMonths(unitWork.ProjectType, this.CurrUser.LoginProjectId, months[j]);
if (projectType != null)
{
projectType.PlanNum += changePlanNum;
projectType.ThisNum += changeThisNum;
//BLL.WorkPackageParentDetailService.UpdateWorkPackageParentDetail(cnProfessionDetail);
}
else
{
projectType = new Model.WBS_WorkPackageParentDetail();
projectType.WorkPackageParentDetailId = SQLHelper.GetNewID();
projectType.ParentId = unitWork.ProjectType;
projectType.ProjectId = this.CurrUser.LoginProjectId;
projectType.Months = months[j];
projectType.PlanNum = changePlanNum;
projectType.ThisNum = changeThisNum;
//BLL.WorkPackageParentDetailService.AddWorkPackageParentDetail(cnProfessionDetail);
db.WBS_WorkPackageParentDetail.InsertOnSubmit(projectType);
}
}
db.SubmitChanges();
}
}
}
}
}
}
#region
/// <summary>
/// 更新分部分项
/// </summary>
/// <param name="years"></param>
/// <param name="months"></param>
/// <param name="PlanNum"></param>
/// <param name="parentId"></param>
private void UpdateWorkPackageParent(Model.SGGLDB db, string SuperWorkPackageId, DateTime months, decimal changePlanNum, decimal changeThisNum)
{
Model.WBS_WorkPackage workPackage = db.WBS_WorkPackage.FirstOrDefault(x => x.WorkPackageId == SuperWorkPackageId);
if (workPackage != null)
{
Model.WBS_WorkPackageParentDetail parentDetail = BLL.WorkPackageParentDetailService.GetWorkPackageParentDetailByParentIdAndMonths(SuperWorkPackageId, months);
if (parentDetail != null)
{
parentDetail.PlanNum += changePlanNum;
parentDetail.ThisNum += changeThisNum;
//BLL.WorkPackageParentDetailService.UpdateWorkPackageParentDetail(parentDetail);
}
else
{
parentDetail = new Model.WBS_WorkPackageParentDetail();
parentDetail.WorkPackageParentDetailId = SQLHelper.GetNewID();
parentDetail.ParentId = SuperWorkPackageId;
parentDetail.Months = months;
parentDetail.PlanNum = changePlanNum;
parentDetail.ThisNum = changeThisNum;
//BLL.WorkPackageParentDetailService.AddWorkPackageParentDetail(parentDetail);
db.WBS_WorkPackageParentDetail.InsertOnSubmit(parentDetail);
}
if (workPackage.SuperWorkPackageId != null) //还存在上级节点,需要继续循环
{
UpdateWorkPackageParent(db, workPackage.SuperWorkPackageId, months, changePlanNum, changeThisNum);
}
}
}
#endregion
#endregion
}
}
@@ -0,0 +1,96 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.Check {
public partial class CompleteInput {
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// Grid1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// hdId 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox hdId;
/// <summary>
/// btnSave 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnSave;
/// <summary>
/// IsMileStone 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TemplateField IsMileStone;
/// <summary>
/// cbIsMileStone 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox cbIsMileStone;
}
}
@@ -0,0 +1,72 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EarnedValueCurve.aspx.cs" Inherits="FineUIPro.Web.JDGL.Check.EarnedValueCurve" %>
<%@ Register Src="~/Controls/ChartControl.ascx" TagName="ChartControl" TagPrefix="uc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>赢得值曲线</title>
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
<style>
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
.f-grid-colheader-text {
white-space: normal;
word-break: break-all;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" AjaxAspnetControls="divEV" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelLeftRegion" RegionPosition="Left" RegionSplit="true" Layout="Fit"
EnableCollapse="true" Width="300" Title="赢得值曲线" TitleToolTip="赢得值曲线" ShowBorder="true"
ShowHeader="true" AutoScroll="true" BodyPadding="5px" IconFont="ArrowCircleLeft">
<Items>
<f:Tree ID="trWBS" Width="250" EnableCollapse="true" ShowHeader="true" OnNodeCommand="trWBS_NodeCommand"
OnNodeExpand="trWBS_NodeExpand" AutoLeafIdentification="true" runat="server">
</f:Tree>
</Items>
</f:Panel>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" ShowBorder="false"
Layout="VBox" ShowHeader="false" BodyPadding="5px" IconFont="PlusCircle"
TitleToolTip="" AutoScroll="true">
<Items>
<f:Grid ID="Grid1" runat="server" Width="820px" ShowHeader="false" Height="200px" EnableColumnLines="true" ForceFit="true">
<Columns>
<f:RenderField Width="100px" ColumnID="月份" DataField="月份"
FieldType="String" HeaderText="月份" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="本月概算工程量" DataField="本月概算工程量"
FieldType="Double" HeaderText="本月概算工程量" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="累计概算工程量" DataField="累计概算工程量"
FieldType="Double" HeaderText="累计概算工程量" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="本月实际工程量" DataField="本月实际工程量"
FieldType="Double" HeaderText="本月实际工程量" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="累计实际工程量" DataField="累计实际工程量"
FieldType="Double" HeaderText="累计实际工程量" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
</Columns>
</f:Grid>
</Items>
<Items>
<f:ContentPanel ShowHeader="false" runat="server" ID="cpEV" Margin="0 0 0 0">
<div id="divEV">
<uc1:ChartControl ID="ChartEV" runat="server" />
</div>
</f:ContentPanel>
</Items>
</f:Panel>
</Items>
</f:Panel>
</form>
</body>
</html>
@@ -0,0 +1,388 @@
using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace FineUIPro.Web.JDGL.Check
{
public partial class EarnedValueCurve : PageBase
{
#region
/// <summary>
/// 加载页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindChart();
InitTreeMenu();
}
}
#endregion
#region
/// <summary>
/// 树加载
/// </summary>
private void InitTreeMenu()
{
this.trWBS.Nodes.Clear();
this.trWBS.ShowBorder = false;
this.trWBS.ShowHeader = false;
this.trWBS.EnableIcons = true;
this.trWBS.AutoScroll = true;
this.trWBS.EnableSingleClickExpand = true;
TreeNode rootNode1 = new TreeNode();
rootNode1.Text = "建筑工程";
rootNode1.NodeID = "1";
rootNode1.CommandName = "ProjectType";
rootNode1.EnableExpandEvent = true;
rootNode1.EnableClickEvent = true;
this.trWBS.Nodes.Add(rootNode1);
TreeNode emptyNode = new TreeNode();
emptyNode.Text = "";
emptyNode.NodeID = "";
rootNode1.Nodes.Add(emptyNode);
//this.GetNodes(rootNode1.Nodes, rootNode1.NodeID);
TreeNode rootNode2 = new TreeNode();
rootNode2.Text = "安装工程";
rootNode2.NodeID = "2";
rootNode2.CommandName = "ProjectType";
rootNode2.EnableExpandEvent = true;
rootNode2.EnableClickEvent = true;
this.trWBS.Nodes.Add(rootNode2);
rootNode2.Nodes.Add(emptyNode);
}
#region
/// <summary>
/// 遍历节点方法
/// </summary>
/// <param name="nodes">节点集合</param>
/// <param name="parentId">父节点</param>
private void GetNodes(TreeNodeCollection nodes, string parentId)
{
List<Model.WBS_WorkPackageProject> workPackages = new List<Model.WBS_WorkPackageProject>();
if (parentId.Length == 1) //工程类型节点
{
workPackages = (from x in Funs.DB.WBS_WorkPackageProject
where x.SuperWorkPack == null && x.ProjectId == this.CurrUser.LoginProjectId && x.ProjectType == parentId
orderby x.PackageCode ascending
select x).ToList();
}
else
{
workPackages = (from x in Funs.DB.WBS_WorkPackageProject
where x.SuperWorkPack == parentId && x.ProjectId == this.CurrUser.LoginProjectId
orderby x.PackageCode ascending
select x).ToList();
}
foreach (var q in workPackages)
{
TreeNode newNode = new TreeNode();
newNode.Text = q.PackageContent;
newNode.NodeID = q.WorkPackageCode;
newNode.CommandName = "WorkPackage";
newNode.EnableClickEvent = true;
nodes.Add(newNode);
}
for (int i = 0; i < nodes.Count; i++)
{
GetNodes(nodes[i].Nodes, nodes[i].NodeID);
}
}
#endregion
#endregion
#region
/// <summary>
/// 树节点展开
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void trWBS_NodeExpand(object sender, TreeNodeEventArgs e)
{
e.Node.Nodes.Clear();
if (e.Node.CommandName == "ProjectType") //展开工程类型
{
var trUnitWork = from x in Funs.DB.WBS_UnitWork
where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperUnitWork == null && x.ProjectType == e.Node.NodeID
select x;
trUnitWork = trUnitWork.OrderBy(x => x.UnitWorkCode);
if (trUnitWork.Count() > 0)
{
foreach (var trUnitWorkItem in trUnitWork)
{
TreeNode newNode = new TreeNode();
newNode.Text = trUnitWorkItem.UnitWorkCode + "-" + trUnitWorkItem.UnitWorkName;
newNode.NodeID = trUnitWorkItem.UnitWorkId;
newNode.CommandName = "UnitWork";
newNode.EnableExpandEvent = true;
newNode.EnableClickEvent = true;
e.Node.Nodes.Add(newNode);
if (BLL.WorkPackageService.GetWorkPackages1ByUnitWorkId(trUnitWorkItem.UnitWorkId.ToString()) != null)
{
TreeNode temp = new TreeNode();
temp.Text = "temp";
temp.NodeID = "temp";
newNode.Nodes.Add(temp);
}
}
}
}
else if (e.Node.CommandName == "UnitWork") //展开单位工程节点
{
var workPackages = from x in Funs.DB.WBS_WorkPackage where x.UnitWorkId == e.NodeID && x.SuperWorkPack == null && x.IsApprove == true orderby x.WorkPackageCode select x;
foreach (var workPackage in workPackages)
{
TreeNode newNode = new TreeNode();
newNode.Text = workPackage.PackageContent;
newNode.NodeID = workPackage.WorkPackageId;
newNode.CommandName = "WorkPackage";
newNode.EnableExpandEvent = true;
newNode.EnableClickEvent = true;
e.Node.Nodes.Add(newNode);
var childWorkPackages = from x in Funs.DB.WBS_WorkPackage where x.SuperWorkPackageId == workPackage.WorkPackageId && x.IsApprove == true select x;
if (childWorkPackages.Count() > 0)
{
TreeNode emptyNode = new TreeNode();
emptyNode.Text = "";
emptyNode.NodeID = "";
newNode.Nodes.Add(emptyNode);
}
}
}
else if (e.Node.CommandName == "WorkPackage") //展开工作包节点
{
var workPackages = from x in Funs.DB.WBS_WorkPackage where x.SuperWorkPackageId == e.Node.NodeID && x.IsApprove == true orderby x.WorkPackageCode select x;
if (workPackages.Count() > 0) //存在子单位工程
{
foreach (var workPackage in workPackages)
{
TreeNode newNode = new TreeNode();
newNode.Text = workPackage.PackageContent;
newNode.NodeID = workPackage.WorkPackageId;
newNode.CommandName = "WorkPackage";
newNode.EnableExpandEvent = true;
newNode.EnableClickEvent = true;
e.Node.Nodes.Add(newNode);
var childWorkPackages = from x in Funs.DB.WBS_WorkPackage where x.SuperWorkPackageId == workPackage.WorkPackageId && x.IsApprove == true select x;
if (childWorkPackages.Count() > 0)
{
TreeNode emptyNode = new TreeNode();
emptyNode.Text = "";
emptyNode.NodeID = "";
newNode.Nodes.Add(emptyNode);
}
}
}
}
BindChart();
}
#endregion
#region Tree点击事件
/// <summary>
/// Tree点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void trWBS_NodeCommand(object sender, TreeCommandEventArgs e)
{
BindChart();
}
#endregion
#region
/// <summary>
/// 数据绑定
/// </summary>
private void BindChart()
{
string id = this.trWBS.SelectedNodeID;
if (!string.IsNullOrEmpty(id))
{
Model.WBS_WorkPackage WorkPackage = BLL.WorkPackageService.GetWorkPackageByWorkPackageId(id);
if (WorkPackage != null && BLL.WorkPackageService.GetAllWorkPackagesBySuperWorkPackageId(WorkPackage.WorkPackageId).Count == 0)
{
string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
"PlanNum as '本月概算工程量',ThisNum as '本月实际工程量',TotalPlanNum as '累计概算工程量',TotalThisNum as '累计实际工程量' " +
"from dbo.View_WBS_WorkPackageDetail as t where WorkPackageId=@Id order by t.Months";
//string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
SqlParameter[] parameter = new SqlParameter[]
{
new SqlParameter("@Id",id),
//new SqlParameter("@Months",date),
};
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
this.Grid1.DataSource = dt;
this.Grid1.DataBind();
decimal lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["本月概算工程量"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月概算工程量"].ToString());
dt.Rows[i]["本月实际工程量"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月实际工程量"].ToString());
acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计概算工程量"].ToString());
bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计实际工程量"].ToString());
if (acwp == lastacwp)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计概算工程量"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计概算工程量"] = acwp;
}
}
else
{
dt.Rows[i]["累计概算工程量"] = acwp;
}
if (bcwp == lastbcwp)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计实际工程量"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计实际工程量"] = bcwp;
}
}
else
{
dt.Rows[i]["累计实际工程量"] = bcwp;
}
lastacwp = acwp;
lastbcwp = bcwp;
}
this.ChartEV.CreateMaryChartJD(dt, 1020, 420, null);
}
else
{
string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
"PlanNum as '本月概算工程量',ThisNum as '本月实际工程量',TotalPlanNum as '累计概算工程量',TotalThisNum as '累计实际工程量' " +
"from dbo.View_WBS_WorkPackageParentDetail as t where ParentId=@Id order by t.Months";
//string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
SqlParameter[] parameter = new SqlParameter[]
{
new SqlParameter("@Id",id),
//new SqlParameter("@Months",date),
};
if (this.trWBS.SelectedNode.CommandName == "ProjectType")
{
strSql = strSql.Replace("order by t.Months", " and ProjectId='" + this.CurrUser.LoginProjectId + "' order by t.Months");
}
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
this.Grid1.DataSource = dt;
this.Grid1.DataBind();
decimal lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["本月概算工程量"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月概算工程量"].ToString());
dt.Rows[i]["本月实际工程量"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月实际工程量"].ToString());
acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计概算工程量"].ToString());
bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计实际工程量"].ToString());
if (acwp == lastacwp)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计概算工程量"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计概算工程量"] = acwp;
}
}
else
{
dt.Rows[i]["累计概算工程量"] = acwp;
}
if (bcwp == lastbcwp)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计实际工程量"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计实际工程量"] = bcwp;
}
}
else
{
dt.Rows[i]["累计实际工程量"] = bcwp;
}
lastacwp = acwp;
lastbcwp = bcwp;
}
this.ChartEV.CreateMaryChartJD(dt, 1020, 420, null);
}
}
}
#endregion
#region DataTable行列转换
/// <summary>
/// 将DataTable行列转换
/// </summary>
/// <param name="src">要转换的DataTable</param>
/// <param name="columnHead">要作为Column的哪列</param>
/// <returns></returns>
private DataTable Col2Row(DataTable src, int columnHead)
{
DataTable result = new DataTable();
DataColumn myHead = src.Columns[columnHead];
result.Columns.Add(myHead.ColumnName);
FineUIPro.RenderField bf;
bf = new FineUIPro.RenderField();
bf.ColumnID = myHead.ColumnName;
bf.DataField = myHead.ColumnName;
bf.HeaderText = myHead.ColumnName;
Grid1.Columns.Add(bf);
for (int i = 0; i < src.Rows.Count; i++)
{
result.Columns.Add(src.Rows[i][myHead].ToString());
bf = new FineUIPro.RenderField();
bf.ColumnID = src.Rows[i][myHead].ToString();
bf.DataField = src.Rows[i][myHead].ToString();
bf.HeaderText = src.Rows[i][myHead].ToString();
Grid1.Columns.Add(bf);
}
Grid1.DataKeyNames = new string[] { "月份" };
foreach (DataColumn col in src.Columns)
{
if (col == myHead)
continue;
object[] newRow = new object[src.Rows.Count + 1];
newRow[0] = col.ColumnName;
for (int i = 0; i < src.Rows.Count; i++)
{
newRow[i + 1] = src.Rows[i][col];
}
result.Rows.Add(newRow);
}
return result;
}
private DataTable Col2Row(DataTable src, string columnHead)
{
for (int i = 0; i < src.Columns.Count; i++)
{
if (src.Columns[i].ColumnName.ToUpper() == columnHead.ToUpper())
return Col2Row(src, i);
}
return new DataTable();
}
#endregion
}
}
@@ -0,0 +1,96 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.Check {
public partial class EarnedValueCurve {
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// panelLeftRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelLeftRegion;
/// <summary>
/// trWBS 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Tree trWBS;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// Grid1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// cpEV 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ContentPanel cpEV;
/// <summary>
/// ChartEV 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::Web.Controls.ChartControl ChartEV;
}
}
@@ -94,7 +94,7 @@ namespace FineUIPro.Web.JDGL.Check
{
JObject values = mergedRow.Value<JObject>("values");
int i = mergedRow.Value<int>("index");
if (this.Grid1.Rows[i].DataKeys[2] != null)
if (this.Grid1.Rows[i].DataKeys[2] != null && ids.Contains(this.Grid1.Rows[i].DataKeys[2].ToString()))
{
Model.WBS_WorkPackage workPackage = workPackages.FirstOrDefault(x => x.WorkPackageId == this.Grid1.Rows[i].DataKeys[2].ToString());
if (workPackage != null)