Skip to content
Snippets Groups Projects
Commit d84d47f3 authored by uzairr's avatar uzairr
Browse files

Update sailthru audit purchase calls

Currently, there are two purchase calls are occurring for each audit
purchase on sail-thru.To avoid it,code is updated so that a single
call will occur for each purchase.

LEARNER-5257
parent e983722d
No related merge requests found
...@@ -9,13 +9,13 @@ import urllib ...@@ -9,13 +9,13 @@ import urllib
import waffle import waffle
from babel.dates import format_datetime from babel.dates import format_datetime
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.urls import reverse
from django.db import transaction from django.db import transaction
from django.http import HttpResponse, HttpResponseBadRequest from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import redirect from django.shortcuts import redirect
from django.urls import reverse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.utils.translation import get_language, to_locale from django.utils.translation import get_language, to_locale
from django.utils.translation import ugettext as _
from django.views.generic.base import View from django.views.generic.base import View
from ipware.ip import get_ip from ipware.ip import get_ip
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
......
...@@ -2,5 +2,6 @@ from student.signals.signals import ( ...@@ -2,5 +2,6 @@ from student.signals.signals import (
ENROLLMENT_TRACK_UPDATED, ENROLLMENT_TRACK_UPDATED,
UNENROLL_DONE, UNENROLL_DONE,
ENROLL_STATUS_CHANGE, ENROLL_STATUS_CHANGE,
REFUND_ORDER REFUND_ORDER,
SAILTHRU_AUDIT_PURCHASE
) )
...@@ -7,3 +7,4 @@ ENROLLMENT_TRACK_UPDATED = Signal(providing_args=['user', 'course_key']) ...@@ -7,3 +7,4 @@ ENROLLMENT_TRACK_UPDATED = Signal(providing_args=['user', 'course_key'])
UNENROLL_DONE = Signal(providing_args=["course_enrollment", "skip_refund"]) UNENROLL_DONE = Signal(providing_args=["course_enrollment", "skip_refund"])
ENROLL_STATUS_CHANGE = Signal(providing_args=["event", "user", "course_id", "mode", "cost", "currency"]) ENROLL_STATUS_CHANGE = Signal(providing_args=["event", "user", "course_id", "mode", "cost", "currency"])
REFUND_ORDER = Signal(providing_args=["course_enrollment"]) REFUND_ORDER = Signal(providing_args=["course_enrollment"])
SAILTHRU_AUDIT_PURCHASE = Signal(providing_args=["event", "user", "course_id", "mode"])
""" API v0 views. """ """ API v0 views. """
import logging import logging
from courseware import courses
from django.urls import reverse from django.urls import reverse
from edx_rest_api_client import exceptions from edx_rest_api_client import exceptions
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
...@@ -13,6 +12,7 @@ from rest_framework.views import APIView ...@@ -13,6 +12,7 @@ from rest_framework.views import APIView
from six import text_type from six import text_type
from course_modes.models import CourseMode from course_modes.models import CourseMode
from courseware import courses
from enrollment.api import add_enrollment from enrollment.api import add_enrollment
from enrollment.views import EnrollmentCrossDomainSessionAuth from enrollment.views import EnrollmentCrossDomainSessionAuth
from entitlements.models import CourseEntitlement from entitlements.models import CourseEntitlement
...@@ -21,7 +21,9 @@ from openedx.core.djangoapps.embargo import api as embargo_api ...@@ -21,7 +21,9 @@ from openedx.core.djangoapps.embargo import api as embargo_api
from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in
from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.signals import SAILTHRU_AUDIT_PURCHASE
from util.json_request import JsonResponse from util.json_request import JsonResponse
from ...constants import Messages from ...constants import Messages
from ...http import DetailResponse from ...http import DetailResponse
...@@ -139,6 +141,10 @@ class BasketsView(APIView): ...@@ -139,6 +141,10 @@ class BasketsView(APIView):
) )
log.info(msg) log.info(msg)
self._enroll(course_key, user, default_enrollment_mode.slug) self._enroll(course_key, user, default_enrollment_mode.slug)
mode = CourseMode.AUDIT if audit_mode else CourseMode.HONOR
SAILTHRU_AUDIT_PURCHASE.send(
sender=None, event='enroll', user=user, mode=mode, course_id=course_key
)
self._handle_marketing_opt_in(request, course_key, user) self._handle_marketing_opt_in(request, course_key, user)
return DetailResponse(msg) return DetailResponse(msg)
else: else:
......
...@@ -16,14 +16,15 @@ from six import text_type ...@@ -16,14 +16,15 @@ from six import text_type
import third_party_auth import third_party_auth
from course_modes.models import CourseMode from course_modes.models import CourseMode
from email_marketing.models import EmailMarketingConfiguration from email_marketing.models import EmailMarketingConfiguration
from lms.djangoapps.email_marketing.tasks import get_email_cookies_via_sailthru, update_user, update_user_email
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_THIRD_PARTY_MAILINGS from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_THIRD_PARTY_MAILINGS
from openedx.core.djangoapps.waffle_utils import WaffleSwitchNamespace from openedx.core.djangoapps.waffle_utils import WaffleSwitchNamespace
from lms.djangoapps.email_marketing.tasks import update_user, update_user_email, get_email_cookies_via_sailthru
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
from student.cookies import CREATE_LOGON_COOKIE from student.cookies import CREATE_LOGON_COOKIE
from student.signals import ENROLL_STATUS_CHANGE from student.signals import SAILTHRU_AUDIT_PURCHASE
from student.views import REGISTER_USER from student.views import REGISTER_USER
from util.model_utils import USER_FIELD_CHANGED from util.model_utils import USER_FIELD_CHANGED
from .tasks import update_course_enrollment from .tasks import update_course_enrollment
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -39,7 +40,7 @@ WAFFLE_SWITCHES = WaffleSwitchNamespace(name=WAFFLE_NAMESPACE) ...@@ -39,7 +40,7 @@ WAFFLE_SWITCHES = WaffleSwitchNamespace(name=WAFFLE_NAMESPACE)
SAILTHRU_AUDIT_PURCHASE_ENABLED = 'audit_purchase_enabled' SAILTHRU_AUDIT_PURCHASE_ENABLED = 'audit_purchase_enabled'
@receiver(ENROLL_STATUS_CHANGE) @receiver(SAILTHRU_AUDIT_PURCHASE)
def update_sailthru(sender, event, user, mode, course_id, **kwargs): def update_sailthru(sender, event, user, mode, course_id, **kwargs):
""" """
Receives signal and calls a celery task to update the Receives signal and calls a celery task to update the
...@@ -51,7 +52,7 @@ def update_sailthru(sender, event, user, mode, course_id, **kwargs): ...@@ -51,7 +52,7 @@ def update_sailthru(sender, event, user, mode, course_id, **kwargs):
None None
""" """
if WAFFLE_SWITCHES.is_enabled(SAILTHRU_AUDIT_PURCHASE_ENABLED) and mode in CourseMode.AUDIT_MODES: if WAFFLE_SWITCHES.is_enabled(SAILTHRU_AUDIT_PURCHASE_ENABLED) and mode in CourseMode.AUDIT_MODES:
course_key = str(course_id) course_key = course_id
email = str(user.email) email = str(user.email)
update_course_enrollment.delay(email, course_key, mode) update_course_enrollment.delay(email, course_key, mode)
......
""" """
This file contains celery tasks for email marketing signal handler. This file contains celery tasks for email marketing signal handler.
""" """
import logging import logging
import time import time
from datetime import datetime, timedelta from datetime import datetime, timedelta
...@@ -320,7 +321,7 @@ def update_course_enrollment(self, email, course_key, mode): ...@@ -320,7 +321,7 @@ def update_course_enrollment(self, email, course_key, mode):
course_data = _get_course_content(course_key, course_url, sailthru_client, config) course_data = _get_course_content(course_key, course_url, sailthru_client, config)
item = _build_purchase_item(course_key, course_url, cost_in_cents, mode, course_data, None) item = _build_purchase_item(course_key, course_url, cost_in_cents, mode, course_data)
options = {} options = {}
if send_template: if send_template:
...@@ -433,7 +434,7 @@ def _get_course_content(course_id, course_url, sailthru_client, config): ...@@ -433,7 +434,7 @@ def _get_course_content(course_id, course_url, sailthru_client, config):
return response return response
def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data, sku): def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data):
"""Build and return Sailthru purchase item object""" """Build and return Sailthru purchase item object"""
# build item description # build item description
...@@ -454,6 +455,9 @@ def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data ...@@ -454,6 +455,9 @@ def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data
if 'tags' in course_data: if 'tags' in course_data:
item['tags'] = course_data['tags'] item['tags'] = course_data['tags']
# add vars to item
item['vars'] = dict(course_data.get('vars', {}), mode=mode, course_run_id=unicode(course_id))
return item return item
......
...@@ -704,6 +704,7 @@ class SailthruTests(TestCase): ...@@ -704,6 +704,7 @@ class SailthruTests(TestCase):
m.return_value = self.course_url m.return_value = self.course_url
update_course_enrollment(TEST_EMAIL, self.course_id, 'audit') update_course_enrollment(TEST_EMAIL, self.course_id, 'audit')
item = [{ item = [{
'vars': {'course_run_id': u'edX/toy/2012_Fall', 'mode': 'audit'},
'url': self.course_url, 'url': self.course_url,
'price': 0, 'price': 0,
'qty': 1, 'qty': 1,
......
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