python - ORM:发票。v10 中的 compute_taxes 的 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, D, F, C, E, 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),
}
所以我想如果你想实现一些自定义的东西,你需要改变这个方法。
推荐阅读
- python - 有没有办法跳过类实例的位置参数?
- regex - Ansible 正则表达式过滤器
- c# - 缓存控制会影响 Session.Timeout 吗?
- powershell - Export-Csv 生成空输出文件
- python - 如何以非阻塞方式实际使用 pymongo ChangeStreams 和 Flask?
- docker - Docker 容器中的最新 MonetDB
- java - 多部分文件 Sping Boot
- python - 在 elasticsearch 上搜索逗号分隔的字符串列表
- jmeter - Jmeter - 通过命令行运行 .jmx 文件并以 html、csv 和 XML 输出格式获取摘要报告 - 所有三个
- google-apps-script - 有没有办法将特定工作表从一个工作簿复制到特定(和不同)文件夹作为谷歌中自己的独立工作表?