Search code examples
pythonodooxml-rpc

Migrating sales from xl to odoo using XML-RPC


Im trying to migrate sales order from excel sheet to odoo using xmlrpc so far i have the products working,client working but when i try to insert the sale order i get this error

Traceback (most recent call last):
  File "/home/oasis/PycharmProjects/somig/migrator.py", line 75, in <module>
    'validity_date':"2016-01-18",
  File "/usr/lib/python2.7/xmlrpclib.py", line 1243, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1602, in __request
    verbose=self.__verbose
  File "/usr/lib/python2.7/xmlrpclib.py", line 1283, in request
    return self.single_request(host, handler, request_body, verbose)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1316, in single_request
    return self.parse_response(response)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1493, in parse_response
    return u.close()
  File "/usr/lib/python2.7/xmlrpclib.py", line 800, in close
    raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: 'Traceback (most recent call last):\n  File "/usr/lib/python2.7/dist-packages/openerp/service/wsgi_server.py", line 56, in xmlrpc_return\n    result = openerp.http.dispatch_rpc(service, method, params)\n  File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 114, in dispatch_rpc\n    result = dispatch(method, params)\n  File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 37, in dispatch\n    res = fn(db, uid, *params)\n  File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 173, in execute_kw\n    return execute(db, uid, obj, method, *args, **kw or {})\n  File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 118, in wrapper\n    return f(dbname, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 181, in execute\n    res = execute_cr(cr, uid, obj, method, *args, **kw)\n  File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 170, in execute_cr\n    return getattr(object, method)(cr, uid, *args, **kw)\n  File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 250, in wrapper\n    return old_api(self, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 354, in old_api\n    result = method(recs, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/addons/sale/sale.py", line 232, in create\n    result = super(SaleOrder, self).create(vals)\n  File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 248, in wrapper\n    return new_api(self, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/addons/mail/models/mail_thread.py", line 233, in create\n    thread = super(MailThread, self).create(values)\n  File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 248, in wrapper\n    return new_api(self, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/models.py", line 4157, in create\n    record = self.browse(self._create(old_vals))\n  File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 248, in wrapper\n    return new_api(self, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 490, in new_api\n    result = method(self._model, cr, uid, *args, **old_kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/models.py", line 4301, in _create\n    tuple([u[2] for u in updates if len(u) > 2])\n  File "/usr/lib/python2.7/dist-packages/openerp/sql_db.py", line 141, in wrapper\n    return f(self, *args, **kwargs)\n  File "/usr/lib/python2.7/dist-packages/openerp/sql_db.py", line 220, in execute\n    res = self._obj.execute(query, params)\nProgrammingError: column "partner_id" is of type integer but expression is of type integer[]\nLINE 1: ...1, NULL, \'draft\', 6, 1, 1, \'2016-09-03 16:50:24\', ARRAY[6], ...\n                                                             ^\nHINT:  You will need to rewrite or cast the expression.\n\n'>

Process finished with exit code 1

my code is the following

import psycopg2
import psycopg2.extras
import pyexcel_xls
import pyexcel as pe
from pyexcel_xls import get_data
from datetime import datetime
import xmlrpclib
import json

url = 'http://localhost:8070'
db = 'fresh'
username = 'admin'
password = 'odoo'
#data = get_data("salesorder.xls")
#print(json.dumps(data))
records = pe.get_records(file_name="salesorder.xls")
for record in records:
    print record['name']
    names = record['name']
    print record['location']
    print record['zip']
    print record['republic']
    dates = record['date']
    print dates
    print datetime.strptime(dates,'%d/%M/%Y')
    lastdat=datetime.strptime(dates,'%d/%M/%Y')
    print record['product']
    productname= record['product']


#Check if the customer is in or else insert him
    common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
    uid = common.authenticate(db, username, password, {})
    output = common.version()
    models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
    partnerids = models.execute_kw(db, uid, password,
                    'res.partner', 'search', [[['name', '=', record['name']]]])

    if partnerids:
        print partnerids

    else:
        newpartn = models.execute_kw(db, uid, password, 'res.partner', 'create', [{
            'name': names,
        }])
        partnerids=newpartn
        print partnerids
#Check if a product is in else insert a new product
    common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
    uid = common.authenticate(db, username, password, {})
    output = common.version()
    models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
    productids = models.execute_kw(db, uid, password,
                                   'product.product', 'search', [[['name', '=', record['product']]]])

    if productids:
        print productids

    else:
        newproduct = models.execute_kw(db, uid, password, 'product.product', 'create', [{
            'name': productname,
            'default_code': partnerids
        }])
        productids=newproduct
        print productids



    uid = common.authenticate(db, username, password, {})
    print output
    models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
    id = models.execute_kw(db, uid, password, 'sale.order', 'create', [{
        'partner_id': partnerids,
     #   'name': names,
        'validity_date':"2016-01-18",
        #'payment_term_id':1,
        # 'user_id':"1"
        # 'state':"sale"


    }])
    print id

the 75th line is the one of validity date


Solution

  • The Error message says:

    ProgrammingError: column "partner_id" is of type integer but expression is of type integer[].

    Just give partnerids as an integer:

    if partnerids:
       partnerids = partnerids[0]
       print partnerids