module Data.TTask.Pretty.Status
( ppProjectSprintLog
) where
import Control.Applicative
import Data.List
import Data.Time
import Data.TTask.Types
import Data.TTask.Analysis
import Data.TTask.Pretty.Contents
ppProjectSprintLog :: Id -> Project -> Maybe String
ppProjectSprintLog i pj = ppDailySprintLog <$> getSprintById pj i
ppDailySprintLog :: Sprint -> String
ppDailySprintLog s =
let
sx = getSprintLastStatuses s
cond f r = (f $ stRecToStatus r) && (isTask $ stRecToContents r)
summary f = show (summaryPointBy (cond f) sx)
in concat
[ ppSprintHeaderDetail s
, "\n\n"
, intercalate "\n" . map ppDailyStatuses . dailyGroup $ getSprintStatuses s
, "\n\n"
, "Wait : " ++ summary stWait ++ "pt\n"
, "Running : " ++ summary stRunning ++ "pt\n"
, "Finished : " ++ summary stFinished ++ "pt\n"
, "Not Achieved : " ++ summary stNotAchieved ++ "pt\n"
, "Rejected : " ++ summary stRejected ++ "pt"
]
ppDailyStatuses :: DailyStatuses -> String
ppDailyStatuses d = concat
[ show (dayStDay d), " : Total Finished point = ", show (dayStPoint d), "\n"
, intercalate "\n" . map ((" "++) . ppStatusLog) $ dayStStatuses d
]
ppStatusLog :: StatusLogRec -> String
ppStatusLog s = case stRecToContents s of
TTaskProject v ->
fmtStatusRec "PROJECT" 0 (calcProjectPoint v) s (projectName v)
TTaskSprint v ->
fmtStatusRec "SPRINT" (sprintId v) (calcSprintPoint v) s (sprintDescription v)
TTaskStory v ->
fmtStatusRec "STORY" (storyId v) (calcStoryPoint v) s (storyDescription v)
TTaskTask v ->
fmtStatusRec "TASK" (taskId v) (taskPoint v) s (taskDescription v)
fmtStatusRec
:: String -> Id -> Point -> StatusLogRec -> String -> String
fmtStatusRec s i p r d = concat
[ "[", s, " ", show p, "pt ", stAndLt, "] ", show i, " : ", d ]
where
stAndLt :: String
stAndLt = concat
[ ppStatusRecord (stRecToStatus r)
, " at ", show . localTimeOfDay . getStatusTime $ stRecToStatus r
]