I have a need to take a time period, e.g. a week and break it down into days and then further down into either hours, 30 minutes, 15 minutes etc.
Then I want to be able to assign (possibly multiple) people to those time spans.
e.g.
30 May 2012
0700 : 0730 - Alice, Bob
0730 : 0800 - Alice
.... : ....
1930 : 2000 - Alice
31 May 2012
0700 : 0730 - Carol
0730 : 0800 - Carol
.... : ....
1930 : 2000 - Carol
Where the start times and end times each day are customisable.
I need to be able to sort the working periods and do query them to see if any don't have a person assigned to them. Check over a Day / Week that no one person is assigned to > x hours.
I know .Net has TimeSpan and DateTime but these seem cumbersome to use for what is a seems like a simple representation of some data and TimeSpan has no StartTime, it's purely just a span of time (e.g. 30 minutes, 5 minutes, 1 hour etc).
What I had initially in mind was to create a class called WorkingDay, a WorkingDay can have a number of WorkingPeriods. a WorkingPeriod has a StartTime and EndTime and a List of people assigned to that WorkingPeriod with simple methods to AddPerson and RemovePerson.
WorkingDay will have a function to get a list of people assigned for that day by running through the WorkingPeriods and pulling out all unique people that are assigned for any period. It will also have a function that pulls out all WorkingPeriods with no-one assigned.
This seems far too cumbersome though! Especially as I'm going to need something else that takes in a number of WorkingDays and checks that the total time someone is assigned over multiple days is less than x hours etc.
Any suggestions for a good structure for this ? Is their an existing .Net Structure that will provide this which I'm missing ?
The most direct (and compact) representation for a timeslot is DateTime start, TimeSpan duration
.
That lends itself well for querying, less well for setting up and validating (against overlap etc).
The next option is to divide each day (or week) into a fixed number of periods, define those periods once and code each timeslot as DateTime base, int PeriodId
. Better for finding empties and duplicates.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With