簡體   English   中英

如何在odoo中將數字轉換為單詞?

[英]How to convert numbers to words in odoo?

在發票中,我想將總額轉換為印度編號系統中的字(數百,數千,十萬,克羅爾)。 我無法使用amount_to_text庫模塊,因為它已設置為歐元。 那么如何在python中編寫函數來實現這一點呢? (不要擔心,它在我的系統中是正確的)當我在自定義模塊中嘗試此代碼時,出現此錯誤TypeError:_int2word()恰好接受了1個參數(給出了7個)

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

ones = ["", "one ","two ","three ","four ", "five ", "six ","seven ","eight ","nine "]
tens = ["ten ","eleven ","twelve ","thirteen ", "fourteen ","fifteen ","sixteen ","seventeen ","eighteen ","nineteen "]
twenties = ["","","twenty ","thirty ","forty ","fifty ","sixty ","seventy ","eighty ","ninety "]
thousands = ["","thousand ","lakh ", "crore "]

def _int2word(amount_total):

    n = amount_total
    n3 = []
    r1 = ""
    ns = str(n)
    for k in range(3, 33, 3):
        r = ns[-k:]
        q = len(ns) - k

        if q < -2:
            break
        else:
            if  q >= 0:
                n3.append(int(r[:3]))
            elif q >= -1:
                n3.append(int(r[:2]))
            elif q >= -2:
                n3.append(int(r[:1]))
        r1 = r

    nw = ""
    for i, x in enumerate(n3):
        b1 = x % 10
        b2 = (x % 100)//10
        b3 = (x % 1000)//100
        #print b1, b2, b3  # test
        if x == 0:
            continue  # skip
        else:
            t = thousands[i]
        if b2 == 0:
            nw = ones[b1] + t + nw
        elif b2 == 1:
            nw = tens[b1] + t + nw
        elif b2 > 1:
            nw = twenties[b2] + ones[b1] + t + nw
        if b3 > 0:
            nw = ones[b3] + "hundred " + nw
    return nw

_columns = {
    'amount_words': fields.function(_int2word, string='In Words', type="char"),
}

你可以使用amount_to_text_en功能從openerp.tools這一函數的3個參數the_value,the_partner.lang和CURRENCY_NAME那么這將是不只是歐元將返回您傳遞給它的任何貨幣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM