{-# LANGUAGE DeriveDataTypeable #-} module Hcompta.Format.Ledger.Journal where import Data.Data import qualified Data.List import qualified Data.Map.Strict as Data.Map import Data.Map.Strict (Map) import qualified Data.Time.Clock as Time import qualified Data.Time.Clock.POSIX as Time import Data.Typeable () import qualified Hcompta.Model as Model import qualified Hcompta.Model.Amount as Amount import qualified Hcompta.Model.Journal as Model.Journal import qualified Hcompta.Model.Transaction as Transaction data Journal = Journal { file :: FilePath , includes :: [Journal] -- , historical_prices :: [Amount.Price.Historical] , last_read_time :: Time.UTCTime , transactions :: Transaction.By_Date -- , transaction_periodics :: [Transaction.Periodic] -- , transaction_modifiers :: [Transaction.Modifier] , unit_styles :: Map Amount.Unit Amount.Style } deriving (Data, Eq, Read, Show, Typeable) nil :: Journal nil = Journal { file = "" , includes = [] , last_read_time = Time.posixSecondsToUTCTime 0 , transactions = Data.Map.empty , unit_styles = Data.Map.empty } to_Model :: Journal -> Model.Journal to_Model jour = Model.Journal.Journal { Model.Journal.transactions = Data.Map.unionsWith (++) $ flatten transactions $ jour } where flatten :: (Journal -> a) -> Journal -> [a] flatten g j = g j:Data.List.concatMap (flatten g) (includes j)