mirror of
https://github.com/simonmichael/hledger.git
synced 2025-01-06 02:23:46 +03:00
ae5a9439d0
Any open sessions in a timelog will be considered clocked out as of the current time, and included in calculations. Also, contrary to the earlier patch we now ignore timezone everywhere and deal only with local times. This might need revisiting eg to track time while crossing timezones.
124 lines
3.3 KiB
Haskell
124 lines
3.3 KiB
Haskell
{-|
|
|
|
|
This is the next layer up from Ledger.Utils. All main data types are
|
|
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 SmartDate = (String,String,String)
|
|
|
|
data DateSpan = DateSpan (Maybe Day) (Maybe Day) deriving (Eq,Show,Ord)
|
|
|
|
data Interval = NoInterval | Daily | Weekly | Monthly | Quarterly | Yearly
|
|
deriving (Eq,Show,Ord)
|
|
|
|
type AccountName = String
|
|
|
|
data Side = L | R deriving (Eq,Show,Ord)
|
|
|
|
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,Ord)
|
|
|
|
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 {
|
|
periodicexpr :: String,
|
|
p_transactions :: [RawTransaction]
|
|
} deriving (Eq)
|
|
|
|
data Entry = Entry {
|
|
edate :: Day,
|
|
estatus :: Bool,
|
|
ecode :: String,
|
|
edescription :: String,
|
|
ecomment :: String,
|
|
etransactions :: [RawTransaction],
|
|
epreceding_comment_lines :: String
|
|
} deriving (Eq)
|
|
|
|
data HistoricalPrice = HistoricalPrice {
|
|
hdate :: Day,
|
|
hsymbol1 :: String,
|
|
hsymbol2 :: String,
|
|
hprice :: Double
|
|
} deriving (Eq,Show)
|
|
|
|
data RawLedger = RawLedger {
|
|
modifier_entries :: [ModifierEntry],
|
|
periodic_entries :: [PeriodicEntry],
|
|
entries :: [Entry],
|
|
open_timelog_entries :: [TimeLogEntry],
|
|
historical_prices :: [HistoricalPrice],
|
|
final_comment_lines :: String
|
|
} deriving (Eq)
|
|
|
|
data TimeLogEntry = TimeLogEntry {
|
|
tlcode :: Char,
|
|
tldatetime :: LocalTime,
|
|
tlcomment :: String
|
|
} deriving (Eq,Ord)
|
|
|
|
data TimeLog = TimeLog {
|
|
timelog_entries :: [TimeLogEntry]
|
|
} deriving (Eq)
|
|
|
|
data Transaction = Transaction {
|
|
entryno :: Int,
|
|
date :: Day,
|
|
description :: String,
|
|
account :: AccountName,
|
|
amount :: MixedAmount,
|
|
ttype :: TransactionType
|
|
} deriving (Eq)
|
|
|
|
data Account = Account {
|
|
aname :: AccountName,
|
|
atransactions :: [Transaction],
|
|
abalance :: MixedAmount
|
|
}
|
|
|
|
data Ledger = Ledger {
|
|
rawledgertext :: String,
|
|
rawledger :: RawLedger,
|
|
accountnametree :: Tree AccountName,
|
|
accountmap :: Map.Map AccountName Account
|
|
}
|
|
|