Add: --no-new-accounts: don't allow to create new accounts
This commit is contained in:
		
							parent
							
								
									8310eaa6ff
								
							
						
					
					
						commit
						b2e89a8c13
					
				| @ -15,19 +15,19 @@ import System.IO (stderr, hFlush) | ||||
| import System.IO.Error | ||||
| import Text.ParserCombinators.Parsec | ||||
| import Utils (ledgerFromStringWithOpts) | ||||
| 
 | ||||
| import qualified Data.Foldable as Foldable (find) | ||||
| 
 | ||||
| -- | Read ledger transactions from the terminal, prompting for each field, | ||||
| -- and append them to the ledger file. If the ledger came from stdin, this | ||||
| -- command has no effect. | ||||
| add :: [Opt] -> [String] -> Ledger -> IO () | ||||
| add _ args l | ||||
| add opts args l | ||||
|     | filepath (journal l) == "-" = return () | ||||
|     | otherwise = do | ||||
|   hPutStrLn stderr | ||||
|     "Enter one or more transactions, which will be added to your ledger file.\n\ | ||||
|     \To complete a transaction, enter . as account name. To quit, enter control-d." | ||||
|   getAndAddTransactions l args `catch` (\e -> unless (isEOFError e) $ ioError e) | ||||
|   getAndAddTransactions l opts args `catch` (\e -> unless (isEOFError e) $ ioError e) | ||||
| 
 | ||||
| -- | Read a number of ledger transactions from the command line, | ||||
| -- prompting, validating, displaying and appending them to the ledger | ||||
| @ -35,11 +35,11 @@ add _ args l | ||||
| -- command-line arguments are used as the first transaction's description. | ||||
| getAndAddTransactions :: Ledger -> [String] -> IO () | ||||
| getAndAddTransactions l args = do | ||||
|   l <- getTransaction l args >>= ledgerAddTransaction l | ||||
|   l <- getTransaction l args >>= addTransaction l | ||||
|   getAndAddTransactions l [] | ||||
| 
 | ||||
| -- | Read a transaction from the command line, with history-aware prompting. | ||||
| getTransaction :: Ledger -> [String] -> IO Transaction | ||||
| getTransaction :: Ledger -> [String] -> IO LedgerTransaction | ||||
| getTransaction l args = do | ||||
|   today <- getCurrentDay | ||||
|   datestr <- askFor "date"  | ||||
| @ -52,8 +52,13 @@ getTransaction l args = do | ||||
|                 | otherwise = Just $ snd $ head historymatches | ||||
|       bestmatchpostings = maybe Nothing (Just . tpostings) bestmatch | ||||
|       date = fixSmartDate today $ fromparse $ (parse smartdate "" . lowercase) datestr | ||||
|       accept x = x == "." || (not . null) x && | ||||
|         if NoNewAccts `elem` opts | ||||
|             then isJust $ Foldable.find (== x) ant | ||||
|             else True | ||||
|         where (ant,_,_,_) = groupTransactions . rawLedgerTransactions . rawledger $ l | ||||
|       getpostingsandvalidate = do | ||||
|         ps <- getPostings bestmatchpostings [] | ||||
|         ps <- getPostings accept bestmatchpostings [] | ||||
|         let t = nulltransaction{tdate=date | ||||
|                                ,tstatus=False | ||||
|                                ,tdescription=description | ||||
| @ -71,9 +76,9 @@ getTransaction l args = do | ||||
| 
 | ||||
| -- | Read postings from the command line until . is entered, using the | ||||
| -- provided historical postings, if any, to guess defaults. | ||||
| getPostings :: Maybe [Posting] -> [Posting] -> IO [Posting] | ||||
| getPostings historicalps enteredps = do | ||||
|   account <- askFor (printf "account %d" n) defaultaccount (Just $ not . null) | ||||
| getPostings :: (AccountName -> Bool) -> Maybe [Posting] -> [Posting] -> IO [Posting] | ||||
| getPostings accept historicalps enteredps = do | ||||
|   account <- askFor (printf "account %d" n) defaultaccount (Just accept) | ||||
|   if account=="." | ||||
|     then return enteredps | ||||
|     else do | ||||
| @ -82,7 +87,7 @@ getPostings historicalps enteredps = do | ||||
|       let p = nullposting{paccount=stripbrackets account, | ||||
|                           pamount=amount, | ||||
|                           ptype=postingtype account} | ||||
|       getPostings historicalps $ enteredps ++ [p] | ||||
|       getPostings accept historicalps $ enteredps ++ [p] | ||||
|     where | ||||
|       n = length enteredps + 1 | ||||
|       enteredrealps = filter isReal enteredps | ||||
|  | ||||
| @ -64,6 +64,7 @@ usage = usageInfo usagehdr options ++ usageftr | ||||
| options :: [OptDescr Opt] | ||||
| options = [ | ||||
|   Option "f" ["file"]         (ReqArg File "FILE")   "use a different ledger/timelog file; - means stdin" | ||||
|  ,Option ""  ["no-new-accounts"] (NoArg NoNewAccts)   "don't allow to create new accounts" | ||||
|  ,Option "b" ["begin"]        (ReqArg Begin "DATE")  "report on transactions on or after this date" | ||||
|  ,Option "e" ["end"]          (ReqArg End "DATE")    "report on transactions before this date" | ||||
|  ,Option "p" ["period"]       (ReqArg Period "EXPR") ("report on transactions during the specified period\n" ++ | ||||
| @ -99,6 +100,7 @@ options = [ | ||||
| -- | An option value from a command-line flag. | ||||
| data Opt =  | ||||
|     File    {value::String} |  | ||||
|     NoNewAccts | | ||||
|     Begin   {value::String} |  | ||||
|     End     {value::String} |  | ||||
|     Period  {value::String} |  | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user