| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 | 
							- unit tpBaseGatherData;
 
- interface
 
- uses
 
-   Classes, tpGatherTree, tpPeg, BillsTree, tpSelectTenderNode,
 
-   ProjectData, tpNoPegDm;
 
- type
 
-   TtpBaseGatherData = class
 
-   private
 
-     FTree: TtpGatherTree;
 
-     FPegs: TtpPegList;
 
-     FNoPegTree: TtpGatherTree;
 
-     FNoPegData: TtpNoPegData;
 
-     function AddBillsNode(ANode: TBillsIDTreeNode; AParent: TtpGatherTreeNode): TtpGatherTreeNode;
 
-     procedure CheckPeg(ANode: TtpGatherTreeNode);
 
-     procedure AddBills(ANode: TBillsIDTreeNode; AParent: TtpGatherTreeNode);
 
-     procedure GatherTender(ATender: TtpSelectTenderNode);
 
-     function AddNoPegTreeNode(AOrgNode, AParent: TtpGatherTreeNode): TtpGatherTreeNode;
 
-     procedure FilterNoPegTreeNode(AOrgNode, AParent: TtpGatherTreeNode);
 
-     procedure FilterNoPegTree;
 
-   public
 
-     constructor Create;
 
-     destructor Destroy; override;
 
-     procedure GatherTenders(ATenders: TList);
 
-     property Tree: TtpGatherTree read FTree;
 
-     property Pegs: TtpPegList read FPegs;
 
-     property NoPegData: TtpNoPegData read FNoPegData;
 
-   end;
 
- implementation
 
- uses
 
-   ProgressHintFrm, mPegFilter, Globals, UtilMethods, Forms, Controls;
 
- { TtpBaseGatherData }
 
- procedure TtpBaseGatherData.AddBills(ANode: TBillsIDTreeNode;
 
-   AParent: TtpGatherTreeNode);
 
- var
 
-   ACur: TtpGatherTreeNode;
 
- begin
 
-   if not Assigned(ANode) then Exit;
 
-   ACur := AddBillsNode(ANode, AParent);
 
-   CheckPeg(ACur);
 
-   AddBills(TBillsIDTreeNode(ANode.FirstChild), ACur);
 
-   AddBills(TBillsIDTreeNode(ANode.NextSibling), AParent);
 
- end;
 
- function TtpBaseGatherData.AddBillsNode(ANode: TBillsIDTreeNode;
 
-   AParent: TtpGatherTreeNode): TtpGatherTreeNode;
 
- var
 
-   vNextSibling: TtpGatherTreeNode;
 
-   vPeg: TtpPegNode;
 
- begin
 
-   Result := FTree.FindNode(AParent, ANode.Rec);
 
-   if not Assigned(Result) then
 
-   begin
 
-     vNextSibling := FTree.FindNextSibling(AParent, ANode.Rec);
 
-     Result := FTree.AddNode(AParent, vNextSibling);
 
-     Result.Code := ANode.Rec.Code.AsString;
 
-     Result.B_Code := ANode.Rec.B_Code.AsString;
 
-     Result.Name := ANode.Rec.Name.AsString;
 
-     Result.Units := ANode.Rec.Units.AsString;
 
-     Result.Price := ANode.Rec.Price.AsFloat;
 
-   end;
 
-   Result.Quantity := Result.Quantity + ANode.Rec.Quantity.AsFloat;
 
-   Result.TotalPrice := Result.TotalPrice + ANode.Rec.TotalPrice.AsFloat;
 
- end;
 
- procedure TtpBaseGatherData.CheckPeg(ANode: TtpGatherTreeNode);
 
- var
 
-   vPegNode: TtpPegNode;
 
- begin
 
-   if not Assigned(ANode) then Exit;
 
-   if PegFilter.Filter(ANode.Name) then
 
-   begin
 
-     vPegNode := TtpPegNode.Create(ANode, PegFilter);
 
-     FPegs.AddPegs(vPegNode);
 
-   end;
 
- end;
 
- constructor TtpBaseGatherData.Create;
 
- begin
 
-   FTree := TtpGatherTree.Create;
 
-   FPegs := TtpPegList.Create;
 
-   FNoPegTree := TtpGatherTree.Create;
 
-   FNoPegData := TtpNoPegData.Create;
 
- end;
 
- destructor TtpBaseGatherData.Destroy;
 
- begin
 
-   FNoPegData.Free;
 
-   FNoPegTree.Free;
 
-   FPegs.Free;
 
-   FTree.Free;
 
-   inherited;
 
- end;
 
- procedure TtpBaseGatherData.GatherTenders(ATenders: TList);
 
- var
 
-   iTender: Integer;
 
-   vTender: TtpSelectTenderNode;
 
- begin
 
-   Screen.Cursor := crHourGlass;
 
-   ShowProgressHint('正在汇总项目', ATenders.Count*2);
 
-   try
 
-     FTree.ClearTreeNodes;
 
-     FPegs.Clear;
 
-     for iTender := 0 to ATenders.Count - 1 do
 
-     begin
 
-       vTender := TtpSelectTenderNode(ATenders.Items[iTender]);
 
-       GatherTender(vTender);
 
-     end;
 
-     FPegs.LoadRelaGclNodes;
 
-     FPegs.SortPegs;
 
-     FilterNoPegTree;
 
-   finally
 
-     CloseProgressHint;
 
-     Screen.Cursor := crDefault;
 
-   end;
 
- end;
 
- procedure TtpBaseGatherData.GatherTender(ATender: TtpSelectTenderNode);
 
- var
 
-   vProjectData: TProjectData;
 
-   procedure OpenProject;
 
-   begin
 
-     vProjectData := OpenProjectManager.FindProjectData(ATender.ID);
 
-     if not Assigned(vProjectData) then
 
-     begin
 
-       vProjectData := TProjectData.Create;
 
-       vProjectData.OpenForReport(GetMyProjectsFilePath + ATender.FileName);
 
-     end;
 
-     ATender.NodeCount := vProjectData.BillsCompileData.BillsCompileTree.Count;
 
-   end;
 
-   procedure FreeProject;
 
-   begin
 
-     if not Assigned(OpenProjectManager.FindProjectData(ATender.ID)) then
 
-       vProjectData.Free;
 
-   end;
 
- begin
 
-   try
 
-     UpdateProgressHint('正在打开项目: ' + ATender.Name);
 
-     OpenProject;
 
-     UpdateProgressPosition;
 
-     UpdateProgressHint('正在汇总项目: ' + ATender.Name);
 
-     with vProjectData.BillsCompileData do
 
-       AddBills(TBillsIDTreeNode(BillsCompileTree.FirstNode), nil);
 
-     UpdateProgressPosition;
 
-   finally
 
-     FreeProject;
 
-   end;
 
- end;
 
- procedure TtpBaseGatherData.FilterNoPegTreeNode(
 
-   AOrgNode, AParent: TtpGatherTreeNode);
 
- var
 
-   vCur: TtpGatherTreeNode;
 
- begin
 
-   if not Assigned(AOrgNode) then Exit;
 
-   if not AOrgNode.RelaPeg then
 
-   begin
 
-     vCur := AddNoPegTreeNode(AOrgNode, AParent);
 
-     FilterNoPegTreeNode(TtpGatherTreeNode(AOrgNode.FirstChild), vCur);
 
-   end;
 
-   FilterNoPegTreeNode(TtpGatherTreeNode(AOrgNode.NextSibling), AParent);
 
- end;
 
- function TtpBaseGatherData.AddNoPegTreeNode(AOrgNode,
 
-   AParent: TtpGatherTreeNode): TtpGatherTreeNode;
 
- begin
 
-   Result := FNoPegTree.AddNode(AParent);
 
-   Result.Code := AOrgNode.Code;
 
-   Result.B_Code := AOrgNode.B_Code;
 
-   Result.Name := AOrgNode.Name;
 
-   Result.Units := AOrgNode.Units;
 
-   Result.Price := AOrgNode.Price;
 
-   Result.Quantity := AOrgNode.Quantity;
 
-   Result.TotalPrice := AOrgNode.TotalPrice;
 
-   Result.DgnQuantity1 := AOrgNode.DgnQuantity1;
 
-   Result.DgnQuantity2 := AOrgNode.DgnQuantity2;
 
- end;
 
- procedure TtpBaseGatherData.FilterNoPegTree;
 
- begin
 
-   FTree.CheckRelaPeg;
 
-   FilterNoPegTreeNode(TtpGatherTreeNode(FTree.Root.FirstChild), nil);
 
-   FNoPegTree.CalculateAllParent;
 
-   FNoPegData.LoadData(FNoPegTree);
 
- end;
 
- end.
 
 
  |