跳至內容
選單
此問題已被標幟
1 回覆
1237 瀏覽次數
  File "/home/gowtham.a/workspace/odoo-18.0/odoo/models.py", line 6880, in __getitem__
    return self._fields[key].__get__(self)
  File "/home/gowtham.a/workspace/odoo-18.0/odoo/fields.py", line 1296, in __get__
    raise ValueError(f"Compute method failed to assign {missing_recs}.{self.name}")
ValueError: Compute method failed to assign account.move(2,).exchange_rate


class AccountMove(models.Model):   
_inherit = "account.move"

attn = fields.Many2one('res.partner',string="ATTN")
customer_po_no = fields.Char(string="Customer PO No.")
do_name = fields.Char(string="DO No.")
exchange_rate = fields.Float(string="Rate",digits=(12,4),compute="_compute_currency_rate")


def _compute_currency_rate(self):
for mov in self:
if mov.currency_id:

if mov.company_id.country_id.code != 'SG':
currency_id_rates = self.env['res.currency.rate'].search([('currency_id','=',mov.currency_id.id),('company_id','=',mov.company_id.id)])
for currency_id_rate in currency_id_rates:
if currency_id_rate.name == mov.invoice_date:

mov.exchange_rate = currency_id_rate.rate
break
else:
if mov.invoice_date and currency_id_rate.name:
if currency_id_rate.name.month == mov.invoice_date.month and currency_id_rate.name.year == mov.invoice_date.year:
mov.exchange_rate = currency_id_rate.rate
break
else:
mov.exchange_rate = currency_id_rate.rate
else:
mov.exchange_rate = currency_id_rate.rate
break
else:
currency_id_rates = self.env['res.currency.rate'].search([('currency_id','=',mov.currency_id.id),('company_id','=',mov.company_id.id)])
for currency_id_rate in currency_id_rates:
if currency_id_rate.name == mov.invoice_date:
mov.exchange_rate = 1 / currency_id_rate.rate
break
else:
if mov.invoice_date and currency_id_rate.name:
if currency_id_rate.name.month == mov.invoice_date.month and currency_id_rate.name.year == mov.invoice_date.year:
mov.exchange_rate = 1 / currency_id_rate.rate
break
else:
mov.exchange_rate = 1 / currency_id_rate.rate
else:
mov.exchange_rate = 1 / currency_id_rate.rate
break

頭像
捨棄
最佳答案

Probably it happens, because this compute field is left unassigned from your function. So better to add some default value to avoid unassigned cases such as or make sure it is never left unassigned by modifying your function:

def _compute_currency_rate(self):
    for mov in self:
        mov.exchange_rate = 1.0  # Default value to avoid unassigned cases
​....
頭像
捨棄
相關帖文 回覆 瀏覽次數 活動
2
4月 25
1194
0
11月 24
748
0
8月 25
156
0
8月 25
182
0
8月 25
128