ChengDa_English/SGGL/FineUIPro.Web/JDGL/WBSCompleteAndReal/WBSCompleteAudit.aspx

373 lines
25 KiB
Plaintext
Raw Normal View History

2022-03-15 17:36:38 +08:00
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WBSCompleteAudit.aspx.cs" Inherits="FineUIPro.Web.JDGL.WBSCompleteAndReal.WBSCompleteAudit" %>
<!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.green {
background-color: green;
background-image: none;
}
.f-grid-row.red {
background-color: #FF7575;
background-image: none;
}
.f-grid-row.hui {
background-color: #ADADAD;
background-image: none;
}
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
.customlabel span {
color: red;
font-weight: bold;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelLeftRegion" RegionPosition="Left" RegionSplit="true"
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">
<Listeners>
<f:Listener Event="beforenodecontextmenu" Handler="onTreeNodeContextMenu" />
</Listeners>
</f:Tree>
</Items>
</f:Panel>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" ShowBorder="true"
Layout="VBox" ShowHeader="false" BodyPadding="5px" IconFont="PlusCircle" Title=""
TitleToolTip="" AutoScroll="true">
<Items>
<f:Grid ID="Grid1" Width="870px" ShowBorder="true" ShowHeader="true" EnableCollapse="true"
Title="实际进度(完成值)测量值录入" runat="server" BoxFlex="1" DataKeyNames="WbsDetailId"
AllowSorting="true" EnableColumnLines="true" SortField="WbsDetailId" SortDirection="ASC"
AllowCellEditing="true" ClicksToEdit="1" ShowSelectedCell="true" DataIDField="WbsDetailId"
IsDatabasePaging="true" AllowFilters="true" OnFilterChange="Grid1_FilterChange">
<Toolbars>
<f:Toolbar ID="Toolbar1" Position="Top" runat="server">
<Items>
<f:DatePicker runat="server" ID="txtMonths" DateFormatString="yyyy-MM" AutoPostBack="true"
Label="月份" LabelWidth="50px" Width="150px" OnTextChanged="txtMonths_TextChanged">
</f:DatePicker>
<f:Button ID="btnSave1" Icon="SystemSave" runat="server" ToolTip="保存" Hidden="true"
OnClick="btnSave_Click">
</f:Button>
</Items>
<Items>
<f:Label ID="red" runat="server" CssClass="customlabel" Text="红色:计划已结束但尚未完成的项、灰色:计划尚未开始的项、绿色:之前累计完成值+当月值等于总计划值">
</f:Label>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:GroupField EnableLock="true" HeaderText="分部工程" TextAlign="Center">
<Columns>
<f:RenderField Width="89px" ColumnID="Code" DataField="Code" FieldType="String" HeaderText="编码"
HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="Name" DataField="Name" FieldType="String"
HeaderText="名称" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField EnableLock="true" HeaderText="子分部工程" TextAlign="Center">
<Columns>
<f:RenderField Width="89px" ColumnID="ChildCode" DataField="ChildCode" FieldType="String"
HeaderText="编码" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="ChildName" DataField="ChildName" FieldType="String"
HeaderText="名称" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField EnableLock="true" HeaderText="测量标志(权重)" TextAlign="Center" Hidden="true">
<Columns>
<f:RenderField Width="70px" ColumnID="Weights" DataField="Weights" FieldType="String"
Hidden="true" HeaderText="占比(%)" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="90px" ColumnID="WeightsMoneyStr" DataField="WeightsMoneyStr"
FieldType="String" Hidden="true" HeaderText="费用(万元)" HeaderTextAlign="Center"
TextAlign="Center">
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField EnableLock="true" HeaderText="计划值(万元)" TextAlign="Center" Hidden="true">
<Columns>
<f:RenderField Width="70px" ColumnID="PlanValue" DataField="PlanValue" FieldType="String"
Hidden="true" HeaderText="月计划" HeaderTextAlign="Center" TextAlign="Left" EnableColumnEdit="false">
<Editor>
<f:NumberBox ID="nbPlanValue" NoDecimal="false" NoNegative="false" MinValue="0" runat="server"
Required="true">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField Width="90px" ColumnID="PlanValueTotal" DataField="PlanValueTotal"
FieldType="String" Hidden="true" HeaderText="累计计划" HeaderTextAlign="Center" TextAlign="Left"
EnableColumnEdit="false">
<Editor>
<f:NumberBox ID="nbPlanValueTotal" NoDecimal="false" NoNegative="false" MinValue="0"
runat="server">
</f:NumberBox>
</Editor>
</f:RenderField>
</Columns>
</f:GroupField>
<f:RenderField Width="100px" ColumnID="EngineerQuantity" DataField="EngineerQuantity"
FieldType="Float" HeaderText="工程量" HeaderTextAlign="Center" TextAlign="Left">
<Editor>
<f:NumberBox ID="nbEngineerQuantity" NoDecimal="false" NoNegative="false" MinValue="0"
runat="server" Required="true">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:GroupField EnableLock="true" HeaderText="完成值(万元)" TextAlign="Center">
<Columns>
<f:RenderField Width="70px" ColumnID="CompleteValue" DataField="CompleteValue" FieldType="Float"
HeaderText="月完成" HeaderTextAlign="Center" TextAlign="Left" EnableColumnEdit="false">
<Editor>
<f:NumberBox ID="nbCompleteValue" NoDecimal="false" NoNegative="false" MinValue="0"
runat="server" Required="true">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField Width="100px" ColumnID="CompleteValueRate" DataField="CompleteValueRate"
FieldType="Float" HeaderText="月完成比例%" HeaderTextAlign="Center" TextAlign="Left"
EnableColumnEdit="false">
<Editor>
<f:NumberBox ID="nbCompleteRate" NoDecimal="false" NoNegative="false" MinValue="0"
runat="server" Required="true">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField Width="90px" ColumnID="CompleteValueTotal" DataField="CompleteValueTotal"
FieldType="Float" HeaderText="累计完成" HeaderTextAlign="Center" TextAlign="Left"
EnableColumnEdit="false">
<Editor>
<f:NumberBox ID="nbCompleteValueTotal" NoDecimal="false" NoNegative="false" MinValue="0"
runat="server">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField Width="90px" ColumnID="CompleteValueRateTotal" DataField="CompleteValueRateTotal"
FieldType="Float" HeaderText="累计%" HeaderTextAlign="Center" TextAlign="Left"
EnableColumnEdit="false">
<Editor>
<f:NumberBox ID="nbCompleteValueRateTotal" NoDecimal="false" NoNegative="false" MinValue="0"
runat="server">
</f:NumberBox>
</Editor>
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField EnableLock="true" HeaderText="实耗值(万元)" TextAlign="Center">
<Columns>
<f:RenderField Width="90px" ColumnID="RealValue" DataField="RealValue" FieldType="Float"
EnableColumnEdit="false" HeaderText="月实耗" HeaderTextAlign="Center" TextAlign="Left">
<Editor>
<f:NumberBox ID="nbRealValue" NoDecimal="false" NoNegative="false" MinValue="0" runat="server"
Required="true">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField Width="90px" ColumnID="RealValueTotal" DataField="RealValueTotal"
FieldType="Float" HeaderText="累计实耗" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField EnableLock="true" HeaderText="赢得值EV万元" TextAlign="Center">
<Columns>
<f:RenderField Width="90px" ColumnID="SVValue" DataField="SVValue" FieldType="Float"
HeaderText="进度SV" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="90px" ColumnID="CVValue" DataField="CVValue" FieldType="Float"
HeaderText="费用CV" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField EnableLock="true" HeaderText="进度计划" TextAlign="Center">
<Columns>
<f:RenderField Width="90px" ColumnID="StartDate" DataField="StartDate" FieldType="Date"
HeaderText="开始日期" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderTextAlign="Center"
TextAlign="Center">
</f:RenderField>
<f:RenderField Width="90px" ColumnID="EndDate" DataField="EndDate" FieldType="Date"
HeaderText="结束日期" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderTextAlign="Center"
TextAlign="Center">
</f:RenderField>
</Columns>
</f:GroupField>
<f:RenderField Width="10px" ColumnID="WbsDetailId" DataField="WbsDetailId" Hidden="true"
FieldType="String" HeaderText="主键" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="10px" ColumnID="Id" DataField="Id" Hidden="true" FieldType="String"
HeaderText="对应WbsId" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="10px" ColumnID="WeightsMoney" DataField="WeightsMoney" Hidden="true"
FieldType="Float" HeaderText="总计划费用" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="10px" ColumnID="CompleteValueTotalPart" DataField="CompleteValueTotalPart"
Hidden="true" FieldType="Float" HeaderText="累计完成值(不包含当月值)" HeaderTextAlign="Center"
TextAlign="Center">
</f:RenderField>
<f:RenderField Width="10px" ColumnID="RealValueTotalPart" DataField="RealValueTotalPart"
Hidden="true" FieldType="Float" HeaderText="累计实耗值(不包含当月值)" HeaderTextAlign="Center"
TextAlign="Center">
</f:RenderField>
<f:RenderField Width="50px" ColumnID="ChangeId" DataField="Weights" FieldType="String"
HeaderText="变化的列" Hidden="true" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="50px" ColumnID="BudgetUnitPrice" DataField="BudgetUnitPrice"
FieldType="Float" Hidden="true" HeaderText="预算单价" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="50px" ColumnID="CostUnivalent" DataField="CostUnivalent" FieldType="Float"
Hidden="true" HeaderText="成本单价" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="afteredit" Handler="onGridAfterEdit" />
</Listeners>
</f:Grid>
</Items>
</f:Panel>
</Items>
</f:Panel>
<f:Menu ID="Menu1" runat="server">
<f:MenuButton ID="btnMenuCorrect" OnClick="btnMenuCorrect_Click" EnablePostBack="true" runat="server"
Text="修正完成值">
</f:MenuButton>
</f:Menu>
</form>
<script type="text/javascript">
var menuID = '<%= Menu1.ClientID %>';
// 保存当前菜单对应的树节点ID
var currentNodeId;
// 返回false来阻止浏览器右键菜单
function onTreeNodeContextMenu(event, nodeId) {
currentNodeId = nodeId;
F(menuID).show();
return false;
}
function updateSummary() {
var totalRateSum = 0;
var totalEngineerQuantitySum = 0;
var totalRateSumAll = 0;
var weightsMoneySum = 0;
var completeValueTotalPart = 0;
var realValueTotalPart = 0;
var planValueTotal = 0;
var rowId = "";
var grid1ClientID = '<%= Grid1.ClientID %>';
var me = F(grid1ClientID), totalCompleteValueSum = 0, totalRealValueSum = 0, allTotal = 0;
me.getRowEls().each(function (index, tr) {
if (tr.rowIndex != 0) {
totalCompleteValueSum += 1.00 * me.getCellValue(tr, 'CompleteValue');
totalRealValueSum += 1.00 * me.getCellValue(tr, 'RealValue');
totalEngineerQuantitySum += 1.00 * me.getCellValue(tr, 'EngineerQuantity');
}
if (tr.rowIndex == 0) {
rowId = me.getCellValue(tr, 'WbsDetailId');
if (me.getCellValue(tr, 'WeightsMoney') != "") {
weightsMoneySum = (me.getCellValue(tr, 'WeightsMoney')).toFixed(2);
}
if (me.getCellValue(tr, 'CompleteValueTotalPart') != "") {
completeValueTotalPart = (me.getCellValue(tr, 'CompleteValueTotalPart')).toFixed(2);
}
if (me.getCellValue(tr, 'RealValueTotalPart') != "") {
realValueTotalPart = (me.getCellValue(tr, 'RealValueTotalPart')).toFixed(2);
}
planValueTotal = me.getCellValue(tr, 'PlanValueTotal');
}
});
totalCompleteValueSumAll = (1.00 * completeValueTotalPart + 1.00 * totalCompleteValueSum).toFixed(2);
if (weightsMoneySum != 0) {
totalRateSum = (totalCompleteValueSum / weightsMoneySum * 100).toFixed(2);
totalRateSumAll = (totalCompleteValueSumAll / weightsMoneySum * 100).toFixed(2);
}
me.updateCellValue(rowId, 'EngineerQuantity', totalEngineerQuantitySum.toFixed(2));
me.updateCellValue(rowId, 'CompleteValue', totalCompleteValueSum.toFixed(2));
me.updateCellValue(rowId, 'CompleteValueRate', totalRateSum);
me.updateCellValue(rowId, 'CompleteValueTotal', totalCompleteValueSumAll);
me.updateCellValue(rowId, 'CompleteValueRateTotal', totalRateSumAll);
me.updateCellValue(rowId, 'RealValue', totalRealValueSum.toFixed(2));
me.updateCellValue(rowId, 'RealValueTotal', (1.00 * realValueTotalPart + 1.00 * totalRealValueSum).toFixed(2));
me.updateCellValue(rowId, 'SVValue', (1.00 * totalCompleteValueSumAll - 1.00 * planValueTotal).toFixed(2));
me.updateCellValue(rowId, 'CVValue', (1.00 * totalCompleteValueSumAll - 1.00 * realValueTotalPart - 1.00 * totalRealValueSum).toFixed(2));
}
function onGridAfterEdit(event, value, params) {
var me = this, columnId = params.columnId, rowId = params.rowId;
me.updateCellValue(rowId, 'ChangeId', rowId);
if (columnId === 'EngineerQuantity') {
var engineerQuantity = me.getCellValue(rowId, 'EngineerQuantity');
var budgetUnitPrice = me.getCellValue(rowId, 'BudgetUnitPrice');
var costUnivalent = me.getCellValue(rowId, 'CostUnivalent');
var completeValue = (engineerQuantity * budgetUnitPrice).toFixed(2);
var weights = me.getCellValue(rowId, 'CompleteValueRate');
var weightsMoneys = me.getCellValue(rowId, 'WeightsMoney');
var completeValueTotalPart = me.getCellValue(rowId, 'CompleteValueTotalPart');
var planValueTotal = me.getCellValue(rowId, 'PlanValueTotal');
var lastCompleteValue = weightsMoneys - completeValueTotalPart; //剩余未完成值
if (me.getCellValue(rowId, 'CompleteValue') > weightsMoneys) {
me.updateCellValue(rowId, 'CompleteValue', weightsMoneys)
}
if (me.getCellValue(rowId, 'CompleteValue') > lastCompleteValue) {
me.updateCellValue(rowId, 'CompleteValue', lastCompleteValue)
}
if (completeValue.toString() != "" && weightsMoneys.toString() != "" && (weights.toString() == "" || completeValue.toString() != (completeValue / weightsMoneys * 100).toFixed(2))) {
me.updateCellValue(rowId, 'CompleteValueRate', (completeValue / weightsMoneys * 100).toFixed(2));
}
me.updateCellValue(rowId, 'CompleteValue', completeValue)
me.updateCellValue(rowId, 'CompleteValueTotal', 1.00 * completeValueTotalPart + 1.00 * completeValue)
me.updateCellValue(rowId, 'CompleteValueRateTotal', ((1.00 * completeValueTotalPart + 1.00 * completeValue) * 100 / weightsMoneys).toFixed(2))
me.updateCellValue(rowId, 'SVValue', (1.00 * completeValueTotalPart + 1.00 * completeValue - 1.00 * planValueTotal).toFixed(2))
if (weightsMoneys == completeValueTotalPart + completeValue) {
me.updateCellValue(rowId, 'CompleteValueRateTotal', 100)
}
var realValue = (engineerQuantity * costUnivalent).toFixed(2);
var realValueTotalPart = me.getCellValue(rowId, 'RealValueTotalPart');
if (realValue == "") {
me.updateCellValue(rowId, 'RealValue', completeValue)
me.updateCellValue(rowId, 'RealValueTotal', 1.00 * realValueTotalPart + 1.00 * completeValue)
me.updateCellValue(rowId, 'CVValue', (1.00 * completeValueTotalPart - 1.00 * realValueTotalPart).toFixed(2))
}
if (realValue != "") {
me.updateCellValue(rowId, 'RealValue', realValue)
me.updateCellValue(rowId, 'RealValueTotal', 1.00 * realValueTotalPart + 1.00 * realValue)
me.updateCellValue(rowId, 'CVValue', ((1.00 * completeValueTotalPart + 1.00 * completeValue) - (1.00 * realValueTotalPart + 1.00 * realValue)).toFixed(2))
}
}
updateSummary();
}
</script>
</body>
</html>