Orders in magento can occasionally contain an invoice address but no shipping information. Such case would be a gift card or certificate purchase. The connector throws exception in these cases
Traceback (most recent call last):
File "/usr/local/openerp/openerp-server/openerp/osv/osv.py", line 121, in wrapper
return f(self, dbname, *args, **kwargs)
File "/usr/local/openerp/openerp-server/openerp/osv/osv.py", line 176, in execute
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
File "/usr/local/openerp/openerp-server/openerp/osv/osv.py", line 164, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/usr/local/openerp/e-commerce-addons/base_sale_multichannels/sale.py", line 293, in import_orders
self.import_resources(cr, uid, ids, 'sale.order', context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/external_osv.py", line 409, in import_resources
res = self.pool.get(resource_name)._import_resources(cr, uid, external_session, defaults, method=method, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/decorator.py", line 90, in wrapper
response = func(self, cr, uid, external_session, *args, **kwargs)
File "/usr/local/openerp/e-commerce-addons/base_sale_multichannels/sale.py", line 523, in _import_resources
return super(sale_order, self)._import_resources(cr, uid, external_session, defaults=defaults, method=method, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/external_osv.py", line 444, in _import_resources
res = self._record_external_resources(cr, uid, external_session, resources, defaults=defaults, mapping=mapping, mapping_id=mapping_id, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/external_osv.py", line 520, in _record_external_resources
res = self._record_one_external_resource(cr, uid, external_session, resource, defaults=defaults, mapping=mapping, mapping_id=mapping_id, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/decorator.py", line 48, in wrapped
return func(self, cr, uid, argument, *args, **kwargs)
File "/usr/local/openerp/community/magentoerpconnect/magentoerpconnect/sale.py", line 429, in _record_one_external_resource
res = super(sale_order, self)._record_one_external_resource(cr, uid, external_session, resource, defaults=defaults, mapping=mapping, mapping_id=mapping_id, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/decorator.py", line 129, in wrapper
response = func(self, import_cr, uid, external_session, resource, *args, **kwargs)
File "/usr/local/openerp/e-commerce-addons/base_sale_multichannels/sale.py", line 527, in _record_one_external_resource
return super(sale_order, self)._record_one_external_resource(cr, uid, external_session, resource, defaults=defaults, mapping=mapping, mapping_id=mapping_id, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/external_osv.py", line 540, in _record_one_external_resource
vals = self._transform_one_resource(cr, uid, external_session, 'from_external_to_openerp', resource, mapping=mapping, mapping_id=mapping_id, defaults=defaults, context=context)
File "/usr/local/openerp/openobject-extension/base_external_referentials/decorator.py", line 48, in wrapped
return func(self, cr, uid, argument, *args, **kwargs)
File "/usr/local/openerp/community/magentoerpconnect/magentoerpconnect/sale.py", line 399, in _transform_one_resource
resource = self.clean_magento_resource(cr, uid, resource, context=context)
File "/usr/local/openerp/community/magentoerpconnect/magentoerpconnect/sale.py", line 615, in clean_magento_resource
del resource['shipping_address']['customer_address_id']
TypeError: list indices must be integers, not str
2012-05-26 20:37:36,690 2876 ERROR ? openerp.netsvc: list indices must be integers, not str
In store pickup will also cause this problem. I have a very crappy patch
=== modified file 'magentoerpconn ect/sale. py' ct/sale. py 2012-05-25 15:37:26 +0000 ct/sale. py 2012-05-27 09:47:22 +0000
local_ defaults = defaults.copy()
--- magentoerpconne
+++ magentoerpconne
@@ -377,6 +377,9 @@
if not defaults: defaults={}
+ #In store pickup or non shipping orders will not contain a shipping address so we map it to the billing address 'shipping_ address' ]: 'shipping_ address' ] = resource[ 'billing_ address' ]
resource[ 'firstname' ] = resource[ 'customer_ firstname' ]
resource[ 'lastname' ] = resource[ 'customer_ lastname' ]
resource[ 'email' ] = resource[ 'customer_ email'] 'customer_ id'] 'billing_ address' ]['customer_ id'] 'shipping_ address' ]['customer_ id']
defaults = self.create_ onfly_partner( cr, uid, external_session, resource, mapping, defaults, context=context)
+ if not resource[
+ resource[
@@ -404,7 +407,6 @@
#And create a partner on fly and set the data in the default value
del resource[
del resource[
- del resource[
return super(sale_order, self)._ transform_ one_resource( cr, uid, external_session, convertion_type, resource,\ 'billing_ address' ]['customer_ address_ id'] 'shipping_ address' ]['customer_ address_ id'] 'shipping_ address' ] == []: 'shipping_ address' ] = resource[ 'billing_ address' ] 'billing_ address' ]['customer_ address_ id'] 'billing_ address' ]['address_ id'] 'shipping_ address' ]['address_ id'] 'shipping_ address' ]['customer_ address_ id'] = 1 'shipping_ address' ]['address_ id'] = 1 'shipping_ address' ]['customer_ address_ id'] 'shipping_ address' ]['address_ id']
@@ -611,10 +613,15 @@
So it better to NOT trust magento and not based the address on external_id
To avoid any erreur we remove the key
"""
- del resource[
- del resource[
+ if resource[
+ resource[
+ del resource[
del resource[
- del resource[
+ #Sometimes these are None
+ resource[
+ resource[
+ del resource[
+ del resource[
# For really strange and unknow reason magento want to play with me and make me some joke.
# Depending of the customer installation some time the field customer_id is equal to NONE