Я хочу изменить поле «invoice_status» из класса «SaleOrder», связанного со счетом-фактурой после проверки этого счета-фактуры.
Проверка счета определяется в классе «AccountInvoice» внутри модуля учетной записи:
@api.multi
def invoice_validate(self):
...
Я понял, что поле «имя» из класса «SaleOrder» связано с полем «происхождение» из класса «AccountInvoice».
Итак, я изменил функцию invoice_validate следующим образом:
@api.multi
def invoice_validate(self):
for invoice in self:
...
origin = self.origin
sale_order_id = self.env['sale.order'].search([('name', '=', origin)])[0].id
sale_order_obj = self.env['sale.order'].browse(sale_order_id)
sale_order_obj.write({'invoice_status': 'invoiced'})
return self.write({'state': 'open'})
По какой-то причине часть записи не работает.
Это официальное определение поля «invoice_status» из класса SaleOrder:
invoice_status = fields.Selection([
('upselling', 'Upselling Opportunity'),
('invoiced', 'Fully Invoiced'),
('to invoice', 'To Invoice'),
('no', 'Nothing to Invoice')
], string='Invoice Status', compute='_get_invoiced', store=True, readonly=True, default='no')
sale.order
зависит от invoice_id (ссылка). Это будет запускать вычисление этого поля каждый раз, когда вы вызываете запись в указанном счете. Итак, в этой последней строке (return self.write({'state'; 'open'})
): после того, как вы записываете запись, происходит вычисление, и ваше значение изменяется на значение, которое вам не нужно. 19.01.2017