forked from layerfsd/Roomer-PMS-1
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathobjDayFreeRooms.pas
139 lines (111 loc) · 3.14 KB
/
objDayFreeRooms.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
unit objDayFreeRooms;
interface
uses
System.Generics.Collections
, hData
, cmpRoomerDataSet
;
{$M+}
TYPE
TFreeRoomItem = class
private
FRoom : string ;
FStatus : string ;
FNextOcc : string ;
public
property Room : string read FRoom write FRoom ;
property Status : string read FStatus write FStatus ;
property NextOcc : string read FNextOcc write FNextOcc ;
end;
TFreeRoomItemsList = TObjectDictionary<String,TFreeRoomItem>;
TFreeRooms = class
private
FRoomList : TFreeRoomItemsList;
function getRoomCount : integer;
procedure FillList(sDate : TDateTime; const occRooms : string); overload;
procedure FillList(rSet : TRoomerDataSet); overload;
procedure ClearRoomList;
function FindFreeRoomFromRoomNumber(const RoomNumber: string): TFreeRoomItem;
public
constructor Create(sDate : TDateTime; const occRooms : string);
destructor Destroy; override;
function FindRoomNextOcc(const RoomNumber: string): string;
property RoomItemsList : TFreeRoomItemsList read FRoomList write FRoomList;
property RoomCount : integer read getRoomCount;
end;
implementation
uses
uD
, uMain
, SysUtils
;
constructor TFreeRooms.Create(sDate : TDateTime; const occRooms : string);
begin
inherited Create;
FRoomList := TFreeRoomItemsList.Create([doOwnsValues]);
FillList(sDate,occRooms);
end;
destructor TFreeRooms.Destroy;
begin
ClearRoomList;
freeandnil(FRoomList);
inherited;
end;
procedure TFreeRooms.ClearRoomList;
begin
FRoomList.Clear;
end;
procedure TFreeRooms.FillList(sDate : TDateTime; const occRooms : string);
var
rSet : TRoomerDataSet;
begin
ClearRoomList;
if frmMain.OfflineMode then
exit;
rSet := d.roomerMainDataSet.ActivateNewDataset(d.roomerMainDataSet.SystemNextBookingDates(sDate, occRooms));
try
FillList(rSet);
finally
freeandNil(rSet);
end;
end;
procedure TFreeRooms.FillList(rSet : TRoomerDataSet);
var
RoomItem : TFreeRoomItem;
begin
ClearRoomList;
if frmMain.OfflineMode then
exit;
Rset.First;
while not rSet.Eof do
begin
RoomItem := TFreeRoomItem.Create;
RoomItem.Room := LowerCase(Rset.fieldbyname('Room').asString);
RoomItem.Status := Rset.fieldbyname('Status').asString;
RoomItem.NextOcc := Rset.fieldbyname('NextOcc').asString;
FRoomList.AddOrSetValue(RoomItem.Room, RoomItem);
rSet.Next;
end;
end;
function TFreeRooms.FindFreeRoomFromRoomNumber(const RoomNumber: string): TFreeRoomItem;
var
FreeRoomItem : TFreeRoomItem;
begin
result := nil;
if FRoomList.TryGetValue(LowerCase(RoomNumber), FreeRoomItem) then
result := FreeRoomITem;
end;
function TFreeRooms.FindRoomNextOcc(const RoomNumber: string): string;
var
FreeRoomItem : TFreeRoomItem;
begin
result := '';
FreeRoomItem := FindFreeRoomFromRoomNumber(Lowercase(RoomNumber));
if Assigned(FreeRoomItem) then
result := FreeRoomItem.NextOcc;
end;
function TFreeRooms.getRoomCount: integer;
begin
result := FRoomList.Count;
end;
end.