module Data.Aviation.Casr.Logbook.Reports.SimulatorTimeReport(
SimulatorTimeReport(..)
, HasSimulatorTimeReport(..)
, singleSimulatorTimeReport
, getSimulatorTimeReport
) where
import Control.Category((.))
import Control.Lens(makeClassy, (^.))
import Data.Aviation.Casr.Logbook.Types
(
TimeAmount
, Logbook(Logbook)
, Entry(SimulatorFlightEntry)
, Entries(Entries)
, simulatorTime
, instrumentsimulatorTime
)
import Data.Eq(Eq)
import Data.Foldable(foldl')
import Data.Monoid(Monoid(mappend, mempty))
import Data.Ord(Ord)
import Prelude(Show)
data SimulatorTimeReport =
SimulatorTimeReport {
_hoursTotalSimulator ::
TimeAmount
, _hoursInstrumentSimulator ::
TimeAmount
}
deriving (Eq, Ord, Show)
makeClassy ''SimulatorTimeReport
instance Monoid SimulatorTimeReport where
mempty =
SimulatorTimeReport
mempty
mempty
SimulatorTimeReport t1 i1 `mappend` SimulatorTimeReport t2 i2 =
SimulatorTimeReport (t1 `mappend` t2) (i1 `mappend` i2)
singleSimulatorTimeReport ::
Entry a b c d
-> SimulatorTimeReport
singleSimulatorTimeReport (SimulatorFlightEntry fl _) =
SimulatorTimeReport
(fl ^. simulatorTime)
(fl ^. instrumentsimulatorTime)
singleSimulatorTimeReport _ =
mempty
getSimulatorTimeReport ::
Logbook a b c d
-> SimulatorTimeReport
getSimulatorTimeReport (Logbook _ (Entries es)) =
foldl' (\a -> mappend a . singleSimulatorTimeReport) mempty es