hledger/Ledger/Types.hs
tim 514f015849 Implemented types for dates and datetimes
This patch replaces the strings used in the Entry, TimeLogEntry, and Transaction
records with real types. Rather than use the inbuild system date and time types
directly, two custom types have been implemented that wrap UTCTime: Date and
DateTime. A minimal API for these has been added.
2008-11-11 12:34:05 +00:00

106 lines
2.7 KiB
Haskell

{-|
All the main data types, defined here to avoid import cycles.
See the corresponding modules for documentation.
-}
module Ledger.Types
where
import Ledger.Utils
import qualified Data.Map as Map
type AccountName = String
data Side = L | R deriving (Eq,Show)
data Commodity = Commodity {
symbol :: String, -- ^ the commodity's symbol
-- display preferences for amounts of this commodity
side :: Side, -- ^ should the symbol appear on the left or the right
spaced :: Bool, -- ^ should there be a space between symbol and quantity
comma :: Bool, -- ^ should thousands be comma-separated
precision :: Int -- ^ number of decimal places to display
} deriving (Eq,Show)
data Amount = Amount {
commodity :: Commodity,
quantity :: Double,
price :: Maybe MixedAmount -- ^ optional per-unit price for this amount at the time of entry
} deriving (Eq)
newtype MixedAmount = Mixed [Amount] deriving (Eq)
data TransactionType = RegularTransaction | VirtualTransaction | BalancedVirtualTransaction
deriving (Eq,Show)
data RawTransaction = RawTransaction {
taccount :: AccountName,
tamount :: MixedAmount,
tcomment :: String,
rttype :: TransactionType
} deriving (Eq)
-- | a ledger "modifier" entry. Currently ignored.
data ModifierEntry = ModifierEntry {
valueexpr :: String,
m_transactions :: [RawTransaction]
} deriving (Eq)
-- | a ledger "periodic" entry. Currently ignored.
data PeriodicEntry = PeriodicEntry {
periodexpr :: String,
p_transactions :: [RawTransaction]
} deriving (Eq)
data Entry = Entry {
edate :: Date,
estatus :: Bool,
ecode :: String,
edescription :: String,
ecomment :: String,
etransactions :: [RawTransaction],
epreceding_comment_lines :: String
} deriving (Eq)
data RawLedger = RawLedger {
modifier_entries :: [ModifierEntry],
periodic_entries :: [PeriodicEntry],
entries :: [Entry],
final_comment_lines :: String
} deriving (Eq)
data TimeLogEntry = TimeLogEntry {
tlcode :: Char,
tldatetime :: DateTime,
tlcomment :: String
} deriving (Eq,Ord)
data TimeLog = TimeLog {
timelog_entries :: [TimeLogEntry]
} deriving (Eq)
data Transaction = Transaction {
entryno :: Int,
date :: Date,
description :: String,
account :: AccountName,
amount :: MixedAmount,
ttype :: TransactionType
} deriving (Eq)
data Account = Account {
aname :: AccountName,
atransactions :: [Transaction],
abalance :: MixedAmount
}
data Ledger = Ledger {
rawledger :: RawLedger,
accountnametree :: Tree AccountName,
accountmap :: Map.Map AccountName Account
}