Browse Source

计量&台账树结构重构相关

MaiXinRong 9 năm trước cách đây
mục cha
commit
662bb02f53

+ 2 - 2
DataModules/BillsBookmarkDm.pas

@@ -92,14 +92,14 @@ end;
 procedure TBillsBookmarkData.sdvStageBookmarkFilterRecord(
   ARecord: TsdDataRecord; var Allow: Boolean);
 var
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
   StageRec: TsdDataRecord;
 begin
   if (TProjectData(FProjectData).ProjProperties.PhaseCount > 0) and
      (TProjectData(FProjectData).PhaseData.Active) then
   begin
     with TProjectData(FProjectData).BillsMeasureData do
-      vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.FindNode(ARecord.ValueByName('ID').AsInteger));
+      vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(ARecord.ValueByName('ID').AsInteger));
     if Assigned(vNode) then
     begin
       StageRec := vNode.StageRec;

+ 9 - 9
DataModules/BillsMeasureDm.pas

@@ -39,7 +39,7 @@ type
     function SelectAndUpdateBGL(ABillsID: Integer; ARec: TsdDataRecord;
       ANewValue: Double; const AType: string): Boolean;
 
-    procedure CalculateNode(ANode: TMeasureBillsIDTreeNode);
+    procedure CalculateNode(ANode: TBillsIDTreeNode);
     procedure UpdateRecordGather(ANode: TsdIDTreeNode; AQuantity, ATotalPrice: Double);
 
     function GetStageData: TStageData;
@@ -446,7 +446,7 @@ end;
 procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
   ARecord: TsdDataRecord; AColumn: TsdViewColumn; ANewText: String);
 
-  function CheckNeedAddPhaseRecord(ANode: TMeasureBillsIDTreeNode): Boolean;
+  function CheckNeedAddPhaseRecord(ANode: TBillsIDTreeNode): Boolean;
   begin
     Result := SameText(AColumn.FieldName, 'CurDealQuantity') or
               SameText(AColumn.FieldName, 'CurQcQuantity') or
@@ -575,9 +575,9 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
 
 var
   NewRec: TStageRecord;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
-  vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.FindNode(ARecord.ValueByName('ID').AsInteger));
+  vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(ARecord.ValueByName('ID').AsInteger));
   if not CheckNodeWritable(vNode) then
     Exit;
 
@@ -698,7 +698,7 @@ begin
   if not TProjectData(FProjectData).StageDataReadOnly then
 
   for i := 0 to BillsMeasureTree.Count - 1 do
-    CalculateNode(TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]));
+    CalculateNode(TBillsIDTreeNode(BillsMeasureTree.Items[i]));
 
   {Cacl := TBillsCalculate.Create(Self);
   try
@@ -829,7 +829,7 @@ begin
   for iIndex := 0 to BillsMeasureTree.Count - 1 do
   begin
     stnNode := BillsMeasureTree.Items[iIndex];
-    StageRec := TMeasureBillsIDTreeNode(stnNode).StageRec;
+    StageRec := TBillsIDTreeNode(stnNode).StageRec;
     if (stnNode.ParentID <> -1) then
       if Assigned(StageRec) then
         stnNode.Expanded := StageRec.GatherTotalPrice.AsFloat <> 0
@@ -940,12 +940,12 @@ end;
 procedure TBillsMeasureData.ResetTreeNodeStageRec;
 var
   i: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
   if not StageData.Active then Exit;
   for i := 0 to BillsMeasureTree.Count - 1 do
   begin
-    vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]);
+    vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
     vNode.StageRec := StageData.StageRecord(vNode.ID);
   end;
 end;
@@ -962,7 +962,7 @@ begin
   UpdateRecordPM(stnNode.ParentID, ADiffer);
 end;
 
-procedure TBillsMeasureData.CalculateNode(ANode: TMeasureBillsIDTreeNode);
+procedure TBillsMeasureData.CalculateNode(ANode: TBillsIDTreeNode);
 begin
   if Assigned(ANode.StageRec) then
   begin

+ 2 - 2
DataModules/ProjectGLDm.pas

@@ -324,7 +324,7 @@ var
   fQuantity: Double;
   i: Integer;
   GLRec: TsdDataRecord;
-  BillsNode: TMeasureBillsIDTreeNode;
+  BillsNode: TBillsIDTreeNode;
 begin
   vGLs := TList.Create;
   try
@@ -336,7 +336,7 @@ begin
     begin
       GLRec := TsdDataRecord(vGLs.Items[i]);
       with TProjectData(FProjectData).BillsMeasureData do
-        BillsNode := TMeasureBillsIDTreeNode(BillsMeasureTree.FindNode(GLRec.ValueByName('BillsID').AsInteger));
+        BillsNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GLRec.ValueByName('BillsID').AsInteger));
       if Assigned(BillsNode.StageRec) then
         fQuantity := fQuantity + BillsNode.StageRec.GatherQuantity.AsFloat * GLRec.ValueByName('Quantity').AsFloat;
     end;

+ 7 - 7
DataModules/ReportMemoryDm/rmHaBaiCustomizedDm.pas

@@ -156,7 +156,7 @@ type
     constructor Create(AProjectCount: Integer);
     destructor Destroy;
 
-    function AddGclNode(ANode: TMeasureBillsIDTreeNode; AProjectIndex: Integer): TGclNode;
+    function AddGclNode(ANode: TBillsIDTreeNode; AProjectIndex: Integer): TGclNode;
 
     procedure ReCalculateTotalPrice;
     procedure Calculate;
@@ -431,14 +431,14 @@ end;
 procedure TrmHaBaiCustomizedData.FilterGcl(AProjectIndex: Integer);
 var
   i: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
   GclNode: TGclNode;
 begin
   with FProjectData.BillsMeasureData do
   begin
     for i := 0 to BillsMeasureTree.Count - 1 do
     begin
-      vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]);
+      vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
       if not vNode.HasChildren and (vNode.Rec.B_Code.AsString <> '') then
         GclNode := FGclControl.AddGclNode(vNode, AProjectIndex);
     end;
@@ -830,7 +830,7 @@ end;
 
 procedure TrmHaBaiCustomizedData.WriteFlowData;
 
-  procedure AddNodeData(ANode: TMeasureBillsIDTreeNode);
+  procedure AddNodeData(ANode: TBillsIDTreeNode);
   begin
     cdsCustom14.Append;
     cdsCustom14IndexCode.AsString := ANode.Rec.IndexCode.AsString;
@@ -848,11 +848,11 @@ procedure TrmHaBaiCustomizedData.WriteFlowData;
 
 var
   iIndex: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
   for iIndex := 0 to FProjectData.BillsMeasureData.BillsMeasureTree.Count - 1 do
   begin
-    vNode := TMeasureBillsIDTreeNode(FProjectData.BillsMeasureData.BillsMeasureTree.Items[iIndex]);
+    vNode := TBillsIDTreeNode(FProjectData.BillsMeasureData.BillsMeasureTree.Items[iIndex]);
     if (not vNode.HasChildren) and (vNode.Rec.B_Code.AsString <> '') and
         Assigned(vNode.StageRec) and (vNode.StageRec.GatherTotalPrice.AsFloat <> 0) then
       AddNodeData(vNode);
@@ -912,7 +912,7 @@ end;
 
 { TGclControl }
 
-function TGclControl.AddGclNode(ANode: TMeasureBillsIDTreeNode; AProjectIndex: Integer): TGclNode;
+function TGclControl.AddGclNode(ANode: TBillsIDTreeNode; AProjectIndex: Integer): TGclNode;
 begin
   Result := FindGclNode(ANode.Rec);
   if not Assigned(Result) then

+ 8 - 8
DataModules/SearchDm.pas

@@ -25,7 +25,7 @@ type
   private
     FProjectData: TObject;
 
-    procedure AddSearchResult(ANode: TMeasureBillsIDTreeNode);
+    procedure AddSearchResult(ANode: TBillsIDTreeNode);
   public
     constructor Create(AProjectData: TObject);
     destructor Destroy; override;
@@ -49,7 +49,7 @@ uses
 
 { TSearchData }
 
-procedure TSearchData.AddSearchResult(ANode: TMeasureBillsIDTreeNode);
+procedure TSearchData.AddSearchResult(ANode: TBillsIDTreeNode);
 begin
   if not Assigned(ANode) then Exit;
 
@@ -127,7 +127,7 @@ end;
 procedure TSearchData.SearchKeyword(const AKeyword: string);
 var
   iNode: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
   if AKeyword = '' then Exit;
 
@@ -138,7 +138,7 @@ begin
     begin
       for iNode := 0 to BillsMeasureTree.Count - 1 do
       begin
-        vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[iNode]);
+        vNode := TBillsIDTreeNode(BillsMeasureTree.Items[iNode]);
         if (Pos(AKeyword, vNode.Rec.B_Code.AsString) > 0) or
             (Pos(AKeyword, vNode.Rec.Name.AsString) > 0) then
           AddSearchResult(vNode);
@@ -152,7 +152,7 @@ end;
 procedure TSearchData.SearchOverRange;
 var
   i: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
   cdsSearch.DisableControls;
   try
@@ -161,7 +161,7 @@ begin
     begin
       for i := 0 to BillsMeasureTree.Count - 1 do
       begin
-        vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]);
+        vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
         if not vNode.HasChildren then
           if vNode.Rec.Quantity.AsFloat < vNode.Rec.AddDealQuantity.AsFloat then
             AddSearchResult(vNode);
@@ -184,7 +184,7 @@ end;
 procedure TSearchData.SearchBelowRange;
 var
   i: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
   cdsSearch.DisableControls;
   try
@@ -193,7 +193,7 @@ begin
     begin
       for i := 0 to BillsMeasureTree.Count - 1 do
       begin
-        vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]);
+        vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
         if not vNode.HasChildren then
           if vNode.Rec.Quantity.AsFloat > vNode.Rec.AddDealQuantity.AsFloat then
             AddSearchResult(vNode);

+ 11 - 11
DataModules/StageDm.pas

@@ -44,9 +44,9 @@ type
     procedure CalculateQuantityChange(ABillsID: Integer);
     procedure CalculatePriceChange(ABillsID: Integer);
 
-    procedure CalculateParent(ANode: TMeasureBillsIDTreeNode);
-    procedure CalculateLeaf(ANode: TMeasureBillsIDTreeNode);
-    procedure CalculateSpecialLeaf(ANode: TMeasureBillsIDTreeNode);
+    procedure CalculateParent(ANode: TBillsIDTreeNode);
+    procedure CalculateLeaf(ANode: TBillsIDTreeNode);
+    procedure CalculateSpecialLeaf(ANode: TBillsIDTreeNode);
 
     function GetTotalPrice(ABillsID, AType, AStageIndex: Integer): Double;
 
@@ -654,22 +654,22 @@ begin
   if ANode.HasChildren then
   begin
     CalculateNode(ANode.FirstChild);
-    CalculateParent(TMeasureBillsIDTreeNode(ANode));
+    CalculateParent(TBillsIDTreeNode(ANode));
   end
   else
   begin
     if IsSpecialNode then
-      CalculateSpecialLeaf(TMeasureBillsIDTreeNode(ANode))
+      CalculateSpecialLeaf(TBillsIDTreeNode(ANode))
     else
-      CalculateLeaf(TMeasureBillsIDTreeNode(ANode));
+      CalculateLeaf(TBillsIDTreeNode(ANode));
   end;
   CalculateNode(ANode.NextSibling);
 end;
 
-procedure TStageData.CalculateParent(ANode: TMeasureBillsIDTreeNode);
+procedure TStageData.CalculateParent(ANode: TBillsIDTreeNode);
 var
   iChild: Integer;
-  ChildNode: TMeasureBillsIDTreeNode;
+  ChildNode: TBillsIDTreeNode;
   fDeal, fQc, fPc, fPM: Double;
 begin
   if not Assigned(ANode.StageRec) then Exit;
@@ -680,7 +680,7 @@ begin
   fPM := 0;
   for iChild := 0 to ANode.ChildCount - 1 do
   begin
-    ChildNode := TMeasureBillsIDTreeNode(ANode.ChildNodes[iChild]);
+    ChildNode := TBillsIDTreeNode(ANode.ChildNodes[iChild]);
     if not Assigned(ChildNode.StageRec) then Continue;
     fDeal := TotalPriceRoundTo(fDeal + ChildNode.StageRec.DealTotalPrice.AsFloat);
     fQc := TotalPriceRoundTo(fQc + ChildNode.StageRec.QcTotalPrice.AsFloat);
@@ -710,7 +710,7 @@ begin
   end;
 end;
 
-procedure TStageData.CalculateLeaf(ANode: TMeasureBillsIDTreeNode);
+procedure TStageData.CalculateLeaf(ANode: TBillsIDTreeNode);
 
   procedure CalculateMeasure(ARec: TsdDataRecord; const AType: string);
   begin
@@ -931,7 +931,7 @@ begin
   end;
 end;
 
-procedure TStageData.CalculateSpecialLeaf(ANode: TMeasureBillsIDTreeNode);
+procedure TStageData.CalculateSpecialLeaf(ANode: TBillsIDTreeNode);
 
   procedure GatherPriceMargin(ARec: TStageRecord);
   begin

+ 6 - 6
Frames/BillsMeasureFme.pas

@@ -190,14 +190,14 @@ end;
 procedure TBillsMeasureFrame.zgBillsMeasureCellGetColor(Sender: TObject; ACoord: TPoint;
   var AColor: TColor);
 var
-  stnNode: TMeasureBillsIDTreeNode;
+  stnNode: TBillsIDTreeNode;
   iCreatePhaseID: Integer;
   StageRec: TStageRecord;
   fDiffer: Double;
 begin
   AColor := clWindow;
   if ACoord.Y > stdBillsMeasure.IDTree.Count + 1 then Exit;
-  stnNode := TMeasureBillsIDTreeNode(stdBillsMeasure.IDTree.Items[ACoord.Y - 2]);
+  stnNode := TBillsIDTreeNode(stdBillsMeasure.IDTree.Items[ACoord.Y - 2]);
   if not Assigned(stnNode) then Exit;
   iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
   // ¸ù¾Ý²ã´Îµ×É«²»Í¬
@@ -299,7 +299,7 @@ procedure TBillsMeasureFrame.zgBillsMeasureCellButtonClick(Sender: TObject;
     StageRec: TStageRecord;
   begin
     if not Assigned(ANode) then Exit;
-    StageRec := TMeasureBillsIDTreeNode(ANode).StageRec;
+    StageRec := TBillsIDTreeNode(ANode).StageRec;
     try
       if Assigned(StageRec) then
       begin
@@ -316,7 +316,7 @@ procedure TBillsMeasureFrame.zgBillsMeasureCellButtonClick(Sender: TObject;
         if not Assigned(StageRec) then
         begin
           StageRec := FBillsMeasureData.StageData.AddStageRecord(ANode.ID);
-          TMeasureBillsIDTreeNode(ANode).StageRec := StageRec;
+          TBillsIDTreeNode(ANode).StageRec := StageRec;
         end;
         StageRec.ValueByName(AType + AField).AsFloat := vNewBGL.TotalNum;
         StageRec.ValueByName(AType + 'BGLCode').AsString := vNewBGL.MergedCode;
@@ -433,10 +433,10 @@ end;
 
 procedure TBillsMeasureFrame.actnSetStageBookmarkExecute(Sender: TObject);
 var
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
   StageRec: TStageRecord;
 begin
-  vNode := TMeasureBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.Selected);
+  vNode := TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.Selected);
   StageRec := vNode.StageRec;
   if not Assigned(StageRec) then
   begin

+ 6 - 45
Units/BillsTree.pas

@@ -7,7 +7,9 @@ uses
 
 type
   TBillsIDTreeNode = class(TsdIDTreeNode)
-  private
+  private     
+    FStageRec: TStageRecord;
+
     FDealQuantity: Double;
     FDealTotalPrice: Double;
     FQcQuantity: Double;
@@ -46,6 +48,9 @@ type
     property PcTotalPrice: Double read FPcTotalPrice write FPcTotalPrice;
     property GatherQuantity: Double read FGatherQuantity write FGatherQuantity;
     property GatherTotalPrice: Double read FGatherTotalPrice write FGatherTotalPrice;
+
+    // Cache Data
+    property StageRec: TStageRecord read FStageRec write FStageRec;
   end;
 
   TReCalculateNode = procedure(AID: Integer) of object;
@@ -73,22 +78,9 @@ type
     property OnReCalcNode: TReCalculateNode read FOnReCalcNode write FOnReCalcNode;
   end;
 
-  TMeasureBillsIDTreeNode = class(TBillsIDTreeNode)
-  private
-    FStageRec: TStageRecord;
-  public
-    function UpLevel: Boolean; override;
-    function DownLevel: Boolean; override;
-
-    // Cache Data
-    property StageRec: TStageRecord read FStageRec write FStageRec;
-  end;
-
   TMeasureBillsIDTree = class(TBillsIDTree)
   private
     FCompileTree: TCompileBillsIDTree;
-  protected
-    function CreateItem: TsdIDTreeNode; override;
   public
     procedure DoOnReCalcNode(AID: Integer); overload; override;
     procedure DoOnReCalcNode(ANode: TsdIDTreeNode); overload; override;
@@ -346,41 +338,10 @@ begin
     FCompileTree.DoOnReCalcNode(AID);
 end;
 
-function TMeasureBillsIDTree.CreateItem: TsdIDTreeNode;
-begin
-  Result := TMeasureBillsIDTreeNode.Create(Self);
-end;
-
 procedure TMeasureBillsIDTree.DoOnReCalcNode(ANode: TsdIDTreeNode);
 begin
   if Assigned(FCompileTree) then
     FCompileTree.DoOnReCalcNode(ANode);
 end;
 
-{ TMeasureBillsIDTreeNode }
-
-function TMeasureBillsIDTreeNode.DownLevel: Boolean;
-var
-  iOrgParentID: Integer;
-begin
-  iOrgParentID := ParentID;
-  Result := inherited DownLevel;
-
-  if not Result then Exit;
-  TMeasureBillsIDTree(Owner).DoOnReCalcNode(ParentID);
-  TMeasureBillsIDTree(Owner).DoOnReCalcNode(iOrgParentID);
-end;
-
-function TMeasureBillsIDTreeNode.UpLevel: Boolean;
-var
-  iOrgParentID: Integer;
-begin
-  iOrgParentID := ParentID;
-  Result := inherited UpLevel;
-
-  if not Result then Exit;
-  TMeasureBillsIDTree(Owner).DoOnReCalcNode(iOrgParentID);
-  TMeasureBillsIDTree(Owner).DoOnReCalcNode(ParentID);
-end;
-
 end.

+ 4 - 4
Units/GclBillsGatherModel.pas

@@ -371,7 +371,7 @@ type
     function GetGclNode(const AB_Code, AName, AUnits: string; APrice: Double): TGclNode; overload;
     function GetGclNode(ARec: TBillsRecord): TGclNode; overload;
 
-    procedure AddBillsNode(ANode: TMeasureBillsIDTreeNode);
+    procedure AddBillsNode(ANode: TBillsIDTreeNode);
     procedure GatherBillsData;
     procedure GatherDealData;
     procedure GatherBGLData;
@@ -406,7 +406,7 @@ uses
 
 { TGclGatherModel }
 
-procedure TGclGatherModel.AddBillsNode(ANode: TMeasureBillsIDTreeNode);
+procedure TGclGatherModel.AddBillsNode(ANode: TBillsIDTreeNode);
 var
   vGclNode: TGclNode;
   vDetailGclNode: TDetailGclNode;
@@ -589,11 +589,11 @@ end;
 procedure TGclGatherModel.GatherBillsData;
 var
   i: Integer;
-  vNode: TMeasureBillsIDTreeNode;
+  vNode: TBillsIDTreeNode;
 begin
   for i := 0 to FBillsTree.Count - 1 do
   begin
-    vNode := TMeasureBillsIDTreeNode(FBillsTree.Items[i]);
+    vNode := TBillsIDTreeNode(FBillsTree.Items[i]);
     if not vNode.HasChildren and (vNode.Rec.B_Code.AsString <> '') then
       AddBillsNode(vNode);
   end;