stgGclGatherDm.pas 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. unit stgGclGatherDm;
  2. // ½á¹ûչʾ£¬ÄÚ´æ±í
  3. interface
  4. uses
  5. SysUtils, Classes, stgGatherGclCacheData, sdDB, sdProvider, stgGatherUtils;
  6. type
  7. TstgGclGatherData = class(TDataModule)
  8. smpGatherGcl: TsdMemoryProvider;
  9. sddGatherGcl: TsdDataSet;
  10. sdvGatherGcl: TsdDataView;
  11. smpSubTenders: TsdMemoryProvider;
  12. sddSubTenders: TsdDataSet;
  13. sdvSubTenders: TsdDataView;
  14. smpBillsDetail: TsdMemoryProvider;
  15. sddBillsDetail: TsdDataSet;
  16. sdvBillsDetail: TsdDataView;
  17. sdmErrorDetail: TsdMemoryProvider;
  18. sddErrorDetail: TsdDataSet;
  19. sdvErrorDetail: TsdDataView;
  20. procedure sdvBillsDetailGetText(var Text: String;
  21. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  22. DisplayText: Boolean);
  23. procedure sdvBillsDetailFilterRecord(ARecord: TsdDataRecord;
  24. var Allow: Boolean);
  25. procedure sdvGatherGclCurrentChanged(ARecord: TsdDataRecord);
  26. procedure sdvGatherGclGetText(var Text: String;
  27. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  28. DisplayText: Boolean);
  29. procedure sdvErrorDetailFilterRecord(ARecord: TsdDataRecord;
  30. var Allow: Boolean);
  31. procedure sdvSubTendersCurrentChanged(ARecord: TsdDataRecord);
  32. procedure sdvErrorDetailGetText(var Text: String;
  33. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  34. DisplayText: Boolean);
  35. private
  36. procedure LoadSubTenders(ACacheData: TstgGatherGclCacheData);
  37. procedure LoadGatherGclDetail(AGcl: TstgGatherGcl);
  38. procedure LoadGatherGcl(AGcl: TstgGatherGcl);
  39. procedure LoadGatherGcls(ACacheData: TstgGatherGclCacheData);
  40. public
  41. procedure LoadGatherData(ACacheData: TstgGatherGclCacheData);
  42. end;
  43. implementation
  44. uses
  45. Variants, DB, ConditionalDefines;
  46. {$R *.dfm}
  47. { TstgGatherData }
  48. procedure TstgGclGatherData.LoadGatherData(ACacheData: TstgGatherGclCacheData);
  49. begin
  50. LoadSubTenders(ACacheData);
  51. LoadGatherGcls(ACacheData);
  52. if not Assigned(sddGatherGcl.FindIndex('idxIndexCode')) then
  53. sddGatherGcl.AddIndex('idxIndexCode', 'IndexCode');
  54. sdvGatherGcl.Active := True;
  55. sdvGatherGcl.IndexName := 'idxIndexCode';
  56. sdvBillsDetail.Active := True;
  57. sdvBillsDetail.RefreshFilter;
  58. sdvSubTenders.Active := True;
  59. end;
  60. procedure TstgGclGatherData.LoadGatherGcls(ACacheData: TstgGatherGclCacheData);
  61. var
  62. i: Integer;
  63. begin
  64. for i := 0 to ACacheData.GatherGclCount - 1 do
  65. LoadGatherGcl(ACacheData.GatherGcl[i]);
  66. end;
  67. procedure TstgGclGatherData.LoadGatherGcl(AGcl: TstgGatherGcl);
  68. var
  69. Rec: TsdDataRecord;
  70. begin
  71. Rec := sddGatherGcl.Add;
  72. Rec.ValueByName('ID').AsInteger := AGcl.ID;
  73. Rec.ValueByName('B_Code').AsString := AGcl.B_Code;
  74. Rec.ValueByName('IndexCode').AsString := AGcl.IndexCode;
  75. Rec.ValueByName('Name').AsString := AGcl.Name;
  76. Rec.ValueByName('Units').AsString := AGcl.Units;
  77. Rec.ValueByName('Price').AsFloat := AGcl.Price;
  78. Rec.ValueByName('DealQuantity').AsFloat := AGcl.Gather.DealQuantity;
  79. Rec.ValueByName('DealTotalPrice').AsFloat := AGcl.Gather.DealTotalPrice;
  80. Rec.ValueByName('QcQuantity').AsFloat := AGcl.Gather.QcQuantity;
  81. Rec.ValueByName('QcTotalPrice').AsFloat := AGcl.Gather.QcTotalPrice;
  82. Rec.ValueByName('QcBGLCode').AsString := AGcl.Gather.QcBGLCode;
  83. Rec.ValueByName('QcBGLNum').AsString := AGcl.Gather.QcBGLNum;
  84. LoadGatherGclDetail(AGcl);
  85. end;
  86. procedure TstgGclGatherData.LoadGatherGclDetail(
  87. AGcl: TstgGatherGcl);
  88. var
  89. iSub, iDetail: Integer;
  90. vSub: TstgGclSubTenderStageData;
  91. vDetail: TstgGclSubTenderDetailData;
  92. Rec: TsdDataRecord;
  93. sSubTenderName: string;
  94. begin
  95. for iSub := 0 to AGcl.SubTenderCount - 1 do
  96. begin
  97. vSub := AGcl.SubTender[iSub];
  98. for iDetail := 0 to vSub.DetailCount - 1 do
  99. begin
  100. vDetail := vSub.Detail[iDetail];
  101. Rec := sddBillsDetail.Add;
  102. Rec.ValueByName('BillsID').AsInteger := AGcl.ID;
  103. Rec.ValueByName('TenderID').AsInteger := vSub.SubTenderID;
  104. Rec.ValueByName('TenderName').AsString := '';
  105. Rec.ValueByName('SerialNo').AsInteger := vDetail.SerialNo;
  106. Rec.ValueByName('DealQuantity').AsFloat := vDetail.DetailStage.DealQuantity;
  107. Rec.ValueByName('DealTotalPrice').AsFloat := vDetail.DetailStage.DealTotalPrice;
  108. Rec.ValueByName('QcQuantity').AsFloat := vDetail.DetailStage.QcQuantity;
  109. Rec.ValueByName('QcTotalPrice').AsFloat := vDetail.DetailStage.QcTotalPrice;
  110. Rec.ValueByName('QcBGLCode').AsString := vDetail.DetailStage.QcBGLCode;
  111. Rec.ValueByName('QcBGLNum').AsString := vDetail.DetailStage.QcBGLNum;
  112. end;
  113. end;
  114. end;
  115. procedure TstgGclGatherData.LoadSubTenders(ACacheData: TstgGatherGclCacheData);
  116. var
  117. i: Integer;
  118. vSubTender: TstgGatherGclSubTender;
  119. Rec: TsdDataRecord;
  120. begin
  121. for i := 0 to ACacheData.SubTenderCount - 1 do
  122. begin
  123. vSubTender := ACacheData.SubTender[i];
  124. Rec := sddSubTenders.Add;
  125. Rec.ValueByName('ID').AsInteger := vSubTender.ID;
  126. Rec.ValueByName('Name').AsString := vSubTender.Rec.ValueByName('Name').AsString;
  127. end;
  128. end;
  129. procedure TstgGclGatherData.sdvBillsDetailGetText(var Text: String;
  130. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  131. DisplayText: Boolean);
  132. function GetTenderName(ATenderID: Integer): string;
  133. begin
  134. Result := VarToStrDef(sddSubTenders.Lookup('ID', ATenderID, 'Name'), '');
  135. end;
  136. begin
  137. if DisplayText and (AColumn.FieldName = 'TenderName') then
  138. Text := GetTenderName(ARecord.ValueByName('TenderID').asInteger);
  139. end;
  140. procedure TstgGclGatherData.sdvBillsDetailFilterRecord(ARecord: TsdDataRecord;
  141. var Allow: Boolean);
  142. begin
  143. if Assigned(sdvGatherGcl.Current) then
  144. Allow := ARecord.ValueByName('BillsID').AsInteger = sdvGatherGcl.Current.ValueByName('ID').AsInteger
  145. else
  146. Allow := False;
  147. end;
  148. procedure TstgGclGatherData.sdvGatherGclCurrentChanged(
  149. ARecord: TsdDataRecord);
  150. begin
  151. sdvBillsDetail.RefreshFilter;
  152. end;
  153. procedure TstgGclGatherData.sdvGatherGclGetText(var Text: String;
  154. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  155. DisplayText: Boolean);
  156. begin
  157. if (AValue.DataType = ftFloat) and (AValue.AsFloat = 0) then
  158. begin
  159. Text := '';
  160. end;
  161. end;
  162. procedure TstgGclGatherData.sdvErrorDetailFilterRecord(ARecord: TsdDataRecord;
  163. var Allow: Boolean);
  164. begin
  165. if Assigned(sdvSubTenders.Current) then
  166. Allow := ARecord.ValueByName('TenderID').AsInteger = sdvSubTenders.Current.ValueByName('ID').AsInteger
  167. else
  168. Allow := False;
  169. end;
  170. procedure TstgGclGatherData.sdvSubTendersCurrentChanged(
  171. ARecord: TsdDataRecord);
  172. begin
  173. sdvErrorDetail.RefreshFilter;
  174. end;
  175. procedure TstgGclGatherData.sdvErrorDetailGetText(var Text: String;
  176. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  177. DisplayText: Boolean);
  178. function GetTenderName(ATenderID: Integer): string;
  179. begin
  180. Result := VarToStrDef(sddSubTenders.Lookup('ID', ATenderID, 'Name'), '');
  181. end;
  182. begin
  183. if DisplayText then
  184. begin
  185. if (AColumn.FieldName = 'TenderName') then
  186. Text := GetTenderName(ARecord.ValueByName('TenderID').asInteger)
  187. else if (AColumn.FieldName = 'ErrorType') then
  188. Text := GetErrorTypeText(AValue.AsInteger);
  189. end;
  190. end;
  191. end.