module Data.TTask.Pretty.Status
( ppProjectSprintLog
) where
import Control.Applicative
import Control.Lens
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 <$> pj^?sprint i
ppDailySprintLog :: Sprint -> String
ppDailySprintLog s =
let
sx = s^.lastStatuses
cond f r = (r^.getLogStatus.f) && (r^.getLogContents.isTask)
summary f = show (summaryPointBy (cond f) sx)
in concat
[ ppSprintHeaderDetail s
, "\n\n"
, intercalate "\n" . map ppDailyStatuses . dailyGroup $ s^.statuses
, "\n\n"
, "Wait : " ++ summary isWait ++ "pt\n"
, "Running : " ++ summary isRunning ++ "pt\n"
, "Finished : " ++ summary isFinished ++ "pt\n"
, "Not Achieved : " ++ summary isNotAchieved ++ "pt\n"
, "Rejected : " ++ summary isRejected ++ "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 s^.getLogContents of
TTaskProject v ->
fmtStatusRec "PROJECT" 0 (v^.point) s (_projectName v)
TTaskSprint v ->
fmtStatusRec "SPRINT" (v^.sprintId) (v^.point) s (_sprintDescription v)
TTaskStory v ->
fmtStatusRec "STORY" (v^.storyId) (v^.point) s (_storyDescription v)
TTaskTask v ->
fmtStatusRec "TASK" (v^.taskId) (v^.point) 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 (r^.getLogStatus)
, " at ", show . localTimeOfDay $ r^.getLogStatus.getStatusTime
]