Reviewers: ,
Please review this at http://codereview.tryton.org/453002/ Affected files: M invoice.py Index: invoice.py =================================================================== --- a/invoice.py +++ b/invoice.py @@ -1417,7 +1417,8 @@ ('kind', '=', 'revenue'), ('kind', '=', 'expense')), ], - on_change=['account', 'product'], + on_change=['account', 'product', '_parent_invoice.party', + '_parent_invoice.type'], states={ 'invisible': Eval('type') != 'line', 'required': Eval('type') == 'line', @@ -1778,16 +1779,37 @@ return categories def on_change_account(self, values): + party_obj = Pool().get('party.party') account_obj = Pool().get('account.account') + tax_rule_obj = Pool().get('account.tax.rule') + if values.get('product'): return {} taxes = [] result = { 'taxes': taxes, } + if (values.get('_parent_invoice.party') + and values.get('_parent_invoice.type')): + party = party_obj.browse(values['_parent_invoice.party']) + if values['_parent_invoice.type'] in ('in_invoice', + 'in_credit_note'): + tax_rule = party.supplier_tax_rule + else: + tax_rule = party.customer_tax_rule + else: + tax_rule = None + if values.get('account'): account = account_obj.browse(values['account']) - taxes.extend(tax.id for tax in account.taxes) + pattern = self._get_tax_rule_pattern(party, values) + for tax in account.taxes: + if tax_rule: + tax_ids = tax_rule_obj.apply(tax_rule, tax, pattern) + if tax_ids: + taxes.extend(tax_ids) + continue + taxes.append(tax.id) return result def check_modify(self, ids): -- [email protected] mailing list
