@@ -15,6 +15,12 @@ import qualified Data.Text as T
15
15
import qualified Hledger.Flow.Types as FlowTypes
16
16
import qualified Data.List as List
17
17
18
+ data ReportParams = ReportParams { ledgerFile :: FilePath
19
+ , reportYears :: [Integer ]
20
+ , outputDir :: FilePath
21
+ }
22
+ deriving (Show )
23
+
18
24
generateReports :: ReportOptions -> IO ()
19
25
generateReports opts = sh (
20
26
do
@@ -38,15 +44,16 @@ generateReports' opts ch = do
38
44
channelOutLn ch wipMsg
39
45
owners <- single $ shellToList $ listOwners opts
40
46
let baseJournal = journalFile opts []
41
- let baseReportDir = outputDir opts [" all" ]
42
- years <- includeYears ch baseJournal
43
- let baseParams = if length owners > 1 then [(baseJournal, baseReportDir)] else []
44
- let reportParams = baseParams ++ map (ownerParams opts) owners
45
- let actions = List. concat $ fmap (generateReports'' opts ch years) reportParams
46
- if (sequential opts) then sequence actions else single $ shellToList $ parallel actions
47
+ let baseReportDir = outputReportDir opts [" all" ]
48
+ baseYears <- includeYears ch baseJournal
49
+ let baseParams = if length owners > 1 then [(ReportParams baseJournal baseYears baseReportDir)] else []
50
+ ownerParams <- ownerParameters opts ch owners
51
+ let reportParams = baseParams ++ ownerParams
52
+ let actions = List. concat $ fmap (generateReports'' opts ch) reportParams
53
+ parAwareActions opts actions
47
54
48
- generateReports'' :: ReportOptions -> TChan FlowTypes. LogMessage -> [ Integer ] -> ( FilePath , FilePath ) -> [IO (Either FilePath FilePath )]
49
- generateReports'' opts ch years ( journal, reportsDir) = do
55
+ generateReports'' :: ReportOptions -> TChan FlowTypes. LogMessage -> ReportParams -> [IO (Either FilePath FilePath )]
56
+ generateReports'' opts ch ( ReportParams journal years reportsDir) = do
50
57
y <- years
51
58
let actions = map (\ r -> r opts ch journal reportsDir y) [accountList, incomeStatement]
52
59
map (fmap fst ) actions
@@ -87,8 +94,16 @@ generateReport opts ch journal baseOutDir year fileName args = do
87
94
journalFile :: ReportOptions -> [FilePath ] -> FilePath
88
95
journalFile opts dirs = (foldl (</>) (baseDir opts) dirs) </> " all-years" <.> " journal"
89
96
90
- outputDir :: ReportOptions -> [FilePath ] -> FilePath
91
- outputDir opts dirs = foldl (</>) (baseDir opts) (" reports" : dirs)
97
+ outputReportDir :: ReportOptions -> [FilePath ] -> FilePath
98
+ outputReportDir opts dirs = foldl (</>) (baseDir opts) (" reports" : dirs)
99
+
100
+ ownerParameters :: ReportOptions -> TChan FlowTypes. LogMessage -> [FilePath ] -> IO [ReportParams ]
101
+ ownerParameters opts ch owners = do
102
+ let actions = map (ownerParameters' opts ch) owners
103
+ parAwareActions opts actions
92
104
93
- ownerParams :: ReportOptions -> FilePath -> (FilePath , FilePath )
94
- ownerParams opts owner = (journalFile opts [" import" , owner], outputDir opts [owner])
105
+ ownerParameters' :: ReportOptions -> TChan FlowTypes. LogMessage -> FilePath -> IO ReportParams
106
+ ownerParameters' opts ch owner = do
107
+ let ownerJournal = journalFile opts [" import" , owner]
108
+ years <- includeYears ch ownerJournal
109
+ return $ ReportParams ownerJournal years (outputReportDir opts [owner])
0 commit comments