~magentoerpconnect-core-editors/magentoerpconnect/trunk_version

« back to all changes in this revision

Viewing changes to magentoerpconnect/sale.py

[IMP] partner import with pagination using ol_customer.search to avoid evil lack of memory issue on Magento

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- encoding: utf-8 -*-
 
1
# -*- coding: utf-8 -*-
2
2
#########################################################################
3
3
#                                                                       #
4
4
#########################################################################
49
49
    'cancel': 'canceled',
50
50
    'waiting_date': 'holded'}
51
51
SALE_ORDER_IMPORT_STEP = 200
 
52
PARTNER_IMPORT_STEP = 400
52
53
 
53
54
 
54
55
class external_shop_group(magerp_osv.magerp_osv):
55
56
    _inherit = 'external.shop.group'
56
57
 
57
58
    @staticmethod
58
 
    def _get_magento_partners(connection, from_date=False, website_id=False):
 
59
    def _get_magento_partners(connection, filters, delta=PARTNER_IMPORT_STEP):
 
60
        """
 
61
        Get customer using pagination, we get all ids
 
62
        then ask customer info per chunk of ids
 
63
        this to avoid memory and timing issues on Magento server
 
64
 
 
65
        :param connection: connection data to magento
 
66
        :param filters: filter terms for partner search
 
67
        :param delta: size of groups to import
 
68
        """
 
69
        customer_ids = connection.call('ol_customer.search', filters)
 
70
 
 
71
        data = []
 
72
        for i in xrange(0, len(customer_ids), delta):
 
73
            filters = [{'customer_id': {'in': customer_ids[i:i+delta]}}]
 
74
            data += connection.call('customer.list', filters)
 
75
        return data
 
76
 
 
77
    @staticmethod
 
78
    def _get_magento_partners_update(connection, from_date=False, website_id=False):
59
79
        """
60
80
        Get data from magento of new and updated customers since a specific_date
61
81
 
75
95
            else:
76
96
                filters = [{'website_id': {'eq': website_id}}]
77
97
 
78
 
        data = connection.call('customer.list', filters)
79
 
        return data
 
98
        return external_shop_group._get_magento_partners(connection, filters)
80
99
 
81
100
    def _import_partners(self, cr, uid, group, context=None):
82
101
        """
103
122
 
104
123
        # Get partners from magento which where created or updated
105
124
        # since last import
106
 
        data = self._get_magento_partners(connection, from_date, website_id)
 
125
        data = self._get_magento_partners_update(connection, from_date, website_id)
107
126
 
108
127
        data.sort(key=lambda customer: customer['updated_at'] or customer['created_at'])
109
128