Commit 13c0891c by Marko Jevtic

Fix cybersource receipt page override

parent 5ac25b5f
...@@ -18,6 +18,7 @@ from ecommerce.extensions.order.constants import PaymentEventTypeName ...@@ -18,6 +18,7 @@ from ecommerce.extensions.order.constants import PaymentEventTypeName
CommunicationEventType = get_model('customer', 'CommunicationEventType') CommunicationEventType = get_model('customer', 'CommunicationEventType')
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Order = get_model('order', 'Order')
post_checkout = get_class('checkout.signals', 'post_checkout') post_checkout = get_class('checkout.signals', 'post_checkout')
PaymentEvent = get_model('order', 'PaymentEvent') PaymentEvent = get_model('order', 'PaymentEvent')
PaymentEventType = get_model('order', 'PaymentEventType') PaymentEventType = get_model('order', 'PaymentEventType')
...@@ -100,22 +101,25 @@ class EdxOrderPlacementMixin(OrderPlacementMixin): ...@@ -100,22 +101,25 @@ class EdxOrderPlacementMixin(OrderPlacementMixin):
and basket submission in a transaction. Should be used only in and basket submission in a transaction. Should be used only in
the context of an exception handler. the context of an exception handler.
""" """
with transaction.atomic(): try:
order = self.place_order( return Order.objects.get(number=order_number)
order_number=order_number, except Order.DoesNotExist:
user=user, with transaction.atomic():
basket=basket, order = self.place_order(
shipping_address=shipping_address, order_number=order_number,
shipping_method=shipping_method, user=user,
shipping_charge=shipping_charge, basket=basket,
order_total=order_total, shipping_address=shipping_address,
billing_address=billing_address, shipping_method=shipping_method,
**kwargs shipping_charge=shipping_charge,
) order_total=order_total,
billing_address=billing_address,
basket.submit() **kwargs
)
return self.handle_successful_order(order, request)
basket.submit()
return self.handle_successful_order(order, request)
def handle_successful_order(self, order, request=None): # pylint: disable=arguments-differ def handle_successful_order(self, order, request=None): # pylint: disable=arguments-differ
"""Send a signal so that receivers can perform relevant tasks (e.g., fulfill the order).""" """Send a signal so that receivers can perform relevant tasks (e.g., fulfill the order)."""
......
...@@ -33,19 +33,23 @@ def get_credit_provider_details(access_token, credit_provider_id, site_configura ...@@ -33,19 +33,23 @@ def get_credit_provider_details(access_token, credit_provider_id, site_configura
return None return None
def get_receipt_page_url(site_configuration, order_number=None): def get_receipt_page_url(site_configuration, order_number=None, override_url=None):
""" Returns the receipt page URL. """ Returns the receipt page URL.
Args: Args:
order_number (str): Order number order_number (str): Order number
site_configuration (SiteConfiguration): Site Configuration containing the flag for enabling Otto receipt page. site_configuration (SiteConfiguration): Site Configuration containing the flag for enabling Otto receipt page.
override_url (str): New receipt page to override the default one.
Returns: Returns:
str: Receipt page URL. str: Receipt page URL.
""" """
if site_configuration.enable_otto_receipt_page: if site_configuration.enable_otto_receipt_page:
base_url = site_configuration.build_ecommerce_url(reverse('checkout:receipt')) if override_url:
params = urllib.urlencode({'order_number': order_number}) if order_number else '' return override_url
else:
base_url = site_configuration.build_ecommerce_url(reverse('checkout:receipt'))
params = urllib.urlencode({'order_number': order_number}) if order_number else ''
else: else:
base_url = site_configuration.build_lms_url('/commerce/checkout/receipt') base_url = site_configuration.build_lms_url('/commerce/checkout/receipt')
params = urllib.urlencode({'orderNum': order_number}) if order_number else '' params = urllib.urlencode({'orderNum': order_number}) if order_number else ''
......
...@@ -16,6 +16,7 @@ from suds.wsse import Security, UsernameToken ...@@ -16,6 +16,7 @@ from suds.wsse import Security, UsernameToken
from ecommerce.core.constants import ISO_8601_FORMAT from ecommerce.core.constants import ISO_8601_FORMAT
from ecommerce.core.url_utils import get_ecommerce_url from ecommerce.core.url_utils import get_ecommerce_url
from ecommerce.extensions.checkout.utils import get_receipt_page_url
from ecommerce.extensions.payment.constants import CYBERSOURCE_CARD_TYPE_MAP from ecommerce.extensions.payment.constants import CYBERSOURCE_CARD_TYPE_MAP
from ecommerce.extensions.payment.exceptions import ( from ecommerce.extensions.payment.exceptions import (
InvalidSignatureError, InvalidCybersourceDecision, PartialAuthorizationError, PCIViolation, InvalidSignatureError, InvalidCybersourceDecision, PartialAuthorizationError, PCIViolation,
...@@ -152,8 +153,12 @@ class Cybersource(BasePaymentProcessor): ...@@ -152,8 +153,12 @@ class Cybersource(BasePaymentProcessor):
'amount': str(basket.total_incl_tax), 'amount': str(basket.total_incl_tax),
'currency': basket.currency, 'currency': basket.currency,
'consumer_id': basket.owner.username, 'consumer_id': basket.owner.username,
'override_custom_receipt_page': site.siteconfiguration.build_ecommerce_url( 'override_custom_receipt_page': get_receipt_page_url(
reverse('cybersource_redirect') site_configuration=site.siteconfiguration,
order_number=basket.order_number,
override_url=site.siteconfiguration.build_ecommerce_url(
reverse('cybersource_redirect')
)
), ),
'override_custom_cancel_page': self.cancel_page_url, 'override_custom_cancel_page': self.cancel_page_url,
} }
......
...@@ -44,6 +44,8 @@ class CybersourceSubmitViewTests(CybersourceMixin, TestCase): ...@@ -44,6 +44,8 @@ class CybersourceSubmitViewTests(CybersourceMixin, TestCase):
super(CybersourceSubmitViewTests, self).setUp() super(CybersourceSubmitViewTests, self).setUp()
self.user = self.create_user() self.user = self.create_user()
self.client.login(username=self.user.username, password=self.password) self.client.login(username=self.user.username, password=self.password)
self.site.siteconfiguration.enable_otto_receipt_page = True
self.site.siteconfiguration.save()
def _generate_data(self, basket_id): def _generate_data(self, basket_id):
return { return {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment