Odoo 12 num2words到文本

时间:2018-11-29 00:56:17

标签: odoo odoo-12 odoo-accounting

我是该社区的新手,并且为我的小公司建立了Odoo社区版本。我做了所有事情,只是不知道如何设置num2words以显示发票报告中的总金额!

我在Base / Modules的res_currency.py中找到了num2words api,但是我花了两天时间研究如何连接,什么也没做。我必须继承什么,以及如何以及在发票单据qweb中放入什么?

我制作了这样的模块:

from num2words import num2words

class account_invoice(models.Model):
_inherit = "account.invoice"

 @api.multi
def amount_to_text(self, amount):
    self.ensure_one()
    def _num2words(number, lang):
        try:
            return num2words(number, lang=lang).title()
        except NotImplementedError:
            return num2words(number, lang='en').title()

if num2words is None:
        logging.getLogger(__name__).warning("The library 'num2words' is missing, cannot render textual amounts.")
        return ""

formatted = "%.{0}f".format(self.decimal_places) % amount
    parts = formatted.partition('.')
    integer_value = int(parts[0])
    fractional_value = int(parts[2] or 0)

    lang_code = self.env.context.get('lang') or self.env.user.lang
    lang = self.env['res.lang'].search([('code', '=', lang_code)])
    amount_words = tools.ustr('{amt_value} {amt_word}').format(
                    amt_value=_num2words(integer_value, lang=lang.iso_code),
                    amt_word=self.currency_unit_label,
                    )
    if not self.is_zero(amount - integer_value):
        amount_words += ' ' + _('and') + tools.ustr(' {amt_value} {amt_word}').format(
                    amt_value=_num2words(fractional_value, lang=lang.iso_code),
                    amt_word=self.currency_subunit_label,
                    )
    return amount_words

出现这样的错误:

Error to render compiling AST
AttributeError: 'NoneType' object has no attribute 'currency_id'
Template: account.report_invoice_document_with_payments
Path: /templates/t/t/div/p[1]/span
Node: <span t-if="doc.currency_id" t-esc="doc.currency_id.amount_to_text(doc.amount_total)"/>

在QWeb中,我这样输入:

<span t-if="doc.currency_id" t-esc="doc.currency_id.amount_to_text(doc.amount_total)"/> 

提前谢谢!

2 个答案:

答案 0 :(得分:0)

在您的情况下,“ currency_id ”是一个Many2one字段。 “ res.currency ”模型不包含类“ amount_to_text ”功能。

您已在“ account.invoice ”模型中编写了 amount_to_text 函数。所以这样改变你,

<span t-if="doc.currency_id" t-esc="doc.amount_to_text(doc.amount_total)"/> 

OR(如果您的对象中没有 currency_id 字段)

 <span t-if="doc.amount_to_text" t-esc="doc.amount_to_text(doc.amount_total)"/> 

答案 1 :(得分:0)

请使用以下代码

Date.ParseExact(test.ToString,"dMy", Globalization.CultureInfo.InvariantCulture)

您收到此错误,因为在基本报表中,他们使用o而不是doc。请从基础部分看下面的代码。

<span t-if="o.currency_id" t-esc="o.amount_to_text(o.amount_total)"/>

因此,请尝试使用o代替doc