{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Hcompta.CLI.Format.JCC where import Data.Foldable (Foldable(..)) import Data.Function (($), (.)) import qualified Data.List as List import qualified Data.Text as Text import qualified Data.Text.Lazy as TL import Text.Show (Show(..)) import Text.WalderLeijen.ANSI.Text (ToDoc(..)) import qualified Text.WalderLeijen.ANSI.Text as W import qualified Hcompta as H import qualified Hcompta.JCC as JCC import qualified Hcompta.CLI.Lang as Lang import qualified Hcompta.CLI.Lib.Leijen.Table as Leijen.Table instance Lang.Translate JCC.Error_Read W.Doc where translate lang err = case err of JCC.Error_Read_date date -> toDoc lang date JCC.Error_Read_transaction_not_equilibrated styles tr unit_sums -> i18n_transaction_not_equilibrated styles tr unit_sums Lang.Error_Transaction_The_following_transaction_is_not_equilibrated_because JCC.Error_Read_reading_file file_path exn -> W.vsep $ [ Lang.translate lang $ Lang.Error_Failed_to_read_file file_path , W.text $ TL.pack $ show exn ] JCC.Error_Read_including_file file_path errs -> W.vsep $ [ Lang.translate lang $ Lang.Error_Failed_to_include_file file_path , Lang.translate lang errs ] JCC.Error_Read_account_anchor_unknown pos anchor -> Lang.translate lang $ Lang.Error_Account_Anchor_unknown pos anchor JCC.Error_Read_account_anchor_not_unique pos anchor -> Lang.translate lang $ Lang.Error_Account_Anchor_is_not_unique pos anchor where i18n_transaction_not_equilibrated styles tr unit_sums msg = W.vsep $ [ Lang.translate lang msg , W.vsep $ List.map (\(unit, H.Balance_by_Unit_Sum{..}) -> Lang.translate lang $ Lang.Error_Transaction_JCC_Unit_sums_up_to_the_non_null_amount unit $ JCC.amount_styled styles $ JCC.Amount unit $ H.depolarize balance_by_unit_sum_quantity ) unit_sums , W.space , JCC.write_transaction styles tr ] instance Leijen.Table.Cell_of_forall_param JCC.Journal H.Date where cell_of_forall_param _ctx date = Leijen.Table.cell { Leijen.Table.cell_content = JCC.write_date date , Leijen.Table.cell_width = JCC.write_date_length date } instance Leijen.Table.Cell_of_forall_param JCC.Journal JCC.Account where cell_of_forall_param _ctx account = Leijen.Table.cell { Leijen.Table.cell_content = JCC.write_account account , Leijen.Table.cell_width = JCC.write_account_length account } instance Leijen.Table.Cell_of_forall_param JCC.Journal (JCC.Unit, JCC.Quantity) where cell_of_forall_param j (unit, qty) = let sty = JCC.journal_amount_styles j in let amt = JCC.Amount unit qty in let sa = JCC.amount_styled sty amt in Leijen.Table.cell { Leijen.Table.cell_content = JCC.write_amount sa , Leijen.Table.cell_width = JCC.write_amount_length sa } instance Leijen.Table.Cell_of_forall_param JCC.Journal JCC.Wording where cell_of_forall_param _j w = Leijen.Table.cell { Leijen.Table.cell_content = toDoc () w , Leijen.Table.cell_width = Text.length w } instance Foldable f => W.ToDoc1 JCC.Journal (f JCC.Transaction) where toDoc1 = JCC.write_transactions . JCC.journal_amount_styles