From 9dcc6d28dd1cff95d3129f7a5009e386c346cc0b Mon Sep 17 00:00:00 2001 From: Troy Sankey Date: Tue, 30 Jul 2024 15:32:06 -0700 Subject: [PATCH] feat: Add enterprise signal for learner credit fulfillment revokation ENT-9213 --- openedx_events/enterprise/data.py | 63 ++++++++++++++++++++++++++++ openedx_events/enterprise/signals.py | 15 ++++++- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/openedx_events/enterprise/data.py b/openedx_events/enterprise/data.py index c3b3d1f6..75efbd09 100644 --- a/openedx_events/enterprise/data.py +++ b/openedx_events/enterprise/data.py @@ -94,3 +94,66 @@ class LedgerTransaction(BaseLedgerTransaction): parent_content_key = attr.ib(type=str, default=None) fulfillment_identifier = attr.ib(type=str, default=None) reversal = attr.ib(type=LedgerTransactionReversal, default=None) + + +@attr.s(frozen=True) +class EnterpriseCustomerUser: + """ + Defines the common attributes of enterprise fulfillment classes. + """ + id = attr.ib(type=int) + created = attr.ib(type=datetime) + modified = attr.ib(type=datetime) + enterprise_customer_uuid = attr.ib(type=UUID) + user_id = attr.ib(type=int) + active = attr.ib(type=bool) + linked = attr.ib(type=bool) + is_relinkable = attr.ib(type=bool) + invite_key = attr.ib(type=UUID) + should_inactivate_other_customers = attr.ib(type=bool) + + +@attr.s(frozen=True) +class EnterpriseCourseEnrollment: + """ + Defines the common attributes of enterprise fulfillment classes. + """ + id = attr.ib(type=int) + created = attr.ib(type=datetime) + modified = attr.ib(type=datetime) + enterprise_customer_user = attr.ib(type=EnterpriseCustomerUser, default=None) + course_id = attr.ib(type=CourseKey) + saved_for_later = attr.ib(type=bool) + source_slug = attr.ib(type=str) + unenrolled = attr.ib(type=bool) + unenrolled_at = attr.ib(type=datetime) + + +@attr.s(frozen=True) +class BaseEnterpriseFulfillment: + """ + Defines the common attributes of enterprise fulfillment classes. + """ + uuid = attr.ib(type=UUID) + created = attr.ib(type=datetime) + modified = attr.ib(type=datetime) + fulfillment_type = attr.ib(type=str) + enterprise_course_entitlement_uuid = attr.ib(type=UUID) + enterprise_course_enrollment = attr.ib(type=EnterpriseCourseEnrollment, default=None) + is_revoked = attr.ib(type=bool) + + +@attr.s(frozen=True) +class EnterpriseLearnerCreditFulfillment(BaseEnterpriseFulfillment): + """ + Attributes of an ``enterprise.LearnerCreditEnterpriseCourseEnrollment`` record. + """ + transaction_id = attr.ib(type=UUID) + + +@attr.s(frozen=True) +class EnterpriseLicensedFulfillment(BaseEnterpriseFulfillment): + """ + Attributes of an ``enterprise.LicensedEnterpriseCourseEnrollment`` record. + """ + license_uuid = attr.ib(type=UUID) diff --git a/openedx_events/enterprise/signals.py b/openedx_events/enterprise/signals.py index 50c8a3b7..0443a7aa 100644 --- a/openedx_events/enterprise/signals.py +++ b/openedx_events/enterprise/signals.py @@ -8,7 +8,7 @@ docs/decisions/0003-events-payload.rst """ -from openedx_events.enterprise.data import LedgerTransaction, SubsidyRedemption +from openedx_events.enterprise.data import LedgerTransaction, SubsidyRedemption, EnterpriseLearnerCreditFulfillment from openedx_events.tooling import OpenEdxPublicSignal # .. event_type: org.openedx.enterprise.subsidy.redeemed.v1 @@ -84,3 +84,16 @@ "ledger_transaction": LedgerTransaction, } ) + + +# .. event_type: org.openedx.enterprise.learner_credit_fulfillment.revoked.v1 +# .. event_name: LEARNER_CREDIT_FULFILMENT_REVOKED +# .. event_description: emitted when a LearnerCreditEnterpriseCourseEnrollment is revoked. This most often happens when +# an enterprise learner unenrolls from an LC-subsidized course enrollment. +# .. event_data: LedgerTransaction +LEARNER_CREDIT_FULFILLMENT_REVOKED = OpenEdxPublicSignal( + event_type="org.openedx.enterprise.learner_credit_fulfillment.revoked.v1", + data={ + "learner_credit_fulfillment": EnterpriseLearnerCreditFulfillment, + } +)