콘텐츠로 건너뛰기
메뉴
커뮤니티에 참여하려면 회원 가입을 하시기 바랍니다.
신고된 질문입니다
2 답글
2147 화면

Hello, good afternoon! I'm using Odoo to register several leads and structured the kanban pipeline as follows: new -> qualified -> proposition -> won. 

The idea is that when changing the stage to "won", Odoo retrieves the lead data and creates a subscription/invoice in the sales.order. I tried to develop some things, even with code, but it always returns the error:

The operation cannot be completed: 

Create/update: a mandatory field is not set. 

Delete: another model requires the record being deleted. If possible, archive it instead. 

Model: Sales Order (sale.order) 

Field: Customer (partner_id). 

Would anyone know how to provide some coding for this use?

아바타
취소

What have you tried so far? What was your code?

베스트 답변

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

아바타
취소
베스트 답변

It looks like you're running into a common issue when automating sales order creation from CRM leads: missing required fields. The error message indicates that the partner_id field (Customer) in the sale.order model is not being set when you're trying to create the sales order.



  First, ensure that your lead has a customer (partner_id) associated with it. The automation needs to pull this customer data from the lead.

  Next, in your code, make sure you're explicitly setting the partner_id field when creating the sale.order. For example:
  order_vals = {'partner_id': lead.partner_id.id, 'other_field': lead.other_field}

  Finally, double-check that lead.partner_id is actually populated with a valid customer before attempting to create the sales order. Add a check to ensure lead.partner_id exists.


Resources:
https://blog.pragtech.co.in/pos-whatsapp-integration-how-to-go-beyond-receipts-and-build-customer-relationships/#respond

아바타
취소
관련 게시물 답글 화면 활동
1
6월 24
3763
2
9월 22
3616
2
10월 19
3923
2
3월 24
1734
2
8월 23
3002