Commit fadca204 by Marko Jevtić Committed by GitHub

Merge pull request #1055 from edx/mjevtic/receipt-page-fix

Fix cybersource receipt page override
parents 5ac25b5f 13c0891c
......@@ -18,6 +18,7 @@ from ecommerce.extensions.order.constants import PaymentEventTypeName
CommunicationEventType = get_model('customer', 'CommunicationEventType')
logger = logging.getLogger(__name__)
Order = get_model('order', 'Order')
post_checkout = get_class('checkout.signals', 'post_checkout')
PaymentEvent = get_model('order', 'PaymentEvent')
PaymentEventType = get_model('order', 'PaymentEventType')
......@@ -100,22 +101,25 @@ class EdxOrderPlacementMixin(OrderPlacementMixin):
and basket submission in a transaction. Should be used only in
the context of an exception handler.
"""
with transaction.atomic():
order = self.place_order(
order_number=order_number,
user=user,
basket=basket,
shipping_address=shipping_address,
shipping_method=shipping_method,
shipping_charge=shipping_charge,
order_total=order_total,
billing_address=billing_address,
**kwargs
)
basket.submit()
return self.handle_successful_order(order, request)
try:
return Order.objects.get(number=order_number)
except Order.DoesNotExist:
with transaction.atomic():
order = self.place_order(
order_number=order_number,
user=user,
basket=basket,
shipping_address=shipping_address,
shipping_method=shipping_method,
shipping_charge=shipping_charge,
order_total=order_total,
billing_address=billing_address,
**kwargs
)
basket.submit()
return self.handle_successful_order(order, request)
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)."""
......
......@@ -33,19 +33,23 @@ def get_credit_provider_details(access_token, credit_provider_id, site_configura
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.
Args:
order_number (str): Order number
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:
str: Receipt page URL.
"""
if site_configuration.enable_otto_receipt_page:
base_url = site_configuration.build_ecommerce_url(reverse('checkout:receipt'))
params = urllib.urlencode({'order_number': order_number}) if order_number else ''
if override_url:
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:
base_url = site_configuration.build_lms_url('/commerce/checkout/receipt')
params = urllib.urlencode({'orderNum': order_number}) if order_number else ''
......
......@@ -16,6 +16,7 @@ from suds.wsse import Security, UsernameToken
from ecommerce.core.constants import ISO_8601_FORMAT
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.exceptions import (
InvalidSignatureError, InvalidCybersourceDecision, PartialAuthorizationError, PCIViolation,
......@@ -152,8 +153,12 @@ class Cybersource(BasePaymentProcessor):
'amount': str(basket.total_incl_tax),
'currency': basket.currency,
'consumer_id': basket.owner.username,
'override_custom_receipt_page': site.siteconfiguration.build_ecommerce_url(
reverse('cybersource_redirect')
'override_custom_receipt_page': get_receipt_page_url(
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,
}
......
......@@ -44,6 +44,8 @@ class CybersourceSubmitViewTests(CybersourceMixin, TestCase):
super(CybersourceSubmitViewTests, self).setUp()
self.user = self.create_user()
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):
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