tpMainData.pas 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. unit tpMainData;
  2. interface
  3. uses
  4. Classes, tpBaseGatherData, tpSelectTenderDm, sdIDTree, tpSelectTenderNode,
  5. tpPartTender, tpPartTenderSet;
  6. type
  7. TtpMainData = class
  8. private
  9. FHistoryTenders: TList;
  10. FTenders: TList;
  11. // Memory DataSet -- For Display
  12. // Display FTenders
  13. FSelectTenderData: TtpSelectTenderData;
  14. FBaseGatherData: TtpBaseGatherData;
  15. FPartTrial: TtpPartTender;
  16. FPartTenderSet: TtpPartTenderSet;
  17. procedure ClearAllHistoryData;
  18. public
  19. constructor Create;
  20. destructor Destroy; override;
  21. procedure GatherProjects(AProjects: TList);
  22. procedure TrialPeg;
  23. procedure PricePart;
  24. procedure PegPart;
  25. property Tenders: TList read FTenders;
  26. property SelectTenderData: TtpSelectTenderData read FSelectTenderData;
  27. property BaseGatherData: TtpBaseGatherData read FBaseGatherData;
  28. property PartTrial: TtpPartTender read FPartTrial;
  29. property PartTenderSet: TtpPartTenderSet read FPartTenderSet;
  30. end;
  31. implementation
  32. uses
  33. ZhAPI, Globals, mPegFilter, tpTrialPegInputFrm, UtilMethods,
  34. Math;
  35. { TtpMainData }
  36. procedure TtpMainData.ClearAllHistoryData;
  37. begin
  38. FTenders.Clear;
  39. FPartTrial.Clear;
  40. end;
  41. constructor TtpMainData.Create;
  42. begin
  43. FHistoryTenders := TList.Create;
  44. FTenders := TList.Create;
  45. FSelectTenderData := TtpSelectTenderData.Create(nil);
  46. FBaseGatherData := TtpBaseGatherData.Create;
  47. FPartTrial := TtpPartTender.Create;
  48. FPartTenderSet := TtpPartTenderSet.Create;
  49. end;
  50. destructor TtpMainData.Destroy;
  51. begin
  52. FPartTenderSet.Free;
  53. FPartTrial.Free;
  54. FBaseGatherData.Free;
  55. FSelectTenderData.Free;
  56. ClearObjects(FTenders);
  57. FTenders.Free;
  58. FHistoryTenders.Free;
  59. inherited;
  60. end;
  61. procedure TtpMainData.GatherProjects(AProjects: TList);
  62. function SortTenders(AItem1, AItem2: Pointer): Integer;
  63. begin
  64. Result := TtpSelectTenderNode(AItem1).SerialNo - TtpSelectTenderNode(AItem2).SerialNo;
  65. end;
  66. procedure FilterTenders;
  67. var
  68. i: Integer;
  69. stnNode: TsdIDTreeNode;
  70. vTender: TtpSelectTenderNode;
  71. begin
  72. for i := 0 to AProjects.Count - 1 do
  73. begin
  74. stnNode := ProjectManager.ProjectsTree.FindNode(Integer(AProjects.Items[i]));
  75. if Assigned(stnNode) and (stnNode.Rec.ValueByName('Type').AsInteger = 1) then
  76. begin
  77. vTender := TtpSelectTenderNode.Create(stnNode);
  78. FTenders.Add(vTender);
  79. FTenders.Sort(@SortTenders);
  80. end;
  81. end;
  82. end;
  83. function CheckSameTenders: Boolean;
  84. var
  85. i: Integer;
  86. vOrg, vNew: TtpSelectTenderNode;
  87. begin
  88. if FHistoryTenders.Count = FTenders.Count then
  89. begin
  90. Result := True;
  91. for i := 0 to FHistoryTenders.Count - 1 do
  92. begin
  93. vOrg := TtpSelectTenderNode(FHistoryTenders.Items[i]);
  94. vNew := TtpSelectTenderNode(FTenders.Items[i]);
  95. if vOrg.ID <> vNew.ID then
  96. begin
  97. Result := False;
  98. Break;
  99. end;
  100. end;
  101. end
  102. else
  103. Result := False;
  104. end;
  105. begin
  106. ClearAllHistoryData;
  107. FilterTenders;
  108. if not CheckSameTenders then
  109. begin
  110. FBaseGatherData.GatherTenders(FTenders);
  111. FSelectTenderData.AssignSelectTenders(FTenders);
  112. ClearObjects(FHistoryTenders);
  113. FHistoryTenders.Assign(FTenders);
  114. end;
  115. end;
  116. procedure TtpMainData.PegPart;
  117. begin
  118. if FBaseGatherData.Pegs.Count > 0 then
  119. FPartTenderSet.PegPart(FBaseGatherData.Pegs)
  120. else
  121. WarningMessage('无桩号数据,无法划分');
  122. end;
  123. procedure TtpMainData.PricePart;
  124. begin
  125. if FBaseGatherData.Pegs.TotalPrice > 0 then
  126. FPartTenderSet.PricePart(FBaseGatherData.Pegs)
  127. else
  128. WarningMessage('当前可划分的桩号节点金额为0,无法通过金额模式进行划分。');
  129. end;
  130. procedure TtpMainData.TrialPeg;
  131. var
  132. sPeg: string;
  133. begin
  134. if InputTrialPeg(sPeg) then
  135. begin
  136. PegFilter.Filter(sPeg);
  137. FPartTrial.FilterPegs(PegFilter, BaseGatherData.Pegs);
  138. end;
  139. end;
  140. end.