stgGatherDm.pas 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. unit stgGatherDm;
  2. interface
  3. uses
  4. SysUtils, Classes, stgGatherCacheData, sdDB, sdProvider;
  5. type
  6. TstgGatherData = class(TDataModule)
  7. smpGatherTree: TsdMemoryProvider;
  8. sddGatherTree: TsdDataSet;
  9. sdvGatherTree: TsdDataView;
  10. smpSubTenders: TsdMemoryProvider;
  11. sddSubTenders: TsdDataSet;
  12. sdvSubTenders: TsdDataView;
  13. smpBillsDetail: TsdMemoryProvider;
  14. sddBillsDetail: TsdDataSet;
  15. sdvBillsDetail: TsdDataView;
  16. sdmErrorDetail: TsdMemoryProvider;
  17. sddErrorDetail: TsdDataSet;
  18. sdvErrorDetail: TsdDataView;
  19. procedure sdvBillsDetailGetText(var Text: String;
  20. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  21. DisplayText: Boolean);
  22. procedure sdvBillsDetailFilterRecord(ARecord: TsdDataRecord;
  23. var Allow: Boolean);
  24. procedure sdvGatherTreeCurrentChanged(ARecord: TsdDataRecord);
  25. procedure sdvGatherTreeGetText(var Text: String;
  26. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  27. DisplayText: Boolean);
  28. procedure sdvErrorDetailFilterRecord(ARecord: TsdDataRecord;
  29. var Allow: Boolean);
  30. procedure sdvSubTendersCurrentChanged(ARecord: TsdDataRecord);
  31. procedure sdvErrorDetailGetText(var Text: String;
  32. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  33. DisplayText: Boolean);
  34. private
  35. procedure LoadSubTenders(ACacheData: TstgGatherCacheData);
  36. procedure LoadGatherTreeNodeDetail(ANode: TstgGatherTreeNode);
  37. procedure LoadGatherTreeNode(ANode: TstgGatherTreeNode);
  38. procedure LoadGatherTree(ACacheData: TstgGatherCacheData);
  39. procedure LoadError(AError: TstgErrorInfo);
  40. procedure LoadErrors(ACacheData: TstgGatherCacheData);
  41. public
  42. procedure LoadGatherData(ACacheData: TstgGatherCacheData);
  43. end;
  44. implementation
  45. uses
  46. Variants, DB, ConditionalDefines;
  47. {$R *.dfm}
  48. { TstgGatherData }
  49. procedure TstgGatherData.LoadGatherData(ACacheData: TstgGatherCacheData);
  50. begin
  51. LoadSubTenders(ACacheData);
  52. LoadGatherTree(ACacheData);
  53. LoadErrors(ACacheData);
  54. sdvGatherTree.Active := True;
  55. sdvBillsDetail.Active := True;
  56. sdvBillsDetail.RefreshFilter;
  57. sdvSubTenders.Active := True;
  58. sdvErrorDetail.Active := True;
  59. sdvErrorDetail.RefreshFilter;
  60. end;
  61. procedure TstgGatherData.LoadGatherTree(ACacheData: TstgGatherCacheData);
  62. var
  63. i: Integer;
  64. vNode:TstgGatherTreeNode;
  65. begin
  66. if _IsDebugView then
  67. ACacheData.GatherTree.SaveTreeToFile('E:\stgGatherTree.txt');
  68. for i := 0 to ACacheData.GatherTree.CacheNodes.Count - 1 do
  69. begin
  70. vNode := TstgGatherTreeNode(ACacheData.GatherTree.CacheNodes.Items[i]);
  71. LoadGatherTreeNode(vNode);
  72. end;
  73. end;
  74. procedure TstgGatherData.LoadGatherTreeNode(ANode: TstgGatherTreeNode);
  75. var
  76. Rec: TsdDataRecord;
  77. begin
  78. Rec := sddGatherTree.Add;
  79. Rec.ValueByName('ID').AsInteger := ANode.ID;
  80. Rec.ValueByName('ParentID').AsInteger := ANode.ParentID;
  81. Rec.ValueByName('NextSiblingID').AsInteger := ANode.NextSiblingID;
  82. Rec.ValueByName('Code').AsString := ANode.Code;
  83. Rec.ValueByName('B_Code').AsString := ANode.B_Code;
  84. Rec.ValueByName('Name').AsString := ANode.Name;
  85. Rec.ValueByName('Units').AsString := ANode.Units;
  86. Rec.ValueByName('IsSubTender').AsBoolean := ANode.IsSubTender;
  87. Rec.ValueByName('DealQuantity').AsFloat := ANode.Gather.DealQuantity;
  88. Rec.ValueByName('DealTotalPrice').AsFloat := ANode.Gather.DealTotalPrice;
  89. Rec.ValueByName('QcQuantity').AsFloat := ANode.Gather.QcQuantity;
  90. Rec.ValueByName('QcTotalPrice').AsFloat := ANode.Gather.QcTotalPrice;
  91. Rec.ValueByName('QcBGLCode').AsString := ANode.Gather.QcBGLCode;
  92. Rec.ValueByName('QcBGLNum').AsString := ANode.Gather.QcBGLNum;
  93. if ANode.Children.Count = 0 then
  94. LoadGatherTreeNodeDetail(ANode);
  95. end;
  96. procedure TstgGatherData.LoadGatherTreeNodeDetail(
  97. ANode: TstgGatherTreeNode);
  98. var
  99. iSub, iDetail: Integer;
  100. vSub: TstgSubTenderStageData;
  101. vDetail: TstgSubTenderDetailData;
  102. Rec: TsdDataRecord;
  103. sSubTenderName: string;
  104. begin
  105. for iSub := 0 to ANode.SubTenderCount - 1 do
  106. begin
  107. vSub := ANode.SubTender[iSub];
  108. for iDetail := 0 to vSub.DetailCount - 1 do
  109. begin
  110. vDetail := vSub.Detail[iDetail];
  111. Rec := sddBillsDetail.Add;
  112. Rec.ValueByName('BillsID').AsInteger := ANode.ID;
  113. Rec.ValueByName('TenderID').AsInteger := vSub.SubTenderID;
  114. Rec.ValueByName('TenderName').AsString := '';
  115. Rec.ValueByName('SerialNo').AsInteger := vDetail.SerialNo;
  116. Rec.ValueByName('DealQuantity').AsFloat := vDetail.DetailStage.DealQuantity;
  117. Rec.ValueByName('DealTotalPrice').AsFloat := vDetail.DetailStage.DealTotalPrice;
  118. Rec.ValueByName('QcQuantity').AsFloat := vDetail.DetailStage.QcQuantity;
  119. Rec.ValueByName('QcTotalPrice').AsFloat := vDetail.DetailStage.QcTotalPrice;
  120. Rec.ValueByName('QcBGLCode').AsString := vDetail.DetailStage.QcBGLCode;
  121. Rec.ValueByName('QcBGLNum').AsString := vDetail.DetailStage.QcBGLNum;
  122. end;
  123. end;
  124. end;
  125. procedure TstgGatherData.LoadSubTenders(ACacheData: TstgGatherCacheData);
  126. var
  127. i: Integer;
  128. vSubTender: TstgGatherSubTender;
  129. Rec: TsdDataRecord;
  130. begin
  131. for i := 0 to ACacheData.SubTenderCount - 1 do
  132. begin
  133. vSubTender := ACacheData.SubTender[i];
  134. Rec := sddSubTenders.Add;
  135. Rec.ValueByName('ID').AsInteger := vSubTender.ID;
  136. Rec.ValueByName('Name').AsString := vSubTender.Rec.ValueByName('Name').AsString;
  137. end;
  138. end;
  139. procedure TstgGatherData.sdvBillsDetailGetText(var Text: String;
  140. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  141. DisplayText: Boolean);
  142. function GetTenderName(ATenderID: Integer): string;
  143. begin
  144. Result := VarToStrDef(sddSubTenders.Lookup('ID', ATenderID, 'Name'), '');
  145. end;
  146. begin
  147. if DisplayText and (AColumn.FieldName = 'TenderName') then
  148. Text := GetTenderName(ARecord.ValueByName('TenderID').asInteger);
  149. end;
  150. procedure TstgGatherData.sdvBillsDetailFilterRecord(ARecord: TsdDataRecord;
  151. var Allow: Boolean);
  152. begin
  153. if Assigned(sdvGatherTree.Current) then
  154. Allow := ARecord.ValueByName('BillsID').AsInteger = sdvGatherTree.Current.ValueByName('ID').AsInteger
  155. else
  156. Allow := False;
  157. end;
  158. procedure TstgGatherData.sdvGatherTreeCurrentChanged(
  159. ARecord: TsdDataRecord);
  160. begin
  161. sdvBillsDetail.RefreshFilter;
  162. end;
  163. procedure TstgGatherData.sdvGatherTreeGetText(var Text: String;
  164. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  165. DisplayText: Boolean);
  166. begin
  167. if (AValue.DataType = ftFloat) and (AValue.AsFloat = 0) then
  168. begin
  169. Text := '';
  170. end;
  171. end;
  172. procedure TstgGatherData.LoadErrors(ACacheData: TstgGatherCacheData);
  173. var
  174. i: Integer;
  175. begin
  176. for i := 0 to ACacheData.ErrorCount - 1 do
  177. LoadError(ACacheData.Error[i]);
  178. end;
  179. procedure TstgGatherData.sdvErrorDetailFilterRecord(ARecord: TsdDataRecord;
  180. var Allow: Boolean);
  181. begin
  182. if Assigned(sdvSubTenders.Current) then
  183. Allow := ARecord.ValueByName('TenderID').AsInteger = sdvSubTenders.Current.ValueByName('ID').AsInteger
  184. else
  185. Allow := False;
  186. end;
  187. procedure TstgGatherData.LoadError(AError: TstgErrorInfo);
  188. var
  189. i, j, k: Integer;
  190. vRelaDetail: TstgGatherTreeNode;
  191. vRelaDetailStage: TstgSubTenderStageData;
  192. Rec: TsdDataRecord;
  193. begin
  194. for i := 0 to AError.DetailCount - 1 do
  195. begin
  196. vRelaDetail := AError.Detail[i];
  197. for j := 0 to vRelaDetail.SubTenderCount - 1 do
  198. begin
  199. vRelaDetailStage := vRelaDetail.SubTender[j];
  200. for k := 0 to vRelaDetailStage.DetailCount - 1 do
  201. begin
  202. Rec := sddErrorDetail.Add;
  203. Rec.ValueByName('TenderID').AsInteger := vRelaDetail.SubTender[j].SubTenderID;
  204. Rec.ValueByName('RelaCode').AsString := AError.RelaNode.Code + AError.RelaNode.B_Code;
  205. Rec.ValueByName('DetailCode').AsString := vRelaDetail.Code + vRelaDetail.B_Code;
  206. Rec.ValueByName('DetailSerialNo').AsInteger := vRelaDetailStage.Detail[k].SerialNo;
  207. Rec.ValueByName('ErrorType').AsInteger := AError.ErrorType;
  208. end;
  209. end;
  210. end;
  211. end;
  212. procedure TstgGatherData.sdvSubTendersCurrentChanged(
  213. ARecord: TsdDataRecord);
  214. begin
  215. sdvErrorDetail.RefreshFilter;
  216. end;
  217. procedure TstgGatherData.sdvErrorDetailGetText(var Text: String;
  218. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  219. DisplayText: Boolean);
  220. function GetTenderName(ATenderID: Integer): string;
  221. begin
  222. Result := VarToStrDef(sddSubTenders.Lookup('ID', ATenderID, 'Name'), '');
  223. end;
  224. function GetErrorTypeText(AErrorType: Integer): string;
  225. begin
  226. case AErrorType of
  227. iErrorXmjAdd: Result := '劤藤';
  228. iErrorXmjDiff: Result := '닸瞳谿뵀꼇谿츰(데貫)';
  229. iErrorXmjLess: Result := '만淃淃커쌘,꿔늴�黨悧관';
  230. iErrorGclAdd: Result := '劤藤';
  231. iErrorGclDiff: Result := '닸瞳谿뵀꼇谿츰(데貫)';
  232. iErrorGclMore: Result := '묏넋좆헌데,꿔늴뜩黨悧관';
  233. iErrorGclLess: Result := '묏넋좆헌데,꿔늴�黨悧관';
  234. end;
  235. end;
  236. begin
  237. if DisplayText then
  238. begin
  239. if (AColumn.FieldName = 'TenderName') then
  240. Text := GetTenderName(ARecord.ValueByName('TenderID').asInteger)
  241. else if (AColumn.FieldName = 'ErrorType') then
  242. Text := GetErrorTypeText(AValue.AsInteger);
  243. end;
  244. end;
  245. end.