تخطي للذهاب إلى المحتوى
القائمة
لقد تم الإبلاغ عن هذا السؤال
2 الردود
4060 أدوات العرض

I added an onchange function on the field "state" of the sale order to log the state to the log, the function is getting fired when the a quotation is created and it logs the "draft" state of the sale order, but when I confirm it or when create an invoice and pay it, the function is not fired.

The code looks like this:

import logging
from odoo import api, models
_logger = logging.getLogger(__name__)

class SaleOrder(models.Model):
   
_inherit = "sale.order"
    _description = "Sales Order"
    

    @api.onchange('state')
    
def_onchange_sale_order_state(self):
       
_logger.info("on order state change: %s", self.state)


eventually I want to create some records in another model when the quotation is confirmed and turned into sale order.


Any ideas why it's not working?

الصورة الرمزية
إهمال
أفضل إجابة

While creating and paying invoices sales order invoice state changes not the order state so you must add invoice_status too in your onchange method.

الصورة الرمزية
إهمال
الكاتب

Well what I'm trying to reach is to have some action fired when the "sale quotation" turned into a "sale order", this is before creating an invoice or paying it.
The flow is "quotation" => "quotation sent" => "sale order", after that you create a invoice.

أفضل إجابة

Hi Omar,

The Onchange will never get called if the state is changed with the buttons on top of the form. instead the action "action_confirm()" is called. so for your code to work you have to do:

def action_confirm(self):
        _logger.info("on order state change: %s", self.state)
        super().action_confirm()

الصورة الرمزية
إهمال
المنشورات ذات الصلة الردود أدوات العرض النشاط
1
أغسطس 25
2328
Sales quotation تم الحل
2
مارس 24
5154
2
مارس 22
2091
0
أبريل 19
5791
1
مارس 15
5179