module WeekDaze.Data.HumanResource(
HumanResource(..),
groupMembershipTag,
defaultGroupMembership,
calculateNTimeslotsPerWeekAvailable,
extractDistinctGroupMembership,
extractGroupMembersOf,
extractCombinedGroupMembership,
hasFreePeriodPreference
) where
import qualified Data.Map
import qualified Data.Maybe
import qualified Data.Set
import qualified WeekDaze.Data.Group as Data.Group
import qualified WeekDaze.Data.Resource as Data.Resource
import qualified WeekDaze.Size as Size
import qualified WeekDaze.Temporal.FreePeriodPreference as Temporal.FreePeriodPreference
groupMembershipTag :: String
groupMembershipTag = "groupMembership"
defaultGroupMembership :: Data.Group.Membership
defaultGroupMembership = Data.Set.empty
class HumanResource h where
getNTimeslotsPerWeekOfTeaching
:: Size.NTimeslots
-> h
-> Size.NTimeslots
getNTimeslotsPerWeekOfNonTeaching
:: Size.NTimeslots
-> h
-> Size.NTimeslots
getGroupMembership :: h -> Data.Group.Membership
getMaybeFreePeriodPreference :: h -> Maybe Temporal.FreePeriodPreference.FreePeriodPreference
calculateNTimeslotsPerWeekAvailable
:: Data.Resource.Resource resource
=> Size.NTimeslots
-> resource
-> Size.NTimeslots
calculateNTimeslotsPerWeekAvailable nTimeslotsPerDay = (nTimeslotsPerDay *) . Data.Resource.countDaysPerWeekAvailable
extractDistinctGroupMembership :: HumanResource humanResource => Data.Resource.ResourceMap humanResourceId humanResource -> Data.Group.Membership
extractDistinctGroupMembership = Data.Map.foldr (Data.Set.union . getGroupMembership) Data.Set.empty
extractGroupMembersOf
:: HumanResource humanResource
=> Data.Group.Id
-> Data.Resource.ResourceMap humanResourceId humanResource
-> Data.Resource.ResourceMap humanResourceId humanResource
extractGroupMembersOf groupId = Data.Map.filter (Data.Set.member groupId . getGroupMembership)
extractCombinedGroupMembership
:: HumanResource humanResource
=> Data.Resource.ResourceMap humanResourceId humanResource
-> Data.Group.Membership
extractCombinedGroupMembership = Data.Set.unions . map getGroupMembership . Data.Map.elems
hasFreePeriodPreference :: HumanResource humanResource => humanResource -> Bool
hasFreePeriodPreference = Data.Maybe.isJust . getMaybeFreePeriodPreference