如何解决ORM:发票 v10 中计算税的 v14 等价物是什么?
V10 中函数 compute_taxes() 的 V14 等效项是什么,它在其他模块中用于计算创建的新发票的税费。 谢谢。
def compute_taxes(self):
"""Function used in other module to compute the taxes on a fresh invoice created (onchanges did not applied)"""
account_invoice_tax = self.env['account.invoice.tax']
ctx = dict(self._context)
for invoice in self:
# Delete non-manual tax lines
self._cr.execute("DELETE FROM account_invoice_tax WHERE invoice_id=%s AND manual is False",(invoice.id,))
if self._cr.rowcount:
self.invalidate_cache()
# Generate one tax line per tax,however many invoice lines it's applied to
tax_grouped = invoice.get_taxes_values()
# Create new tax lines
for tax in tax_grouped.values():
account_invoice_tax.create(tax)
# dummy write on self to trigger recomputations
return self.with_context(ctx).write({'invoice_line_ids': []})
解决方法
是的,我看到 v14 中的架构“有点”改变(我只是比较了代码,但从未使用过 odoo)。
您现在正在寻找的是我相信 account_tax.py 文件中第 342 行的方法:
def compute_all(self,price_unit,currency=None,quantity=1.0,product=None,partner=None,is_refund=False,handle_price_include=True):
""" Returns all information required to apply taxes (in self + their children in case of a tax group).
We consider the sequence of the parent for group of taxes.
Eg. considering letters as taxes and alphabetic order as sequence :
[G,B([A,D,F]),E,C] will be computed as [A,F,C,G]
'handle_price_include' is used when we need to ignore all tax included in price. If False,it means the
amount passed to this method will be considered as the base of all computations.
RETURN: {
'total_excluded': 0.0,# Total without taxes
'total_included': 0.0,# Total with taxes
'total_void' : 0.0,# Total with those taxes,that don't have an account set
'taxes': [{ # One dict for each tax in self and their children
'id': int,'name': str,'amount': float,'sequence': int,'account_id': int,'refund_account_id': int,'analytic': boolean,}],} ..."""
... 这个方法返回类似:
return {
'base_tags': taxes.mapped(is_refund and 'refund_repartition_line_ids' or 'invoice_repartition_line_ids').filtered(lambda x: x.repartition_type == 'base').mapped('tag_ids').ids,'taxes': taxes_vals,'total_excluded': sign * total_excluded,'total_included': sign * currency.round(total_included),'total_void': sign * currency.round(total_void),}
所以我想如果你想实现一些自定义的东西,你需要改变这个方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。