Ik ben op dit moment bezig met een planningstool om automatisch een planning te genereren. Op zich niet zo heel erg lastig maar nu heb ik wat ontworpen waarvan ik het vermoeden heb dat het hier en daar nog wat verbeterd of versimpeld kan worden.
Het probleem waar ik een beetje mee worstel is het bepalen van de werkbare dagen. Wanneer er een taak gepland wordt op een niet werkbare dag (pasen, kerst, talk-like-a-pirate-day) dient de taak de eerst volgende werkbare dag gepland te worden. Dit is klant specifiek en hangt ook af van o.a. het land waar de klant in werkt.
qua DB had ik het volgende bedacht.
Het principe is vrij simpel. De standaard feestdagen (bijv. de kerstmis) worden vanuit een i18n language file uitgelezen bij het aanmaken van een customer. De customer zelf krijgt een beheerpagina waarin deze kan wijzigen en ook niet werkbare dagen kan toevoegen / verwijderen (gesorteerd per jaar).
Het meest interessante deel is de recurrence kolom. Deze geeft aan of de planner moet kijken naar het jaartal (in geval van null) van de datum of niet. De kolom geeft dus aan of de dag herhaalt moet worden en ook in welke periode (bijvoorbeeld: zondag, weekly / christmasday, yearly)
De bedoeling is dus dat de planner een collectie krijgt van de non-working days voor de tijdsperiode waarin gepland wordt. Wanneer een geplande datum in deze collectie voorkomt zal de taak opnieuw geplanned worden op de eerstvolgende werkdag d.m.v. "brute force".
simpele pseudo code:
Ik zit me overigens nog te bedenken wat ik met feestdagen zoals pasen / carnaval doe welke elk jaar op een andere datum vallen. Aangezien ik niet voor elke vage feestdag een bepaalde implementatie wil schrijven, zit ik er aan te denken om dit door de user zelf te laten invullen.
Het probleem waar ik een beetje mee worstel is het bepalen van de werkbare dagen. Wanneer er een taak gepland wordt op een niet werkbare dag (pasen, kerst, talk-like-a-pirate-day) dient de taak de eerst volgende werkbare dag gepland te worden. Dit is klant specifiek en hangt ook af van o.a. het land waar de klant in werkt.
qua DB had ik het volgende bedacht.
NonWorkingDays | ||
customerid | int(11) | id van de customer |
date | datetime | datum van de niet werkbare dag (c.q. 25-12-2010) |
recurrence | varchar(10) | Herhaalt deze dag zich? Tijdsperiode van de herhaling: null (no recurrence) of Daily / Weekly / Monthly / Yearly? |
name | varchar(30) | naam van de feestdag |
avoid | boolean | of de planning deze dag moet vermijden |
Het principe is vrij simpel. De standaard feestdagen (bijv. de kerstmis) worden vanuit een i18n language file uitgelezen bij het aanmaken van een customer. De customer zelf krijgt een beheerpagina waarin deze kan wijzigen en ook niet werkbare dagen kan toevoegen / verwijderen (gesorteerd per jaar).
Het meest interessante deel is de recurrence kolom. Deze geeft aan of de planner moet kijken naar het jaartal (in geval van null) van de datum of niet. De kolom geeft dus aan of de dag herhaalt moet worden en ook in welke periode (bijvoorbeeld: zondag, weekly / christmasday, yearly)
De bedoeling is dus dat de planner een collectie krijgt van de non-working days voor de tijdsperiode waarin gepland wordt. Wanneer een geplande datum in deze collectie voorkomt zal de taak opnieuw geplanned worden op de eerstvolgende werkdag d.m.v. "brute force".
simpele pseudo code:
code:
1
2
3
4
| while (nonworkingdays.contains(plannedDate)) { plannedDate.nextDay(); } |
Ik zit me overigens nog te bedenken wat ik met feestdagen zoals pasen / carnaval doe welke elk jaar op een andere datum vallen. Aangezien ik niet voor elke vage feestdag een bepaalde implementatie wil schrijven, zit ik er aan te denken om dit door de user zelf te laten invullen.
The ships hung in the sky in much the same way that bricks don’t.