Commit Graph

849 Commits

Author SHA1 Message Date
oliviaruizknott
dbfe2a3f2b feat: notify_credentials of changed overrides
We use the `notify_credentials` management command to keep certificate-
related data in the LMS and Credentials service in sync. We can run it
with specific arguments (user_ids, course_keys, etc.) when we notice a
data discrepancy; and it is run regularly by a Jenkins job with the
`--auto` flag every ~4 hours to keep things up-to-date.

Because we probably never want to notify credentials of of ALL the
GeneratedCertificates, the celery task must be given some arguments
to filter down to the relevant certificates. Running the management
command with the `--auto` flag (as the Jenkins job does) adds
`start_date` and `end_date` arguments of 4 hours ago and now,
respectively.

The handle_notify_credentials celery task then takes those arguments and
looks for any GeneratedCertificates that have been modified within the
given time range by checking the GeneratedCertificate modified_date.
It will send the current data for those certificates to credentials.

However, we also want to notify credentials about certificates that have
an associated CertificateDateOverride that has changed within that time
range: added, updated, or deleted. But changes to a
CertificateDateOverride won’t affect the GeneratedCertificate’s modified
date, and therefore wouldn’t be included in the list of certs cent to
credentials.

This commit adds a check for changed CertificateDateOverrides and
includes their associated GeneratedCertificates in the list of certs. We
use the CertificateDateOverride’s history model for this check so that
we can include certificates whose override was deleted.

MICROBA-1489
2021-09-10 12:32:17 -06:00
oliviaruizknott
703c917f2a refactor: Use post_delete for date override
Previously, using the bulk delete tool in the Django admin for
`CertificateDateOverride`s would not trigger the post to the credentials
service to delete the corresponding date override stored there. This was
because we were sending the COURSE_CERT_CHANGED signal from an
overridden version of the delete() method. But the Django docs warn:

"Note that the delete() method for an object is not necessarily called
when deleting objects in bulk using a QuerySet or as a result of a
cascading delete. To ensure customized delete logic gets executed, you
can use pre_delete and/or post_delete signals."

Now we use the post_delete signal instead of overriding the delete()
method to make sure the COURSE_CERT_CHANGED signal is sent for both
individual and bulk deletes.

MICROBA-1487
2021-09-01 14:03:35 -06:00
oliviaruizknott
2bd9d663cd doc: ADR for date override 2021-08-27 14:21:31 -06:00
oliviaruizknott
eb2d606283 refactor: send cert changed signal on_commit
Because we have ATOMIC_REQUESTS turned on, the COURSE_CERT_CHANGED
signal was being sent *before* the date override was committed to the
database. This means that the date override data sent to credentials on
CertificateDateOverride save() was always one commit behind.

Django provides an on_commit() function to allow us to perform actions
only after a transaction is completed successfully. I believe this
is when we want this signal to be sent.

This is an alternative to 1) disabling atomic transactions for a view
(honestly, I’m not sure which view we would target anyway), or 2)
passing more data down through the signal.

Toward MICROBA-1423
2021-08-25 15:45:17 -06:00
Justin Hynes
b7085c2cf9 refactor!: Remove the request_certificate REST endpoint (#28346)
[MICROBA-1412]
[DEPR-155]

Remove the request_certificate REST endpoint from the LMS (certificates Django app)
2021-08-18 10:43:47 -04:00
Andrew Shultz
78a390f83d Merge pull request #28478 from edx/ashultz0/name-affirm-061
chore: update name affirmation to 0.6.1
2021-08-17 15:27:29 -04:00
Andy Shultz
fa89221d46 feat: update name affirmation to 0.6.1
Certificate tests required an update to switch from boolean verified
flag to status. This feature is not deployed yet so only test uses
needed attention.

MST-969 and friends
2021-08-17 14:50:45 -04:00
oliviaruizknott
e99029659c feat: Send date override to credentials
When sending a GeneratedCertificate to Credentials, send the associated
CertificateDateOverride (if there is one), or else None. This
will be triggered after any save of a GeneratedCertificate, and after
any save or deletion of a single CertificateDateOverride.

Credentials will eventually store its own copy of this date override, or
edit or remove exiting date overrides.
2021-08-17 12:22:27 -06:00
oliviaruizknott
ecba21dcc0 feat: Display date override on certificate
If the certificate has an associated certificate date override, display
that date on the certificate instead of any other date. The date
override should not affect whether or not the certificate is visible /
available; only the date displayed on the certificate.
2021-08-12 11:33:05 -06:00
Matt Tuchfarber
d53d8e45a5 refactor: Merge the openedx certs app with lms one (#28435)
* refactor: Merge the openedx certs app with lms one

Move the certs API from openedx into the lms certificates app.
Functionally, this is a no-op. Cleanup will happen in a subsequent
commit. This is simply a move.
2021-08-11 10:25:55 -04:00
Christie Rice
cf3a6c16d6 fix: Stop showing course certificate buttons to beta testers (#28416)
Beta testers can’t earn course certificates, so they should not see a “Request Certificate” button or other info describing how they can earn a cert.

MICROBA-992
2021-08-10 09:06:14 -04:00
Bianca Severino
d2fa7f7239 feat: use verified name for certs if enabled
If the verified name feature is enabled and the user has their
preference set to use verified name for certificates, create and
display certificates with their verified name rather than their
profile name.
2021-08-06 14:28:06 -04:00
Justin Hynes
3a87aad963 Merge pull request #28391 from edx/jhynes/microba-1354
refactor: update name of `cert_generation_enabled` function name to reflect actual purpose
2021-08-05 12:27:42 -04:00
oliviaruizknott
f63173617c feat: Add CertificateDateOverride model to admin
Register the new CertificateDateOverride model with the Django admin.
Customize the `generated_certificate` field to accept the certificate id
(with search); and autosave the admin user making the change to the
`overridden_by` field, and make it read-only.

For MICROBA-1417, toward MICROBA-1239.
2021-08-04 08:10:08 -06:00
Justin Hynes
7f5cf2fabd refactor: update certificates app Python API functions
[MICROBA-1354]

* Update Python API function named `cert_generated_enabled` to `has_self_generated_certificates_enabled` to more accurately reflect the purpose of the function
2021-08-04 08:43:12 -04:00
Christie Rice
cdeda7a313 fix: Update mode in course certificate when marking cert as invalidated, not verified or not passing (#28330)
MICROBA-1410
2021-08-03 11:24:11 -04:00
Olivia Ruiz-Knott
379a818a04 Merge pull request #28258 from edx/ork/MICROBA-1239_certificate-date-override
feat: Add CertificateDateOverride model
2021-08-02 13:23:46 -06:00
oliviaruizknott
8906adb072 feat: Add CertificateDateOverride model
Add a new model (and corresponding migration) to the certificates
app in the LMS: CertificateDateOverride. The model will eventually be
used to allow course teams / support to override the "Issued On" date
for a given course certificate.
2021-08-02 12:44:37 -06:00
Justin Hynes
8a7ad06304 Merge pull request #28332 from edx/jhynes/microba-1087_dashboard
refactor!: Remove `generate_example_certificates` and update Instructor Dashboard with updated messaging.
2021-08-02 14:02:34 -04:00
Justin Hynes
d4a7a44909 refactor!: Remove generate_example_certificates and update Instructor Dashboard with updated messaging.
[MICROBA-1087]
[DEPR-155]

* Remove `generate_example_certificates` functionality
* Adjust Instructor dashboard slightly to prevent people from clicking the `Generate Example Certificates` button, remove form/code that called the `generate_example_certificates` endpoint.
2021-08-02 13:26:28 -04:00
Matt Tuchfarber
622d56026c Certificate Display Settings revamp (round 2) (#28286)
feat: reimagine certificate display settings

The course settings `certificate_available_date` (CAD) and
`certificates_display_behavior` (CDB) were previously
acting indedependantly of one another. They now work in
tandem. This change:
- limits CDB to a dropdown
- removes "early_with_info" and adds "end_with_date"
- only takes CAD into account if "end_with_date" is selected
- Moves CDB to the main course schedule settings page
- updates CourseOverview model and CourseDetails objects to
validate these fields and choose sane defaults if they aren't
expected values

This work was previously done in bd9e7dd (complete with bugs), so this
version is toggleable via the ENABLE_V2_CERT_DISPLAY_SETTINGS setting
2021-08-02 11:30:15 -04:00
Christie Rice
5fa4fcea5e fix: Handle missing user profile when setting a name in a course certificate (#28319)
MICROBA-1410
2021-08-02 10:58:13 -04:00
Christie Rice
8971c99da6 feat!: Add migration to drop the CertificateWhitelist table (#28307)
This model has been replaced by the CertificateAllowlist.

MICROBA-1304
2021-07-30 10:27:35 -04:00
Christie Rice
5883d13092 feat!: Remove CertificateWhitelist model (#28308)
This model has been replaced by the CertificateAllowlist.

MICROBA-1304
2021-07-29 09:50:34 -04:00
Justin Hynes
1887f13fd2 Merge pull request #28281 from edx/jhynes/microba-1087
refactor!: Remove unused callback endpoints used for PDF cert generation/updates
2021-07-29 07:56:45 -04:00
Justin Hynes
dbe8ae1fbb refactor!: Remove unused callback endpoints used for PDF cert generation/updates
[MICROBA-1087]
[DEPR-155]

* Removed callback functions that were originally used to update certificates (and example certificates) post xqueue processing
2021-07-28 14:21:31 -04:00
Awais Qureshi
bdb1e61b82 chore: Django3 has removed python_2_unicode_compatible.
Execute the codemodes.
2021-07-27 23:35:00 +05:00
Justin Hynes
0069bd724f fix: remove disabled v1 course certificate queue code
[MICROBA-1227]
[DEPR-155]

* remove queue.py (and associated unit tests)
* remove references to `queue.py` from functions in api.py (also update unit tests)
2021-07-22 11:03:49 -04:00
Matt Tuchfarber
d16c9a804c refactor: Move cert code to cert app
The `may_certify` function is used to determine whether a learner should
be able to see that their certificate is ready. It is therefore entirely
in the certificates domain. This remove may_certifiy and
may_certify_for_course from the xmodule and course_overview
apps and into the certificates app. The xmodule may_certify was not called
outside of tests prior to this, and the other's were easily moved.

In order to avoid circular imports, this also moved
certificate_info_for_user out of the model code and into an API
2021-07-21 15:56:19 -04:00
Christie Rice
8b362f11b5 fix: Unify required parameter checks
MICROBA-1373
2021-07-19 14:48:08 -04:00
Justin Hynes
fd578b6636 Merge pull request #28196 from edx/crice/gen
fix: Retrieve grade and enrollment mode only once
2021-07-19 14:47:03 -04:00
Justin Hynes
0dd319a089 feat!: Remove AUDIT_CERT_CUTOFF_DATE configuration setting
[MICROBA-1351][DEPR-159]
* Remove `AUDIT_CERT_CUTOFF_DATE`
2021-07-16 15:38:14 -04:00
Christie Rice
c7d06c6bfa fix: Retrieve grade and enrollment mode only once and pass their values to the generation task, so those values can be saved in the cert. Also protect against missing course grades.
MICROBA-1373
2021-07-16 13:43:07 -04:00
Christie Rice
a1ff409963 fix: Pass certificates values to generation, if available (#28179)
MICROBA-1373
2021-07-15 10:42:11 -04:00
Christie Rice
6d3a4014bb fix: Save parameter values in the certificate, if available (#28178)
MICROBA-1373
2021-07-15 09:51:24 -04:00
Christie Rice
f98b8e5be0 refactor: Replace references to V2 course certificates (#28180)
MICROBA-1227
2021-07-14 13:37:07 -04:00
Justin Hynes
d786f6d394 Merge pull request #28168 from edx/jhynes/microba-1289_overviews-continued
refactor: Remove use of CourseOverview model directly in the Certificates app
2021-07-13 12:40:59 -04:00
Christie Rice
1b0b703144 fix: Remove disabled v1 course certificate task code, as this was previously globally disabled (#28158)
MICROBA-1227 DEPR-155
2021-07-13 10:30:07 -04:00
Justin Hynes
bbda7384f8 refactor: Remove use of CourseOverview model directly in the Certificates app
[MICROBA-1289]
* Remove use of the CourseOverview model directly in the Certificates app
* Introduce a few new Python API functions in the `course_overview` and `catalog` django apps to replace functionality in the Certificates app.
2021-07-13 10:26:39 -04:00
Christie Rice
f42b36869e fix: Allow cert generation if enrollment mode is now eligible (#28153)
MICROBA-1380
2021-07-13 09:51:15 -04:00
Justin Hynes
9f5b9ba915 Merge pull request #28129 from edx/jhynes/microba-1289_overviews
refactor!: remove the `get_course_overview` function in favor of `get_course_overview_or_none`
2021-07-13 07:59:49 -04:00
Christie Rice
b6eb331436 fix: Remove v1 course certificate code, as this was previously globally disabled (#28155)
MICROBA-1227
2021-07-12 14:08:31 -04:00
Justin Hynes
725793a8f9 refactor!: remove get_course_overview function in favor of get_course_overview_or_none
[MICROBA-1289]
* Remove `get_course_overview` function in favor of `get_course_overview_or_none`
2021-07-09 10:14:07 -04:00
Christie Rice
87a620612f fix: Remove V2 certificate checks from the certificates app, since V2 of course certificates has been enabled globally for all course runs (#28108)
MICROBA-1083 DEPR-155
2021-07-08 14:27:27 -04:00
Christie Rice
c194b3fa57 fix: Remove V2 certificate checks from the certificates app, since V2 of course certificates has been enabled globally for all course runs (#28102)
MICROBA-1083 DEPR-155
2021-07-08 09:23:58 -04:00
Matt Tuchfarber
63cb6a97ff Revert "feat: Reimagine certificate_availability_date and certificates_display_behavior" 2021-07-07 16:53:05 -04:00
Christie Rice
b4df37d48e docs: Mark ADR as accepted (#28110)
DEPR-157
2021-07-07 14:07:23 -04:00
Matt Tuchfarber
14fb517a78 Merge pull request #27830 from edx/tuchfarber/studio_changes
feat: Reimagine certificate_availability_date and certificates_display_behavior
2021-07-07 09:45:06 -04:00
Matt Tuchfarber
2a7106acfb feat: reimagine certificate display settings
The course settings `certificate_available_date` (CAD) and
`certificates_display_behavior` (CDB) were previously acting indedependantly
of one another. They now work in tandem. This change:
- limits CDB to a dropdown
- removes "early_with_info" and adds "end_with_date"
- only takes CAD into account if "end_with_date" is selected
- Moves CDB to the main course schedule settings page
- updates CourseOverview to validate these fields and choose sane
defaults if they aren't expected values

Certificates will now show under the following circumstances:
"Immediately upon passing"
certificate_availability_date = null
certificates_display_behavior = "early_no_info"

"End date of course"
certificate_availability_date = null
certificates_display_behavior = "end"

"A date after the course end date"
certificate_availability_date = <date>
certificates_display_behavior = "end_with_date"
2021-07-06 16:45:23 -04:00
Justin Hynes
ecd257ae29 feat!: Remove temp certificates mgmt cmd
[MICROBA-1311]
- Remove temporary management command used to fix records incorrectly created with a default `mode` of "honor".
2021-07-06 15:51:32 -04:00