None
fix: adhering to urljoin patterns in integrated channels API views
fix: properly truncate payload to resolve missing CSOD deletes
feat: add debug logging to investigate missing CSOD deletes
feat: add debug logging to investigate missing CSOD deletes
feat: expand utility of CSOD deleted_at reset job
fix: properly pass SAP client status back to content transmission records
fix: open redirect url whitelisting for data sharing conseent and change enterprise page
fix: replace id with uuid in branding logo file path
fix: refactor the way we send cornerstone content metadata deletes
fix: accounting for integrated Canvas instances that have no root account Ids.
feat: refactor content metadata jobs to save api call status
fix: accurately selecting content key values when filtering for existing content metadata transmission audits.
fix: integrated channels properly handling customers with multiple catalogs that have overlapping content.
fix: properly removing update transmission payloads from SAP transmissions before saving completed records.
feat: add enable_executive_education_2U_fulfillment to EnterpriseCustomer
fix: follow-on to cornerstone learner records foreign keys job
fix: create cornerstone learner audit records with new foreign keys
feat: Remove progress, progress_v2 option from reporting configs and move all v1, v2 to v3.
fix: update course run selection logic for SAP content exporter
feat: mark Cornerstone session token fields read-only in admin
feat: update data sharing consent request language
feat: Django Admin tweaks for integrations
feat: Added management command for weekly nudge to dormant enterprise learners
feat: add enable_portal_learner_credit_management_screen to EnterpriseCustomer
feat: basic integrated channels task concurrency control
feat: Added command for monthly impact report for enterprise administrators
feat: add enable_learner_portal_offers to EnterpriseCustomer
fix: append backslash to ecommerce url and change get to get_or_create in fulfill_pending_course_enrollments
feat: add source query param in data sharing consent url
chore: add logs for dsc
fix: parsing improvements to incorrect learner completion completed-at dates
fix: incorrect learner completion completed-at dates
feat: add lms_user_id to serialized admin users
feat: add dry-run mode to integrated channels
fix: don’t transmit schedule data to SAP if start or end date is empty
feat: improved channel logging
fix: add stricter validation on system wide role assignments
SystemWideEnterpriseUserRoleAssignment
has no enterprise_customer and does not apply to all contexts.We’ll no longer fall back on granting context based on enterprise membership when there is no explicit context.
chore: add migration to remove is_active from role assignment model schema
chore: remove is_active field from role assignment model
chore: remove data-cleaning management commands. prepare for column-removal migration
temp: adding system wide role assignment field and management commands to clean data
fix: correctly handle multiple canvas and blackboard oauth configs
fix: degreed2 improperly tracking completion status
fix: Degreed2 estimated time to complete in hours
fix: update logic for parsing course price for SAP
fix: Degreed2 estimated time to complete in days
feat: admin view improvements
fix: modify signature of EmbargoApiClient.redirect_if_blocked
Make this signature match and use the same signature that
openedx.core.djangoapps.embargo.api.redirect_if_blocked()
now uses.
fix: implement back-off and retry for degreed2 fix: drop tpa_hint param in redirects when no SSO
fix: Undoes revert of 3.44.0, while also ensuring that
SystemWideEnterpriseUserRoleAssignment.get_assignments()
can handle and respect any null values returned
from get_context()
.
feat: configure django admin for degreed2 audit records
fix: Moodle client should accept treat duplicate course id on create as a success
fix: no-op version bump (skipping 3.44.0) to account for a revert: https://github.com/openedx/edx-enterprise/pull/1534
fix: [REVERTED] override get_assignments() so that active enterprise uuids come first.
Overrides the SystemWideEnterpriseUserRoleAssignment.get_assignments() method to return a list of (role, context) assignments, where the first item in the list corresponds to the currently active enterprise for the user.
chore: replace enterprise customer drop-downs in django admin
feat: allow admins to remove learners from org
fix: improve guards on fk data backfill job
feat: updated logic for completions in integrated channels
feat: additional fk data backfill performance improvements
feat: speed up fk data backfill
feat: use new foreign keys on integrated channels audit models
feat: add admin_users to EnterpriseCustomerSerializer
fix: remove backfill managment command arguments
fix: Use enterprise customer uuid coming in request data
fix: Add unique_together constraint in SystemWideEnterpriseUserRoleAssignment
fix: Add management command to backfill missing audit record foreign keys.
fix: Squash SAP Success Factors migrations to remove reference to PositiveIntegerField
.
fix: Alter enterprise_course_enrollment_id field from PositiveIntegerField to IntegerField in BlackboardLearnerAssessmentDataTransmissionAudit and SapSuccessFactorsLearnerDataTransmissionAudit. This change require to run migrations on mysql8.
fix: add foreign keys to integrated channels audit models
fix: making making degreed token base url optional
feat: add missing logging for grades api results in integrated channels exporter
feat: added html pages for oauth authorization success/failure
fix: allow null completed_timestamp field for integrated channels learner audit models
feat: setting customer identity provider config is_valid on first SSO login
feat: Allow partial_update on EnterpriseCustomerViewSet
fix: CSOD Learner Audit Django Admin Timeouts
fix: Use correct completions URL for Degreed2
fix: CornerstoneLearnerDataTransmissionAudit admin view timeout
fix: Degreed2 Missing Learner Data Audit Records
fix: Degreed2 Missing Learner Data Audit Records
feat: New integrated channels Blackboard api endpoint to fetch global config creds
feat: Add drafting functionality to save incorrect fields
feat: new integrated channels customer configs list view, new integrated channels config serializer is_valid field
feat: add enable_browse_and_request field to EnterpriseCustomer
fix: Broken Canvas oauth authorization url
feat: SAPSF content metadata transmission now also sends course schedule
feat: adding CornerstoneLearnerDataTransmissionAudit admin view feat: log if-modified-since + content metadata for CSOD
feat: support filtering by a list of user ids for EnterpriseCustomerUserViewSet
feat: show field show_course_price in SAPSF Django admin form
feat: override chunk size default to match channel capability
chore: squash migrations for blackboard and sap_success_factor apps.
fix: Alter enterprise_course_enrollment_id field from PositiveIntegerField to IntegerField in BlackboardLearnerAssessmentDataTransmissionAudit and SapSuccessFactorsLearnerDataTransmissionAudit. This change require to run migrations on mysql8.
fix: switching blackboard integrated channels from client based auth credentials to global creds
fix: ensure active field on EnterpriseCustomerUser objects are set to False appropriately feat: add management command to clean up active fields on EnterpriseCustomerUser objects
feat: customer configs draft saving that makes all variables optional feat: feat: Add field for Display name for LMS configs
[3.39.0] chore: dropped Django22, 30 and 31 support
feat: add created to enterprise course enrollment serializer fields
fix: update link_learners action to respond with error when payload is empty.
fix: bugfix for Cornerstone missing completion records
fix: more logging to debug missing completion records
fix: Django Admin bugfix
feat: New crud viewset for IC degreed2 configurations
feat: Adds toggle_universal_link endpoint
feat: Dependency upgrades
fix: check if instance is an iterable rather than a list in EnterpriseCustomerUserReadOnlySerializer
feat: add enterprise role assignments to EnterpriseCustomerUserReadOnlySerializer
fix: Integrated channels Degreed2 exporter now handles invalid start/end date in content metadata item
fix: add basic_list action to EnterpriseCustomerInviteKeyViewSet
to return unpaginated set of invite keys.
feat: new oauth state for multi-lms-configuration
feat: allow more than 1 lms configuration per lms-kind
feat: update enterprise_customer_invite_key filter and serializer
feat: Show OAuth Auth link for Blackboard Admin
fix: add support for an enterprise_customer_invite_key
UUID query parameter to be passed and handled by the EnterpriseProxyLoginView
feat: OAuth Auth link for Blackboard Admin
feat: Integrated channels, grade send logic only logs instead of raising when enterprise_customer_user record is inactive
feat: add is_active on enterprise customer invite key
feat: improved integrated channel log consistency
feat: added view to link learners from a enterprise customer key
fix: require expiry date on EnterpriseCustomerInviteKey
model
feat: reformat integrated channels logging to be more splunk friendly
docs: Updating help_text for universal_link field on EnterpriseCustomer model
feat: Adding universal_link field to EnterpriseCustomer model
feat: add try catch block to skip unfound courses
feat: add enterprise customer invite key model and viewset
feat: New management command to revert enrollment data
feat: SAPSF integrated no longer considers grade change as a reason to retransmit completions.
feat: New management command to backfill end dates on Canvas
fix: incorrectly skipping completion transmissions
feat: allow filtering enterprise learners by enterprise uuid and enterprise role
fix: Moodle duplicate content metadata records detected
fix: allow for records to be saved for integrated channels’ content across catalogs
fix: CSOD API session tokens bugfix
fix: CSOD API session tokens are now saved to the customer’s configuration instead of individual transmission audits
feat: integrated channels only requests content metadata for courses that need updating
feat: Change Bulk Enrollment Assignment Logic for Pending learners
fix: no longer notify learners of already existing enrollments
fix: Rename model field from key to client_id: Degreed2
feat: New Integrated channel Degreed v2.
feat: Added management command to fix DSC records having spaces instead of +.
fix: pip-tools upgrade
feat: new integrated channels content metadata transmitter flow
fix: blackboard logging function was not returning desired string
fix: properly weight blackboard grades
chore: update course enrollments through lms
docs: added adr for zero state browsing with universal link
fix: refactor moodle _post to use body params
chore: Don’t expire courses that have been modified after given date
feat: Added a boolean in EnterpriseCustomer to specify whether labor market data should be available in learner portal
update admin banner notification text field with following changes
increase max_length from 255 to 512
update help text
use textarea widget in django admin
maint: Integrated channels detection system of catalog changes needed is now disabled via override.
fix: Integrated channels data transforming generates json serializable fields.
fix: Blackboard integrated channel now correctly synchronizes the one-and-only valid refresh_token
fix: content_filter in django admin was broken after the jsonfield upgrade, so this contains fix for that
fix: switch is_revoked to True on LicensedEnterpriseCourseEnrollment after license expiration
Allowing management commands to optionally run on inactive Integrated Channel configurations
Switched back to jsonfield
from jsonfield2
Added api for fetching field choices from EnterpriseCustomerReportingConfiguration
Integrated channels Canvas: now fills in Start/end dates in description, and uses Course participation type
Fix cornerstone character limit bug with dict database table
fix: Adding error handling for role assignment backfill management command
bug: The exporter now properly handles instances when enterprise customer catalogs do no need updates.
feat: Added enterprise_learner role assignment backfill management command
fix: additional Moodle field changes
Added customer config based learner data transmission feature flag
Improve error logging in the Moodle integration
Fix import error used by bulk enrollment in utils
integrated channels: single learner assessment exporter logging is not helpful right now so improve it.
logging improvement when calling integrated channels extract_integration_id
fixes the way moodle queries for courses ENT-4806
Integrated channels automatically fill in current date for audit completions if date not available.
Create “enterprise_learner” role when EnterpriseCustomerUser
records are re-linked.
When EnterpriseCustomerUser
records get deleted, also delete the “enterprise_admin” role specific to the relevant enterprise customer.
Integrated channel transmitter completions routine now logs as error, any status codes greater than or equal to 400
Include a failure_reason=dsc_denied
to the DSC failure url when learner denies the DSC terms.
SAP integrated channel django form gets missing idp id field
Degreed integrated channel now uses idp_id explicitly when calling get_remote_id()
SAP integrated channel now uses idp_id explicitly when calling get_remote_id()
Fixed datetime issue in email_drip_for_missing_dsc_records.
Integrated channels: audit track completion status now based on incomplete non-gated content
Integrated channels: log response code and message if SAP post fails
Add progress_v3 report type for enterprise reporting.
Inject a failure reason into the failure_url
query params when a verified course mode
is not available for DSC-based enrollments.
Added support for Django 3.0, 3.1 and 3.2
Adds enterprise catalog query title as an optional attribute to create/update post requests on the catalog service.
Refactor data-sharing consent GET and POST handlers to not have too many statements, because readability matters.
Blackboard Integrated channel oauth2 refresh token handling fixes.
Adding a new EnterpriseEnrollmentSource to be used for bulk enrollment.
Add logging of user id for troubleshooting in a couple of locations.
Clean up pylint suppressions and rules using latest rules set by edx-lint.
Prevent failures on integrated channels delete requests when courses are not found.
Encode invalid course keys for CSOD customers
Handle content_last_modified not provided by enterprise catalog
Localize timezones on catalog modified min (not found) values
Integrated channels util functions needed to base64 urlsafe encode/decode course keys for use with some LMS systems like Cornerstone.
Integrated channels now checks and uses catalog modified times to determine if an update is needed before retrieving content metadata.
Making bulk catalog query ID update params optional
Added title field in AdminNotification
table.
Adding the ability to specify parameters in the bulk catalog query ID updated management command.
Revert ‘Start my course’ links in bulk enrollment emails to courseware based links instead of learner portal.
Prevent django admin deletions of catalog queries. Added management command to bulk update catalogs of their query IDs
Avoid failure when an email send in the learners loop fails, for notify_enrolled_learners
Use celery tasks for emails sent using EnterpriseCustomer’s notify_enrolled_learners method
Fix SAP Course Completion payload format again.
Fix SAP Course Completion payload format.
Replace EnrollmentApiClient calls from Bulk enrollment with a newly minted python api call (non-REST) from edx-platform
Filter available IDPs for Enterprise Customers by new boolean flag on ProviderConfig model.
Removing CSOD Integrated Channel from the list of supported channels for the content metadata transmission task.
Add pagination handling to integrated channels Blackboard client
Adds flag to SAP Success Factors customer configuration to switch SAP endpoints for learner completion calls.
Ensure deletion and unlinking of a EnterpriseCustomerUser
record only deletes the enterprise_learner
system-wide role for that
particular EnterpriseCustomerUser
, as opposed to all enterprise_learner
roles associated with the user.
Updates bulk enrollment email template.
Added enterprise uuid support in course enrollment. ERTE-5
Fix the way that page_size
is passed as a param to the get_content_metadata
endpoint.
Add a unit test for the EnterpriseCatalogApiClient.get_content_metadata()
method, which
was previously untested.
Set the EnterpriseCatalogApiClient get_content_metadata request page_size parameter to 50; the enterprise-catalog service has a default page_size of 10. This change means that we’ll make a smaller overall number of SELECTs against the enterprise-catalog database.
Adds error handling and logging to the assignment deduplication management command.
Updates requirements and style changes to match the latest Pylint.
Updates to integrated channels catalogs to transmit help text.
Overriding default chunk size for SAP and Canvas integrations.
Adds Segment tracking for bulk enrollment method.
Added history tables for EnterpriseCustomerUser and SystemWideEnterpriseUserRoleAssignment.
Added management command to clean up duplicate transmitted assignments for the integrated channels.
Fixed issue with API version in Tableau client.
Fixed issue with CourseEnrollment receiver when learner has multiple enterprises.
Canvas integrated channel now supports create_or_update pattern for courses. Detects/logs deleted courses.
Removed ENABLE_MULTIPLE_USER_ENTERPRISES_FEATURE
waffle switch
Fix forward for parameter rename changing the signals API in 3.26.7
Added support to use default idp in Enterprise slug login if there are multiple.
added support for redirecting user to default IDP, in case multiple IDPs’s attached
developer-only facing updates to standardize LMS Integrated Channels logging.
added an update api call to assign tableau user roles
fix: Bypass slumber’s getattr definition when requesting enrollments for usernames starting with ‘_’ (because slumber will raise an AttributeError from getattr when requesting a resource that starts with ‘_’).
removed unnecessary call to ecom in bulk enrollment (process of assigning a license already accounts for this)
added –skip-unlink param in unlink_enterprise_customer_learners command to just remove DSC records.
Added logs for enterprise users created in tableau.
Added check to configure reports only for Catalog over SFTP.
Added support for admin scheduled banners that run from date x to date y.
Log exception stack trace during DSC licensed-enrollment flow, so that we can look at log messages and understand what exactly is failing.
bug fix, properly handle API response pagination from Canvas.
added management command to unlink learners from their enterprise and deleting DSC and EnterpriseCourseEnrolment records.
added enable_compression
flag in EnterpriseCustomerReportConfiguration table.
Database based template system for enrollment emails, including support for Admin and Self enroll modes. Admin mode for Bulk enrollment, existing enrollment emails still use the current template.
Log more specific information about HTTP client errors that are caught when using the LMS enrollment API. Also send an exception event to the monitoring service when this happens, even though we handle the exception “gracefully”.
Send long dsc url in missing DSC email as individual params.
Reduced the DSC url size to account for character limit in Segment event properties.
Remove hardcoded admin permission constraints for ContentMetadataItemTransmission integrated channel model.
Canvas integrated channel now ‘concludes’ course when sending deletion event, instead of ‘delete’.
Optimised handling of conditions defining the absence of a DSC.
Added exception handling in consent missing email.
Added a check for enterprise DSC configuration in missing DSC drip.
Added a check for course access before sending Segment event for missing DSC.
Added new field reply_to in enterprise customer where learner’s reply to enterprise emails will be delivered.
Removed migrations that have been merged into squashed migrations.
Fix: filter out EnterpriseCourseEnrollments without corresponding CourseEnrollment records in learner portal view.
Added support for --enrollment-before
and --no-commit
params in email_drip_for_missing_dsc_records
command.
Fixed Segment json string issue for DSC email drip
Added additional Segment event properties for missing DSC drip email
Fixed timezone issue in comparison of course start datetime
Make enterprise customer uuid mandatory for TableauAuthView
Change the verbose name and help text for the enable_integrated_customer_learner_portal_search
field on the EnterpriseCustomer
model.
No longer call into the removed email_marketing platform djangoapp
Use Braze for sending data sharing consent drop emails, add the DSC link inside the drip email.
Expose enterprise catalog uuids associated with an Enterprise Customer in the enterprise-customer
API endpoint.
Add dashboard admin rbac role permission on tableau auth view so that only enterprise dashboard admins can access this view.
Add support to generate tableau auth token based on incoming enterprise customer’s uuid
chore: upgrade edx-enterprise requirements
Improves performance of enterprise role assignment admin page
Deletes custom get_search_results() method, since enterprise_customer__name
is now a viable search field
Improves pagination by asking for an estimated row count from Mysql INFORMATION_SCHEMA.TABLES
Turns 1 + N query into 1 query via proper use of list_select_related
Fix: no longer stringifying None values passed to enterprise catalog creations calls
Fix: learner_data exporter bug fix and refactor for cleaner enrollment filtering
Feature: including EnterpriseCatalogQuery UUID field in request payload to enterprise-catalog on EnterpriseCatalog updates
Feature: new UUID field on EnterpriseCatalogQuery model (and update to all existing query objects)
Refactor: integrated channels learner exporter replace course api client
Added a management command to send emails to learners with missing DSC
allow searching of enterprise customer records with hyphenated uuid
add typeahead search dropdown to imporve enterprise customer search on enterprise reporting configuration
When a learner is linked from manage learners page, in-activate learner’s other enterprises
Added support of multiple identity_providers in enterprise.models.get_remote_id.
Added multiple identity_providers in EnterpriseCustomerApi
Added the ability to link/unlink enterprise customer catalogs with enterprise reporting configuration via its API endpoint.
Integrated channels learner_data module refactored to avoid making some LMS REST API calls
Refactored code in proxied_get() to clean up duplicate logic.
Removing unused and out of date endpoints for Bulk Enrollment
Allow licensed audit enrollment to have a path to upgrade into verified
update edx-rbac to 1.4.2, plus a bunch of other version bumps.
feat: add support for enterprise admins to create pending enterprise users
feat: add support for creating multiple pending enterprise users
Refactored bulk enrollment serializer and bug fixes to the bulk enrollment endpoint.
fix: The update_role_assignments_with_customers command no longer updates records. It only creates new records, which helps de-risk the operation.
fix: do not include unpublished courses when enrollment link resolves course_runs
fix: The update_role_assignments_with_customers command no longer deletes open assignments. Allowing it to do so left us prone to error when an explicit enterprise_customer_uuid arg is provided. We should modify this command in the future to perform deletions of open assignments as its only action, and it should only be invoked this way after we have verified that all backfilled enterprise_customer fields on the assignments have been set correctly.
Adds the catalog admin role to roles_api.roles_by_name()
.
Removes course mode as a required parameter to the bulk subscription enrollment endpoint.
Adds bulk enterprise learner in bulk courses enrollment endpoint with pending user support.
Adds a management command to update all SystemWideEnterpriseUserRoleAssignment
records in a way
that makes them more explicitly defined.
Bug fix to remove a deprecated parameter that was causing bulk enrollments to fail.
Made help text of sender_alias more generic.
Fix bulk enrollment endpoint to process email_csv and email as well
Replaced an LMS Enrollment API call with direct call the DB to avoid LMS rate limiting during integrated channels bulk jobs.
Updated the default IDP priority of enterprises for social auth.
Change canvas_course_id to BigInteger: Integrated Channels
Upgrade django-ipware to version 3.0.2
Read CSV files using utf-8-sig encoding to handle Byte Order Mark
Rename Owners field to Partners for Cornerstone Integration
[3.17.38]
Omitting assessment level reporting from integrated Canvas learners final grade to not have redundant reported points between final grades and subsection grades.
Refactor to only create an EnterpriseCourseEnrollment
if we successfully create/update a CourseEnrollment
record
Properly filtering integrated channels that support assessment level reporting.
Map “estimated_hours” to “credit_hours” in addition to “total_hours” in SAP.
Removing temporary logs from integrated channels.
Enable manually adding learners to multiple enterprises
Adding the logic to select default provider in case an enterprise has multiple identity providers attached.
Change moodle course title in exporter, to include edX text.
Investigatory logging to track down Integrated Channels transmission issues.
Prevent NoneType string concatenation when handling multiple enterprises logistration without redirects.
Adds default field in enterprise customer identity provider table to select default IDP if there are more than one IDPs attached with enterprise.
Adding Logging to single learner assessment level reporting task.
Updating docs to reflect method behaviors.
Making failed SAP user remote ID retrievals log relevant context data.
Making sure Canvas Integrated Channel properly url encodes user identifier fields.
Fixing assessment level reporting audit retrieval.
Adds content metadata item transmission table to Django Admin.
Introduce and use a roles_api
module and use the roles API in signal receivers
that need to create or delete role assignments.
For created or updated learner and admin enterprise users, associate their user-role
with the enterprise_customer
to which that user is linked.
Install django-cache-memoize.
Adds better exception handling to the SAP integrated channels.
Adds better logging to the base transmission process in the integrated channels.
Removes the sync_enterprise_catalog_query boolean field from the EnterpriseCustomerCatalog model.
Adds migration to remove the sync_enterprise_catalog_query boolean field.
Removes all references to the sync_enterprise_catalog_query boolean field from the EnterpriseCustomerCatalog model.
Updates all conditional use of the sync_enterprise_catalog_query field to be True.
A second PR will follow to remove the model field and perform the db migration (blue/green deployment safe).
Added a catch all exception block to ensure login flow is not interrupted by analytics user sync.
Include course mode for the user’s student.CourseEnrollment
in the EnterpriseCourseEnrollmentSerializer
.
In SystemWideEnterpriseUserRoleAssignment
, Use either applies_to_all_contexts
or enterprise_customer
if they are True or non-null, respectively, in determining the result of get_context()
,
but continue to return list of all linked enterprise customer UUIDs if not, (which is the current behavior).
This is a small step on our journey to explicitly defining user-role assignments.
On the SystemWideEnterpriseUserRoleAssignment
model, adds an enterprise_customer
FK (nullable)
and an applies_to_all
boolean field (defaults to False) that indicates if the user has wildcard permissions.
Updates the admin to show the “effective” customer in the detail view, and the explicit value in the list view. The effective value is the deprecated way we currently determine role assignment - by implicitly assigning the role on every customer to which the user is linked.
In the detail view/form, the “Enterprise customer” dropdown contains only customers to which the user is currently linked.
added check to make sure enterprise user can only use linked IdP with their enterprise customer.
Conditionally allows the deletion of individual EnterpriseCourseEnrollment
and related
LicensedEnterpriseCourseEnrollment
records via the Django Admin site, so that site admins can manually
delete enterprise enrollments that were created in error.
This is only allowed if a Django settings feature flag is set to True
.
Apply edx-rbac migration to add applies_to_all_contexts
field to SystemWideEnterpriseUserRoleAssignment
.
Added endpoints for Cornerstone integrated channel.
added home page logo for EnterpriseSelectionView and EnterpriseLoginView
Fix deprecation warning: third_party_auth
should be imported as common.djangoapps.third_party_auth
.
Added new API endpoints for Degreed integrated channel.
Added new field sender_alias
in enterprise customer which will be used in emails except of default alias.
Non-effectual code cleanup / refactor to remove some final pieces of duplication (canvas, blackboard).
Ensure enterprise course enrollments return valid course run statuses such that when a learner earns a passing certificate, the enterprise_course_enrollments
API endpoint deems the course is complete even though the course itself may not have ended yet per the configured dates.
Add some info to the EnterpriseCourseEnrollment
docstring, add is_active
property to same.
Fixed unnessary integrated channel signal transmission on course completion to inactive customers by adding guard condition.
Stop listening for student.CourseEnrollment
unenrollment signal, as introduced in 3.17.0
Add management command to process expired subscriptions and field on subscriptions to persist that the subscription expiration has been processed
Listen for student.CourseEnrollment
unenrollment signal and delete associated
EnterpriseCourseEnrollment
record if one exists (we will have a historical record of the deletion).
Retrieve EnterpriseCustomerUser
by both user_id and enterprise_customer to handle users who are pending for more than 1 enterprise.
Forcing embedded enrollment links within integrated Blackboard courses to open new windows to avoid security alert prompt.
Upgrade celery to 5.0.4
Added ClientError exception handling for SAPSuccessFactorsAPIClient.
Modify the learner portal enterprise_course_enrollments endpoint to include an is_enrollment_active
key that indicates the status of the enterprise enrollment’s related student.CourseEnrollment`.
Allow the endpoint to optionally accept an ``?is_active
query param, so that clients may request
only active enrollments from it.
Improved error handling for SAP Success Factors OAuth2 response.
Refactoring title content metadata in integrated course creation within the Blackboard integrated channel.
Add SuccessFactors Customer Configuration API endpoint.
Update unique constraints for pending Enterprise learners/admins to support users who may be pending for more than 1 Enterprise.
Fix handle_user_post_save
to account for the potential of being a pending learner/admin for more than 1 Enterprise.
Refactor handle_user_post_save
to be responsible for linking PendingEnterpriseCustomerUser records and granting admin permissions.
Adding backend support for admin portal Blackboard configuration.
Added the ability to enable multiple Identity Providers for a single enterprise customer.
Converted relation between enterprise customer and identity provider to a one-to-many.
Adds new API for Canvas LMS configurations.
Rebranding update: Change fonts and colors, change mobile layout
Adding decorators to missed integrated channel tasks.
Add new API for external LMS configurations.
Use logo from get_platform_logo_url
in the legacy Django templates
Adding Blackboard support for assessment level reporting in the integrated channels.
Bug fix with course key lookup in the Canvas assessment level grade reporting flow.
Rebranding update: move to more robust get_platform_logo_url
and update default branding colors.
Add log for enterprise enrollment page.
Fixed deprecation warnings related with drf methods (detail_route, list_route).
Empty sequence bugfix in catalog api.
Course end date bugfix.
Add course end date to course level metadata.
Base implementation of assessment level reporting for Integrated Channels.
Use full paths for edx-platform/common/djangoapps imports, as described in edx-platform ADR #7.
Fix silent exception in catalog api call.
Add code_owner custom attribute for celery tasks.
Refresh catalog metadata on create and update
added support for grade, completion and course_structure type reports in enterprise report configurations. Added validation to allow these reports for Pearson enterprises only.
Support uploading a course_id
column in the “Manage Learners” CSV bulk upload to allow manual enrollments in multiple courses at once.
Fixes the issue where user preference value can not be null.
Added spanish translations for data sharing consent page.
Update Moodle integration to single transmission to handle responses properly.
Remove hyphens from enterprise_customer_uuid for admin user creation and tableau authentication.
Fix timout on update.
Updated the logic to clear enterprise learner language in a way that db lock does not happen.
change username with enterprise_customer_uuid for tableau trusted authentication and tableau user creation.
Tests only: upgrade to pytest 6+ and factoryboy 3+ to bring up to date with edx-platform.
Adding Blackboard customization to integrated channel content metadata creation.
change username with user_id for tableau trusted authentication and tableau user creation.
add logs to know if data sharing consent is failing because catalog does not contain the course
added POST enterprise-customer/<uuid>/enterprise_learner endpoint to mimic Manage Learners admin form functionality
upgrade version to create new release on pypi.
added error_codes in the logging/error messages for the CourseEnrollmentView for better debugging capability.
Unset learners language so that default_language from enterprise customer may take effect.
Fix DSC tests to verify enrolling a learner with a license_uuid
ENT-2450: Add action to kick off jobs to refresh enterprise catalogs so changes will be immediately visible
Style/UX changes for Moodle integration.
Adding integrated course customization for Blackboard courses.
Re-add check for license uuid when enrolling learners into a course
Added the EnterpriseAnalyticsUser model and tableau integration functions.
Enable enterprise to have a default language configuration for its learners.
ENT-3557: Improve blackboard view logging to better report root cause of auth failure.
ENT-3460: Adding properties to safely use branding config.
Embedded enterprise in the username was removed for tableau trusted authentication.
Bug fix: SAML stripping for unlinking was not properly removing saml prefix.
Blackboard client update/delete and unit tests.
Reverting changes to EnterpriseCustomerBrandingConfig.
Using python properties for EnterpriseCustomerBrandingConfiguration colors.
Authenticate user with Tableau.
Add default branding config object to the Customer record if null.
Implementing Blackboard completion data tranmission.
During license revocation, if no audit track exists for the course, attempt to unenroll the learer from it.
Catches/Handles error occurring with Moodle integrated channel.
Refactors the revoke endpoint into smaller parts, so that implementing new logic is easier to manage.
Moodle client bug fix
Make email field optional for sftp delivery for enterprise reporting config
Blackboard exporter
Update get_service_usernames()
to read from a list variable (that may not exist).
Moodle completion data implementation
Blackboard client Oauth2 implementation
Allow learners to enroll with their license in courses when DSC is disabled.
Added Audit grade for Audit mode enrollments in integrated channels.
Updated seed_enterprise_devstack_data to enable the test customer’s subscription management screen
Add functionality to save logo file at only one location when saving EnterpriseCustomerBrandingConfiguration instance
Better exception handling for integrated channels.
Copy test from edx-platform over to enterprise to test migrations early.
Initial setup for Blackboard Integrated Channel.
Update logo name and path after the instance is saved to replace None with instance id.
Token expiration handling in canvas client.
Update Data Sharing Consent language.
Add Moodle integration to integrated_channels.
Fix issue with canvas channel not finding a course, by using search endpoint
Fix column width issue for DSC and other pages
Upgrading celery version to 4.4.7 for python 3.8 support
Reverting PR #952.
Standardizing log format in integrated channels learner data export.
Fixing the construction of the next param in the proxy login view for SSO.
Adding more informative logs to the integrated channels.
Using viewname in reverse as part of args to prevent IndexOutOfRange exception
Add a field to EnterpriseCustomer to disable main menu navigation for integrated channel customer users.
Add a field for enabling analytics screen in the admin portal for an EnterpriseCustomer.
Add management command to create DSC records.
Course and Course Run enrollment_url now points to learner portal course page if LP enabled.
Canvas channel discovery improvements assorted changes.
Assign “enterprise_admin” system-wide role to pending admin users when registering their user account.
Fixes migration mismatch for Canvas models.
The seed_enterprise_devstack_data
management command now accepts an enterprise name when creating an enterprise,
and the learner portal is activated by default.
Adds the learner data exporter and transmitter to the Canvas integrated channel.
Celery version is now upgraded to latest one
Adds support to capture contract discounts from the Enrollment API by adding default_contract_discount
to the EnterpriseCustomer
model and passing it to ecommerce when creating orders
Override the EnterpriseContentCatalog.save()
method to sync the content_filter
from an associated
EnterpriseCatalogQuery
, if appropriate.
Add some logging to the update_enterprise_catalog_query
signal.
The seed_enterprise_devstack_data
management command is now idempotent when creating an enterprise,
and creates users and operator roles for the license-manager and enterprise-catalog workers.
Also send course image_url to Canvas when creating course.
Fixed Duplicate Calls to OCN API.
Return requested user’s linked enterprises only. For staff user return all enterprises.
Added course update and deletion capabilities to the canvas integrated channel.
Changed strings in Manage Learners DSC view.
Added a fix for “Manual Order Not Fulfilled” bug.
Added course mode in ecommerce manual enrollment API.
Canvas transmitter implementation for course creation
Adding Django admin forms for Canvas integration config and cleanup on models.
Adding Canvas integrated channels API endpoint for the oauth process completion
Added logging in enrollment endpoint for test purposes.
ENT-2939: removing waffle flag and utility function used in enterprise-catalog transition
Fixed date format in Cornerstone catalog sync call
Fix permissions issue with license_revoke endpoint in LicensedEnterpriseCourseEnrollmentViewSet.
Add Content Metadata Exporter for Canvas Integration.
Add client instantiation and oauth validation for Canvas integration.
Add update_course_enrollment_mode_for_user method to the EnrollmentApiClient.
Create new API endpoint to update the mode for a user’s licensed enterprise course enrollments when their enterprise license is revoked.
Introduce new course run status for saved_for_later.
On revocation of an enterprise license, mark the user’s licensed course enrollments as saved_for_later and is_revoked.
Create fresh migrations from scratch for Canvas since this app is yet to run migrations in platform.
Remove field ‘key’ from a canvas integrated_channel model (but not migration yet), step 2/3
Migration to remove banner_border_color
and banner_background_color
branding config fields.
Add new field client_id to canvas model for removing older key field (step 1/3)
Remove references to deprecated banner_border_color
and banner_background_color
branding config fields.
Add postman collection for Canvas integrated channel
Migration to copy old color field values to new field.
Add BrandingConfiguration primary/secondary/tertiary color fields.
Add Canvas integrated_channel first cut.
The PendingEnterpriseCustomerUser create action will create an EnterpriseCustomerUser
if an auth.User
record with the given user_email already exists.
Add flag to sync updates in an EnterpriseCatalogQuery with its associated EnterpriseCustomerCatalogs.
Create a post_save signal to overwrite the content_filter with the update.
Changes should also be sent to the Enterprise Catalog service.
Added new view for requesting the DSC for learners for specific course.
Add query params to proxy login redirect for new welcome template to be rendered.
Fixing proxy_login SSO redirect, adding default next param from proxy_login.
Adds hide_course_original_price field to the serializer for the EnterpriseCustomer endpoint.
Adds proxy login view to allow unauthenticated enterprise learners to login via existing flow from the learner portal.
Uses correct course mode slugs during enrollment from GrantDataSharingPermissions.
Use the GrantDataSharingPermissions view to enroll licensed users in courses
Remove get_due_dates and always return an empty list for due_dates
Remove unnecessary data migration
Final removal of marked_done field
Gracefully handle when list of subjects for content metadata contains either a list of strings and list of dictionaries
Added new SAML Config option to EnterpriseCustomer in Django admin.
Remove database references to marked_done.
Admin dashboard rules predicates now pass an object into the edx-rbac utility functions.
Created LicensedEnterpriseCourseEnrollment.
Change marked_done on EnterpriseCourseEnrollment mode nullable.
Added health checks for enterprise service.
Added saved_for_later field to the EnterpriseCourseEnrollment model. This will eventually replace the marked_done field.
Changed GrantDataSharingPermission to redirect to the intended course instead of dashboard, if consent is not required
Repair invalid key references in Discovery API Client method.
Restore EnterpriseCatalogQuery functionality to previous state.
xAPI: Include course UUID in activity extensions collection
Remove verbose names from EnterpriseCourseEnrollment model Meta class
Add support to override enrollment attributes for learners
Bug fix: Added missing migration for content_filter validation changes.
Add validation for content_filter subfields in EnterpriseCatalogQuery and EnterpriseCustomerCatalog
Update processing of marked_done field slightly for cleaner boolean usage in client
Update GrantDataSharingPermissionView to accept both; course_run_id as well as course_key
Exclude unpublished course runs when determining available/enrollable status
Added status key to default content filter for EnterpriseCustomerCatalog.
Added marked_done field in /enterprise_course_enrollments/ response
xAPI Integrated Reporting Channel, Version 2
Added rollback for EnterpriseCourseEnrollment enroll
Downgrade an error log to a warning to reduce alert noise
Suppress the 404 exception in get_enterprise_catalog when we expect it
Add enterprise_customer_uuid to an error message to be more informative
Delete “enterprise_learner” role assignment when an EnterpriseCustomerUser record is soft deleted (i.e., linked attribute is False)
Update seed_enterprise_devstack_data command to include name on user profiles when creating enterprise users
Updating the catalog preview URL to use the Catalog Service
Added the enterprise slug login functionality.
Improve xAPI enrollment/completion event filtering, transmitting, and recording
Removing caniusepython3 as it is no longer needed since python3 upgrade.
Improve EnterpriseRoleAssigment exception messaging
Converting UUID fields to string for use in can_use_enterprise_catalog
Added can_use_enterprise_catalog utility function to exclude enterprises from the transition to enterprise-catalog
Created migration to update_or_create a system-wide enterprise role named enterprise_catalog_admin
Moving the post model save logic for Enterprise Catalog to signals.py.
Updated EnterpriseCustomerCatalogAdmin save hook to check if a corresponding catalog exists in the enterprise-catalog service. If it does, the save hook will update the existing catalog; otherwise, a new catalog will be created.
Added extra logging when syncing Enterprise Catalog data to the Enterprise Catalog Service.
Added a flag to enable the slug login for an enterprise customer.
Makes the data sharing consent template guard against empty/null branding configuration logo values.
Added extra logging in ‘create_enterprise_course_enrollments’ management command.
Added use of traverse_pagination for get_content_metadata in the enterprise_catalog api client.
Pass enterprise customer’s name to enterprise-catalog service during create/update of enterprise catalogs
Refactor migrate_enterprise_catalogs management command to check if a catalog already exists in the enterprise-catalog service. If a catalog already exists, it will be updated with a PUT request; otherwise, a new catalog will be created with a POST request.
Specified python3.5 version for PyPI release
Removed support for Django<2.2 & Python3.6
Added support for python3.8.
Changes to use catalog query content filter if defined instead of catalog content filter.
Made enrollment reason optional when linking learners without enrollment.
Added extra logging in ‘create_enterprise_course_enrollments’ management command.
Squashed the sap_success_factors and integrated_channel app migrations.
Revised “end date” window for determinine course active/inactive status in catalog API responses.
Added extra exception handling in create_enterprise_course_enrollments management command.
removed get_cache_key and using it from edx-django-utils.
Squashed the enterprise app migrations.
Fixed HTML tags bug from short course description in enterprise course enrollment page
Fixing the traversal of results in get_content_metadata for the enterprise-catalog API client
Switch catalog_contains_course method to use enterprise catalog service behind waffle sample
Add USE_ENTERPRISE_CATALOG waffle sample, and remove USE_ENTERPRISE_CATALOG waffle flag
Switch the use of waffle.flag_is_active to waffle.sample_is_active
Updates the EnterpriseCatalogApiClient to make the user argument optional. If the user argument is not provided, it will use the “enterprise_worker” user instead
No longer passes user to the EnterpriseCatalogApiClient during initialization in places where a request and/or user object doesn’t already exist
Fix issue with matching urls for redirect to enterprise selection page
Use the USE_ENTERPRISE_CATALOG waffle flag for transitioning integrated channels to using the enterprise-catalog service
Add USE_ENTERPRISE_CATALOG waffle flag
Switch get_course, get_course_run, get_program, and get_course_and_course_run methods to use enterprise catalog service behind waffle flag
Converted the EnrollmentApiClient to JWT client.
Additional xAPI transmission workflow logging
Added support for bypassing enterprise selection page for enrollment url triggered login
Added “active” key in enterprise_catalog API for “course” content_type if the “course” has “course_run” available for enrollment.
Removed the ‘EDX_API_KEY’ from CourseApiClient.
Updated enterprise-catalog endpoint urls to match rename
Improved xApi logging to include statement and LRS endpoint’
Updated xApi integrated channel to use the updated CourseOverview method ‘get_from_ids()’
Removed use of Bearer Authentication
Add field for enabling subscription managment screen in the admin portal to EnterpriseCustomer.
Reset authentication cookies on enterprise selection to update JWT cookie with user’s enterprise
Added the salesforce opportunity_id in manage learner django admin.
Fixed formatting on JSON fields in django admin forms
Added new data type for enterprise report configurations
Removing enterprise_learner_portal_hostname from ent cust model (including api)
Removed the code for enrolling the program from manage learner django admin panel.
Update log level from INFO to DEBUG for transmit_content_metadata management command
Restricted PendingEnterpriseCustomerUser to be linked with only one EnterpriseCustomer at a time
Added discount percentage support in pending enrollment use case.
Added totalHours field for successfactors completion event
Learner attached to multiple enterprises, logging in via SSO should be taken to Enterprise selection page
Fixed learner data transmission command when grades API return user_not_enrolled error
Remove totalHours field from content metadata export
Added exception handling for enrollment api calls during manual enrollment
Adding contact_email to enterprisecustomer admin form
Updated calls to manual enrollments api to include enterprise customer info
Add soft deletion support for EnterpriseCustomerUser model
Adding new fields to EnterpriseCustomer and EnterpriseCustomerBrandingConfiguration models
Revert Edx-Api-Key-replacement-changes
Updating enterprise catalog migration management command
Added totalHours field for successfactors export
add boolean field to track linked/unlinked EnterpriseCustomerUser records
Code refactor and ability to send learner completion if grade is changed
Initialized EnrollmentApiClient with enterprise service worker user
Added hooks to sync EnterpriseCustomerCatalog creation, deletion, and model updates in Django Admin to the new enterprise-catalog service
Replaced EnrollmentApiClientJwt name back to original client’s name.
Added management command to reset SAPSF completion data.
Updated enterprise catalog client json formatting.
Replaced Edx-Api-Key in the remaining endpoints of EnrollmentApiClient
Introduced management command to migrate enterprise catalog data to new service.
ENT-2489 | Extracting JSON from discovery service response to calculate size
Replaced Edx-Api-Key in the ThirdPartyAuthApiClient
Changed the client in one endpoint of ThirdPartyAuthApiClient
Endpoint name: model-EnterpriseCustomerUser
Updated context for user with multiple linked enterprises
Added enterprise discount percentage in a manual enrollment
Replaced Edx-Api-Key in the EnrollmentApiClient
Changed the client in one endpoint of EnrollmentApiClient
Endpoint name: admin-views-EnterpriseCustomerManageLearnersView
Replaced Edx-Api-Key in the CourseApiClient
Changed the client in one endpoint of CourseApiClient
Endpoint name: exporters-learnerdata
Changed logging of response size from 2.0.37 (ENT-2489) to use size of response in bytes
Added logging of response size when requests are made to discovery service for data not in cache
Use edx-tincan-py35 PYPI package instead of downloading via git
Version upgrade for edx-rbac
Disabled the manual enrollment orders for audit mode enterprise learners.
Added ability to include or exclude date from the report configuration file name.
Aligned xAPI statement formats with TinCan/Rustici standards
While uploading bulk users in ‘manager learners’ from django admin, better handling if invalid encoding found.
Added ADR for Multiple User Enterprises.
Get the enterprise_customer linked with SAML and mark it active.
Update the enterprise customer in the session in case of customer with multiple linked enterprises
Added logic to set the EnterpriseCourseEnrollmentSource for the Enterprise Enrollments through offers and management task.
Make the SAML enterprise active at login and de-activate other enterprises learner is linked to.
Updated xapi exports with an active enterprise setting for users with multiple linked enterprises.
Added logic to set the EnterpriseCourseEnrollmentSource for the Enterprise Enrollments background task.
Added logic to set the EnterpriseCourseEnrollmentSource for Enterprise Enrollments by URL.
Display enterprise course enrollments separate from non-enterprise course enrollments in the “Enterprise Customer Learner” Django admin form
Custom get function in EnterpriseCustomerUserManager to enable multiple user enterprises.
Remove success url validation for select enterprise page.
Added Source to Enterprise API Enrollments.
Add manual enrollment audit creation for enrollments created in Manage Learners form.
Sorted results of enterprise-learner API by active flag in descending order so active enterprises are on the top
[2.0.18] - 2019-11-13
Better handling when Integrated Channels return unexpected results
Added in models to track enterprise enrollment source and updated the Enterprise Course Enrollments and PendingEnrollments to track that source.
Address defect ENT-2463. Add protection within EnterpriseCustomerUser model in enroll method during coure enrollments.
Added missing migration for EnterpriseCustomerUser
Add Enterprise selection page to allow a learner to select one of linked enterprises
Add manual order creation to enterprise manual enrollment admin form
Update ‘EnterpriseCustomerUser’ model. Add ‘create_order_for_enrollment’. Called during ‘enroll’. Will create an ecommerce order for pending course enrollments.
Add management command to populate sample enterprise data in the LMS within devstack
Add method to Ecommerce API client to call the manual enrollment order API
Updated image url field in content metadata export for cornerstone and degreed
Adding logging to search/all/ endpoint in discovery api client
Added certificate and grades api calls for transmitting learner export to integrated channels
Add query_param to remove expired course runs from /enterprise/api/v1/enterprise_catalogs/UUID/ endpoint
Adding migration file to remove EnterpriseCustomerEntitlement from table schema
Added preview button for EnterpriseCustomerCatalogs in EnterpriseCustomer admin page
Add message box to code management page and admin portal
Updating create_enterprise_course_enrollment task to accept object ids instead of python objects to play nicely with async.
Also converts course_id to str before handing it to task to play nicely with async.
Commenting out code while troubleshooting signal issue in the LMS
Removing EnterpriseCustomerEntitlement code
Adding post-save receiver to spin off EnterpriseCourseEnrollment creation tasks on CourseEnrollment creation signals
Resolved issue with content_metadata image_url.
Added support to transmit single learner data.
Added ability set supported languages in Cornerstone Global Config.
Updating enterprise_learner_portal LMS API calls to refer to new function locations in the LMS.
Added new endpoint basic_list to EnterpriseEnrollment.
Add enable_portal_reoprting_config_screen field to EnterpriseCustomer model.
Add enable_portal_reporting_config_screen to EnterpriseCustomerSerializer.
Added ability to set password on reporting configuration.
Upgrading requirements.
Add learner portal configuration fields to EnterpriseCustomer model.
Implement “move to completed” functionality for Enterprise Enrollments.
Add new field ‘marked_done’ to EnterpriseCourseEnrollment.
Improved enterprise enrollment workflow logging.
Updated learner portal enrollments endpoint to require an enterprise id.
Corrected missing db migration data for the EnterpriseCustomerReportingConfigurations model
Added API endpoints for EnterpriseCustomerReportingConfigurations and updated permissions to use Feature role based auth.
Added XAPILearnerDataTransmissionAudit model for xapi integrated channel.
Preventing another error in enterprise_learner_portal serializer when certificate info is None.
Adding type check to enterprise_learner_portal serializer.
Adding enterprise_learner_portal to quality check commands.
Fix for include course run dates and pacing type in the course description sent to SAP. Prior release (1.9.2) did not include bumping the version in __init__.py.
Include course run dates and pacing type in the course description sent to SAP.
Added enterprise_learner_portal to MANIFEST.in file to recursively grab files app on build
Minor fixes to typos and an image link
Adding enterprise_learner_portal app to support data needs of frontend enterprise learner portal app
Remove tincan from src directory
For CornerstoneCourseListAPI handled corner cases for default values.
Added history models for PendingEnrollment and PendingEnterpriseCustomerUser.
Sending default values for required fields in Cornerstone Course List API
Add/Update logs for GrantDataSharingPermissions and DataSharingConsentView views to improve monitoring.
Change coupon code request email from address.
Introduce enterprise catalog queries.
Upgrade python requirements.
Log success of coupon code request email send.
Show linked enterprise customer on Enterprise Customer Learners and System wide Enterprise User Role Assignments admin screen
Replace edx-rbac jwt utils with edx-drf-extensions jwt utils
Change the way we declare dependencies so we can avoid breaking make upgrade in edx-platform.
Added ability to send user’s progress to cornerstone
Reverted page size of SAPSF inactive user results from 1000 to 500
Pin certain constraints from edx-platform so that edx-enterprise will install properly there.
Upgrade python requirements
Revert changes made in 1.6.20
Added additional logging for enterprise api
Updated catalog preview URL on enterprise customer catalog admin list display
Added ability to skip keys if their value is None for content exporter
Changed page size of SAPSF inactive user results from 500 to 1000
Fixed Server Error on enterprise course enroll url caused by week_to_complete None value
Capture user attributes sent by cornerstone
Fix error where the search/all/ endpoint in discovery is called with course_key=None
Pass language code instead of language name in languages field of course-list API for cornerstone
Improved logging of unlink_inactive_sap_learners command and matching social auth user by uid field
Updated discovery clients to always call the enterprise customer site if available
Update the format of course_duration in xAPI payload data.
Remove old catalog model field.
Install django-filter so this app is compatible with newer DRF packages.
Fix error in enrollment flow caused by the way course keys were parsed.
added enable_audit_data_reporting in EnterpriseCustomerSerializer
Use OAuth2AuthenticationAllowInactiveUser as oauth2 authentication instead of BearerAuthentication for course-list API.
Use edx-rbac functions and pin edx-rbac so that we can continue to release edx-enterprise.
Upgrade packages to get latest edx-drf-extensions version.
Remove RBAC waffle switch
Remove old style catalogs
Fallback to request.auth if JWT cookies are not found.
Added new integrated channel cornerstone with course-list API.
Reverting changes from 1.5.6.
Bumping version to 1.5.8. 1.5.7 was tagged and released without actually bumping the version
Updating get_paginated_content ent catalog method to use count value given from discovery service
Fix the way a course identifier is found for a given course run.
Clean up rbac authorization related waffle switches and logic
Updating test packages to be inline with edx-platform. Specifically Bleach >2.1.3
Add total number of weeks to view from data consent screen
Remove usages of get_decoded_jwt_from_request from rbac in favor of get_decoded_jwt from edx-drf-extensions
Updating consent granted view to redirect to dashboard if consent is not required
Add sync_learner_profile_data flag to data returned by enterprise-learner endpoint
Add enterprise customer column in the list_display admin interface for SystemWideEnterpriseUserRoleAssignment
Update SystemWideEnterpriseUserRoleAssignment admin interface search to support search by enterprise customer
Upgrade edx-rbac version
Reduce course mode match exception log level
Fix invalid object attribute references in exception message
Stop masking discovery call failures from the client for enterprise catalog endpoint calls.
Revise course mode match exception message in CourseEnrollmentView.
Revise course load exception message in CourseEnrollmentView.
Added availability key to default content filter for ECC.
Update assign_enterprise_user_roles management command to also assign catalog and enrollment api admin roles.
Update RouterView if user is already enrolled in course run of a course then user will land on that course_run.
Add new rbac permission checks to enterprise api endpoints.
Update context for enterprise-openedx-operator role.
Provide ability to add ECE even if course is closed from manage learners admin interface.
Update role metadata for edx-openedx-operator role.
Update assign_enterprise_user_roles management command to also assign enterprise operator role.
Add data migration for adding edx enterprise operator role.
Introduce rbac models for feature specific roles within edx-enterprise.
Assign an enterprise learner role to new EnterpriseCustomerUser.
Management command to assign enterprise roles to users.
Fixed error in enrollment flow when audit track is selected and no DSC required.
Adding django admin for SystemWideEnterpriseUserRoleAssignments.
Optimizations around unlinking of SAP Success factor inactive users
Introducing Enterprise System Wide Roles and edx-rbac.
Updating enterprise views with new logging
Updating enterprise views to render new error page in a number of circumstances
Allow admins with enterprise permissions to edit Data Sharing Consent Records
Include Enterprise Catalog UUID in Enterprise Customer django admin inline.
Upgrade requirements, and add code-annotations.
Add PII annotations to all apps in this repo.
Enable PII checking during CI.
Revert 1.2.4 to restore DSC functionality.
Replace error level log with info level log when enterprise user is not enrolled in course yet and the transmit_learner_data command is run
Updating launch_points data in SapSuccessFactorsContentMetadataExporter so SuccessFactors can be mobile ready
Remove HandleConsentEnrollment view and replaced with a function inside GrantDataSharingPermissions view. Removed GET side effect
Add management command “unlink_inactive_sap_learners” to unlink inactive SAP learners from the related enterprises
Update styling for future courses start date visibility
Handle /search/all/ endpoint large catalog queries to discovery through HTTP POST
Updating the course grade api url called in lms api
Upgrade django-simple-history required version
Add option on EnterpriseCustomer for displaying code management in portal
Update EnterpriseCustomer model to introduce customer type field
Use LMS-defined segment track() method
Updating EnterpriseCustomerReportingConfiguration model. ManyToMany relationship with EnterpriseCustomerCatalog
Updating EnterpriseCustomerReportingConfigurationAdminForm validation
Updating EnterpriseCustomerReportingConfigurationSerializer
Added username and user email in EnterpriseCustomerUserAdmin list display.
Added search by username and user email in EnterpriseCustomerUserAdmin.
Added enterprise api for requesting additional coupon codes.
Make HTTP POST request to get catalog results from discovery.
Fix translations for enterprise pages.
Updated EnterpriseCustomerReportingConfiguration model with PGP key
Made autocohorting API availability based on a configuration option.
Upgrade edx-drf-extensions with refactored imports.
Remove Hawthorn testing for upcoming backward incompatible change.
SuccessFactors: Submit batch/chunk of OCN items to tenants until error status
Added ability to query enterprises by slug on the with_access_to endpoint
Added ability to assign cohort upon enrollment.
Added ability to unenroll in enrollment API.
Added Country field to the EnterpriseCustomer model.
Fixed 500 error on enterprise customer admin screen.
Remove the SailThru flags for enterprise learner when un-linking it from enterprise.
Changed permission logic and added filtering options for the enterprise with_access_to endpoint.
Added preview field that takes user to Discovery with elastic search results for the catalog
Added management command to send course enrollment and course completion info for enterprise customers.
Revise management command query to include all potentially-applicable enrollment records
Move some fields from Global Degreed Configuration to Enterprise Degreed Configuration.
Added LearnerInfoSerializer and CourseInfoSerializer for serializing xAPI payload data.
Added endpoint to check a user’s authorization to Enterprises based on membership in a given django group.
Added missing migrations for xAPI LRS Configuration model
Implemented reporting channel of course completion via X-API
Add thumbnail images in exported metadata content by content type.
Updated message for invalid Enterprise Customer Catalog references in B2B enrollment workflow.
Updated TinCanPython package to support python 3
Updated UUID field to nowrap in admin interface of enterprise customer catalog model.
Display customer catalog content filter’s default value on enterprise customer admin.
Make customer catalog content filter’s default value configurable.
Pass catalog value only when provided on enterprise course enrollment page.
Send learner data transmissions to integrated channels by course key and course run id.
Use query param “catalog” instead of “enterprise_customer_catalog_uuid” for catalog based enterprise discounts.
Apply enterprise catalog conditional offer by the provided enterprise catalog UUID.
Modify enterprise branding config API to use enterprise slug as the lookup_field.
Paginate linked learners list on manage learners Django admin view.
Add unique slug field to EnterpriseCustomer.
Update requirements to fix pip install issues and to keep in line with edx-platform.
Fix the Direct-to-Audit enrollment issue in case of course instead of course run.
Strip locale values.
Add and transmit customer specific locales so that SuccessFactors show course title and description.
Fix the Direct-to-Audit enrollment issue in case of course.
500 error when attempting to enroll using course-level URL.
Add a progress_v2 option in the reporting config to be used for data API fetching.
Increased character limit from 20 to 255 for field title in EnterpriseCustomerCatalog model
Reorder list display for EnterpriseCustomerCatalogAdmin
Add sorting order for EnterpriseCustomerCatalogAdmin
Mark ECU as inactive internally if SAPSF says the ECU is inactive on their side.
Admin tooling enterprise customer reporting configuration enhancement - Order by Enterprise Customer Name.
Update DSC to show notification interstitial communicating to enterprise learner they are leaving company’s site.
Configuration to show/hide original price on enterprise course landing page.
Remove constraints on the reporting config.
Update enrollment api authorization to check group permissions.
Dropped sap_success_factors_historicalsapsuccessfactorsenterprisecus80ad table.
Add json report type.
Allow reporting configs to work for arbitrary data and report types.
Added ordering to resolve warnings of probable invalid pagination data.
Update the messages when an enterprise learner leave an organization.
Update user session when they become an Enterprise learner.
Added ability to specify data sharing consent wording on a per enterprise basis.
Add configuration to allow replacing potentially sensitive SSO usernames.
Improved integrated channel logging.
Fix the enterprise manage learner django admin tool is loading correctly for chrome users.
Integrated channel refactoring cleanup.
Refactored integrated channel code to allow for greater flexibility when transmitting content metadata.
Update isort version and sort imports after making consent and integrated_channels first party apps.
Temporarily disable linked learners list on manage learners Django admin view until paging can be added.
Add EnterpriseCustomerCatalog course detail endpoint.
Add “Enrollment Closed” in course title if the course is no longer open for enrollment.
Support multiple emails in EnterpriseCustomerReportingConfiguration.
Only require email(s) in EnterpriseCustomerReportingConfiguration if the selected delivery method is email.
Remove the renderer.py file.
Add functionality in enterprise django admin for transmitting courses metadata related to a specific enterprise.
Indicate when a course is no longer open for enrollment by updating course title for transmit courses metadata.
Decreased SuccessFactors course metadata chunk size from 1000 to 500, per SAP’s recommendation.
Updated the “Data Sharing Policy” language.
Provide an option for enterprise to pull enterprise catalog API in XML format not just JSON.
Add migration for removing old password fields from the database.
Removed code references to old password fields.
Improved handling of password fields on database models.
Exclude credit course mode option from course enrollment page.
Group Name, Active, Site, and Logo together.
Rename “Provider id” form label to “Identity Provider”
Rename “Entitlement id” form label to “Seat Entitlement”
Rename “Coupon URL” form label to “Seat Entitlement URL”
Add a “View details” hyperlink next to identity provider drop-down.
Add a “Create a new catalog” link under the Catalog drop-down.
Add a “View details” hyperlink next to catalog field, if catalog is selected.
Add a “Create a new identity provider” link under the Identity Provider drop-down.
Include start date in all course runs title when pushing to Integrated Channels.
Add localized currency to enterprise landing page.
Fix enterprise logo stretching issue in enterprise sidebar on course/program enrollment pages.
Add missing migrations for sap_success_factors and degreed.
Update django admin list view for enterprise customer model.
SuccessFactors Admin Update: Enterprise Customer Configuration.
Add sftp configuration options for EnterpriseCustomerReportingConfiguration.
Add check for active companies when getting list of channels
Add save_enterprise_customer_users command.
Remove references to SSO IdP config drop_existing_session flag.
Fix templates to use new bootstrap bundle library.
Fix syntax error in template-embedded Javascript.
Make sure root url has a fallback for proxy enrollment email links.
Add course_enrollments API endpoint to swagger specification.
Add publish_audit_enrollment_url flag to EnterpriseCustomerCatalog.
Update create_enterprise_course_enrollment command.
Ensure that proxy enrollment email links trigger SSO.
Check site configuration for from email address first
Added course start date to title string for instructor-led courses
Redirect to embargo restriction message page if user is blocked from accessing course.
Add integrated channel configuration info to course metadata push task logging.
Include additional context for learner data transmission job exceptions.
Track enterprise course enrollment events.
Add Degreed as new integrated channel.
Increase font size on data sharing consent page.
Introduce the bulk enrollment/upgrade api endpoint for Enterprise Customers.
Do not change EnterpriseCustomerReportingConfiguration.password on update.
Add Identity Provider’s ID to enterprise customer API response.
Remove inaccurate landing page audit track language.
Use LMS_INTERNAL_ROOT_URL instead of LMS_ROOT_URL for API base.
Use the cryptography package instead of the unmaintained pycrypto.
Link learner to enterprise customer directly using “tpa_hint” URL parameter.
Update DSC policy to match legal requirements.
Remove “Discount provided by…” text on the program landing page.
Removing SAP_USE_ENTERPRISE_ENROLLMENT_PAGE switch via django waffle and use landing page URL instead of track selection page.
Move data sharing policy to its own partial to improve theming of the data sharing consent page
Apply appropriate content filtering to the EnterpriseCustomerCatalog detail endpoints.
Show generic info message on enterprise course enrollment page.
Added inline admin form to EnterpriseCustomer admin for EnterpriseCustomerCatalog.
Fix error for empty course start date on DSC page.
Fetch catalog courses in large chunks to avoid API limit.
Preserve catalog querystring on declining DSC.
Fixing logo size on themed enterprise pages
Remove unused dependency on django-extensions
Fix alteration in querystring parameters for decorator “enterprise_login_required”.
Get rid of the EnterpriseIntegratedChannel model and any other related but unused code.
Fix migration issue for enabled-course-modes field of EnterpriseCustomerCatalog
Update the call level to enrollment uls from EnterpriseCustomer to EnterpriseCustomerCatalog.
Update EnterpriseApiClient.get_enterprise_courses to account for EnterpriseCustomerCatalogs.
Update course enrollment view for enterprise enabled course modes.
Update the EnterpriseCustomerCatalog migration.
Add EnterpriseCustomerCatalog UUID as query parameter “catalog” in enterprise course and program enrollment URL’s.
Upgrade django-simple-history to 1.9.0. Add needed migrations.
Introducing EnterpriseCustomerReportingConfig model for enterprise_reporting.
If a course is unenrollable, the program and course enrollment landing pages will display only a subset of information.
Change a log level from error to info in our LMS API Client, as it wasn’t really an error.
Implement a direct-audit-enrollment pathway for course enrollment.
Implement a RouterView that the enrollment URLs have to go through before redirection to a downstream view.
Added enabled_course_modes JSONField to EnterpriseCustomerCatalog model
Added UTM parameters to marketing, track selection, and course/program enrollment URLs returned by Enterprise API.
Fix bug related to EnterpriseCustomer creation form introduced with 0.51.0.
Modify EnterpriseCustomer.catalog_contains_course to check EnterpriseCustomerCatalogs.
Refactor user-facing DSC view’s logic.
Make discovery-service lookups site-aware
Improved robustness for force_fresh_session decorator in conjunction with enterprise_login_required
Consciously avoid attempting to sync back details for SAPSF users who aren’t linked via SSO
Add contains_content_items endpoint to EnterpriseCustomerViewSet and EnterpriseCustomerCatalogViewSet.
Rewrite all of our CSS in SASS/SCSS.
Use Bootstrap for our modals.
Fix existing course modal UI issues using Bootstrap & SASS/SCSS.
Step 2 in making enrollment email template linked to enterprise. Remove site from model. No migration.
Step 1 in making enrollment email template linked to enterprise. Make ‘site’ nullable, add ‘enterprise_customer’.
Add extra details to the program enrollment landing page.
Add proper permissions/filtering schemes for all of our endpoints.
Step 3 in safe deployment of removing old consent models: make migrations to delete the outstanding fields/models.
Step 2 in safe deployment of removing old consent models: remove require_account_level_consent, but no migration.
Step 1 in safe deployment of removing old consent models: make require_account_level_consent nullable.
Added some log messages to trace possible 404 issue.
Remove old account-level consent features as well as consent from EnterpriseCourseEnrollment.
Abstract away usage of configuration_helpers.
Make bulk enrollment emails more intelligent
Add exception handling for transmit course metadata task.
Remove the auth-user endpoint completely.
Allow multi-course enrollment for enterprise users in admin.
Modified enterprise-learner API endpoint to include the new DataSharingConsent model data.
Added MVP version of the Programs Enrollment Landing Page.
Wrapped API error handling into the clients themselves.
Removed the text if there is no discount on the course enrollment landing page.
Ensure that segment is loaded and firing page events for all user facing enterprise views.
Display the enterprise discounted text on the course enrollment landing page.
Remove support for writing consent_granted in enterprise-course-enrollment api.
Add architecture for program-scoped data sharing consent.
Do not create baskets and orders for audit enrollments.
Migrate the codebase to the new consent.models.DataSharingConsent model for when dealing with consent.
Fix bug causing 500 error on course enrollment page when the course does not have a course image configured.
Update Consent API to use Discovery worker user for auth, rather than request user.
Update SAP course export to use enterprise courses API.
Fix 500 server error on enterprise course enrollment page.
Change landing page course modal to use discovery api for populating course details.
Increase capability and compatibility of Consent API.
Add new unified DataSharingConsent model to the consent app.
Add Enterprise API Gateway for new Enterprise Catalogs and Programs endpoints.
Add /enterprise/api/v1/enterprise-catalogs/ endpoint.
Add /enterprise/api/v1/enterprise-catalogs/{uuid}/ endpoint.
Add /enterprise/api/v1/programs/{uuid}/ endpoint.
Added management command “create_enterprise_course_enrollments” for missing enterprise course enrollments.
Fixed session reset decorator bug.
Make whether Enterprise Customers get data for audit track enrollments configurable.
Fixed the text cutoff in the bottom of the course info overlay.
Only send one completion status per enrollment for SAP SuccessFactors.
Create Audit enrollment in E-Commerce system when user enrolls in the audit mode in enterprise landing page.
Remove Macro use from swagger api config as it is not supported by AWS.
Introduce new endpoint to the Enterprise API to query for courses by enterprise id.
Ensure catalog courses API endpoint users are associated with an EnterpriseCustomer.
Officially include Consent application by ensuring it is installable.
Add a new Consent application.
Add initial implementation of a generic Consent API.
Remove SSO-related consent capabilities
Add page_size in querystring and data mapping template to fix “next” and “previous” urls in API response.
Fix DSC Policy Language Needs
Fix dependency installation process in setup.py.
Add consent declined message to course enrollment landing page.
Remove requirement on too-new django-simple-history version
Require slightly older django-config-models version
Move to edx-platform release-focused testing
Add Django 1.11 support in Hawthorn testing branch
Update Enterprise landing page styling/language
Update enterprise catalog api endpoint so that api returns paginated catalogs.
Update DSC page language.
Introducing SAP_USE_ENTERPRISE_ENROLLMENT_PAGE switch via django waffle.
Refactor of automatic session termination logic.
Enforce data sharing consent at login for SSO users only if data sharing consent is requested at login.
UI tweaks to the enterprise landing page and course overview modal.
Disable atomic transactions for CourseEnrollmentView to ensure that new EnterpriseCustomerUser records are saved to the database in time for ecommerce API calls.
Apply automatic session termination logic to enterprise landing page based on enterprise customer configuration.
Sort course modes in landing page.
Fix for being unable to create course catalog clients due to upstream removal of the library.
Add the ability to pass limit, offset and page_size parameters to enterprise catalog courses.
Properly bump PyPI to latest changes from v0.36.0.
Migrate from old, monolithic python-social-auth to latest, split version.
Rework the NotConnectedToOpenEdX exception to be just one, and to say which method/dependency is missing.
Fix Next and Previous page urls for enterprise catalog courses.
Displayed course run price with entitlement on landing page and course information overlay
Allow account-level data sharing consent in a course-specific context
Enable “Continue” button flows on enterprise landing page
Fixed layout of data sharing consent decline modal on mobile view
Add Django 1.10 support back
Added course information overlay
Make enterprise landing page url available in the enterprise api and SAP course export.
Fix UI issues (unexpected html escape) on enterprise landing page.
Bug fix for Data sharing consent pop up page.
Update data backing and behavior of enterprise landing page
Fix template prioritization bug
Fix URL rendering in enterprise login decorator
UI updates for data sharing consent page.
Fix a bug with unexpected image data in SAP course export job.
Add an EnterpriseApiClient method for getting enrollment data about a single user+course pair
Add logic to enterprise landing page that redirects users to the course when already registered
UI updates for course mode selection in enterprise landing page.
Migrate from mako templates to django templates
Display account created/linked messages on enterprise landing page
Add Enable audit enrollment flag
Add django admin for enterprise course enrollment models
Bug fixes for SAP learner completion data passback.
Additional minor UI updates for enterprise landing page.
Add new externally managed consent option for enterprise customers.
Fix invalid API Gateway URIs
Add enterprise landing page
Add tpa hint if available for launchURLs for SAP Course metadata push.
Fix bug with inactivating SAP courses that are no longer in the catalog.
Fix enterprise logo validation message for max image size limit
Updated calls to get_edx_api_data as its signature has changed in openedx.
Redirect to login instead of raising Http404 if EnterpriseCustomer missing.
Add confirmation_alert_prompt_warning to context of account-level consent view.
Increase max size limit for enterprise logo
Added vertical hanging indent mode to isort settings and adjusted current imports
Enforce login for course-specific data sharing consent views.
Fixed the CSS for the expand arrow in the data sharing consent page.
Update Data Sharing Consent message.
Order enterprise customers by name on enterprise customer django admin
Improve accounting for inactive courses for SAP course export.
Bug Fix: Added Handling for user enrollment to courses that do not have a start date.
Refine SAP course export parameters
Added missing migration file for recent string updates
Modified SAP completion status data to correctly indicate a failing grade to SAP systems.
Bugfix: Resolve IntegrityError getting raised while linking existing enterprise users when data sharing consent is disabled for the related enterprise.
Bugfix: Allow unlinking of enterprise learners with plus sign or certain other characters in email address.
Edited UI and error strings.
Fully implements sap_success_factors transmitters and client to communicate with the SAP SuccessFactors API, and to handle auditing and other business logic for both catalog and learner data calls.
Support for segment.io events on data sharing consent flow
Updates integrated_channels management command transmit_learner_data to support sending completion data for self-paced courses, and to use the Certificates API for instructor-paced courses.
New data sharing consent view supporting failure_url parameter
Removed OAuth2Authentication class from API viewset definitions
Updated api.yaml to resolve swagger configuration issues.
Allows enterprise enrollments to be made on servers that sit behind a load balancer.
Added integrated_channels management command to transmit courseware metadata to SAP SuccessFactors.
Added integrated_channels management command to transmit learner completion data to SAP SuccessFactors.
Added api.yaml and api-compact.yaml files to introduce api endpoints for catalog api-manager.
Added API endpoint for fetching catalogs and catalog courses.
Added integrated_channels to MANIFEST.in to properly include migrations for the new packages.
Fixed package listing in setup.py to avoid import errors when using as a library
Added support for retrieving access token from SAP SuccessFactors
Added indicator in Sap SuccessFactors admin tool for checking the configuration’s access to SuccessFactors.
Formally introducing new integrated_channels apps
Adding new models and admin interfaces for integrated_channel and sap_success_factors
Refactor _enroll_users() method to pay down technical debt
Improve admin messaging around enrollment actions
API for SSO pipeline is simplified to a single element.
SSO users are linked to relevant Enterprise Customer when data sharing consent is disabled.
SSO users are not created as EnterpriseCustomerUsers until all consent requirements have been fulfilled.
Course Catalog API degrades gracefully in absence of Course Catalog service.
Added API endpoint for fetching entitlements available to an enterprise learner
Add id in EnterpriseCustomerUserSerializer fields
Add UI handling for course-specific data sharing consent
Add ability to select existing learners to be enrolled in courses from admin
Resolved conflicting urls for User API endpoint.
Added read-only enterprise API endpoint for IDAs.
Moved utility functions from api.py to utils.py
Add the ability to notify manually-enrolled learners via email.
Add the EnterpriseCourseEnrollment model and related methods
Fix a bug preventing a course catalog from being unlinked from an EnterpriseCustomer
Enroll users in a program.
Added view of seat entitlements on enterprise admin screen
Dynamically fetch available course modes in the Manage learners admin
Create pending enrollment for users who don’t yet have an account.
Added links from the Manage Learners admin panel to individual learners.
Added the ability to search the Manage Learners admin panel by username and email address.
In django admin page for enterprise customer added alphabetical ordering for catalog drop down and displayed catalog details link next to selected catalog.
added the branding information api methods to return the enterprise customer logo on the basis of provider_id or uuid.
Updated the logo image validator to take an image of size maximum of 4kb.
Added a feature to enroll users in a course while linking them to an enterprise customer.
Fixed EnterpriseCustomer form to make Catalog field optional
Added user bulk linking option
Added Data Sharing Consent feature
Added checks to make sure enterprise customer and identity provider has one-to-one relation.
Added a helper method to retrieve enterprise customer branding information
Fixed User.post_save handler causing initial migrations to fail
Set up logic to call course catalog API to retrieve catalog listing to attach to EnterpriseCustomer.
Fixed missing migration.
Added Pending Enterprise Customer User model - keeps track of user email linked to Enterprise Customer, but not yet used by any user.
Added custom “Manage Learners” admin view.
Added sphinx-napoleon plugin to support rendering Google Style docstrings into documentation properly (i.e. make it recognize function arguments, returns etc.)
Added translation files
Linked EnterpriseCustomer model to Identity Provider model
Linked EnterpriseCustomer model to django Site model
Enterprise Customer Branding Model and Django admin integration
First release on PyPI.
Models and Django admin integration