data Error
= Error_year_or_day_is_missing
- | Error_invalid_day (Integer, Int, Int)
- | Error_invalid_time_of_day (Integer, Integer, Integer)
- | Error_transaction_not_equilibrated [Calc.Balance.Unit_Sum Amount]
- | Error_virtual_transaction_not_equilibrated [Calc.Balance.Unit_Sum Amount]
+ | Error_invalid_date (Integer, Int, Int)
+ | Error_invalid_time_of_day (Int, Int, Integer)
+ | Error_transaction_not_equilibrated Transaction [Calc.Balance.Unit_Sum Amount]
+ | Error_virtual_transaction_not_equilibrated Transaction [Calc.Balance.Unit_Sum Amount]
| Error_reading_file FilePath Exception.IOException
| Error_including_file FilePath [R.Error Error]
deriving (Show)
guard $ month >= 1 && month <= 12
guard $ day >= 1 && day <= 31
day_ <- case Time.fromGregorianValid year month day of
- Nothing -> R.fail_with "date" (Error_invalid_day (year, month, day))
+ Nothing -> R.fail_with "date" (Error_invalid_date (year, month, day))
Just day_ -> return day_
(hour, minu, sec, tz) <-
R.option (0, 0, 0, Time.utc) $ R.try $ do
R.skipMany $ R.space_horizontal
time_zone
return
- ( R.integer_of_digits 10 hour
- , R.integer_of_digits 10 minu
+ ( fromInteger $ R.integer_of_digits 10 hour
+ , fromInteger $ R.integer_of_digits 10 minu
, maybe 0 (R.integer_of_digits 10) sec
, tz )
- tod <- case Time.makeTimeOfDayValid
- (fromInteger hour)
- (fromInteger minu)
- (fromInteger sec) of
+ tod <- case Time.makeTimeOfDayValid hour minu (fromInteger sec) of
Nothing -> R.fail_with "date" (Error_invalid_time_of_day (hour, minu, sec))
Just tod -> return tod
return $
tags_of_comments :: [Comment] -> Tag_by_Name
tags_of_comments =
- Data.Map.unionsWith (flip (++))
+ Data.Map.unionsWith (++)
. Data.List.map
( Data.Either.either (const Data.Map.empty) id
. R.runParser (not_tag >> tags <* R.eof) () "" )
join (***) (Ledger.posting_by_Account . Data.List.map fst) $
Data.List.partition ((Posting_Type_Virtual ==) . snd)
postings_not_regular
- postings <-
- case snd $ Calc.Balance.infer_equilibrium postings_unchecked of
- Left ko -> R.fail_with "transaction infer_equilibrium" (Error_transaction_not_equilibrated ko)
- Right ok -> return ok
- balanced_virtual_postings <-
- case snd $ Calc.Balance.infer_equilibrium balanced_virtual_postings_unchecked of
- Left ko -> R.fail_with "transaction infer_equilibrium" (Error_virtual_transaction_not_equilibrated ko)
- Right ok -> return ok
+ let tr_unchecked =
+ Transaction
+ { transaction_code=code_
+ , transaction_comments_before=comments_before
+ , transaction_comments_after=comments_after
+ , transaction_dates=(date_, dates_)
+ , transaction_description=description_
+ , transaction_postings=postings_unchecked
+ , transaction_postings_balance=Calc.Balance.balance
+ , transaction_virtual_postings=virtual_postings
+ , transaction_balanced_virtual_postings=balanced_virtual_postings_unchecked
+ , transaction_balanced_virtual_postings_balance=Calc.Balance.balance
+ , transaction_sourcepos=sourcepos
+ , transaction_status=status_
+ , transaction_tags=tags_
+ }
+ ( transaction_postings_balance
+ ,transaction_postings ) <-
+ case Calc.Balance.infer_equilibrium postings_unchecked of
+ (_, Left ko) -> R.fail_with "transaction infer_equilibrium"
+ (Error_transaction_not_equilibrated tr_unchecked ko)
+ (bal, Right ok) -> return (bal, ok)
+ ( transaction_balanced_virtual_postings_balance
+ ,transaction_balanced_virtual_postings ) <-
+ case Calc.Balance.infer_equilibrium balanced_virtual_postings_unchecked of
+ (_, Left ko) -> R.fail_with "transaction infer_equilibrium"
+ (Error_virtual_transaction_not_equilibrated tr_unchecked ko)
+ (bal, Right ok) -> return (bal, ok)
return $
Transaction
{ transaction_code=code_
, transaction_comments_after=comments_after
, transaction_dates=(date_, dates_)
, transaction_description=description_
- , transaction_postings=postings
+ , transaction_postings
+ , transaction_postings_balance
, transaction_virtual_postings=virtual_postings
- , transaction_balanced_virtual_postings=balanced_virtual_postings
+ , transaction_balanced_virtual_postings
+ , transaction_balanced_virtual_postings_balance
, transaction_sourcepos=sourcepos
, transaction_status=status_
, transaction_tags=tags_