expenseAllocation: Only check Expenses postings.
This commit is contained in:
		
							parent
							
								
									7862919022
								
							
						
					
					
						commit
						d436a388f7
					
				
					 3 changed files with 28 additions and 0 deletions
				
			
		| 
						 | 
					@ -17,6 +17,7 @@
 | 
				
			||||||
from . import errors as errormod
 | 
					from . import errors as errormod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PostingChecker:
 | 
					class PostingChecker:
 | 
				
			||||||
 | 
					    ACCOUNTS = ('',)
 | 
				
			||||||
    VALUES_ENUM = {}
 | 
					    VALUES_ENUM = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _meta_get(self, txn, post, key, default=None):
 | 
					    def _meta_get(self, txn, post, key, default=None):
 | 
				
			||||||
| 
						 | 
					@ -33,8 +34,18 @@ class PostingChecker:
 | 
				
			||||||
    def _default_value(self, txn, post):
 | 
					    def _default_value(self, txn, post):
 | 
				
			||||||
        raise errormod.InvalidMetadataError(txn, post, self.METADATA_KEY)
 | 
					        raise errormod.InvalidMetadataError(txn, post, self.METADATA_KEY)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _should_check(self, txn, post):
 | 
				
			||||||
 | 
					        ok = True
 | 
				
			||||||
 | 
					        if isinstance(self.ACCOUNTS, tuple):
 | 
				
			||||||
 | 
					            ok = ok and post.account.startswith(self.ACCOUNTS)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            ok = ok and re.search(self.ACCOUNTS, post.account)
 | 
				
			||||||
 | 
					        return ok
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def check(self, txn, post):
 | 
					    def check(self, txn, post):
 | 
				
			||||||
        errors = []
 | 
					        errors = []
 | 
				
			||||||
 | 
					        if not self._should_check(txn, post):
 | 
				
			||||||
 | 
					            return errors
 | 
				
			||||||
        source_value = self._meta_get(txn, post, self.METADATA_KEY)
 | 
					        source_value = self._meta_get(txn, post, self.METADATA_KEY)
 | 
				
			||||||
        set_value = source_value
 | 
					        set_value = source_value
 | 
				
			||||||
        if source_value is None:
 | 
					        if source_value is None:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,5 +25,6 @@ class ExpenseAllocations(enum.Enum):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MetaExpenseAllocation(core.PostingChecker):
 | 
					class MetaExpenseAllocation(core.PostingChecker):
 | 
				
			||||||
 | 
					    ACCOUNTS = ('Expenses:',)
 | 
				
			||||||
    METADATA_KEY = 'expenseAllocation'
 | 
					    METADATA_KEY = 'expenseAllocation'
 | 
				
			||||||
    VALUES_ENUM = ExpenseAllocations
 | 
					    VALUES_ENUM = ExpenseAllocations
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,3 +38,19 @@ def test_validity_on_postings(value, value_ok):
 | 
				
			||||||
        assert not errors
 | 
					        assert not errors
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        assert errors
 | 
					        assert errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.parametrize('account', [
 | 
				
			||||||
 | 
					    'Accrued:AccountsReceivable',
 | 
				
			||||||
 | 
					    'Assets:Cash',
 | 
				
			||||||
 | 
					    'Income:Donations',
 | 
				
			||||||
 | 
					    'Liabilities:CreditCard',
 | 
				
			||||||
 | 
					    'UnearnedIncome:Donations',
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					def test_non_expense_accounts_skipped(account):
 | 
				
			||||||
 | 
					    txn = testutil.Transaction(postings=[
 | 
				
			||||||
 | 
					        (account, -25),
 | 
				
			||||||
 | 
					        ('Expenses:General', 25, {'expenseAllocation': 'program'}),
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					    checker = meta_expense_allocation.MetaExpenseAllocation()
 | 
				
			||||||
 | 
					    errors = checker.check(txn, txn.postings[0])
 | 
				
			||||||
 | 
					    assert not errors
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue