소스 검색

Project Management, Parent, Gather Data From Children

MaiXinRong 8 년 전
부모
커밋
e4e2bd473c
1개의 변경된 파일72개의 추가작업 그리고 1개의 파일을 삭제
  1. 72 1
      Units/ProjectData.pas

+ 72 - 1
Units/ProjectData.pas

@@ -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;