edx-enterprise
edx-enterprise copied to clipboard
feat: create DefaultEnterpriseEnrollmentRealization during bulk enrollment
Description
Goal: When using the bulk enrollment API to auto-enroll learners in default enterprise enrollment intentions, related DefaultEnterpriseEnrollmentRealization records should be created.
CHANGELOG
-
Extended the
enroll_learners_in_coursesPOST API withinEnterpriseCustomerViewSetto (optionally) accept a new propertyis_default_auto_enrollment: <boolean>on each bulk enrollment attempt. Whenis_default_auto_enrollmentisTrueand the enrollment has succeeded:- Perform a lookup of
DefaultEnterpriseEnrollmentIntentionrecords that exist for the enterprise customer. - Find a matching
DefaultEnterpriseEnrollmentIntentionto the associatedEnterpriseCourseEnrollmentbased on matching course run key for the intention and course id in the enrollment. - If a matching
DefaultEnterpriseEnrollmentIntentionis found, gets/createsDefaultEnterpriseEnrollmentRealizationrecord for theintended_enrollmentandrealized_enrollment.
- Perform a lookup of
-
Updated
DefaultEnterpriseEnrollmentRealizationmodel to alter therealized_enrollmentfield to be aOneToOneFieldinstead of aForeignKey. This change makes it have more parity with the related models likeLicensedEnterpriseCourseEnrollmentandLearnerCreditEnterpriseCourseEnrollment. -
Added property
default_enterprise_enrollment_realizationtoEnterpriseCourseEnrollmentmodel, similar to the existinglicenseandlearner_credit_fulfillmentproperties. -
Resolves deprecation warning with
SoftDeleteableModelrelated to theDefaultEnterpriseEnrollmentIntentionmodel.
DeprecationWarning: ModelBase.objects model manager will include soft-deleted objects in an upcoming release; please use ModelBase.available_objects to continue excluding soft-deleted objects. See https://django-model-utils.readthedocs.io/en/stable/models.html#softdeletablemodel for more information.
- Renames a field in the
metadatadictionary returned by theDefaultEnterpriseEnrollmentIntentionViewSet(learner_statusaction).- I.e.,
total_default_enterprise_course_enrollments->total_default_enterprise_enrollment_intentions
- I.e.,
Merge checklist:
- [x] Any new requirements are in the right place (do not manually modify the
requirements/*.txtfiles)base.inif needed in production but edx-platform doesn't install ittest-master.inif edx-platform pins it, with a matching versionmake upgrade && make requirementshave been run to regenerate requirements
- [ ]
make statichas been run to update webpack bundling if any static content was updated - [x]
./manage.py makemigrationshas been run- Checkout the Database Migration Confluence page for helpful tips on creating migrations.
- Note: This must be run if you modified any models.
- It may or may not make a migration depending on exactly what you modified, but it should still be run.
- This should be run from either a venv with all the lms/edx-enterprise requirements installed or if you checked out edx-enterprise into the src directory used by lms, you can run this command through an lms shell.
- It would be
./manage.py lms makemigrationsin the shell.
- It would be
- [x] Version bumped
- [x] Changelog record added
- [ ] Translations updated (see docs/internationalization.rst but also this isn't blocking for merge atm)
Post merge:
- [ ] Tag pushed and a new version released
- Note: Assets will be added automatically. You just need to provide a tag (should match your version number) and title and description.
- [ ] After versioned build finishes in GitHub Actions, verify version has been pushed to PyPI
- Each step in the release build has a condition flag that checks if the rest of the steps are done and if so will deploy to PyPi. (so basically once your build finishes, after maybe a minute you should see the new version in PyPi automatically (on refresh))
- [ ] PR created in edx-platform to upgrade dependencies (including edx-enterprise)
- Trigger the 'Upgrade one Python dependency' action against master in edx-platform with new version number to generate version bump PR
- This must be done after the version is visible in PyPi as
make upgradein edx-platform will look for the latest version in PyPi. - Note: the edx-enterprise constraint in edx-platform must also be bumped to the latest version in PyPi.