Server Script - How to create a connection between a Sales order and a Sales invoice?

Hi there,

I have created a Server Script Code that creates a Sales Invoice once that a Sales Order is created based on a Cost Center Selection. The problem is that when the sales invoice is created, the new invoice is not linked to the sales order. How can I Linked them?

This is my code:

# Verifica si el Cost Center es "CELEBRASI - X"
if doc.cost_center == "CELEBRASI - X":
    # Obtén el Sales Order actual
    sales_order = doc

    # Crea un nuevo Sales Invoice
    sales_invoice = frappe.get_doc({
        "doctype": "Sales Invoice",
        "customer": sales_order.customer,
        "company": sales_order.company,
        # Agrega otros campos según tus necesidades
    })

    # Agrega los elementos del Sales Order al Sales Invoice (opcional)
    for item in sales_order.items:
        sales_invoice.append("items", {
            "item_code": item.item_code,
            "qty": item.qty,
            # Agrega otros campos según tus necesidades
        })

    # Inserta el Sales Invoice
    sales_invoice.insert()

    # Guarda y envía el Sales Invoice
    sales_invoice.save()
    sales_invoice.submit()

    # Mensaje de confirmación
    frappe.msgprint("Sales Invoice generado y conectado al Sales Order.")
else:
    # Mensaje en caso de que el Cost Center no sea "CELEBRASI - X"
    frappe.msgprint("El Cost Center no es 'CELEBRASI - X'. No se generó el Sales Invoice.")

Thanks for your help!

@mrgeorge

add some more param in your this part of code

for item in sales_order.items:
        sales_invoice.append("items", {
            "item_code": item.item_code,
            "qty": item.qty,
            "sales_order": sales_order.name,
            "so_detail": item.name
            # Agrega otros campos según tus necesidades
        })
1 Like

Thank you very much, That worked! :smiley: