Importar datos via web services desde profit

Asked by Juan Márquez on 2011-07-27

Buenas, estoy tratando de importar los clientes y proveedores desde el sistema profit administrativo 2k8 versión corporativa (sql server) via web services, pero luego de instalar la localización de Venezuela para la versión 6.0 no puedo importar los partners porque me pide que tenga una dirección y no puedo crear la dirección porque no tengo patner :-(

código python:

def create_partner(row,is_cust=True):
    # create new partner
    partner = {
       'ref': px.str_import(row['co_cli']),
       'vat': px.str_rif(row['rif']),
       'name': px.str_import(row['cli_des']),
       'lang': 'es_VE',
       'customer': is_cust,
       'supplier': not(is_cust),
        }
    partner_id = px.object_proxy.execute(px.db, px.uid, px.pwrd, 'res.partner', 'create', partner)

    # create new address for partner
    address = {
       'partner_id': partner_id,
       'type' : 'invoice',
       'name': px.str_import(row['respons']),
       'street': px.str_import(row['direc1']),
       'zip': px.str_import(row['zip']),
       'city': px.str_import(row['ciudad']).capitalize(),
       'phone': px.str_import(row['telefonos']),
       'fax': px.str_import(row['fax']),
       'country_id': px.get_country_id(px.str_import(row['co_pais'])),
        }
    address_id = px.object_proxy.execute(px.db, px.uid, px.pwrd, 'res.partner.address', 'create', address)

La pregunta es: ¿Existe alguna manera (desde web services) de iniciar una transacción, crear ambos registros y luego lanzar un commit?

Puedo crear los dos datos en un sólo paso?.

Dejo las funciones de conversión por si e son útiles a alguien más:

def str_import(s):
    """
    This function "clean" the strings imported from profit
    """
    s = s.replace(' ',' ')
    s = s.replace('\n','')
    s = s.replace('\t','')
    s = s.strip()
    s = unicode(s, 'latin-1').encode('utf-8')
    return s

def str_rif(s):
    """
    This function set RIF to standart format: (VEJ12345678)
    """
    s = str_import(s)
    s = s.replace(' ','')
    s = s.replace('-','')
    s = s.replace('.','')
    s = s.capitalize()
    s = '%s%s' % ('VE',s)
    return s

Question information

Language:
Spanish Edit question
Status:
Solved
For:
Openerp Venezuela Edit question
Assignee:
No assignee Edit question
Solved by:
Javier Duran
Solved:
2011-07-29
Last query:
2011-07-29
Last reply:
2011-07-29
Best Javier Duran (javieredm) said : #1

La pregunta es: ¿Existe alguna manera (desde web services) de iniciar una transacción, crear ambos registros y luego lanzar un commit?

Si.

Siguiendo tu ejemplo:

omitimos el campo partner_id en la dirección ya que esta relación se creará automáticamente al crear al partner.

    # create new address for partner
    address = {
       'type' : 'invoice',
       'name': px.str_import(row['respons']),
       'street': px.str_import(row['direc1']),
       'zip': px.str_import(row['zip']),
       'city': px.str_import(row['ciudad']).capitalize(),
       'phone': px.str_import(row['telefonos']),
       'fax': px.str_import(row['fax']),
       'country_id': px.get_country_id(px.str_import(row['co_pais'])),
        }

le agregamos al diccionario partner la dirección para que se cree con el partner asociado:
   # create new partner
    partner = {
       'ref': px.str_import(row['co_cli']),
       'vat': px.str_rif(row['rif']),
       'name': px.str_import(row['cli_des']),
       'lang': 'es_VE',
       'customer': is_cust,
       'supplier': not(is_cust),
       'address': [(0,0, address)],
        }

   # creamos el partner
    partner_id = px.object_proxy.execute(px.db, px.uid, px.pwrd, 'res.partner', 'create', partner)

Aquí puedes encontrar la explicación de los valores de la tupla:
http://openobject.com/wiki/index.php/Developers:Developper%27s_Book/Objects/ObjectsAccess/ObjectsWritingValues

De todos modos se corrigio en el trunk de la localización este inconveniente para que permita crear un partner sin dirección, aquí tienes el enlace:
http://bazaar.launchpad.net/~openerp-venezuela/openerp-venezuela-localization/6.0-trunk/revision/369

Juan Márquez (jmarquez) said : #2

Thanks Javier Duran - Vauxoo, that solved my question.