Skip to Content
Menu
This question has been flagged
811 Zobrazenia

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


Avatar
Zrušiť
Related Posts Replies Zobrazenia Aktivita
1
mar 25
1245
1
mar 23
4971
1
okt 22
11202
7
jan 22
18580
1
jan 24
14949