[future-trunk] import order with no shipping address

Bug #1004985 reported by Kyle Waid
16
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Magento OpenERP Connector
Confirmed
Undecided
gekko tek

Bug Description

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

Revision history for this message
Kyle Waid (midwest) wrote :

In store pickup will also cause this problem. I have a very crappy patch

=== modified file 'magentoerpconnect/sale.py'
--- magentoerpconnect/sale.py 2012-05-25 15:37:26 +0000
+++ magentoerpconnect/sale.py 2012-05-27 09:47:22 +0000
@@ -377,6 +377,9 @@
         if not defaults: defaults={}
         local_defaults = defaults.copy()

+ #In store pickup or non shipping orders will not contain a shipping address so we map it to the billing address
+ if not resource['shipping_address']:
+ resource['shipping_address'] = resource['billing_address']
         resource['firstname'] = resource['customer_firstname']
         resource['lastname'] = resource['customer_lastname']
         resource['email'] = resource['customer_email']
@@ -404,7 +407,6 @@
             #And create a partner on fly and set the data in the default value
             del resource['customer_id']
             del resource['billing_address']['customer_id']
- del resource['shipping_address']['customer_id']
             defaults = self.create_onfly_partner(cr, uid, external_session, resource, mapping, defaults, context=context)

         return super(sale_order, self)._transform_one_resource(cr, uid, external_session, convertion_type, resource,\
@@ -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['billing_address']['customer_address_id']
- del resource['shipping_address']['customer_address_id']
+ if resource['shipping_address'] == []:
+ resource['shipping_address'] = resource['billing_address']
+ del resource['billing_address']['customer_address_id']
         del resource['billing_address']['address_id']
- del resource['shipping_address']['address_id']
+ #Sometimes these are None
+ resource['shipping_address']['customer_address_id'] = 1
+ resource['shipping_address']['address_id'] = 1
+ del resource['shipping_address']['customer_address_id']
+ del resource['shipping_address']['address_id']

         # 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

Kyle Waid (midwest)
Changed in magentoerpconnect:
status: New → Confirmed
assignee: nobody → gekko tek (gekkotek)
Revision history for this message
Beeno (beon) wrote :

I can confirm that this bug exists in OpenErp 6.1 and Magento 1.7.

The suggested fix above does not work for me.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.