{-# LANGUAGE OverloadedStrings #-} module Jira ( Issue , HoursWorked , WorkLog(..) , logWork ) where import Data.Time import Data.Time.Format import Text.Printf import Network.HTTP.Conduit import Control.Monad.Trans.Resource (runResourceT) import Data.ByteString.Char8 (ByteString(..), pack) import Config type Issue = String type HoursWorked = Float data WorkLog = WorkLog Day Issue HoursWorked instance Show WorkLog where show (WorkLog d i h) = printf "%s - %s - %.1f hours" (show d) i h logWork :: Config -> [WorkLog] -> IO () logWork conf ws = mapM_ (logOne conf) ws logOne :: Config -> WorkLog -> IO () logOne conf (WorkLog d i h) = do request'' <- parseUrl $ issueUrl conf i let request' = applyBasicAuth (getJiraUser conf) (getJiraPassword conf) request'' params = [("time", pack.show $ h), ("user", getJiraUser conf), ("date", datefmt d), ("ansidate", ansidatefmt d)] request = urlEncodedBody params request' manager <- newManager tlsManagerSettings runResourceT $ do response <- http request manager return () datefmt :: Day -> ByteString datefmt = pack . formatTime defaultTimeLocale "%d/%b/%y" ansidatefmt :: Day -> ByteString ansidatefmt = pack . formatTime defaultTimeLocale "%Y-%m-%d" issueUrl :: Config -> Issue -> String issueUrl conf issue = printf "https://%s/rest/tempo-rest/1.0/worklogs/%s" (getJiraHost conf) issue