TenderBackupDm.pas 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. unit TenderBackupDm;
  2. interface
  3. uses
  4. SysUtils, Classes, ADODB, sdDB, sdProvider, Variants;
  5. type
  6. TTenderBackupData = class(TDataModule)
  7. sdpTenderBackup: TsdADOProvider;
  8. sddTenderBackup: TsdDataSet;
  9. sdvTenderBackup: TsdDataView;
  10. sdvSearchTB: TsdDataView;
  11. procedure sdvTenderBackupFilterRecord(ARecord: TsdDataRecord;
  12. var Allow: Boolean);
  13. procedure sdvTenderBackupGetText(var Text: String;
  14. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  15. DisplayText: Boolean);
  16. private
  17. FProjectID: Integer;
  18. FNewID: Integer;
  19. function TenderBackupCount(AProjectID, AType: Integer): Integer;
  20. function NewTenderBackup(AProjectID, AType: Integer): TsdDataRecord;
  21. function OldestTenderBackup(AProjectID, AType: Integer): TsdDataRecord;
  22. function AddTenderBackup(AProjectID, AType: Integer): TsdDataRecord;
  23. procedure SetProjectID(const Value: Integer);
  24. public
  25. procedure Open(AConnection: TADOConnection);
  26. procedure Save;
  27. function AddOpenTenderBackup(AProjectID: Integer): TsdDataRecord;
  28. function AddSaveTenderBackup(AProjectID: Integer): TsdDataRecord;
  29. function HasTodayOpenTenderBackup(AProjectID: Integer): Boolean;
  30. property ProjectID: Integer read FProjectID write SetProjectID;
  31. end;
  32. implementation
  33. uses DateUtils;
  34. {$R *.dfm}
  35. { TTenderBackupData }
  36. procedure TTenderBackupData.Open(AConnection: TADOConnection);
  37. var
  38. idxID: TsdIndex;
  39. begin
  40. sdpTenderBackup.Connection := AConnection;
  41. sddTenderBackup.Open;
  42. sddTenderBackup.AddIndex('idxID', 'ID');
  43. sddTenderBackup.AddIndex('idxFilter', 'ProjectID;Type');
  44. sddTenderBackup.AddIndex('idxView', 'ProjectID;Type;ID');
  45. sdvTenderBackup.Open;
  46. sdvTenderBackup.IndexName := 'idxView';
  47. sdvSearchTB.Open;
  48. sdvSearchTB.IndexName := 'idxFilter';
  49. if sddTenderBackup.RecordCount > 0 then
  50. begin
  51. idxID := sddTenderBackup.FindIndex('idxID');
  52. FNewID := idxID.Records[sddTenderBackup.RecordCount - 1].ValueByName('ID').AsInteger + 1;
  53. end
  54. else
  55. FNewID := 1;
  56. end;
  57. procedure TTenderBackupData.Save;
  58. begin
  59. sddTenderBackup.Save;
  60. end;
  61. procedure TTenderBackupData.SetProjectID(const Value: Integer);
  62. begin
  63. FProjectID := Value;
  64. sdvTenderBackup.RefreshFilter;
  65. end;
  66. procedure TTenderBackupData.sdvTenderBackupFilterRecord(
  67. ARecord: TsdDataRecord; var Allow: Boolean);
  68. begin
  69. Allow := ARecord.ValueByName('ProjectID').AsInteger = ProjectID;
  70. end;
  71. function TTenderBackupData.TenderBackupCount(AProjectID,
  72. AType: Integer): Integer;
  73. var
  74. idx: TsdIndex;
  75. iFirst, iLast: Integer;
  76. Rec: TsdDataRecord;
  77. begin
  78. Result := 0;
  79. sdvSearchTB.IndexName := 'idxFilter';
  80. sdvSearchTB.SetRange([AProjectID, AType], [AProjectID, AType]);
  81. Result := sdvSearchTB.RecordCount;
  82. sdvSearchTB.CancelRange;
  83. { idx := sddTenderBackup.FindIndex('idxFilter');
  84. iFirst := idx.FindKeyIndex(VarArrayOf([AProjectID, AType]));
  85. iLast := idx.FindKeyLastIndex(VarArrayOf([AProjectID, AType]));
  86. if iFirst > 0 then
  87. Result := iLast - iFirst + 1;}
  88. end;
  89. function TTenderBackupData.AddOpenTenderBackup(
  90. AProjectID: Integer): TsdDataRecord;
  91. begin
  92. Result := AddTenderBackup(AProjectID, 1);
  93. end;
  94. function TTenderBackupData.AddSaveTenderBackup(
  95. AProjectID: Integer): TsdDataRecord;
  96. begin
  97. Result := AddTenderBackup(AProjectID, 0);
  98. end;
  99. function TTenderBackupData.AddTenderBackup(AProjectID,
  100. AType: Integer): TsdDataRecord;
  101. var
  102. iCount: Integer;
  103. begin
  104. iCount := TenderBackupCount(AProjectID, AType);
  105. if iCount < 5 then
  106. Result := NewTenderBackup(AProjectID, AType)
  107. else
  108. Result := OldestTenderBackup(AProjectID, AType);
  109. end;
  110. function TTenderBackupData.NewTenderBackup(AProjectID,
  111. AType: Integer): TsdDataRecord;
  112. var
  113. iCount: Integer;
  114. begin
  115. iCount := TenderBackupCount(AProjectID, AType);
  116. Result := sddTenderBackup.Add;
  117. Result.ValueByName('ID').AsInteger := FNewID;
  118. Inc(FNewID);
  119. Result.ValueByName('ProjectID').AsInteger := FProjectID;
  120. Result.ValueByName('Type').AsInteger := AType;
  121. if AType = 0 then
  122. Result.ValueByName('FileName').AsString := Format('s%d.mtf', [iCount + 1])
  123. else
  124. Result.ValueByName('FileName').AsString := Format('o%d.mtf', [iCount + 1]);
  125. end;
  126. function TTenderBackupData.OldestTenderBackup(AProjectID,
  127. AType: Integer): TsdDataRecord;
  128. var
  129. idx: TsdIndex;
  130. iIndex, iFirst, iLast: Integer;
  131. Rec: TsdDataRecord;
  132. begin
  133. idx := sddTenderBackup.FindIndex('idxFilter');
  134. iFirst := idx.FindKeyIndex(VarArrayOf([AProjectID, AType]));
  135. iLast := idx.FindKeyLastIndex(VarArrayOf([AProjectID, AType]));
  136. Result := idx.Records[iFirst];
  137. for iIndex := iFirst + 1 to iLast do
  138. begin
  139. Rec := idx.Records[iIndex];
  140. if Result.ValueByName('CreateDateTime').AsDateTime > Rec.ValueByName('CreateDateTime').AsDateTime then
  141. Result := Rec;
  142. end;
  143. end;
  144. function TTenderBackupData.HasTodayOpenTenderBackup(
  145. AProjectID: Integer): Boolean;
  146. var
  147. idx: TsdIndex;
  148. iIndex, iFirst, iLast: Integer;
  149. Rec: TsdDataRecord;
  150. begin
  151. Result := False;
  152. sdvSearchTB.IndexName := 'idxFilter';
  153. sdvSearchTB.SetRange([AProjectID, 1], [AProjectID, 1]);
  154. for iIndex := 0 to sdvSearchTB.RecordCount - 1 do
  155. begin
  156. Rec := sdvSearchTB.Records[iIndex];
  157. if Date = Trunc(Rec.ValueByName('CreateDateTime').AsDateTime) then
  158. begin
  159. Result := True;
  160. Break;
  161. end;
  162. end;
  163. sdvSearchTB.CancelRange;
  164. {idx := sddTenderBackup.FindIndex('idxFilter');
  165. iFirst := idx.FindKeyIndex(VarArrayOf([AProjectID, 1]));
  166. iLast := idx.FindKeyLastIndex(VarArrayOf([AProjectID, 1]));
  167. if iFirst = -1 then Exit;
  168. for iIndex := iFirst to iLast do
  169. begin
  170. Rec := idx.Records[iIndex];
  171. if Date = Trunc(Rec.ValueByName('CreateDateTime').AsDateTime) then
  172. begin
  173. Result := True;
  174. Break;
  175. end;
  176. end;}
  177. end;
  178. procedure TTenderBackupData.sdvTenderBackupGetText(var Text: String;
  179. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  180. DisplayText: Boolean);
  181. begin
  182. if SameText(AValue.FieldName, 'Type') then
  183. begin
  184. if AValue.AsInteger = 0 then
  185. Text := '±£´æ±¸·Ýµã'
  186. else if AValue.AsInteger = 1 then
  187. Text := '´ò¿ª±¸·Ýµã';
  188. end
  189. else if SameText(AValue.FieldName, 'CreateDateTime') then
  190. begin
  191. Text := DateTimeToStr(AValue.AsDateTime);
  192. end;
  193. end;
  194. end.