Browse Source

导入导出项目,接受项目文件,应重算父项文件夹的信息

MaiXinRong 7 years ago
parent
commit
7bc5e6f5f4
3 changed files with 77 additions and 72 deletions
  1. 72 1
      DataModules/ProjectManagerDm.pas
  2. 4 0
      Units/ProjectCommands.pas
  3. 1 71
      Units/ProjectData.pas

+ 72 - 1
DataModules/ProjectManagerDm.pas

@@ -59,6 +59,8 @@ type
     procedure RestoreTender(AID: Integer);
     procedure RefreshSeedID;
 
+    procedure CalculateParentInfo(AID: Integer);
+
     function BackupPath(AProjectID: Integer): String;
     procedure AddOpenTenderBackup(AProjectID: Integer);
     procedure AddSaveTenderBackup(AProjectID: Integer);
@@ -69,7 +71,7 @@ type
 implementation
 
 uses
-  UtilMethods, UpdateDataBase, ProjectCommands, PHPWebDm, ConstUnit;
+  UtilMethods, UpdateDataBase, ProjectCommands, PHPWebDm, ConstUnit, Math;
 
 {$R *.dfm}
 
@@ -655,4 +657,73 @@ begin
   end;
 end;
 
+procedure TProjectManagerData.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 := ProjectsTree.FindNode(AID);
+  if (not Assigned(vNode)) or (not vNode.HasChildren) then Exit;
+
+  ResetDigit(vNode);
+  ReCalculateInfo(vNode);
+
+  CalculateParentInfo(vNode.ParentID);
+end;
+
 end.

+ 4 - 0
Units/ProjectCommands.pas

@@ -674,6 +674,8 @@ begin
     FCurNode.Rec.ValueByName('WebOwnerID').AsInteger := AXmlNode.Attributes['WebOwnerID'];
     FCurNode.Rec.ValueByName('WebAuthorID').AsInteger := AXmlNode.Attributes['WebAuthorID'];
   end;
+
+  ProjectManager.CalculateParentInfo(FCurNode.ParentID);
 end;
 
 procedure TReceiveProject.LoadTenderProperty(AXmlNode: IXMLNode);
@@ -1104,6 +1106,8 @@ begin
     FNewNode.Rec.ValueByName('WebOwnerID').AsInteger := AXmlNode.Attributes['WebOwnerID'];
     FNewNode.Rec.ValueByName('WebAuthorID').AsInteger := AXmlNode.Attributes['WebAuthorID'];
   end;
+
+  ProjectManager.CalculateParentInfo(FNewNode.ParentID);
 end;
 
 procedure TTenderImport.LoadTenderProperty(AXmlNode: IXMLNode);

+ 1 - 71
Units/ProjectData.pas

@@ -513,76 +513,6 @@ 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
@@ -601,7 +531,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.CalculateParentInfo(InfoRec.ValueByName('ParentID').AsInteger);
   ProjectManager.Save;
 end;