diff --git a/enterprise/models.py b/enterprise/models.py index f5758a1a4..f161048af 100644 --- a/enterprise/models.py +++ b/enterprise/models.py @@ -60,7 +60,6 @@ json_serialized_course_modes, ) from enterprise.errors import LinkUserToEnterpriseError -from enterprise.event_bus import send_learner_credit_course_enrollment_revoked_event from enterprise.logging import getEnterpriseLogger from enterprise.tasks import send_enterprise_email_notification from enterprise.utils import ( @@ -2288,8 +2287,6 @@ def revoke(self): Marks this object as revoked and marks the associated EnterpriseCourseEnrollment as "saved for later". This object and the associated EnterpriseCourseEnrollment are both saved. - Subclasses may override this function to additionally emit revocation events. - TODO: revoke entitlements as well? """ if self.enterprise_course_enrollment: @@ -2333,13 +2330,6 @@ class LearnerCreditEnterpriseCourseEnrollment(EnterpriseFulfillmentSource): .. no_pii: """ - def revoke(self): - """ - Revoke this LearnerCreditEnterpriseCourseEnrollment, and emit a revoked event. - """ - super().revoke() - send_learner_credit_course_enrollment_revoked_event(self) - def reactivate(self, transaction_id=None, **kwargs): """ Idmpotently reactivates this LearnerCreditEnterpriseCourseEnrollment. diff --git a/enterprise/signals.py b/enterprise/signals.py index 8813b95a4..8222e355c 100644 --- a/enterprise/signals.py +++ b/enterprise/signals.py @@ -13,6 +13,7 @@ from enterprise.api import activate_admin_permissions from enterprise.api_client.enterprise_catalog import EnterpriseCatalogApiClient from enterprise.decorators import disable_for_loaddata +from enterprise.event_bus import send_learner_credit_course_enrollment_revoked_event from enterprise.tasks import create_enterprise_enrollment from enterprise.utils import ( NotConnectedToOpenEdX, @@ -394,6 +395,19 @@ def enterprise_unenrollment_receiver(sender, **kwargs): # pylint: disable=un enterprise_enrollment.unenrolled_at = localized_utcnow() enterprise_enrollment.save() + # Emit LC revoked event if there's a related LC fulfillment. + try: + lc_fulfillment = enterprise_enrollment.learnercreditenterprisecourseenrollment_enrollment_fulfillment + except enterprise_enrollment.RelatedObjectDoesNotExist: + lc_fulfillment = None + if lc_fulfillment: + send_learner_credit_course_enrollment_revoked_event(lc_fulfillment) + else: + logger.info( + "No related LearnerCreditCourseEnrollment found for recently unenrolled EnterpriseCourseEnrollment for " + f"user {enrollment.user} and course {enrollment.course.course_key}. Skipping sending revoked event." + ) + def create_enterprise_enrollment_receiver(sender, instance, **kwargs): # pylint: disable=unused-argument """