edx-enterprise icon indicating copy to clipboard operation
edx-enterprise copied to clipboard

feat: create DefaultEnterpriseEnrollmentRealization during bulk enrollment

Open adamstankiewicz opened this issue 3 months ago • 0 comments

Description

Goal: When using the bulk enrollment API to auto-enroll learners in default enterprise enrollment intentions, related DefaultEnterpriseEnrollmentRealization records should be created.

ENT-9684

CHANGELOG

  • Extended the enroll_learners_in_courses POST API within EnterpriseCustomerViewSet to (optionally) accept a new property is_default_auto_enrollment: <boolean> on each bulk enrollment attempt. When is_default_auto_enrollment is True and the enrollment has succeeded:

    • Perform a lookup of DefaultEnterpriseEnrollmentIntention records that exist for the enterprise customer.
    • Find a matching DefaultEnterpriseEnrollmentIntention to the associated EnterpriseCourseEnrollment based on matching course run key for the intention and course id in the enrollment.
    • If a matching DefaultEnterpriseEnrollmentIntention is found, gets/creates DefaultEnterpriseEnrollmentRealization record for the intended_enrollment and realized_enrollment.
  • Updated DefaultEnterpriseEnrollmentRealization model to alter the realized_enrollment field to be a OneToOneField instead of a ForeignKey. This change makes it have more parity with the related models like LicensedEnterpriseCourseEnrollment and LearnerCreditEnterpriseCourseEnrollment.

  • Added property default_enterprise_enrollment_realization to EnterpriseCourseEnrollment model, similar to the existing license and learner_credit_fulfillment properties.

  • Resolves deprecation warning with SoftDeleteableModel related to the DefaultEnterpriseEnrollmentIntention model.

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 metadata dictionary returned by the DefaultEnterpriseEnrollmentIntentionViewSet (learner_status action).
    • I.e., total_default_enterprise_course_enrollments -> total_default_enterprise_enrollment_intentions

Merge checklist:

  • [x] Any new requirements are in the right place (do not manually modify the requirements/*.txt files)
    • base.in if needed in production but edx-platform doesn't install it
    • test-master.in if edx-platform pins it, with a matching version
    • make upgrade && make requirements have been run to regenerate requirements
  • [ ] make static has been run to update webpack bundling if any static content was updated
  • [x] ./manage.py makemigrations has 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 makemigrations in the shell.
  • [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 upgrade in 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.

adamstankiewicz avatar Oct 30 '24 14:10 adamstankiewicz