Hello
I am trying to create and pay an invoice in odoo using the external API. I get all the data from woocomerce and when status == gls-sent I want to post the invoice and pay it , I attache my code.
def create_order(data, conector):
diario = "Ventas online"
common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(conector['url']))
uid = common.authenticate(conector['db'], conector['user'], conector['password'], {})
models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(conector['url']))
id_partner = find_or_create_client(data, conector)
# Buscar el diario
journal_id = models.execute_kw(conector['db'], uid, conector['password'], 'account.journal', 'search', [[('name', '=', diario)]])
if journal_id:
journal_id = journal_id[0]
else:
raise ValueError(f"El diario '{diario}' no existe en la base de datos.")
invoice_line_ids = []
for line_item in data['line_items']:
product_id = line_item['product_id']
variation_id = line_item.get('variation_id', 0)
if variation_id == 0:
product_template_id = models.execute_kw(conector['db'], uid, conector['password'], 'product.product', 'search', [[('default_code', '=', product_id)]])
product_id_for_invoice = product_id
else:
product_template_id = models.execute_kw(conector['db'], uid, conector['password'], 'product.product', 'search', [[('default_code', '=', variation_id)]])
product_id_for_invoice = variation_id
if not product_template_id:
new_product = {
'name': line_item['name'],
'default_code': product_id_for_invoice,
}
product_template_id = models.execute_kw(conector['db'], uid, conector['password'], 'product.product', 'create', [new_product])
else:
product_template_id = product_template_id[0]
invoice_line_ids.append((0, 0, {
'product_id': product_template_id,
'quantity': line_item['quantity'],
'price_unit': line_item['price']
}))
date=data['date_created'][0:10]
# Crear la factura
invoice_id = models.execute_kw(conector['db'], uid, conector['password'], 'account.move', 'create', [{
'partner_id': id_partner,
'ref': 'Invoice created',
'move_type': 'out_invoice',
'invoice_date':date,
'invoice_line_ids': invoice_line_ids,
'journal_id': journal_id,
}])
estado=data['status']
if estado=='gls-sent' :
models.execute_kw(conector['db'], uid, conector['password'],'account.move', 'write', [[invoice_id], {'state': 'posted','payment_state':'paid'}])
elif estado == 'pending':
models.execute_kw(conector['db'], uid, conector['password'],'account.move', 'write', [[invoice_id], {'state': 'posted','payment_state':'in_payment'}])
else:
models.execute_kw(conector['db'], uid, conector['password'],'account.move', 'write', [[invoice_id], {'state': 'cancel','payment_state':'reversed'}])
return invoice_id
I appreciate all the help