|
@@ -266,7 +266,7 @@ implementation
|
|
|
uses UtilMethods, Globals, ProjectCommands, sdIDTree, StageDm,
|
|
|
ZJJLDm, PHPWebDm, XMLDoc, XMLIntf, ConstUnit, PasswordInputFrm,
|
|
|
mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
|
|
|
- StrUtils, sdProvider, CalcDecimal;
|
|
|
+ StrUtils, sdProvider, CalcDecimal, Math;
|
|
|
|
|
|
{ TProjectData }
|
|
|
|
|
@@ -513,6 +513,76 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TProjectData.SaveInfoToManager;
|
|
|
+
|
|
|
+ procedure CalculateParentInfo(AID: Integer);
|
|
|
+
|
|
|
+ procedure ResetDigit(ANode: TsdIDTreeNode);
|
|
|
+ var
|
|
|
+ iChild, iCommonDigit, iDealPayDigit: Integer;
|
|
|
+ vChild: TsdIDTreeNode;
|
|
|
+ begin
|
|
|
+ iCommonDigit := 0;
|
|
|
+ iDealPayDigit := 0;
|
|
|
+ for iChild := 0 to ANode.ChildCount - 1 do
|
|
|
+ begin
|
|
|
+ vChild := ANode.ChildNodes[iChild];
|
|
|
+ iCommonDigit := Max(iCommonDigit, vChild.Rec.ValueByName('CommonDigit').AsInteger);
|
|
|
+ iDealPayDigit := Max(iDealPayDigit, vChild.Rec.ValueByName('DealPayDigit').AsInteger);
|
|
|
+ end;
|
|
|
+ ANode.Rec.ValueByName('CommonDigit').AsInteger := iCommonDigit;
|
|
|
+ ANode.Rec.ValueByName('DealPayDigit').AsInteger := iDealPayDigit;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure ReCalculateInfo(ANode: TsdIDTreeNode);
|
|
|
+ var
|
|
|
+ fDeal, fDeal_BGL, fPhase, fEndDeal, fEndChange, fEnd, fPre, fPhasePay: Double;
|
|
|
+ iChild: Integer;
|
|
|
+ vChild: TsdIDTreeNode;
|
|
|
+ begin
|
|
|
+ fDeal := 0;
|
|
|
+ fDeal_BGL := 0;
|
|
|
+ fPhase := 0;
|
|
|
+ fEndDeal := 0;
|
|
|
+ fEndChange := 0;
|
|
|
+ fEnd := 0;
|
|
|
+ fPre := 0;
|
|
|
+ fPhasePay := 0;
|
|
|
+ for iChild := 0 to ANode.ChildCount - 1 do
|
|
|
+ begin
|
|
|
+ vChild := ANode.ChildNodes[iChild];
|
|
|
+ fDeal := fDeal + vChild.Rec.ValueByName('DealTotalPrice').AsFloat;
|
|
|
+ fDeal_BGL := fDeal_BGL + vChild.Rec.ValueByName('Deal_BGLTotalPrice').AsFloat;
|
|
|
+ fPhase := fPhase + vChild.Rec.ValueByName('PhaseTotalPrice').AsFloat;
|
|
|
+ fEndDeal := fEndDeal + vChild.Rec.ValueByName('EndDealTotalPrice').AsFloat;
|
|
|
+ fEndChange := fEndChange + vChild.Rec.ValueByName('EndChangeTotalPrice').AsFloat;
|
|
|
+ fEnd := fEnd + vChild.Rec.ValueByName('EndTotalPrice').AsFloat;
|
|
|
+ fPre := fPre + vChild.Rec.ValueByName('PreTotalPrice').AsFloat;
|
|
|
+ fPhasePay := fPhasePay + vChild.Rec.ValueByName('PhasePay').AsFloat;
|
|
|
+ end;
|
|
|
+ ANode.Rec.ValueByName('DealTotalPrice').AsFloat := fDeal;
|
|
|
+ ANode.Rec.ValueByName('Deal_BGLTotalPrice').AsFloat := fDeal_BGL;
|
|
|
+ ANode.Rec.ValueByName('PhaseTotalPrice').AsFloat := fPhase;
|
|
|
+ ANode.Rec.ValueByName('EndDealTotalPrice').AsFloat := fEndDeal;
|
|
|
+ ANode.Rec.ValueByName('EndChangeTotalPrice').AsFloat := fEndChange;
|
|
|
+ ANode.Rec.ValueByName('EndTotalPrice').AsFloat := fEnd;
|
|
|
+ ANode.Rec.ValueByName('PreTotalPrice').AsFloat := fPre;
|
|
|
+ ANode.Rec.ValueByName('PhasePay').AsFloat := fPhasePay;
|
|
|
+ end;
|
|
|
+
|
|
|
+ var
|
|
|
+ vNode, vChild: TsdIDTreeNode;
|
|
|
+ iChild: Integer;
|
|
|
+ begin
|
|
|
+ if AID = -1 then Exit;
|
|
|
+ vNode := ProjectManager.ProjectsTree.FindNode(AID);
|
|
|
+ if not Assigned(vNode) then Exit;
|
|
|
+
|
|
|
+ ResetDigit(vNode);
|
|
|
+ ReCalculateInfo(vNode);
|
|
|
+
|
|
|
+ CalculateParentInfo(vNode.ParentID);
|
|
|
+ end;
|
|
|
+
|
|
|
var
|
|
|
InfoRec, PhaseRec: TsdDataRecord;
|
|
|
begin
|
|
@@ -531,6 +601,7 @@ begin
|
|
|
InfoRec.ValueByName('AuditStatus').AsInteger := FProjProperties.AuditStatus;
|
|
|
InfoRec.ValueByName('CommonDigit').AsInteger := FProjProperties.DecimalManager.Common.TotalPrice.Digit;
|
|
|
InfoRec.ValueByName('DealPayDigit').AsInteger := FProjProperties.DecimalManager.DealPay.TotalPrice.Digit;
|
|
|
+ CalculateParentInfo(InfoRec.ValueByName('ParentID').AsInteger);
|
|
|
ProjectManager.Save;
|
|
|
end;
|
|
|
|