Skip to content

Commit

Permalink
[FEATURE] Afficher le statut Annulé dans le fichier des résultats de …
Browse files Browse the repository at this point in the history
…certification (PIX-2404)
  • Loading branch information
pix-service-auto-merge committed May 10, 2021
2 parents 6b63ee4 + 36e0ac0 commit b7cc8b3
Show file tree
Hide file tree
Showing 8 changed files with 544 additions and 73 deletions.
25 changes: 22 additions & 3 deletions api/lib/domain/models/CertificationResult.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
const Assessment = require('./Assessment');
const status = {
REJECTED: 'rejected',
VALIDATED: 'validated',
ERROR: 'error',
CANCELLED: 'cancelled',
STARTED: 'started',
};

class CertificationResult {
constructor({
Expand All @@ -20,6 +26,7 @@ class CertificationResult {
hasSeenEndTestScreen,
assessmentId,
sessionId,
isCourseCancelled,
} = {}) {
this.id = id;
this.lastName = lastName;
Expand All @@ -38,11 +45,11 @@ class CertificationResult {
this.hasSeenEndTestScreen = hasSeenEndTestScreen;
this.assessmentId = assessmentId;
this.sessionId = sessionId;
this.status = _getStatus(lastAssessmentResult, isCourseCancelled);

if (lastAssessmentResult) {
this.resultCreatedAt = lastAssessmentResult.createdAt;
this.pixScore = lastAssessmentResult.pixScore;
this.status = lastAssessmentResult.status;
this.emitter = lastAssessmentResult.emitter;
this.commentForCandidate = lastAssessmentResult.commentForCandidate;
this.commentForJury = lastAssessmentResult.commentForJury;
Expand All @@ -52,7 +59,6 @@ class CertificationResult {
} else {
this.resultCreatedAt = undefined;
this.pixScore = undefined;
this.status = Assessment.states.STARTED;
this.emitter = undefined;
this.commentForCandidate = undefined;
this.commentForJury = undefined;
Expand All @@ -62,6 +68,10 @@ class CertificationResult {
}
}

isCancelled() {
return this.status === status.CANCELLED;
}

hasTakenClea() {
return this.cleaCertificationResult.isTaken();
}
Expand All @@ -75,4 +85,13 @@ class CertificationResult {
}
}

function _getStatus(lastAssessmentResult, isCourseCancelled) {
if (isCourseCancelled) {
return status.CANCELLED;
}

return lastAssessmentResult?.status ?? status.STARTED;
}

module.exports = CertificationResult;
CertificationResult.status = status;
1 change: 1 addition & 0 deletions api/lib/domain/services/certification-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ async function getCertificationResultByCertifCourse({ certificationCourse }) {
certificationIssueReports: certificationCourse.certificationIssueReports,
hasSeenEndTestScreen: certificationCourse.hasSeenEndTestScreen,
sessionId: certificationCourse.sessionId,
isCourseCancelled: certificationCourse.isCancelled,
});
}

Expand Down
36 changes: 25 additions & 11 deletions api/lib/infrastructure/utils/csv/certification-results.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const _ = require('lodash');
const moment = require('moment');
const { getCsvContent } = require('./write-csv-utils');
const { status: assessmentResultStatuses } = require('../../../domain/models/AssessmentResult');
const { status: certificationResultStatuses } = require('../../../domain/models/CertificationResult');
const { cleaStatuses } = require('../../../domain/models/CleaCertificationResult');
const { statuses: maitreStatuses } = require('../../../domain/models/PixPlusDroitMaitreCertificationResult');
const { statuses: expertStatuses } = require('../../../domain/models/PixPlusDroitExpertCertificationResult');
Expand Down Expand Up @@ -37,6 +38,7 @@ function _getRowItemsFromResults(certificationResult) {
[_headers.BIRTHDATE]: _formatDate(certificationResult.birthdate),
[_headers.BIRTHPLACE]: certificationResult.birthplace,
[_headers.EXTERNAL_ID]: certificationResult.externalId,
[_headers.STATUS]: _formatStatus(certificationResult.status),
[_headers.PIX_SCORE]: _formatPixScore(certificationResult),
[_headers.SESSION_ID]: certificationResult.sessionId,
[_headers.CERTIFICATION_DATE]: _formatDate(certificationResult.createdAt),
Expand All @@ -61,6 +63,7 @@ function _buildFileHeadersWithoutCertificationCenterName() {
_headers.BIRTHDATE,
_headers.BIRTHPLACE,
_headers.EXTERNAL_ID,
_headers.STATUS,
_headers.PIX_SCORE,
],
_competenceIndexes,
Expand Down Expand Up @@ -98,6 +101,7 @@ function _buildFileHeaders(certificationResults) {
_headers.BIRTHDATE,
_headers.BIRTHPLACE,
_headers.EXTERNAL_ID,
_headers.STATUS,
],
pixPlusDroitMaitreHeader,
pixPlusDroitExpertHeader,
Expand All @@ -120,6 +124,7 @@ const _getRowItemsFromSessionAndResults = (session) => (certificationResult) =>
[_headers.BIRTHDATE]: _formatDate(certificationResult.birthdate),
[_headers.BIRTHPLACE]: certificationResult.birthplace,
[_headers.EXTERNAL_ID]: certificationResult.externalId,
[_headers.STATUS]: _formatStatus(certificationResult.status),
[_headers.CLEA_STATUS]: _formatCleaCertificationResult(certificationResult.cleaCertificationResult),
[_headers.PIX_PLUS_DROIT_MAITRE_STATUS]: _formatPixPlusDroitMaitreCertificationResult(certificationResult.pixPlusDroitMaitreCertificationResult),
[_headers.PIX_PLUS_DROIT_EXPERT_STATUS]: _formatPixPlusDroitExpertCertificationResult(certificationResult.pixPlusDroitExpertCertificationResult),
Expand Down Expand Up @@ -152,7 +157,9 @@ function _formatPixPlusDroitExpertCertificationResult(pixPlusDroitExpertCertific
}

function _formatPixScore(certificationResult) {
return _isCertificationRejected(certificationResult) ? '0' : certificationResult.pixScore;
if (certificationResult.status === certificationResultStatuses.CANCELLED) return '-';
if (_isCertificationRejected(certificationResult)) return '0';
return certificationResult.pixScore;
}

function _isCertificationRejected(certificationResult) {
Expand All @@ -163,11 +170,20 @@ function _formatDate(date) {
return moment(date).format('DD/MM/YYYY');
}

function _formatStatus(status) {
switch (status) {
case certificationResultStatuses.CANCELLED: return 'Annulée';
case certificationResultStatuses.VALIDATED: return 'Validée';
case certificationResultStatuses.REJECTED: return 'Rejetée';
case certificationResultStatuses.ERROR: return 'En erreur';
case certificationResultStatuses.STARTED: return 'Démarrée';
}
}

function _getCompetenceCells(certificationResult) {
const competencesRow = {};
_competenceIndexes.forEach((competenceIndex) => {
competencesRow[competenceIndex] = _getCompetenceLevel({
competencesWithMark: certificationResult.competencesWithMark,
competenceIndex,
certificationResult,
});
Expand All @@ -181,16 +197,13 @@ function _getCompetenceLevel({ certificationResult, competenceIndex }) {
const competence = levelByCompetenceCode[competenceIndex];
const notTestedCompetence = !competence;

let competenceLevel = '';
if (notTestedCompetence) {
competenceLevel = '-';
} else if (_isCertificationRejected(certificationResult) || _isCompetenceFailed(competence)) {
competenceLevel = 0;
} else {
competenceLevel = competence.level;
if (notTestedCompetence || certificationResult.status === certificationResultStatuses.CANCELLED) {
return '-';
}

return competenceLevel;
if (_isCertificationRejected(certificationResult) || _isCompetenceFailed(competence)) {
return 0;
}
return competence.level;
}

function _getLevelByCompetenceCode({ competencesWithMark }) {
Expand Down Expand Up @@ -220,6 +233,7 @@ const _headers = {
BIRTHDATE: 'Date de naissance',
BIRTHPLACE: 'Lieu de naissance',
EXTERNAL_ID: 'Identifiant Externe',
STATUS: 'Statut',
CLEA_STATUS: 'Certification CléA numérique',
PIX_PLUS_DROIT_MAITRE_STATUS: 'Certification Pix+ Droit Maître',
PIX_PLUS_DROIT_EXPERT_STATUS: 'Certification Pix+ Droit Expert',
Expand Down

0 comments on commit b7cc8b3

Please sign in to comment.