MeasureGatherZJJL.pas 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. unit MeasureGatherZJJL;
  2. interface
  3. uses
  4. Classes, BillsTree;
  5. type
  6. TmgZJJLDetail = class
  7. private
  8. FRelaNode: TBillsIDTreeNode;
  9. public
  10. constructor Create(ADetailNode: TBillsIDTreeNode);
  11. destructor destroy; override;
  12. property RelaNode: TBillsIDTreeNode read FRelaNode;
  13. end;
  14. TmgZJJL = class
  15. private
  16. FB_Code: string;
  17. FName: string;
  18. FUnits: string;
  19. FPrice: Double;
  20. FGatherNode: TBillsIDTreeNode;
  21. FDetails: TList;
  22. FPegName: string;
  23. FBeginPeg: string;
  24. FBGLCode: string;
  25. FEndPeg: string;
  26. FUnitName: string;
  27. FDrawingCode: string;
  28. FFBFXName: string;
  29. function FindDetail(ADetailNode: TBillsIDTreeNode): TmgZJJLDetail;
  30. function NewDetail(ADetailNode: TMeasureBillsIDTreeNode): TmgZJJLDetail;
  31. function GetDrawingCode(ANode: TBillsIDTreeNode): string;
  32. function GetPeg(ANode: TBillsIDTreeNode): string;
  33. procedure FilterPeg;
  34. function GetDetail(AIndex: Integer): TmgZJJLDetail;
  35. function GetDetailCount: Integer;
  36. public
  37. constructor Create(ADetailNode, AGatherNode: TBillsIDTreeNode);
  38. destructor Destroy; override;
  39. function AddDetail(ADetailNode: TBillsIDTreeNode): TmgZJJLDetail;
  40. property B_Code: string read FB_Code;
  41. property Name: string read FName;
  42. property Units: string read FUnits;
  43. property Price: Double read FPrice;
  44. property GatherNode: TBillsIDTreeNode read FGatherNode;
  45. property BGLCode: string read FBGLCode;
  46. property BeginPeg: string read FBeginPeg;
  47. property EndPeg: string read FEndPeg;
  48. property DrawingCode: string read FDrawingCode;
  49. property DetailCount: Integer read GetDetailCount;
  50. property Detail[AIndex: Integer]: TmgZJJLDetail read GetDetail;
  51. end;
  52. TmgZJJLManager = class
  53. private
  54. FZJJLs: TList;
  55. function FindZJJL(ADetailNode, AGatherNode: TBillsIDTreeNode): TmgZJJL;
  56. function NewZJJL(ADetailNode, AGatherNode: TBillsIDTreeNode): TmgZJJL;
  57. function GetZJJL(AIndex: Integer): TmgZJJL;
  58. function GetZJJLCount: Integer;
  59. public
  60. constructor Create;
  61. destructor Destroy; override;
  62. function AddZJJL(ADetailNode, AGatherNode: TBillsIDTreeNode): TmgZJJL;
  63. function AddZJJLAndDetail(ADetailNode, AGatherNode: TBillsIDTreeNode): TmgZJJLDetail;
  64. property ZJJLCount: Integer read GetZJJLCount;
  65. property ZJJL[AIndex: Integer]: TmgZJJL read GetZJJL;
  66. end;
  67. implementation
  68. uses
  69. sdDB, mDataRecord, ZhAPI, UtilMethods, mPegFilter;
  70. { TmgZJJL }
  71. function TmgZJJL.AddDetail(ADetailNode: TBillsIDTreeNode): TmgZJJLDetail;
  72. begin
  73. Result := FindDetail(ADetailNode);
  74. if not Assigned(Result) then
  75. Result := NewDetail(TMeasureBillsIDTreeNode(ADetailNode));
  76. end;
  77. constructor TmgZJJL.Create(ADetailNode, AGatherNode: TBillsIDTreeNode);
  78. begin
  79. FB_Code := ADetailNode.Rec.B_Code.AsString;
  80. FName := ADetailNode.Rec.Name.AsString;
  81. FUnits := ADetailNode.Rec.Units.AsString;
  82. FPrice := ADetailNode.Rec.Price.AsFloat;
  83. FGatherNode := AGatherNode;
  84. FDetails := TList.Create;
  85. AddDetail(ADetailNode);
  86. FDrawingCode := GetDrawingCode(AGatherNode);
  87. FilterPeg;
  88. end;
  89. destructor TmgZJJL.Destroy;
  90. begin
  91. ClearObjects(FDetails);
  92. FDetails.Free;
  93. inherited;
  94. end;
  95. procedure TmgZJJL.FilterPeg;
  96. var
  97. vPegFilter: TPegStrFilter;
  98. begin
  99. vPegFilter := TPegStrFilter.Create;
  100. try
  101. vPegFilter.PegStr := GetPeg(FGatherNode);
  102. FBeginPeg := vPegFilter.BeginPeg;
  103. FEndPeg := vPegFilter.EndPeg;
  104. finally
  105. vPegFilter.Free;
  106. end;
  107. end;
  108. function TmgZJJL.FindDetail(ADetailNode: TBillsIDTreeNode): TmgZJJLDetail;
  109. var
  110. i: Integer;
  111. begin
  112. Result := nil;
  113. for i := 0 to DetailCount - 1 do
  114. begin
  115. if Detail[i].RelaNode = ADetailNode then
  116. begin
  117. Result := Detail[i];
  118. Break;
  119. end;
  120. end;
  121. end;
  122. function TmgZJJL.GetDetail(AIndex: Integer): TmgZJJLDetail;
  123. begin
  124. Result := TmgZJJLDetail(FDetails.Items[AIndex]);
  125. end;
  126. function TmgZJJL.GetDetailCount: Integer;
  127. begin
  128. Result := FDetails.Count;
  129. end;
  130. function TmgZJJL.GetDrawingCode(ANode: TBillsIDTreeNode): string;
  131. begin
  132. Result := '';
  133. if Assigned(ANode) then
  134. begin
  135. Result := ANode.Rec.DrawingCode.AsString;
  136. if Result = '' then
  137. Result := GetDrawingCode(TBillsIDTreeNode(ANode.Parent));
  138. end;
  139. end;
  140. function TmgZJJL.GetPeg(ANode: TBillsIDTreeNode): string;
  141. begin
  142. Result := '';
  143. if Assigned(ANode) then
  144. begin
  145. if CheckPeg(ANode.Rec.Name.AsString) then
  146. Result := ANode.Rec.Name.AsString
  147. else
  148. Result := GetPeg(TBillsIDTreeNode(ANode.Parent));
  149. end;
  150. end;
  151. function TmgZJJL.NewDetail(ADetailNode: TMeasureBillsIDTreeNode): TmgZJJLDetail;
  152. begin
  153. Result := TmgZJJLDetail.Create(ADetailNode);
  154. FDetails.Add(Result);
  155. if Assigned(ADetailNode.StageRec) then
  156. FBGLCode := MergeRelaBGL(FBGLCode, ADetailNode.StageRec.QcBGLCode.AsString);
  157. end;
  158. { TmgZJJLDetail }
  159. constructor TmgZJJLDetail.Create(ADetailNode: TBillsIDTreeNode);
  160. begin
  161. FRelaNode := ADetailNode;
  162. end;
  163. destructor TmgZJJLDetail.destroy;
  164. begin
  165. inherited;
  166. end;
  167. { TmgZJJLManager }
  168. function TmgZJJLManager.AddZJJL(ADetailNode,
  169. AGatherNode: TBillsIDTreeNode): TmgZJJL;
  170. begin
  171. Result := FindZJJL(ADetailNode, AGatherNode);
  172. if not Assigned(Result) then
  173. Result := NewZJJL(ADetailNode, AGatherNode);
  174. end;
  175. function TmgZJJLManager.AddZJJLAndDetail(ADetailNode,
  176. AGatherNode: TBillsIDTreeNode): TmgZJJLDetail;
  177. var
  178. vZJJL: TmgZJJL;
  179. begin
  180. vZJJL := AddZJJL(ADetailNode, AGatherNode);
  181. Result := vZJJL.AddDetail(ADetailNode);
  182. end;
  183. constructor TmgZJJLManager.Create;
  184. begin
  185. FZJJLs := TList.Create;
  186. end;
  187. destructor TmgZJJLManager.Destroy;
  188. begin
  189. ClearObjects(FZJJLs);
  190. FZJJLs.Free;
  191. inherited;
  192. end;
  193. function TmgZJJLManager.FindZJJL(ADetailNode,
  194. AGatherNode: TBillsIDTreeNode): TmgZJJL;
  195. var
  196. i: Integer;
  197. begin
  198. Result := nil;
  199. for i := 0 to ZJJLCount - 1 do
  200. begin
  201. if (ZJJL[i].B_Code = ADetailNode.Rec.B_Code.AsString) and
  202. (ZJJL[i].Name = ADetailNode.Rec.Name.AsString) and
  203. (ZJJL[i].Units = ADetailNode.Rec.Units.AsString) and
  204. (ZJJL[i].Price = ADetailNode.Rec.Price.AsFloat) and
  205. (ZJJL[i].GatherNode = AGatherNode) then
  206. begin
  207. Result := ZJJL[i];
  208. Break;
  209. end;
  210. end;
  211. end;
  212. function TmgZJJLManager.GetZJJL(AIndex: Integer): TmgZJJL;
  213. begin
  214. Result := TmgZJJL(FZJJLs.Items[AIndex]);
  215. end;
  216. function TmgZJJLManager.GetZJJLCount: Integer;
  217. begin
  218. Result := FZJJLs.Count;
  219. end;
  220. function TmgZJJLManager.NewZJJL(ADetailNode,
  221. AGatherNode: TBillsIDTreeNode): TmgZJJL;
  222. begin
  223. Result := TmgZJJL.Create(ADetailNode, AGatherNode);
  224. FZJJLs.Add(Result);
  225. end;
  226. end.