Odoo v10以购买树和表格视图中的公司货币显示金额

时间:2017-07-08 04:27:06

标签: openerp odoo-10

我正在使用Odoo v10。

正如我们在purchase.order中所知,有一个基础(货币)字段amount_total,其中包含基于(self)currency_id的采购订单总金额。

现在,我在purchase.order中创建一个新的浮点字段home_currency_amount_total。

import csv

date_column = ("start_date")
f = open("test.csv","r")
csv_reader = csv.reader(f)

headers = None
results = []
for row in csv_reader:
    if not headers:
        headers = []
        for i, col in enumerate(row):
           if col in date_column:
            headers.append(i)
    else:
        results.append(([row[i] for i in headers]))

print results

如何根据公司货币在此字段中输入值?即我希望以公司基础货币获得相应的价值,并且可以在我的树和&表格视图。

我是Odoo的新手,我想知道是否有“快捷方式”(例如内置计算方法)而不是我必须编写相关代码。

2 个答案:

答案 0 :(得分:3)

有一种转换货币的内置方法。

例如

  @api.model
  def _compute(self, from_currency, to_currency, from_amount, round=True):
     if (to_currency == from_currency):
        amount = to_currency.round(from_amount) if round else from_amount
     else:
        rate = self._get_conversion_rate(from_currency, to_currency)
        amount = to_currency.round(from_amount * rate) if round else from_amount * rate
     return amount

因此,如果您想计算转换,可以使用此方法。

此方法需要3个参数,首先是货币,第二个是货币和您要转换为第三个参数的金额。

例如

self.env['res.currency']._compute(order.currency_id,order.company_id.currency_id,order.amount_total)

更新:

像这样创建你的字段。

home_currency_amount_total = fields.Float(string='Total Amount in company currency', compute="_compute", store=True)

@api.depends('order_lines.price_subtotal','company_id','currency_id')
def _compute(self);
    for order in self:
        home_currency_amount_total =  self.env['res.currency']._compute(order.currency_id,order.company_id.currency_id,order.amount_total)

答案 1 :(得分:0)

您可以使用以下方法

class PurchaseOrder(models.Model):
    _inherit = "purchase.order"

    @api.multi
    @api.depends('amount_total')
    def get_amount_in_company_currency(self):
        for purchase_order in self:
            if purchase_order.currency_id.id!=purchase_order.company_id.currency_id.id:
                currency_id = purchase_order.currency_id.with_context(date=purchase_order.date_order)
                purchase_order.home_currency_amount_total = currency_id.compute(purchase_order.amount_total, purchase_order.company_id.currency_id)            
            else:
                purchase_order.home_currency_amount_total=purchase_order.amount_total
    home_currency_amount_total = fields.Float(string='Total Amount in company currency',compute="get_amount_in_company_currency",store=True)

在上面的代码中,我们创建一个计算字段存储 True ,这意味着数据库中的值存储

amount_total 更改时,系统将计算本国货币金额

在方法中,我们检查了公司货币& 采购订单货币不同,系统将计算货币金额

在odoo基础模块中,方法可用于计算货币,您可以在其中传递在上下文中的日期

  

purchase_order.currency_id.with_context(日期= purchase_order.date_order)

     

基于上下文日期系统将采用货币汇率,如果您没有通过   任何日期系统将采用当前日期费率

这会对你有帮助。