hier is een uitgebreid vraagje...
ik ben een staffing programma aan het schrijven voor een callcenter en nu zit ik met het volgende probleem:
ik heb een aantal agents per team, en die kunnen voorkeuren opgeven.
dat kunnen ze doen op halve uren nauwkeurig en voor zeven dagen ( de dagen in de week)
dat levert dus uiteindelijk een hoop voorkeuren op, die je daarna anders moet indelen om ze af te zetten tegen het aantal agents dat je nodig hebt per half uur.
om dat te doen wil ik elke agent binnen het benodigde team aflopen en in een grote lijst met alle intervallen in een week hun agentnummer toevoegen voor elk interval dat ze volgens hun voorkeuren beschikbaar zijn.
zoals je begrijpt betekenet dat dat de lijst met intervallen al 7*48 is bijna 350 plaatsen bevat, maar daar moeten dus nog op elke positie een x aantal nummers in kunnen worden geplaatst.
Ik heb eerst gedacht aan een tweedimensionaal array van tlist's maar dat gaat een hoop geheugen vreten.
Daarna heb ik het geprobeerd met een treeview met op de eerste laag de dagen van de week en op de tweede laag 48 knopen voor de 48 intervallen. maar het probleem is dat je de knoppen moet gaan doorlopen tot je de juiste knoop tegenkomt, maar hoe verder je komt, hoe meer agents je gehad hebt, hoe voller de treeview. het vervelende is dat als je de knopen gaat doorlopen, alle knopen worden doorlopen, dus ook de knopen die gevuld zijn met agent nummers. ik gebruik nu het volgende om de juiste knoop te vinden:
input zijn de treeview met de knopen voor de dagen en intervallen en het nummer van de dag en het interval.
ik heb alle knopen op het niveau van de dagen een data gegeven van -1
en de knopen op het niveau van de intervallen een data gegeven van -2
de procedure waarvanuit deze wordt aangeroepen is:
de arrays off en nopref worden gebruikt voor de eventuele voorkeuren voor een vrije dag of een dag waarvoor de agent geen voorkeuren heeft.
day geeft het nummer van de dag en
interval geeft het nummer van het interval
minval en maxval worden gebruikt om voor iedere dag de geprefereerde begin en eindtijd op te slaan.
loadagentprefs wordt gebruikt om de voorkeuren uit de db te halen, maar alleen als die er zijn, ze worden namelijk pas opgeslagen als ze worden ingevoerd.
nadat de prefs zijn geladen wordt voor minval tot maxval het nummer van de huidige agent in de treeview ingevoegd.
probleem:
er gaat iets gigantisch mis.....
de treeview wordt wel gevuld, maar niet correct.
vraag:
iemand betere ideeen om dit op te slaan, of een idee wat hier fout gaat?
alvast bedankt!!
(al was het alleen al voor de moeite om dit door te spitten
)
ik ben een staffing programma aan het schrijven voor een callcenter en nu zit ik met het volgende probleem:
ik heb een aantal agents per team, en die kunnen voorkeuren opgeven.
dat kunnen ze doen op halve uren nauwkeurig en voor zeven dagen ( de dagen in de week)
dat levert dus uiteindelijk een hoop voorkeuren op, die je daarna anders moet indelen om ze af te zetten tegen het aantal agents dat je nodig hebt per half uur.
om dat te doen wil ik elke agent binnen het benodigde team aflopen en in een grote lijst met alle intervallen in een week hun agentnummer toevoegen voor elk interval dat ze volgens hun voorkeuren beschikbaar zijn.
zoals je begrijpt betekenet dat dat de lijst met intervallen al 7*48 is bijna 350 plaatsen bevat, maar daar moeten dus nog op elke positie een x aantal nummers in kunnen worden geplaatst.
Ik heb eerst gedacht aan een tweedimensionaal array van tlist's maar dat gaat een hoop geheugen vreten.
Daarna heb ik het geprobeerd met een treeview met op de eerste laag de dagen van de week en op de tweede laag 48 knopen voor de 48 intervallen. maar het probleem is dat je de knoppen moet gaan doorlopen tot je de juiste knoop tegenkomt, maar hoe verder je komt, hoe meer agents je gehad hebt, hoe voller de treeview. het vervelende is dat als je de knopen gaat doorlopen, alle knopen worden doorlopen, dus ook de knopen die gevuld zijn met agent nummers. ik gebruik nu het volgende om de juiste knoop te vinden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| function TdmMain.LookupNodeWithDayAndInterval(a: TTreeView;day,interval: integer):TTreeNode;
var i:Integer;
AfterDay: boolean;
begin
Result:=nil;
AfterDay:=False;
for i:=0 to a.items.count-1 do
begin
if(a.Items[i].Text=IntToStr(day))and (integer(a.Items[i].data)=-1) then
AfterDay:=true;
if(a.Items[i].Text=IntToStr(Interval))and (integer(a.Items[i].data)=-2) and AfterDay then
begin
Result:=a.Items[i];
Break;
end;
end;
end; |
input zijn de treeview met de knopen voor de dagen en intervallen en het nummer van de dag en het interval.
ik heb alle knopen op het niveau van de dagen een data gegeven van -1
en de knopen op het niveau van de intervallen een data gegeven van -2
de procedure waarvanuit deze wordt aangeroepen is:
code:
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
| procedure TdmMain.GetAgentsAvailableOnTeam(CurrentQueriedTeam: integer;a: TTreeView);
var off,nopref: array[1..7] of boolean;
min,max: array[1..7] of Integer;
i,day,interval,minval,maxval: integer;
parentNode: TTreeNode;
begin
for i:=1 to 7 do
begin
off[i]:=false;
nopref[i]:=false;
min[i]:=0;
max[i]:=0;
end;
a.items.BeginUpdate;
with dsqAgent.DataSet do
begin
First;
while not EOF do
begin
if aqAgentAgentTeamID.AsInteger=CurrentQueriedTeam then
begin
LoadAgentPrefs(IntToStr(aqAgentAgentID.AsInteger),min,max,off,nopref);
for day:=1 to 7 do
if not(off[day-1]) then
begin
if nopref[day-1] then
begin
minval:=1;
maxval:=48;
end
else
begin
minval:=min[day-1];
maxval:=max[day-1]
end;
for interval:=minval to maxval do
begin
parentNode:=LookupNodeWithDayAndInterval(a, day, interval);
a.Items.AddChild(parentNode,aqAgentAgentID.AsString);
end;
end;
end;
Next;
end;
end;
a.Items.EndUpdate;
end; |
de arrays off en nopref worden gebruikt voor de eventuele voorkeuren voor een vrije dag of een dag waarvoor de agent geen voorkeuren heeft.
day geeft het nummer van de dag en
interval geeft het nummer van het interval
minval en maxval worden gebruikt om voor iedere dag de geprefereerde begin en eindtijd op te slaan.
loadagentprefs wordt gebruikt om de voorkeuren uit de db te halen, maar alleen als die er zijn, ze worden namelijk pas opgeslagen als ze worden ingevoerd.
nadat de prefs zijn geladen wordt voor minval tot maxval het nummer van de huidige agent in de treeview ingevoegd.
probleem:
er gaat iets gigantisch mis.....
de treeview wordt wel gevuld, maar niet correct.
vraag:
iemand betere ideeen om dit op te slaan, of een idee wat hier fout gaat?
alvast bedankt!!
(al was het alleen al voor de moeite om dit door te spitten
