How to create sales invoice

@frappe.whitelist(allow_guest=True)
def create_sales_invoice(customer='',due_date='',item_code='',qty='',rate='',amount=''):
	try:

		sales_invoice_doc = frappe.new_doc("Sales Invoice")
		sales_invoice_doc.customer= customer
		sales_invoice_doc.due_date = due_date
		
		sales_invoice_doc = frappe.db.get_value('items'.append({
			"item_code": sales_invoice_doc.item_code,
	        "qty": sales_invoice_doc.qty,
	        "rate": sales_invoice_doc.rate,
	        "amount": sales_invoice_doc.amount,
	        "uom": default_uom,
				
			"conversion_factor": 1.0,
			"item_name": sales_invoice_doc.item_name,
			"description": sales_invoice_doc.item_name,
			"income_expense_account_field": sales_invoice_doc.temporary_opening_account,
			"cost_center": sales_invoice_doc.cost_center

			}))
		
		
		sales_invoice_doc.save(ignore_permissions=True)
		frappe.db.commit()
		return { "message":"New Sales Invoice {0} Is Created".format(customer),
				"status": "success","user_message":"New Sales Invoice {0} Is Created".format(customer)}
		
	except Exception as e:
		return { "message":"New Sales Invoice {0} is not Created, Missing Some record is present".format(customer),
				"status": "failed","user_message":"New Sales Invoice {0} is not Created".format(customer)}

Why?

Please elaborate query in detail.

I think it should be

	sales_invoice_doc.append('items', {
		"item_code": sales_invoice_doc.item_code,
        "qty": sales_invoice_doc.qty,
        "rate": sales_invoice_doc.rate,
        "amount": sales_invoice_doc.amount,
        "uom": default_uom,		
		"conversion_factor": 1.0,
		"item_name": sales_invoice_doc.item_name,
		"description": sales_invoice_doc.item_name,
		"income_expense_account_field": sales_invoice_doc.temporary_opening_account,
		"cost_center": sales_invoice_doc.cost_center
    })
2 Likes

Thanks, But it’s not work

This one use take fields in sales invoice:-
sales_invoice_doc = frappe.new_doc(“Sales Invoice”)
sales_invoice_doc.customer= customer
sales_invoice_doc.due_date = due_date


This one take fields in Items table which is a child table in sales invoice
sales_invoice_doc = frappe.db.get_value(‘items’.append({
“item_code”: sales_invoice_doc.item_code,
“qty”: sales_invoice_doc.qty,
“rate”: sales_invoice_doc.rate,
“amount”: sales_invoice_doc.amount,
“uom”: default_uom,

		"conversion_factor": 1.0,
		"item_name": sales_invoice_doc.item_name,
		"description": sales_invoice_doc.item_name,
		"income_expense_account_field": sales_invoice_doc.temporary_opening_account,
		"cost_center": sales_invoice_doc.cost_center

		}))

This is the correct way to do it. You have to share the error traceback for us to help you.