-
Notifications
You must be signed in to change notification settings - Fork 0
/
Stanowisko.pas
148 lines (121 loc) · 4.19 KB
/
Stanowisko.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
140
141
142
143
144
145
146
147
148
unit Stanowisko;
interface
uses
System.Generics.Collections, Data.Win.ADODB, ZlecenieEtap;
type
TStanowisko = class
private
public
var
NAZ_STANOWISKA : String;
KOD_STANOWISKA : String;
ID_STANOWISKA : Integer;
NAZ_R_STANOWISKA : String;
RODZ_STANOWISKA : String;
ID_RODZAJE_STANOWISK : Integer;
listaEtapow : TObjectList<TZlecenieEtap>;
constructor Create;
destructor Free;
procedure DodajEtap(etapZlecenia : TZlecenieEtap);
procedure UsunEtap(etapZlecenia : TZlecenieEtap);
procedure UstawDlaQueryZRodzajeStanowisk(query : TADOQuery);
procedure UstawDlaQueryZeStanowiska(query : TADOQuery);
procedure Czysc;
function WolneOCzasie(czas : TDateTime) : Boolean;
function EtapKonczacySiePoCzasie(czas : TDateTime) : TZlecenieEtap;
function CzasZakonczeniaOstatniegoEtapu() : TDateTime;
function PotencjalnaDataCzasRozpoczeciaEtapu(potencjalnyStart,
potencjalnyKoniec : TDateTime) : TDateTime;
end;
implementation
constructor TStanowisko.Create;
begin
listaEtapow := TObjectList<TZlecenieEtap>.Create(False);
end;
destructor TStanowisko.Free;
begin
listaEtapow.Free;
end;
procedure TStanowisko.DodajEtap(etapZlecenia : TZlecenieEtap);
begin
etapZlecenia.ID_STANOWISKA_PRZYDZIELENIE := ID_STANOWISKA;
listaEtapow.Add(etapZlecenia);
end;
procedure TStanowisko.UsunEtap(etapZlecenia: TZlecenieEtap);
begin
listaEtapow.Remove(etapZlecenia);
end;
procedure TStanowisko.UstawDlaQueryZRodzajeStanowisk(query : TADOQuery);
begin
NAZ_R_STANOWISKA := query.FieldByName('NAZ_R_STANOWISKA').AsString;
RODZ_STANOWISKA := query.FieldByName('RODZ_STANOWISKA').AsString;
ID_RODZAJE_STANOWISK := query.FieldByName('ID_RODZAJE_STANOWISK').AsInteger;
end;
procedure TStanowisko.UstawDlaQueryZeStanowiska(query : TADOQuery);
begin
NAZ_STANOWISKA := query.FieldByName('NAZ_STANOWISKA').AsString;
KOD_STANOWISKA := query.FieldByName('KOD_STANOWISKA').AsString;
ID_STANOWISKA := query.FieldByName('ID_STANOWISKA').AsInteger;
end;
procedure TStanowisko.Czysc;
begin
listaEtapow.Clear;
end;
// zwraca ta sama date jesli wolne w szukanym okresie czasu.
// jesli zajete w tym czasie, zwraca potencjalna date kiedy moze byc wolne.
function TStanowisko.PotencjalnaDataCzasRozpoczeciaEtapu(potencjalnyStart,
potencjalnyKoniec : TDateTime) : TDateTime;
var
listaEtapowPomiedzy : TObjectList<TZlecenieEtap>;
etapZlecenia : TZlecenieEtap;
begin
listaEtapowPomiedzy := TObjectList<TZlecenieEtap>.Create(False);
for etapZlecenia in listaEtapow do
begin
if ((etapZlecenia.DATA_ROZPOCZECIA >= potencjalnyStart) and (etapZlecenia.DATA_ROZPOCZECIA <= potencjalnyKoniec)) or
((etapZlecenia.DATA_ZAKONCZENIA >= potencjalnyStart) and (etapZlecenia.DATA_ZAKONCZENIA <= potencjalnyKoniec)) or
((etapZlecenia.DATA_ROZPOCZECIA <= potencjalnyStart) and (etapZlecenia.DATA_ZAKONCZENIA >= potencjalnyKoniec)) then
listaEtapowPomiedzy.Add(etapZlecenia);
end;
Result := potencjalnyStart;
for etapZlecenia in listaEtapowPomiedzy do
begin
if etapZlecenia.DATA_ZAKONCZENIA > Result then Result := etapZlecenia.DATA_ZAKONCZENIA;
end;
end;
function TStanowisko.WolneOCzasie(czas: TDateTime) : Boolean;
var
zlecenieEtap : TZlecenieEtap;
begin
Result := True;
for zlecenieEtap in listaEtapow do
begin
if (zlecenieEtap.DATA_ROZPOCZECIA <= czas)
and (zlecenieEtap.DATA_ZAKONCZENIA >= czas)
then Result := False;
end;
end;
function TStanowisko.EtapKonczacySiePoCzasie(czas : TDateTime) : TZlecenieEtap;
var
zlecenieEtap : TZlecenieEtap;
begin
Result := nil;
for zlecenieEtap in listaEtapow do
begin
if (zlecenieEtap.DATA_ROZPOCZECIA <= czas)
and (zlecenieEtap.DATA_ZAKONCZENIA >= czas)
then Result := zlecenieEtap;
end;
end;
function TStanowisko.CzasZakonczeniaOstatniegoEtapu() : TDateTime;
var
zlecenieEtap : TZlecenieEtap;
begin
Result := 0;
for zlecenieEtap in listaEtapow do
begin
if Result < zlecenieEtap.DATA_ZAKONCZENIA then
Result := zlecenieEtap.DATA_ZAKONCZENIA;
end;
end;
end.