我想知道如何在opnerp7
中将金额转换为等值金额字符串。
我定义了一个功能字段来实现这个但是它在我的DataBase中创建了一个字段而不是数据,任何人都可以指出我错在哪里,我可以在这里发布我的示例源
查看:
<field name="amount_words"/>
python代码
返回转换金额的函数 -
def _amount_in_words(self, cr, uid, ids, field_name, arg, context=None):
cur_obj = self.pool.get('res.currency')
res = {}
for order in self.browse(cr, uid, ids, context=context):
taxed = untaxed = 0.0
res[order.id] = {
'amount_words': '0.0',
}
val = val1 = 0.0
cur = order.pricelist_id.currency_id
for line in order.order_line:
val1 += line.price_subtotal
val += self._amount_line_tax(cr, uid, line, context=context)
taxed = cur_obj.round(cr, uid, cur, val)
untaxed = cur_obj.round(cr, uid, cur, val1)
res[order.id]['amount_words'] = amount_to_text(float(taxed + untaxed))
return res[order.id]['amount_words']
功能字段声明
'amount_words': fields.function(_amount_in_words, string='In Words', type="char", store=True, help="The amount in words"),
注意: - 'amount_to_text'是我的应用程序全局函数,它正是我想要的但是我无法将相同的数据传递到我的视图中???
'amount_to_text'返回如下数据,如果我通过amount_to_text(150)则返回 只有一百五十卢比
答案 0 :(得分:0)
当您存储功能字段时,您需要提供触发器,以便ORM层知道何时应重新计算并存储您的字段。但是,这主要是针对这样一种情况,即您的功能字段取决于另一个模型的值,并且您希望通过不计算每次显示该值时的数量来加速OpenERP。
经典用例是发票。发票上的总额是行数的总和,因此为了加快速度,有一个触发的功能字段,这样每当发票行更改时,总计就会重新计算并存储在发票上。查看认证模块(OpenERP插件)中的account.invoice或sale.order模型。
在您的情况下,覆盖write方法更有意义并测试值字典中是否包含任何必填字段,如果是,则计算并以字为单位存储金额。
例如(从此处的记忆中提前道歉):
def write(self, cr, uid, ids, values, context = None):
if 'quantity' in values or 'price_unit' in values:
values['amount_in_words'] = _get_amount_in_words(....)
return super(MyClass, self).write(cr, uid, ids, values, context = context)
但有几点: