Tracks one learner's progress through one module, identified by website plus programme, course and module code. A module is just a content directory, so this row references the content by code rather than by a foreign key, and the combination of website, programme code, course code, module code and profile is unique. It carries the completion flag, percentage and score, the page the learner was last on, the optional expiry and renewal dates that drive recertification, and the submitted and assessed dates used by instructor-marked modules. Quiz attempts, custom fields and reward entries hang off it, and a reset or a renewal clears the progress fields and deletes those children.

Group: Database Entities

Implements: Serializable, Relational


Properties

PropertyReturnsDescription
assessedDateDateWhen an instructor assessed the submitted module. Null means the submission has not been assessed yet.
completebooleanWhether the learner has finished the module. Set together with a percentage of 100 and the score when the module is completed, and cleared by a reset. It stays true after the expiry date passes, so check the expiry date too if you only want current completions.
courseCodeStringName of the course directory, within the programme, that contains this module.
cpdAwardsList<CpdAward>The continuing professional development awards granted for this module. Queries the database on every call.
createdDateDateWhen this progress record was created, which is effectively when the learner first opened the module.
currentPageStringThe page within the module the learner was last on, so they can resume where they left off. Null before they move past the start, and cleared by a reset or a renewal.
currentQuizAttemptsList<QuizAttempt>The quiz attempts that have not been ignored by an instructor, so the ones that still count towards the learner's result. Never null, and empty when there are no attempts or every attempt has been ignored.
expiryDateDateWhen a completion stops counting as current, for modules that must be recertified. Null means the completion never expires. Note that the complete flag stays true past this date, so counts of active completions test the expiry date as well.
fieldsList<ModuleStatusField>Custom name and value pairs recorded against this module, such as answers captured by the module content. Deleted by a reset or a renewal.
idlongDatabase identifier for this progress record, assigned when the row is first saved.
lastCompletedDateDateWhen the module was most recently completed, taken from the last completion entry in the learning log, or falling back to the last modified date when the module is complete but has no log entry. Reads the learning log, so it is a database query rather than a field read.
lastCompletedLearningLogLearningLogThe most recent completion entry in the learning log for this learner and module. Queries the database on every call.
lastStartedLearningLogLearningLogThe most recent start entry in the learning log for this learner and module, which is useful for working out how long the current attempt has been running. Queries the database on every call.
modifiedDateDateWhen the progress was last changed, including completion, renewal and reset. Reporting and search queries filter on this rather than on the created date.
moduleCalEventModuleCalEventThe assignment or instructor-led training session this progress is linked to, if any. Null for a self-paced module, and cleared by a reset or a renewal. Loaded lazily.
moduleCodeStringA module is really just a directory, and the name of that directory is the module code. It must be unique across the whole learning organisation and must not change once published, because progress records are matched to content by this code.
percentCompleteintHow far through the module the learner is, as a whole number percentage from 0 to 100. Set to 100 on completion and back to 0 by a reset or a renewal.
profileProfileThe learner whose progress this record tracks. Loaded lazily.
programCodeStringName of the programme directory the module sits under. Like the course and module codes this is a content directory name, not a database identifier.
quizAttemptsList<QuizAttempt>Every quiz attempt made against this module, including attempts an instructor has since marked as ignored. Use getCurrentQuizAttempts if you want only the attempts that still count.
renewalBooleanSet to true once the renewal event has been processed, which normally results in a renewal email being sent. Null or false means the renewal is still outstanding, and the scheduled job that picks up due renewals looks for exactly those two states.
renewalbooleanWhether the renewal event has already been processed, treating an unset renewal flag as false.
renewalDateDateWhen the learner should be prompted to retake the module, normally set earlier than the expiry date so there is time to renew before the completion lapses. Null if no renewal is scheduled.
rewardEntrysList<RewardEntry>Reward entries that were awarded for this module, for example points or prize draw entries.
scorePercIntegerThe learner's result for the module as a percentage, recorded when the module is completed. Null if the module has not been completed or does not produce a score, and cleared by a reset or a renewal.
submittedDateDateWhen the learner submitted the module for instructor assessment. A non-null value is the marker that an assessment is pending, so null means it has not been submitted.
websiteWebsiteThe website whose content the module belongs to. Progress is per website, so the same learner can have a separate record for the same module code on another website. Loaded lazily.

Methods

getId() · getWebsite() · getProgramCode() · getCourseCode() · getModuleCode() · getProfile() · getCreatedDate() · getModifiedDate() · getExpiryDate() · getRenewalDate() · getRenewal() · getSubmittedDate() · getAssessedDate() · getModuleCalEvent() · getCurrentPage() · isComplete() · isRenewal() · getPercentComplete() · getScorePerc() · getFields() · getQuizAttempts() · createQuizAttempt(String quizName, Date now) · getRewardEntrys() · getCurrentQuizAttempts() · getLastCompletedDate() · getLastCompletedLearningLog() · getLastStartedLearningLog() · getCpdAwards()

getId()

Returns: long

Database identifier for this progress record, assigned when the row is first saved.

getWebsite()

Returns: Website

The website whose content the module belongs to. Progress is per website, so the same learner can have a separate record for the same module code on another website. Loaded lazily.

getProgramCode()

Returns: String

Name of the programme directory the module sits under. Like the course and module codes this is a content directory name, not a database identifier.

getCourseCode()

Returns: String

Name of the course directory, within the programme, that contains this module.

getModuleCode()

Returns: String

A module is really just a directory, and the name of that directory is the module code. It must be unique across the whole learning organisation and must not change once published, because progress records are matched to content by this code.

getProfile()

Returns: Profile

The learner whose progress this record tracks. Loaded lazily.

getCreatedDate()

Returns: Date

When this progress record was created, which is effectively when the learner first opened the module.

getModifiedDate()

Returns: Date

When the progress was last changed, including completion, renewal and reset. Reporting and search queries filter on this rather than on the created date.

getExpiryDate()

Returns: Date

When a completion stops counting as current, for modules that must be recertified. Null means the completion never expires. Note that the complete flag stays true past this date, so counts of active completions test the expiry date as well.

getRenewalDate()

Returns: Date

When the learner should be prompted to retake the module, normally set earlier than the expiry date so there is time to renew before the completion lapses. Null if no renewal is scheduled.

getRenewal()

Returns: Boolean

Set to true once the renewal event has been processed, which normally results in a renewal email being sent. Null or false means the renewal is still outstanding, and the scheduled job that picks up due renewals looks for exactly those two states.

getSubmittedDate()

Returns: Date

When the learner submitted the module for instructor assessment. A non-null value is the marker that an assessment is pending, so null means it has not been submitted.

getAssessedDate()

Returns: Date

When an instructor assessed the submitted module. Null means the submission has not been assessed yet.

getModuleCalEvent()

Returns: ModuleCalEvent

The assignment or instructor-led training session this progress is linked to, if any. Null for a self-paced module, and cleared by a reset or a renewal. Loaded lazily.

getCurrentPage()

Returns: String

The page within the module the learner was last on, so they can resume where they left off. Null before they move past the start, and cleared by a reset or a renewal.

isComplete()

Returns: boolean

Whether the learner has finished the module. Set together with a percentage of 100 and the score when the module is completed, and cleared by a reset. It stays true after the expiry date passes, so check the expiry date too if you only want current completions.

isRenewal()

Returns: boolean

Whether the renewal event has already been processed, treating an unset renewal flag as false.

getPercentComplete()

Returns: int

How far through the module the learner is, as a whole number percentage from 0 to 100. Set to 100 on completion and back to 0 by a reset or a renewal.

getScorePerc()

Returns: Integer

The learner's result for the module as a percentage, recorded when the module is completed. Null if the module has not been completed or does not produce a score, and cleared by a reset or a renewal.

getFields()

Returns: List<ModuleStatusField>

Custom name and value pairs recorded against this module, such as answers captured by the module content. Deleted by a reset or a renewal.

getQuizAttempts()

Returns: List<QuizAttempt>

Every quiz attempt made against this module, including attempts an instructor has since marked as ignored. Use getCurrentQuizAttempts if you want only the attempts that still count.

createQuizAttempt(String quizName, Date now)

Returns: QuizAttempt

Creates a new quiz attempt for this module and adds it to the quiz attempts list, but does not save it. The caller is responsible for persisting the returned attempt.

ParameterDescription
quizNamethe name of the quiz within the module that the attempt is for
nowthe date and time the attempt was started

getRewardEntrys()

Returns: List<RewardEntry>

Reward entries that were awarded for this module, for example points or prize draw entries.

getCurrentQuizAttempts()

Returns: List<QuizAttempt>

The quiz attempts that have not been ignored by an instructor, so the ones that still count towards the learner's result. Never null, and empty when there are no attempts or every attempt has been ignored.

getLastCompletedDate()

Returns: Date

When the module was most recently completed, taken from the last completion entry in the learning log, or falling back to the last modified date when the module is complete but has no log entry. Reads the learning log, so it is a database query rather than a field read.

getLastCompletedLearningLog()

Returns: LearningLog

The most recent completion entry in the learning log for this learner and module. Queries the database on every call.

getLastStartedLearningLog()

Returns: LearningLog

The most recent start entry in the learning log for this learner and module, which is useful for working out how long the current attempt has been running. Queries the database on every call.

getCpdAwards()

Returns: List<CpdAward>

The continuing professional development awards granted for this module. Queries the database on every call.

To get full access to the Kademi Hub existing customers can login here, or new customers can register here.