Я хочу изменить поле «invoice_status» из класса «SaleOrder», связанного с фактурой после подтверждения этого счета.Как изменить поле выбора из другого класса в odoo 9?
Проверка счета-фактуры определяется в классе «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')
Да, я знаю, что поле будет повторно пересчитано, если изменится его поле, но когда я проверяю счет-фактуру, я никогда не изменю этот заказ на продажу или счет-фактуру, и я хочу, чтобы поле invoice_status имело это значение. Ваш ответ проясняет мне многое. Спасибо – MouTio
Нажатие на кнопку вызывает запись в записи. Предположим, что поле в 'sale.order' зависит от invoice_id (ссылка). Он будет вызывать вычисление этого поля каждый раз, когда вы вызываете запись на ссылочном счете. Итак, в этой последней строке ('return self.write ({'state'; 'open'})'): после записи записи происходит вычисление, и ваше значение изменилось на значение, которое вы не хотите. – Majikat