diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index afbe53fec..db95a71e7 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -623,9 +623,9 @@ showRecord r = "the CSV record is: "++intercalate ", " (map show r) getEffectiveAssignment :: CsvRules -> CsvRecord -> JournalFieldName -> Maybe FieldTemplate getEffectiveAssignment rules record f = lastMay $ assignmentsFor f where - assignmentsFor f = map snd $ toplevelassignments ++ conditionalassignments + assignmentsFor f = map snd $ filter ((==f).fst) $ toplevelassignments ++ conditionalassignments where - toplevelassignments = filter ((==f).fst) $ rassignments rules + toplevelassignments = rassignments rules conditionalassignments = concatMap snd $ filter blockMatches $ blocksAssigning f where blocksAssigning f = filter (any ((==f).fst) . snd) $ rconditionalblocks rules diff --git a/tests/read-csv.test b/tests/read-csv.test index 7fb52e691..bd46af68e 100644 --- a/tests/read-csv.test +++ b/tests/read-csv.test @@ -35,3 +35,12 @@ # >>>2 /using conversion rules file.*t.rules/ # >>>=0 +# 4. handle conditions assigning multiple fields + rm -rf t.rules$$; printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\nif Flubber\n account2 acct\n comment cmt' >t.rules$$; echo '10/2009/09,Flubber Co,50' | hledgerdev -f- print --rules-file t.rules$$; rm -rf t.rules$$ +>>> +2009/09/10 Flubber Co ;cmt + acct $-50 + assets:myacct $50 + +>>>2 /using conversion rules file.*t.rules/ +>>>=0