Send verification email status

Support Team need to handle bulk of tickets every month about the
verification status of learners.To avoid it,suitable changes have
done to send verification email to the learner.

LEARNER-1487
This commit is contained in:
uzairr
2018-04-10 19:39:20 +05:00
parent e8469a45aa
commit d85dc4532e
4 changed files with 79 additions and 1 deletions

View File

@@ -1779,6 +1779,7 @@ class TestPhotoVerificationResultsCallback(ModuleStoreTestCase):
attempt = SoftwareSecurePhotoVerification.objects.get(receipt_id=self.receipt_id)
self.assertEqual(attempt.status, u'approved')
self.assertEquals(response.content, 'OK!')
self.assertEqual(len(mail.outbox), 1)
@mock.patch(
'lms.djangoapps.verify_student.ssencrypt.has_valid_signature',
@@ -1858,6 +1859,29 @@ class TestPhotoVerificationResultsCallback(ModuleStoreTestCase):
)
self.assertIn('Result Unknown not understood', response.content)
@mock.patch(
'lms.djangoapps.verify_student.utils.send_mail',
mock.Mock(side_effect=Exception())
)
def test_verification_status_email_not_sent(self):
"""
Test email is not sent in case of exception
"""
data = {
"EdX-ID": self.receipt_id,
"Result": "PASS",
"Reason": "",
"MessageType": "You have been verified."
}
json_data = json.dumps(data)
self.client.post(
reverse('verify_student_results_callback'), data=json_data,
content_type='application/json',
HTTP_AUTHORIZATION='test BBBBBBBBBBBBBBBBBBBB:testing',
HTTP_DATE='testdate'
)
self.assertEqual(len(mail.outbox), 0)
@attr(shard=2)
class TestReverifyView(TestCase):

View File

@@ -8,6 +8,11 @@ import logging
import pytz
from django.conf import settings
from django.core.mail import send_mail
from django.utils.translation import ugettext as _
from edxmako.shortcuts import render_to_string
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
log = logging.getLogger(__name__)
@@ -68,3 +73,25 @@ def verification_for_datetime(deadline, candidates):
for verification in candidates:
if verification.active_at_datetime(deadline):
return verification
def send_verification_status_email(context):
"""
Send an email to inform learners about their verification status
"""
subject = context['subject']
message = render_to_string(context['message'], context['email_template_context'])
from_address = configuration_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
to_address = context['email']
try:
send_mail(subject, message, from_address, [to_address], fail_silently=False)
except: # pylint: disable=bare-except
# We catch all exceptions and log them.
# It would be much, much worse to roll back the transaction due to an uncaught
# exception than to skip sending the notification email.
log.exception(
_("Could not send verification status email having subject: {subject} and email of user: {email}").format(
subject=context['subject'],
email=context['email']
))

View File

@@ -37,7 +37,7 @@ from lms.djangoapps.verify_student.image import InvalidImageData, decode_image_d
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification, VerificationDeadline
from lms.djangoapps.verify_student.services import IDVerificationService
from lms.djangoapps.verify_student.ssencrypt import has_valid_signature
from lms.djangoapps.verify_student.utils import is_verification_expiring_soon
from lms.djangoapps.verify_student.utils import is_verification_expiring_soon, send_verification_status_email
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.djangoapps.embargo import api as embargo_api
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
@@ -1154,10 +1154,26 @@ def results_callback(request):
except SoftwareSecurePhotoVerification.DoesNotExist:
log.error("Software Secure posted back for receipt_id %s, but not found", receipt_id)
return HttpResponseBadRequest("edX ID {} not found".format(receipt_id))
user = attempt.user
context = {
'email': user.email
}
email_template_context = {'platform_name': settings.PLATFORM_NAME}
if result == "PASS":
log.debug("Approving verification for %s", receipt_id)
attempt.approve()
status = "approved"
expiry_date = datetime.date.today() + datetime.timedelta(
days=settings.VERIFY_STUDENT["DAYS_GOOD_FOR"]
)
email_template_context['full_name'] = user.profile.name
email_template_context['expiry_date'] = expiry_date.strftime("%m/%d/%Y")
context['email_template_context'] = email_template_context
context['subject'] = _("Your {platform_name} ID Verification Approved").format(
platform_name=settings.PLATFORM_NAME
)
context['message'] = 'emails/successfull_verification_email.txt'
send_verification_status_email(context)
elif result == "FAIL":
log.debug("Denying verification for %s", receipt_id)

View File

@@ -0,0 +1,11 @@
<%! from django.utils.translation import ugettext as _ %>
${_("Hi {full_name},").format(full_name=full_name)}
${_("Congratulations! Your ID verification process was successful.")}
${_("Your verification is effective for one year. It will expire on {expiry_date}").format(expiry_date=expiry_date)}
${_("Thank you,")}
${_("The {platform_name} team").format(platform_name=platform_name)}