From e1a125ddb3266cf6c3074797ff790615a4c6ec13 Mon Sep 17 00:00:00 2001 From: techspawn Date: Thu, 8 Sep 2016 21:42:09 +0530 Subject: [PATCH 1/2] Changes done in the all the appropriate model files according to the new version of api available in woocommerce version 2.6.4 Fully compatible with woocommerce version(2.4.6) Modified the process of import to get the list of the data Modified the date time format in WOO_DATETIME_FORMAT --- README.md | 4 +-- connector_woocommerce/__init__.py | 1 + connector_woocommerce/backend.py | 1 + connector_woocommerce/connector.py | 2 ++ connector_woocommerce/model/__init__.py | 1 + connector_woocommerce/model/backend.py | 1 + connector_woocommerce/model/customer.py | 16 ++++++++-- connector_woocommerce/model/product.py | 28 +++++++++++++----- .../model/product_category.py | 16 +++++++--- connector_woocommerce/model/sale.py | 17 +++++++++-- connector_woocommerce/related_action.py | 1 + .../static/description/icon.png | Bin 12004 -> 11662 bytes connector_woocommerce/unit/__init__.py | 1 + connector_woocommerce/unit/backend_adapter.py | 8 ++++- connector_woocommerce/unit/binder.py | 1 + .../unit/import_synchronizer.py | 1 + connector_woocommerce/unit/mapper.py | 1 + 17 files changed, 79 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index dfa46ba..5d52171 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,13 @@ Odoo Connector WooCommerce Modules =================================== -*Odoo WooCommerce Connector (also known as connector_woocommerce) is a bi-directional connector, 100% compatible with the last OpenERP 8.0 and latest WooCommerce versions (2.4.x).* +*Odoo WooCommerce Connector (also known as connector_woocommerce) is a single-directional connector, 100% compatible with the last OpenERP 8.0 and latest WooCommerce versions (2.6.4).* [//]: # (addons) Available addons ---------------- addon | version | summary --- | --- | --- -[connector_woocommerce](connector_woocommerce/) | 8.0.1.0.1 | WooCommerce Connector +[connector_woocommerce](connector_woocommerce/) | 8.0.1.0.2 | WooCommerce Connector [//]: # (end addons) diff --git a/connector_woocommerce/__init__.py b/connector_woocommerce/__init__.py index 56fa5e3..a6d9c3e 100755 --- a/connector_woocommerce/__init__.py +++ b/connector_woocommerce/__init__.py @@ -19,6 +19,7 @@ # # + from . import model from . import backend from . import connector diff --git a/connector_woocommerce/backend.py b/connector_woocommerce/backend.py index b86e7a1..713b124 100755 --- a/connector_woocommerce/backend.py +++ b/connector_woocommerce/backend.py @@ -19,6 +19,7 @@ # # + import openerp.addons.connector.backend as backend woo = backend.Backend('woo') diff --git a/connector_woocommerce/connector.py b/connector_woocommerce/connector.py index 960a8d9..dfee93e 100755 --- a/connector_woocommerce/connector.py +++ b/connector_woocommerce/connector.py @@ -19,6 +19,8 @@ # # + + from openerp import models, fields from openerp.addons.connector.connector import (ConnectorEnvironment, install_in_connector) diff --git a/connector_woocommerce/model/__init__.py b/connector_woocommerce/model/__init__.py index d87e529..c157671 100755 --- a/connector_woocommerce/model/__init__.py +++ b/connector_woocommerce/model/__init__.py @@ -19,6 +19,7 @@ # # + from . import backend from . import product_category from . import product diff --git a/connector_woocommerce/model/backend.py b/connector_woocommerce/model/backend.py index 996c7c5..ab3b638 100755 --- a/connector_woocommerce/model/backend.py +++ b/connector_woocommerce/model/backend.py @@ -19,6 +19,7 @@ # # + from openerp import models, api, fields, _ from woocommerce import API from openerp.exceptions import Warning diff --git a/connector_woocommerce/model/customer.py b/connector_woocommerce/model/customer.py index 3f26f47..f2e70fc 100755 --- a/connector_woocommerce/model/customer.py +++ b/connector_woocommerce/model/customer.py @@ -4,6 +4,9 @@ # Tech-Receptives Solutions Pvt. Ltd. # Copyright (C) 2009-TODAY Tech-Receptives(). # +# Techspwan Solutions Pvt Ltd. +# Copyright (C) 2016-TODAY Techspawn Solutions(). +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the @@ -17,7 +20,8 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# + + import logging import xmlrpclib @@ -79,7 +83,7 @@ def search(self, filters=None, from_date=None, to_date=None): """ if filters is None: filters = {} - WOO_DATETIME_FORMAT = '%Y/%m/%d %H:%M:%S' + WOO_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' dt_fmt = WOO_DATETIME_FORMAT if from_date is not None: # updated_at include the created records @@ -89,8 +93,14 @@ def search(self, filters=None, from_date=None, to_date=None): filters.setdefault('updated_at', {}) filters['updated_at']['to'] = to_date.strftime(dt_fmt) # the search method is on ol_customer instead of customer - return self._call('customers/list', + customer_count = self._call('customers/count', + [filters] if filters else [{}]) + get_list = self._call('customers?fields=id&filter[limit]='+str(customer_count['count'])+'&filter[updated_at_max]='+filters['updated_at']['to'] or None +'&filter[updated_at_min]='+filters['updated_at']['from'] or None, [filters] if filters else [{}]) + customer_list=[] + for customer in get_list['customers']: + customer_list.append(customer['id']) + return customer_list @woo diff --git a/connector_woocommerce/model/product.py b/connector_woocommerce/model/product.py index ffe8a88..a90b768 100755 --- a/connector_woocommerce/model/product.py +++ b/connector_woocommerce/model/product.py @@ -4,6 +4,9 @@ # Tech-Receptives Solutions Pvt. Ltd. # Copyright (C) 2009-TODAY Tech-Receptives(). # +# Techspwan Solutions Pvt Ltd. +# Copyright (C) 2016-TODAY Techspawn Solutions(). +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the @@ -17,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# + import logging import urllib2 @@ -77,7 +80,7 @@ class ProductProduct(models.Model): @woo class ProductProductAdapter(GenericAdapter): _model_name = 'woo.product.product' - _woo_model = 'products/details' + _woo_model = 'products' def _call(self, method, arguments): try: @@ -98,7 +101,7 @@ def search(self, filters=None, from_date=None, to_date=None): """ if filters is None: filters = {} - WOO_DATETIME_FORMAT = '%Y/%m/%d %H:%M:%S' + WOO_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' dt_fmt = WOO_DATETIME_FORMAT if from_date is not None: # updated_at include the created records @@ -108,8 +111,15 @@ def search(self, filters=None, from_date=None, to_date=None): filters.setdefault('updated_at', {}) filters['updated_at']['to'] = to_date.strftime(dt_fmt) - return self._call('products/list', + product_count = self._call('products/count', + [filters] if filters else [{}]) + + get_list = self._call('products?fields=id&filter[limit]='+str(product_count['count'])+'&filter[updated_at_max]='+filters['updated_at']['to'] or None +'&filter[updated_at_min]='+filters['updated_at']['from'] or None, [filters] if filters else [{}]) + product_list=[] + for product in get_list['products']: + product_list.append(product['id']) + return product_list def get_images(self, id, storeview_id=None): return self._call('products/' + str(id), [int(id), storeview_id, 'id']) @@ -159,9 +169,10 @@ class ProductProductImporter(WooImporter): def _import_dependencies(self): """ Import the dependencies for the record""" record = self.woo_record - record = record['product'] - for woo_category_id in record['categories']: - self._import_dependency(woo_category_id, + if 'product' in record.keys(): + record = record['product'] + for woo_category_id in record['categories']: + self._import_dependency('?filter[name]='+woo_category_id, 'woo.product.category') def _create(self, data): @@ -284,11 +295,12 @@ def categories(self, record): category_ids = [] main_categ_id = None for woo_category_id in woo_categories: - cat_id = binder.to_openerp(woo_category_id, unwrap=True) + cat_id = self.env['woo.product.category'].search([('name','=',woo_category_id)]) if cat_id is None: raise MappingError("The product category with " "woo id %s is not imported." % woo_category_id) + cat_id = cat_id[0].id category_ids.append(cat_id) if category_ids: main_categ_id = category_ids.pop(0) diff --git a/connector_woocommerce/model/product_category.py b/connector_woocommerce/model/product_category.py index c6fac06..b7a49fa 100755 --- a/connector_woocommerce/model/product_category.py +++ b/connector_woocommerce/model/product_category.py @@ -4,6 +4,9 @@ # Tech-Receptives Solutions Pvt. Ltd. # Copyright (C) 2009-TODAY Tech-Receptives(). # +# Techspwan Solutions Pvt Ltd. +# Copyright (C) 2016-TODAY Techspawn Solutions(). +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the @@ -17,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# + import logging import xmlrpclib @@ -87,7 +90,7 @@ def search(self, filters=None, from_date=None, to_date=None): """ if filters is None: filters = {} - WOO_DATETIME_FORMAT = '%Y/%m/%d %H:%M:%S' + WOO_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' dt_fmt = WOO_DATETIME_FORMAT if from_date is not None: filters.setdefault('updated_at', {}) @@ -95,9 +98,13 @@ def search(self, filters=None, from_date=None, to_date=None): if to_date is not None: filters.setdefault('updated_at', {}) filters['updated_at']['to'] = to_date.strftime(dt_fmt) - return self._call('products/categories/list', - [filters] if filters else [{}]) + get_list = self._call('products/categories?fields=id&filter[limit]=9999&filter[updated_at_max]='+filters['updated_at']['to'] or None +'&filter[updated_at_min]='+filters['updated_at']['from'] or None, + [filters] if filters else [{}]) + category_list=[] + for category in get_list['product_categories']: + category_list.append(category['id']) + return category_list @woo class CategoryBatchImporter(DelayedBatchImporter): @@ -127,6 +134,7 @@ def run(self, filters=None): filters, record_ids) for record_id in record_ids: self._import_record(record_id) + CategoryBatchImporter = CategoryBatchImporter diff --git a/connector_woocommerce/model/sale.py b/connector_woocommerce/model/sale.py index ae84aa8..66fca89 100755 --- a/connector_woocommerce/model/sale.py +++ b/connector_woocommerce/model/sale.py @@ -4,6 +4,9 @@ # Tech-Receptives Solutions Pvt. Ltd. # Copyright (C) 2009-TODAY Tech-Receptives(). # +# Techspwan Solutions Pvt Ltd. +# Copyright (C) 2016-TODAY Techspawn Solutions(). +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the @@ -17,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# + import logging import xmlrpclib @@ -164,7 +167,7 @@ def search(self, filters=None, from_date=None, to_date=None): """ if filters is None: filters = {} - WOO_DATETIME_FORMAT = '%Y/%m/%d %H:%M:%S' + WOO_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' dt_fmt = WOO_DATETIME_FORMAT if from_date is not None: # updated_at include the created records @@ -174,8 +177,16 @@ def search(self, filters=None, from_date=None, to_date=None): filters.setdefault('updated_at', {}) filters['updated_at']['to'] = to_date.strftime(dt_fmt) - return self._call('orders/list', + + order_count = self._call('orders/count', + [filters] if filters else [{}]) + + get_list = self._call('orders?fields=id&filter[limit]='+str(order_count['count'])+'&filter[updated_at_max]='+filters['updated_at']['to'] or None +'&filter[updated_at_min]='+filters['updated_at']['from'] or None, [filters] if filters else [{}]) + order_list=[] + for order in get_list['orders']: + order_list.append(order['id']) + return order_list @woo diff --git a/connector_woocommerce/related_action.py b/connector_woocommerce/related_action.py index aaabb39..a5cd8ce 100755 --- a/connector_woocommerce/related_action.py +++ b/connector_woocommerce/related_action.py @@ -19,6 +19,7 @@ # # + import functools from openerp import exceptions, _ from openerp.addons.connector import related_action diff --git a/connector_woocommerce/static/description/icon.png b/connector_woocommerce/static/description/icon.png index 0d5b58d7a36b84abfef13c2720c652afc39ddbbe..279e16f5e43fbfccadd773b337205f3162eb29c8 100644 GIT binary patch literal 11662 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 literal 12004 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. # +# Techspwan Solutions Pvt Ltd. +# Copyright (C) 2016-TODAY Techspawn Solutions(). +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the @@ -17,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# + import socket import logging @@ -206,6 +209,9 @@ def read(self, id, attributes=None): # attributes). The right correction is to install the # compatibility patch on WooCommerce. arguments.append(attributes) + if self._woo_model=='products/categories' and type(id)!=int: + categ = self._call('%s' % self._woo_model + str(id), []) + return {'product_category':categ['product_categories'][0]} return self._call('%s/' % self._woo_model + str(id), []) def search_read(self, filters=None): diff --git a/connector_woocommerce/unit/binder.py b/connector_woocommerce/unit/binder.py index bf4cfc8..21ae8ff 100755 --- a/connector_woocommerce/unit/binder.py +++ b/connector_woocommerce/unit/binder.py @@ -19,6 +19,7 @@ # # + import openerp from openerp.addons.connector.connector import Binder from ..backend import woo diff --git a/connector_woocommerce/unit/import_synchronizer.py b/connector_woocommerce/unit/import_synchronizer.py index fb3535a..40983d9 100755 --- a/connector_woocommerce/unit/import_synchronizer.py +++ b/connector_woocommerce/unit/import_synchronizer.py @@ -19,6 +19,7 @@ # # + import logging from openerp import fields, _ from openerp.addons.connector.queue.job import job, related_action diff --git a/connector_woocommerce/unit/mapper.py b/connector_woocommerce/unit/mapper.py index 1d148a7..0918f41 100755 --- a/connector_woocommerce/unit/mapper.py +++ b/connector_woocommerce/unit/mapper.py @@ -20,6 +20,7 @@ # + def normalize_datetime(field): """Change a invalid date which comes from Woo, if no real date is set to null for correct import to From cc88978f3f099cabbe4aa620d5153152f68a5c7c Mon Sep 17 00:00:00 2001 From: techspawn Date: Fri, 9 Sep 2016 18:54:34 +0530 Subject: [PATCH 2/2] Changed the logo to default , removed the extra spaces --- connector_woocommerce/__init__.py | 1 - connector_woocommerce/backend.py | 1 - connector_woocommerce/connector.py | 2 -- connector_woocommerce/model/__init__.py | 1 - connector_woocommerce/model/backend.py | 1 - connector_woocommerce/model/customer.py | 3 +-- connector_woocommerce/model/product.py | 2 +- .../model/product_category.py | 2 +- connector_woocommerce/model/sale.py | 2 +- connector_woocommerce/related_action.py | 1 - .../static/description/icon.png | Bin 11662 -> 12004 bytes connector_woocommerce/unit/__init__.py | 1 - connector_woocommerce/unit/backend_adapter.py | 2 +- connector_woocommerce/unit/binder.py | 1 - .../unit/import_synchronizer.py | 1 - connector_woocommerce/unit/mapper.py | 2 -- 16 files changed, 5 insertions(+), 18 deletions(-) diff --git a/connector_woocommerce/__init__.py b/connector_woocommerce/__init__.py index a6d9c3e..56fa5e3 100755 --- a/connector_woocommerce/__init__.py +++ b/connector_woocommerce/__init__.py @@ -19,7 +19,6 @@ # # - from . import model from . import backend from . import connector diff --git a/connector_woocommerce/backend.py b/connector_woocommerce/backend.py index 713b124..b86e7a1 100755 --- a/connector_woocommerce/backend.py +++ b/connector_woocommerce/backend.py @@ -19,7 +19,6 @@ # # - import openerp.addons.connector.backend as backend woo = backend.Backend('woo') diff --git a/connector_woocommerce/connector.py b/connector_woocommerce/connector.py index dfee93e..960a8d9 100755 --- a/connector_woocommerce/connector.py +++ b/connector_woocommerce/connector.py @@ -19,8 +19,6 @@ # # - - from openerp import models, fields from openerp.addons.connector.connector import (ConnectorEnvironment, install_in_connector) diff --git a/connector_woocommerce/model/__init__.py b/connector_woocommerce/model/__init__.py index c157671..d87e529 100755 --- a/connector_woocommerce/model/__init__.py +++ b/connector_woocommerce/model/__init__.py @@ -19,7 +19,6 @@ # # - from . import backend from . import product_category from . import product diff --git a/connector_woocommerce/model/backend.py b/connector_woocommerce/model/backend.py index ab3b638..996c7c5 100755 --- a/connector_woocommerce/model/backend.py +++ b/connector_woocommerce/model/backend.py @@ -19,7 +19,6 @@ # # - from openerp import models, api, fields, _ from woocommerce import API from openerp.exceptions import Warning diff --git a/connector_woocommerce/model/customer.py b/connector_woocommerce/model/customer.py index f2e70fc..51d3242 100755 --- a/connector_woocommerce/model/customer.py +++ b/connector_woocommerce/model/customer.py @@ -20,8 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - - +# import logging import xmlrpclib diff --git a/connector_woocommerce/model/product.py b/connector_woocommerce/model/product.py index a90b768..be4c3b7 100755 --- a/connector_woocommerce/model/product.py +++ b/connector_woocommerce/model/product.py @@ -20,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - +# import logging import urllib2 diff --git a/connector_woocommerce/model/product_category.py b/connector_woocommerce/model/product_category.py index b7a49fa..71f8bea 100755 --- a/connector_woocommerce/model/product_category.py +++ b/connector_woocommerce/model/product_category.py @@ -20,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - +# import logging import xmlrpclib diff --git a/connector_woocommerce/model/sale.py b/connector_woocommerce/model/sale.py index 66fca89..ac1b72a 100755 --- a/connector_woocommerce/model/sale.py +++ b/connector_woocommerce/model/sale.py @@ -20,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - +# import logging import xmlrpclib diff --git a/connector_woocommerce/related_action.py b/connector_woocommerce/related_action.py index a5cd8ce..aaabb39 100755 --- a/connector_woocommerce/related_action.py +++ b/connector_woocommerce/related_action.py @@ -19,7 +19,6 @@ # # - import functools from openerp import exceptions, _ from openerp.addons.connector import related_action diff --git a/connector_woocommerce/static/description/icon.png b/connector_woocommerce/static/description/icon.png index 279e16f5e43fbfccadd773b337205f3162eb29c8..0d5b58d7a36b84abfef13c2720c652afc39ddbbe 100644 GIT binary patch literal 12004 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 diff --git a/connector_woocommerce/unit/__init__.py b/connector_woocommerce/unit/__init__.py index 6a73169..bf30deb 100755 --- a/connector_woocommerce/unit/__init__.py +++ b/connector_woocommerce/unit/__init__.py @@ -19,7 +19,6 @@ # # - from . import import_synchronizer from . import backend_adapter from . import mapper diff --git a/connector_woocommerce/unit/backend_adapter.py b/connector_woocommerce/unit/backend_adapter.py index 700b48c..b61e293 100755 --- a/connector_woocommerce/unit/backend_adapter.py +++ b/connector_woocommerce/unit/backend_adapter.py @@ -20,7 +20,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - +# import socket import logging diff --git a/connector_woocommerce/unit/binder.py b/connector_woocommerce/unit/binder.py index 21ae8ff..bf4cfc8 100755 --- a/connector_woocommerce/unit/binder.py +++ b/connector_woocommerce/unit/binder.py @@ -19,7 +19,6 @@ # # - import openerp from openerp.addons.connector.connector import Binder from ..backend import woo diff --git a/connector_woocommerce/unit/import_synchronizer.py b/connector_woocommerce/unit/import_synchronizer.py index 40983d9..fb3535a 100755 --- a/connector_woocommerce/unit/import_synchronizer.py +++ b/connector_woocommerce/unit/import_synchronizer.py @@ -19,7 +19,6 @@ # # - import logging from openerp import fields, _ from openerp.addons.connector.queue.job import job, related_action diff --git a/connector_woocommerce/unit/mapper.py b/connector_woocommerce/unit/mapper.py index 0918f41..1b70cf8 100755 --- a/connector_woocommerce/unit/mapper.py +++ b/connector_woocommerce/unit/mapper.py @@ -19,8 +19,6 @@ # # - - def normalize_datetime(field): """Change a invalid date which comes from Woo, if no real date is set to null for correct import to