diff --git a/connector_opencart/components/api/opencart.py b/connector_opencart/components/api/opencart.py
index d1914f74..f0dfe367 100644
--- a/connector_opencart/components/api/opencart.py
+++ b/connector_opencart/components/api/opencart.py
@@ -5,6 +5,9 @@ import requests
from urllib.parse import urlencode
from json import loads, dumps
+import logging
+_logger = logging.getLogger(__name__)
+
class Opencart:
@@ -37,11 +40,19 @@ class Opencart:
if params:
encoded_url += '?%s' % urlencode(params)
headers = self.get_headers(encoded_url, method)
-
+ _logger.debug('send_request method: %s url: %s headers: %s params: %s body: %s' % (
+ method,
+ url,
+ headers,
+ params,
+ body
+ ))
if method == 'GET':
- return loads(self.session.get(url, params=params, headers=headers).text)
+ result_text = self.session.get(url, params=params, headers=headers).text
elif method == 'PUT' or method == 'POST':
- return loads(self.session.put(url, data=body, headers=headers).text)
+ result_text = self.session.put(url, data=body, headers=headers).text
+ _logger.debug('raw_text: ' + str(result_text))
+ return loads(result_text)
class Resource:
diff --git a/connector_opencart/models/opencart/backend.py b/connector_opencart/models/opencart/backend.py
index cc362ac0..46620a87 100644
--- a/connector_opencart/models/opencart/backend.py
+++ b/connector_opencart/models/opencart/backend.py
@@ -62,6 +62,8 @@ class OpencartBackend(models.Model):
"in Odoo.",
)
# payment_mode_id = fields.Many2one(comodel_name='account.payment.mode', string="Payment Mode")
+ coupon_product_id = fields.Many2one(comodel_name='product.product', string='Coupon Product',
+ help='Product to represent coupon discounts.')
# New Product fields.
product_categ_id = fields.Many2one(comodel_name='product.category', string='Product Category',
diff --git a/connector_opencart/models/opencart/store.py b/connector_opencart/models/opencart/store.py
index 31e71e39..4444b16f 100644
--- a/connector_opencart/models/opencart/store.py
+++ b/connector_opencart/models/opencart/store.py
@@ -50,6 +50,8 @@ class OpencartStore(models.Model):
"order 36071 in Opencart, will be named 'OC-36071' "
"in Odoo. (overridden from backend)",
)
+ coupon_product_id = fields.Many2one(comodel_name='product.product', string='Coupon Product',
+ help='Product to represent coupon discounts.')
class OpencartStoreAdapter(Component):
diff --git a/connector_opencart/models/sale_order/importer.py b/connector_opencart/models/sale_order/importer.py
index f97691d9..dd8f1308 100644
--- a/connector_opencart/models/sale_order/importer.py
+++ b/connector_opencart/models/sale_order/importer.py
@@ -61,6 +61,34 @@ class SaleOrderImportMapper(Component):
children = [('products', 'opencart_order_line_ids', 'opencart.sale.order.line'),
]
+ def _add_coupon_lines(self, map_record, values):
+ # Data from API
+ # 'coupons': [{'amount': '7.68', 'code': '1111'}],
+ record = map_record.source
+
+ coupons = record.get('coupons')
+ if not coupons:
+ return values
+
+ coupon_product = self.options.store.coupon_product_id or self.backend_record.coupon_product_id
+ if not coupon_product:
+ coupon_product = self.env.ref('connector_ecommerce.product_product_discount', raise_if_not_found=False)
+
+ if not coupon_product:
+ raise ValueError('Coupon %s on order requires coupon product in configuration.' % (coupons, ))
+ for coupon in coupons:
+ line_builder = self.component(usage='order.line.builder')
+ line_builder.price_unit = -float(coupon.get('amount', 0.0))
+ line_builder.product = coupon_product
+ # `order.line.builder` does not allow naming.
+ values = line_builder.get_line()
+ code = coupon.get('code')
+ if code:
+ values['name'] = '%s Code: %s' % (coupon_product.name, code)
+ line = (0, 0, values)
+ values['order_line'].append(line)
+ return values
+
def _add_shipping_line(self, map_record, values):
record = map_record.source
@@ -77,6 +105,7 @@ class SaleOrderImportMapper(Component):
def finalize(self, map_record, values):
values.setdefault('order_line', [])
+ self._add_coupon_lines(map_record, values)
self._add_shipping_line(map_record, values)
values.update({
'partner_id': self.options.partner_id,
diff --git a/connector_opencart/views/opencart_backend_views.xml b/connector_opencart/views/opencart_backend_views.xml
index 360b9315..716dcc63 100644
--- a/connector_opencart/views/opencart_backend_views.xml
+++ b/connector_opencart/views/opencart_backend_views.xml
@@ -37,6 +37,7 @@
+
@@ -131,6 +132,7 @@
+