61 lines
2.0 KiB
Haskell
Executable File
61 lines
2.0 KiB
Haskell
Executable File
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE QuasiQuotes #-}
|
|
|
|
module Hledger.Cli.Commands.Import (
|
|
importmode
|
|
,importcmd
|
|
)
|
|
where
|
|
|
|
import Control.Monad
|
|
import Data.List
|
|
import Data.Ord
|
|
import Data.String.Here
|
|
import Hledger
|
|
import Hledger.Cli.CliOptions
|
|
import Hledger.Cli.Commands.Add (journalAddTransaction)
|
|
-- import Hledger.Cli.Commands.Print (print')
|
|
import System.Console.CmdArgs.Explicit
|
|
import Text.Printf
|
|
|
|
importmode = hledgerCommandMode
|
|
[here| import
|
|
Read new transactions added to each FILE since last run, and add them to
|
|
the main journal file. Or with --dry-run, just print the transactions
|
|
that would be added.
|
|
|
|
Input files are provided as arguments, or glob patterns. So eg to add new
|
|
transactions from all CSV files to the main journal: hledger import *.csv
|
|
|
|
New transactions are detected like print --new (using .latest.FILE state files)
|
|
|
|
FLAGS
|
|
|]
|
|
[flagNone ["dry-run"] (\opts -> setboolopt "dry-run" opts) "just show the transactions to be imported"]
|
|
[generalflagsgroup1]
|
|
[]
|
|
([], Just $ argsFlag "FILE [...]")
|
|
|
|
importcmd opts@CliOpts{rawopts_=rawopts,inputopts_=iopts} j = do
|
|
let
|
|
inputfiles = listofstringopt "args" rawopts
|
|
dryrun = boolopt "dry-run" rawopts
|
|
iopts' = iopts{new_=True, new_save_=not dryrun}
|
|
case inputfiles of
|
|
[] -> error' "please provide one or more input files as arguments"
|
|
fs -> do
|
|
enewj <- readJournalFiles iopts' fs
|
|
case enewj of
|
|
Left e -> error' e
|
|
Right newj ->
|
|
case sortBy (comparing tdate) $ jtxns newj of
|
|
[] -> return ()
|
|
newts | dryrun -> do
|
|
printf "; would import %d new transactions:\n\n" (length newts)
|
|
-- TODO how to force output here ?
|
|
-- length (jtxns newj) `seq` print' opts{rawopts_=("explicit",""):rawopts} newj
|
|
mapM_ (putStr . showTransactionUnelided) newts
|
|
newts -> do
|
|
foldM (flip journalAddTransaction opts) j newts -- gets forced somehow.. (how ?)
|
|
printf "imported %d new transactions\n" (length newts)
|