stgGclGather.pas 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. unit stgGclGather;
  2. interface
  3. uses
  4. Classes, stgGatherGclCacheData, ProjectData, BillsTree, sdIDTree;
  5. type
  6. TProgramHintEvent = procedure (const ATenderName: string) of Object;
  7. TstgSubTenderFileGatherGcl = class
  8. private
  9. FCacheData: TstgGatherGclCacheData;
  10. FProjectData: TProjectData;
  11. FCurSubTenderID: Integer;
  12. FLoadHint: TProgramHintEvent;
  13. procedure GatherDetailData(AGatherGcl: TstgGatherGcl; ASourceNode: TMeasureBillsIDTreeNode);
  14. procedure GatherSubTenderTreeNode(ANode: TsdIDTreeNode);
  15. procedure GatherSubTender(ASubTenderID: Integer);
  16. public
  17. procedure GatherTo(AGatherGclCacheData: TstgGatherGclCacheData; ASubTenders: TList);
  18. property LoadHint: TProgramHintEvent read FLoadHint write FLoadHint;
  19. end;
  20. implementation
  21. uses Math, Globals, mDataRecord, UtilMethods, SysUtils, XMLDoc, XMLIntf;
  22. { TstgSubTenderFileGatherGcl }
  23. procedure TstgSubTenderFileGatherGcl.GatherDetailData(
  24. AGatherGcl: TstgGatherGcl; ASourceNode: TMeasureBillsIDTreeNode);
  25. var
  26. vSubTender: TstgGclSubTenderStageData;
  27. begin
  28. vSubTender := AGatherGcl.SafeSubTender(FCurSubTenderID);
  29. vSubTender.AddDetail(ASourceNode);
  30. end;
  31. procedure TstgSubTenderFileGatherGcl.GatherSubTender(ASubTenderID: Integer);
  32. var
  33. vNode: TsdIDTreeNode;
  34. begin
  35. FCurSubTenderID := ASubTenderID;
  36. vNode := ProjectManager.ProjectsTree.FindNode(ASubTenderID);
  37. if vNode.Rec.ValueByName('Type').AsInteger = 1 then
  38. begin;
  39. FLoadHint(vNode.Rec.ValueByName('Name').AsString);
  40. FProjectData := OpenProjectManager.FindProjectData(ASubTenderID);
  41. try
  42. if not Assigned(FProjectData) then
  43. begin
  44. FProjectData := TProjectData.Create;
  45. FProjectData.OpenForSumUpGather(GetMyProjectsFilePath + vNode.Rec.ValueByName('FileName').AsString);
  46. end;
  47. FCacheData.AddSubTender(vNode.Rec);
  48. GatherSubTenderTreeNode(FProjectData.BillsMeasureData.BillsMeasureTree.FirstNode);
  49. finally
  50. if not Assigned(OpenProjectManager.FindProjectData(ASubTenderID)) then
  51. FProjectData.Free;
  52. end;
  53. end;
  54. end;
  55. procedure TstgSubTenderFileGatherGcl.GatherSubTenderTreeNode(
  56. ANode: TsdIDTreeNode);
  57. var
  58. vNode: TMeasureBillsIDTreeNode;
  59. vCur: TstgGatherGcl;
  60. begin
  61. if not Assigned(ANode) then Exit;
  62. vNode := TMeasureBillsIDTreeNode(ANode);
  63. if (not vNode.HasChildren) then
  64. begin
  65. if (vNode.Rec.B_Code.AsString <> '') then
  66. begin
  67. vCur := FCacheData.AddGatherGcl(vNode.Rec);
  68. GatherDetailData(vCur, vNode);
  69. end;
  70. end
  71. else
  72. GatherSubTenderTreeNode(ANode.FirstChild);
  73. GatherSubTenderTreeNode(ANode.NextSibling);
  74. end;
  75. procedure TstgSubTenderFileGatherGcl.GatherTo(AGatherGclCacheData: TstgGatherGclCacheData;
  76. ASubTenders: TList);
  77. var
  78. i, iSubTenderID: Integer;
  79. begin
  80. FCacheData := AGatherGclCacheData;
  81. for i := 0 to ASubTenders.Count - 1 do
  82. GatherSubTender(Integer(ASubTenders.Items[i]));
  83. FCacheData.CalculateAll;
  84. end;
  85. end.