123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- unit TenderBackupDm;
- interface
- uses
- SysUtils, Classes, ADODB, sdDB, sdProvider, Variants;
- type
- TTenderBackupData = class(TDataModule)
- sdpTenderBackup: TsdADOProvider;
- sddTenderBackup: TsdDataSet;
- sdvTenderBackup: TsdDataView;
- sdvSearchTB: TsdDataView;
- procedure sdvTenderBackupFilterRecord(ARecord: TsdDataRecord;
- var Allow: Boolean);
- procedure sdvTenderBackupGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- private
- FProjectID: Integer;
- FNewID: Integer;
- function TenderBackupCount(AProjectID, AType: Integer): Integer;
- function NewTenderBackup(AProjectID, AType: Integer): TsdDataRecord;
- function OldestTenderBackup(AProjectID, AType: Integer): TsdDataRecord;
- function AddTenderBackup(AProjectID, AType: Integer): TsdDataRecord;
- procedure SetProjectID(const Value: Integer);
- public
- procedure Open(AConnection: TADOConnection);
- procedure Save;
- function AddOpenTenderBackup(AProjectID: Integer): TsdDataRecord;
- function AddSaveTenderBackup(AProjectID: Integer): TsdDataRecord;
- function HasTodayOpenTenderBackup(AProjectID: Integer): Boolean;
- property ProjectID: Integer read FProjectID write SetProjectID;
- end;
- implementation
- uses DateUtils;
- {$R *.dfm}
- { TTenderBackupData }
- procedure TTenderBackupData.Open(AConnection: TADOConnection);
- var
- idxID: TsdIndex;
- begin
- sdpTenderBackup.Connection := AConnection;
- sddTenderBackup.Open;
- sddTenderBackup.AddIndex('idxID', 'ID');
- sddTenderBackup.AddIndex('idxFilter', 'ProjectID;Type');
- sddTenderBackup.AddIndex('idxView', 'ProjectID;Type;ID');
- sdvTenderBackup.Open;
- sdvTenderBackup.IndexName := 'idxView';
- sdvSearchTB.Open;
- sdvSearchTB.IndexName := 'idxFilter';
- if sddTenderBackup.RecordCount > 0 then
- begin
- idxID := sddTenderBackup.FindIndex('idxID');
- FNewID := idxID.Records[sddTenderBackup.RecordCount - 1].ValueByName('ID').AsInteger + 1;
- end
- else
- FNewID := 1;
- end;
- procedure TTenderBackupData.Save;
- begin
- sddTenderBackup.Save;
- end;
- procedure TTenderBackupData.SetProjectID(const Value: Integer);
- begin
- FProjectID := Value;
- sdvTenderBackup.RefreshFilter;
- end;
- procedure TTenderBackupData.sdvTenderBackupFilterRecord(
- ARecord: TsdDataRecord; var Allow: Boolean);
- begin
- Allow := ARecord.ValueByName('ProjectID').AsInteger = ProjectID;
- end;
- function TTenderBackupData.TenderBackupCount(AProjectID,
- AType: Integer): Integer;
- var
- idx: TsdIndex;
- iFirst, iLast: Integer;
- Rec: TsdDataRecord;
- begin
- Result := 0;
- sdvSearchTB.IndexName := 'idxFilter';
- sdvSearchTB.SetRange([AProjectID, AType], [AProjectID, AType]);
- Result := sdvSearchTB.RecordCount;
- sdvSearchTB.CancelRange;
- { idx := sddTenderBackup.FindIndex('idxFilter');
- iFirst := idx.FindKeyIndex(VarArrayOf([AProjectID, AType]));
- iLast := idx.FindKeyLastIndex(VarArrayOf([AProjectID, AType]));
- if iFirst > 0 then
- Result := iLast - iFirst + 1;}
- end;
- function TTenderBackupData.AddOpenTenderBackup(
- AProjectID: Integer): TsdDataRecord;
- begin
- Result := AddTenderBackup(AProjectID, 1);
- end;
- function TTenderBackupData.AddSaveTenderBackup(
- AProjectID: Integer): TsdDataRecord;
- begin
- Result := AddTenderBackup(AProjectID, 0);
- end;
- function TTenderBackupData.AddTenderBackup(AProjectID,
- AType: Integer): TsdDataRecord;
- var
- iCount: Integer;
- begin
- iCount := TenderBackupCount(AProjectID, AType);
- if iCount < 5 then
- Result := NewTenderBackup(AProjectID, AType)
- else
- Result := OldestTenderBackup(AProjectID, AType);
- end;
- function TTenderBackupData.NewTenderBackup(AProjectID,
- AType: Integer): TsdDataRecord;
- var
- iCount: Integer;
- begin
- iCount := TenderBackupCount(AProjectID, AType);
- Result := sddTenderBackup.Add;
- Result.ValueByName('ID').AsInteger := FNewID;
- Inc(FNewID);
- Result.ValueByName('ProjectID').AsInteger := FProjectID;
- Result.ValueByName('Type').AsInteger := AType;
- if AType = 0 then
- Result.ValueByName('FileName').AsString := Format('s%d.mtf', [iCount + 1])
- else
- Result.ValueByName('FileName').AsString := Format('o%d.mtf', [iCount + 1]);
- end;
- function TTenderBackupData.OldestTenderBackup(AProjectID,
- AType: Integer): TsdDataRecord;
- var
- idx: TsdIndex;
- iIndex, iFirst, iLast: Integer;
- Rec: TsdDataRecord;
- begin
- idx := sddTenderBackup.FindIndex('idxFilter');
- iFirst := idx.FindKeyIndex(VarArrayOf([AProjectID, AType]));
- iLast := idx.FindKeyLastIndex(VarArrayOf([AProjectID, AType]));
- Result := idx.Records[iFirst];
- for iIndex := iFirst + 1 to iLast do
- begin
- Rec := idx.Records[iIndex];
- if Result.ValueByName('CreateDateTime').AsDateTime > Rec.ValueByName('CreateDateTime').AsDateTime then
- Result := Rec;
- end;
- end;
- function TTenderBackupData.HasTodayOpenTenderBackup(
- AProjectID: Integer): Boolean;
- var
- idx: TsdIndex;
- iIndex, iFirst, iLast: Integer;
- Rec: TsdDataRecord;
- begin
- Result := False;
- sdvSearchTB.IndexName := 'idxFilter';
- sdvSearchTB.SetRange([AProjectID, 1], [AProjectID, 1]);
- for iIndex := 0 to sdvSearchTB.RecordCount - 1 do
- begin
- Rec := sdvSearchTB.Records[iIndex];
- if Date = Trunc(Rec.ValueByName('CreateDateTime').AsDateTime) then
- begin
- Result := True;
- Break;
- end;
- end;
- sdvSearchTB.CancelRange;
- {idx := sddTenderBackup.FindIndex('idxFilter');
- iFirst := idx.FindKeyIndex(VarArrayOf([AProjectID, 1]));
- iLast := idx.FindKeyLastIndex(VarArrayOf([AProjectID, 1]));
- if iFirst = -1 then Exit;
- for iIndex := iFirst to iLast do
- begin
- Rec := idx.Records[iIndex];
- if Date = Trunc(Rec.ValueByName('CreateDateTime').AsDateTime) then
- begin
- Result := True;
- Break;
- end;
- end;}
- end;
- procedure TTenderBackupData.sdvTenderBackupGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- begin
- if SameText(AValue.FieldName, 'Type') then
- begin
- if AValue.AsInteger = 0 then
- Text := '±£´æ±¸·Ýµã'
- else if AValue.AsInteger = 1 then
- Text := '´ò¿ª±¸·Ýµã';
- end
- else if SameText(AValue.FieldName, 'CreateDateTime') then
- begin
- Text := DateTimeToStr(AValue.AsDateTime);
- end;
- end;
- end.
|