Hi,
The error you’re getting is very common when trying to automatically create a Sales Order from a CRM Lead in Odoo. It basically says that the partner_id (Customer) is not set when creating the sale order, and partner_id is mandatory.
Try the following code,
from odoo import models, api, fields
from odoo.exceptions import UserError
class CrmLead(models.Model):
_inherit = 'crm.lead'
def action_create_sale_order(self):
for lead in self:
if not lead.partner_id:
raise UserError("Please set a Customer for this lead before creating a Sales Order.")
sale_order_vals = {
'partner_id': lead.partner_id.id,
'origin': lead.name,
'order_line': [(0, 0, {
'product_id': lead.product_id.id if lead.product_id else False,
'product_uom_qty': 1,
'price_unit': lead.expected_revenue or 0.0,
})],
}
self.env['sale.order'].create(sale_order_vals)
Trigger the method on stage change
def write(self, vals):
res = super(CrmLead, self).write(vals)
if 'stage_id' in vals:
for lead in self:
if lead.stage_id.name.lower() == 'won':
lead.action_create_sale_order()
return res
* Customer must exist: The partner_id field is mandatory for sale.order. If your leads don’t have a customer yet, you need to either:
- Force the user to select one before moving to “won”, or
- Automatically create a partner from the lead data.
* Optional products: If the lead doesn’t have a product, you can skip or use a default product.
* Order lines: You can customize the order lines as needed, e.g., subscription, quantity, or price.
Hope it helps
What have you tried so far? What was your code?