module Data.TTask.Types.Contents
( isProject
, isSprint
, isStory
, isTask
, sprintAllTasks
, projectsAllTasks
, projectsAllStory
, calcStoryPoint
, calcSprintPoint
, calcProjectPoint
, getUserStoryById
, getTaskById
, getSprintById
) where
import Data.TTask.Types.Types
import Data.List
isProject :: TTaskContents -> Bool
isProject (TTaskProject _) = True
isProject _ = False
isSprint :: TTaskContents -> Bool
isSprint (TTaskSprint _) = True
isSprint _ = False
isStory :: TTaskContents -> Bool
isStory (TTaskStory _) = True
isStory _ = False
isTask :: TTaskContents -> Bool
isTask (TTaskTask _) = True
isTask _ = False
sprintAllTasks :: Sprint -> [Task]
sprintAllTasks = concatMap storyTasks . sprintStorys
projectsAllTasks :: Project -> [Task]
projectsAllTasks p = concat
[ concatMap sprintAllTasks $ projectSprints p
, concatMap storyTasks $ projectBacklog p
]
projectsAllStory :: Project -> [UserStory]
projectsAllStory p = concat
[ concatMap sprintStorys $ projectSprints p , projectBacklog $ p ]
calcStoryPoint :: UserStory -> Point
calcStoryPoint = summaryContents storyTasks taskPoint
calcSprintPoint :: Sprint -> Point
calcSprintPoint = summaryContents sprintStorys calcStoryPoint
calcProjectPoint :: Project -> Point
calcProjectPoint pj
= summaryContents projectSprints calcSprintPoint pj
+ summaryContents projectBacklog calcStoryPoint pj
summaryContents :: (a -> [b]) -> (b -> Point) -> a -> Point
summaryContents f g = foldr (+) 0 . map g . f
getUserStoryById :: Project -> Id -> Maybe UserStory
getUserStoryById pj i = find ((==i).storyId) $ projectsAllStory pj
getTaskById :: Project -> Id -> Maybe Task
getTaskById pj i = find ((==i).taskId) $ projectsAllTasks pj
getSprintById :: Project -> Id -> Maybe Sprint
getSprintById pj i = find ((==i).sprintId) $ projectSprints pj