;csv: refactor transactionFromCsvRecord
This commit is contained in:
		
							parent
							
								
									2dd6e2d797
								
							
						
					
					
						commit
						bc4ea83d86
					
				| @ -849,35 +849,32 @@ transactionFromCsvRecord sourcepos rules record = t | ||||
|                            ("account"++n) ("amount"++n) ("amount"++n++"-in") | ||||
|                            ("amount"++n++"-out") ("balance"++n) ("comment"++n) t | ||||
|    | ||||
|     -- Adjust the postings to mimic some pre-1.16 behaviour, for compatibility. | ||||
|     -- And also, wherever default "unknown" accounts were used, refine these | ||||
|     -- based on the sign of the posting amount if it's known. | ||||
|     -- XXX split | ||||
|     -- Auto-generate a second posting or second posting amount, | ||||
|     -- for compatibility with pre-1.16 rules. | ||||
|     postings' = | ||||
|       case postings of | ||||
|         -- when rules generate just one posting, and it's a type that needs to | ||||
|         -- be balanced, generate the second posting to balance it. | ||||
|         [(p1,final)] -> | ||||
|           if ptype p1 == VirtualPosting | ||||
|           then [improveUnless final p1] | ||||
|           else [improveUnless final p1, improveUnknownAccountName p2] | ||||
|         -- when rules generate just one posting, of a kind that needs to be | ||||
|         -- balanced, generate the second posting to balance it. | ||||
|         [p1@(p1',_)] -> | ||||
|           if ptype p1' == VirtualPosting then [p1] else [p1, p2] | ||||
|             where | ||||
|               p2 = nullposting{paccount=unknownExpenseAccount | ||||
|                               ,pamount=costOfMixedAmount (-pamount p1) | ||||
|                               ,ptransaction=Just t} | ||||
| 
 | ||||
|               p2 = (nullposting{paccount=unknownExpenseAccount | ||||
|                                ,pamount=costOfMixedAmount (-pamount p1') | ||||
|                                ,ptransaction=Just t}, False) | ||||
|         -- when rules generate exactly two postings, and only the second has | ||||
|         -- no amount, give it the balancing amount. | ||||
|         [(p1,final1), (p2,final2)] -> | ||||
|           if hasAmount p1 && not (hasAmount p2) | ||||
|           then [improveUnless final1 p1, improveUnless final2 p2{pamount=costOfMixedAmount(-(pamount p1))}] | ||||
|           else [improveUnless final1 p1, improveUnless final2 p2] | ||||
| 
 | ||||
|         -- otherwise, just refine any unknown account names. | ||||
|         ps -> [improveUnless final p | (p,final) <- ps] | ||||
|         [p1@(p1',_), p2@(p2',final2)] -> | ||||
|           if hasAmount p1' && not (hasAmount p2') | ||||
|           then [p1, (p2'{pamount=costOfMixedAmount(-(pamount p1'))}, final2)] | ||||
|           else [p1, p2] | ||||
|         -- | ||||
|         ps -> ps | ||||
| 
 | ||||
|     -- Finally, wherever default "unknown" accounts were used, refine them | ||||
|     -- based on the sign of the posting amount if it's now known. | ||||
|     postings'' = map maybeImprove postings' | ||||
|       where | ||||
|         improveUnless final = if final then id else improveUnknownAccountName | ||||
|         maybeImprove (p,final) = if final then p else improveUnknownAccountName p | ||||
| 
 | ||||
|     ---------------------------------------------------------------------- | ||||
|     -- 4. Build the transaction (and name it, so the postings can reference it). | ||||
| @ -891,7 +888,7 @@ transactionFromCsvRecord sourcepos rules record = t | ||||
|           ,tdescription      = T.pack description | ||||
|           ,tcomment          = T.pack comment | ||||
|           ,tprecedingcomment = T.pack precomment | ||||
|           ,tpostings         = postings' | ||||
|           ,tpostings         = postings'' | ||||
|           }   | ||||
| 
 | ||||
| -- | Given CSV rules and a CSV record, generate the corresponding transaction's | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user