Skip to content
Snippets Groups Projects
Commit ef052552 authored by hg's avatar hg
Browse files

OO-2063 add next recertification date to certificate

parent c9f1b4ad
No related branches found
No related tags found
No related merge requests found
...@@ -148,6 +148,14 @@ public interface CertificatesManager { ...@@ -148,6 +148,14 @@ public interface CertificatesManager {
public boolean isCertificationAllowed(Identity identity, RepositoryEntry entry); public boolean isCertificationAllowed(Identity identity, RepositoryEntry entry);
/**
* Get the next re-certification date or NULL if no recertification possible
* @param certificate An exiting certificate
* @param entry The repository entry of the course
* @return Date representing the next possible recertification date or NULL if no recertification possible at this time
*/
public Date getDateNextRecertification(Certificate certificate, RepositoryEntry entry);
public File previewCertificate(CertificateTemplate template, RepositoryEntry entry, Locale locale); public File previewCertificate(CertificateTemplate template, RepositoryEntry entry, Locale locale);
public Certificate uploadCertificate(Identity identity, Date creationDate, OLATResource resource, File certificateFile); public Certificate uploadCertificate(Identity identity, Date creationDate, OLATResource resource, File certificateFile);
......
...@@ -68,6 +68,7 @@ public class CertificatePDFFormWorker { ...@@ -68,6 +68,7 @@ public class CertificatePDFFormWorker {
private Date dateCertification; private Date dateCertification;
private Date dateFirstCertification; private Date dateFirstCertification;
private Date dateNextRecertification;
private final Locale locale; private final Locale locale;
private final UserManager userManager; private final UserManager userManager;
...@@ -75,7 +76,7 @@ public class CertificatePDFFormWorker { ...@@ -75,7 +76,7 @@ public class CertificatePDFFormWorker {
public CertificatePDFFormWorker(Identity identity, RepositoryEntry entry, public CertificatePDFFormWorker(Identity identity, RepositoryEntry entry,
Float score, Boolean passed, Date dateCertification, Float score, Boolean passed, Date dateCertification,
Date dateFirstCertification, Locale locale, Date dateFirstCertification, Date dateNextRecertification, Locale locale,
UserManager userManager, CertificatesManagerImpl certificatesManager) { UserManager userManager, CertificatesManagerImpl certificatesManager) {
this.entry = entry; this.entry = entry;
this.score = score; this.score = score;
...@@ -84,6 +85,7 @@ public class CertificatePDFFormWorker { ...@@ -84,6 +85,7 @@ public class CertificatePDFFormWorker {
this.identity = identity; this.identity = identity;
this.dateCertification = dateCertification; this.dateCertification = dateCertification;
this.dateFirstCertification = dateFirstCertification; this.dateFirstCertification = dateFirstCertification;
this.dateNextRecertification = dateNextRecertification;
this.userManager = userManager; this.userManager = userManager;
this.certificatesManager = certificatesManager; this.certificatesManager = certificatesManager;
} }
...@@ -201,10 +203,11 @@ public class CertificatePDFFormWorker { ...@@ -201,10 +203,11 @@ public class CertificatePDFFormWorker {
if(dateCertification == null) { if(dateCertification == null) {
fillField("dateCertification", "", acroForm); fillField("dateCertification", "", acroForm);
} else { } else {
String formattedDateCertification= format.formatDate(dateCertification); String formattedDateCertification = format.formatDate(dateCertification);
fillField("dateCertification", formattedDateCertification, acroForm); fillField("dateCertification", formattedDateCertification, acroForm);
String formattedDateCertificationLong= format.formatDateLong(dateCertification); String formattedDateCertificationLong = format.formatDateLong(dateCertification);
fillField("dateCertificationLong", formattedDateCertificationLong, acroForm); } fillField("dateCertificationLong", formattedDateCertificationLong, acroForm);
}
if(dateFirstCertification == null) { if(dateFirstCertification == null) {
fillField("dateFirstCertification", "", acroForm); fillField("dateFirstCertification", "", acroForm);
...@@ -212,7 +215,18 @@ public class CertificatePDFFormWorker { ...@@ -212,7 +215,18 @@ public class CertificatePDFFormWorker {
String formattedDateFirstCertification = format.formatDate(dateFirstCertification); String formattedDateFirstCertification = format.formatDate(dateFirstCertification);
fillField("dateFirstCertification", formattedDateFirstCertification, acroForm); fillField("dateFirstCertification", formattedDateFirstCertification, acroForm);
String formattedDateFirstCertificationLong = format.formatDate(dateFirstCertification); String formattedDateFirstCertificationLong = format.formatDate(dateFirstCertification);
fillField("dateFirstCertificationLong", formattedDateFirstCertificationLong, acroForm); } fillField("dateFirstCertificationLong", formattedDateFirstCertificationLong, acroForm);
}
if(dateNextRecertification == null) {
fillField("dateNextRecertification", "", acroForm);
} else {
String formattedDateNextRecertification = format.formatDate(dateNextRecertification);
fillField("dateNextRecertification", formattedDateNextRecertification, acroForm);
String formattedDateNextRecertificationLong = format.formatDateLong(dateNextRecertification);
fillField("dateNextRecertificationLong", formattedDateNextRecertificationLong, acroForm);
}
} }
private void fillAssessmentInfos(PDAcroForm acroForm) throws IOException { private void fillAssessmentInfos(PDAcroForm acroForm) throws IOException {
......
...@@ -68,6 +68,7 @@ public class CertificatePhantomWorker { ...@@ -68,6 +68,7 @@ public class CertificatePhantomWorker {
private Date dateCertification; private Date dateCertification;
private Date dateFirstCertification; private Date dateFirstCertification;
private Date dateNextRecertification;
private final Locale locale; private final Locale locale;
private final UserManager userManager; private final UserManager userManager;
...@@ -75,7 +76,7 @@ public class CertificatePhantomWorker { ...@@ -75,7 +76,7 @@ public class CertificatePhantomWorker {
public CertificatePhantomWorker(Identity identity, RepositoryEntry entry, public CertificatePhantomWorker(Identity identity, RepositoryEntry entry,
Float score, Boolean passed, Date dateCertification, Float score, Boolean passed, Date dateCertification,
Date dateFirstCertification, Locale locale, Date dateFirstCertification, Date nextRecertificationDate, Locale locale,
UserManager userManager, CertificatesManagerImpl certificatesManager) { UserManager userManager, CertificatesManagerImpl certificatesManager) {
this.entry = entry; this.entry = entry;
this.score = score; this.score = score;
...@@ -84,6 +85,7 @@ public class CertificatePhantomWorker { ...@@ -84,6 +85,7 @@ public class CertificatePhantomWorker {
this.identity = identity; this.identity = identity;
this.dateCertification = dateCertification; this.dateCertification = dateCertification;
this.dateFirstCertification = dateFirstCertification; this.dateFirstCertification = dateFirstCertification;
this.dateNextRecertification = nextRecertificationDate;
this.userManager = userManager; this.userManager = userManager;
this.certificatesManager = certificatesManager; this.certificatesManager = certificatesManager;
} }
...@@ -215,9 +217,9 @@ public class CertificatePhantomWorker { ...@@ -215,9 +217,9 @@ public class CertificatePhantomWorker {
if(dateCertification == null) { if(dateCertification == null) {
context.put("dateCertification", ""); context.put("dateCertification", "");
} else { } else {
String formattedDateCertification= format.formatDate(dateCertification); String formattedDateCertification = format.formatDate(dateCertification);
context.put("dateCertification", formattedDateCertification); context.put("dateCertification", formattedDateCertification);
String formattedDateCertificationLong= format.formatDateLong(dateCertification); String formattedDateCertificationLong = format.formatDateLong(dateCertification);
context.put("dateCertificationLong", formattedDateCertificationLong); context.put("dateCertificationLong", formattedDateCertificationLong);
context.put("dateCertificationRaw", dateCertification); context.put("dateCertificationRaw", dateCertification);
} }
...@@ -231,6 +233,16 @@ public class CertificatePhantomWorker { ...@@ -231,6 +233,16 @@ public class CertificatePhantomWorker {
context.put("dateFirstCertificationLong", formattedDateFirstCertificationLong); context.put("dateFirstCertificationLong", formattedDateFirstCertificationLong);
context.put("dateFirstCertificationRaw", dateFirstCertification); context.put("dateFirstCertificationRaw", dateFirstCertification);
} }
if(dateNextRecertification == null) {
context.put("dateNextRecertification", "");
} else {
String formattedDateNextRecertification = format.formatDate(dateNextRecertification);
context.put("dateNextRecertification", formattedDateNextRecertification);
String formattedDateNextRecertificationLong = format.formatDateLong(dateNextRecertification);
context.put("dateNextRecertificationLong", formattedDateNextRecertificationLong);
context.put("dateNextRecertificationRaw", dateNextRecertification);
}
} }
private void fillAssessmentInfos(VelocityContext context) { private void fillAssessmentInfos(VelocityContext context) {
......
...@@ -518,24 +518,14 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ...@@ -518,24 +518,14 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
ICourse course = CourseFactory.loadCourse(entry); ICourse course = CourseFactory.loadCourse(entry);
CourseConfig config = course.getCourseEnvironment().getCourseConfig(); CourseConfig config = course.getCourseEnvironment().getCourseConfig();
if(config.isRecertificationEnabled()) { if(config.isRecertificationEnabled()) {
int time = config.getRecertificationTimelapse();
RecertificationTimeUnit timeUnit = config.getRecertificationTimelapseUnit();
Certificate certificate = getLastCertificate(identity, entry.getOlatResource().getKey()); Certificate certificate = getLastCertificate(identity, entry.getOlatResource().getKey());
if(certificate == null) { if(certificate == null) {
allowed = true; allowed = true;
} else { } else {
Date date = certificate.getCreationDate();
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
Date now = cal.getTime(); Date now = cal.getTime();
cal.setTime(date); Date nextCertificationDate = getDateNextRecertification(certificate, config);
switch(timeUnit) { allowed = (nextCertificationDate != null ? nextCertificationDate.before(now) : false);
case day: cal.add(Calendar.DATE, time); break;
case week: cal.add(Calendar.DATE, time * 7); break;
case month: cal.add(Calendar.MONTH, time); break;
case year: cal.add(Calendar.YEAR, time); break;
}
Date nextCertification = cal.getTime();
allowed = nextCertification.before(now);
} }
} else { } else {
allowed = !hasCertificate(identity, entry.getOlatResource().getKey()); allowed = !hasCertificate(identity, entry.getOlatResource().getKey());
...@@ -546,6 +536,34 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ...@@ -546,6 +536,34 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
return allowed; return allowed;
} }
@Override
public Date getDateNextRecertification(Certificate certificate, RepositoryEntry entry) {
ICourse course = CourseFactory.loadCourse(entry);
CourseConfig config = course.getCourseEnvironment().getCourseConfig();
return getDateNextRecertification(certificate, config);
}
private Date getDateNextRecertification(Certificate certificate, CourseConfig config) {
if(config.isRecertificationEnabled() && certificate != null) {
int time = config.getRecertificationTimelapse();
RecertificationTimeUnit timeUnit = config.getRecertificationTimelapseUnit();
Date date = certificate.getCreationDate();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
switch(timeUnit) {
case day: cal.add(Calendar.DATE, time); break;
case week: cal.add(Calendar.DATE, time * 7); break;
case month: cal.add(Calendar.MONTH, time); break;
case year: cal.add(Calendar.YEAR, time); break;
}
Date nextCertification = cal.getTime();
return nextCertification;
} else {
return null;
}
}
@Override @Override
public void deleteCertificate(Certificate certificate) { public void deleteCertificate(Certificate certificate) {
File certificateFile = getCertificateFile(certificate); File certificateFile = getCertificateFile(certificate);
...@@ -678,15 +696,15 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ...@@ -678,15 +696,15 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
File dirFile = new File(WebappHelper.getTmpDir(), UUID.randomUUID().toString()); File dirFile = new File(WebappHelper.getTmpDir(), UUID.randomUUID().toString());
if(template == null) { if(template == null) {
CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, 2.0f, true, CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, 2.0f, true,
new Date(), new Date(), locale, userManager, this); new Date(), new Date(), new Date(), locale, userManager, this);
certificateFile = worker.fill(null, dirFile, "Certificate.pdf"); certificateFile = worker.fill(null, dirFile, "Certificate.pdf");
} else if(template.getPath().toLowerCase().endsWith("pdf")) { } else if(template.getPath().toLowerCase().endsWith("pdf")) {
CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, 2.0f, true, CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, 2.0f, true,
new Date(), new Date(), locale, userManager, this); new Date(), new Date(), new Date(), locale, userManager, this);
certificateFile = worker.fill(template, dirFile, "Certificate.pdf"); certificateFile = worker.fill(template, dirFile, "Certificate.pdf");
} else { } else {
CertificatePhantomWorker worker = new CertificatePhantomWorker(identity, entry, 2.0f, true, CertificatePhantomWorker worker = new CertificatePhantomWorker(identity, entry, 2.0f, true,
new Date(), new Date(), locale, userManager, this); new Date(), new Date(),new Date(), locale, userManager, this);
certificateFile = worker.fill(template, dirFile, "Certificate.pdf"); certificateFile = worker.fill(template, dirFile, "Certificate.pdf");
} }
return certificateFile; return certificateFile;
...@@ -815,6 +833,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ...@@ -815,6 +833,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
Boolean passed = workUnit.getPassed(); Boolean passed = workUnit.getPassed();
Date dateCertification = certificate.getCreationDate(); Date dateCertification = certificate.getCreationDate();
Date dateFirstCertification = getDateFirstCertification(identity, resource.getKey()); Date dateFirstCertification = getDateFirstCertification(identity, resource.getKey());
Date dateNextRecertification = getDateNextRecertification(certificate, entry);
File certificateFile; File certificateFile;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
...@@ -825,7 +844,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ...@@ -825,7 +844,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
String filename = FileUtils.normalizeFilename(sb.toString()) + ".pdf"; String filename = FileUtils.normalizeFilename(sb.toString()) + ".pdf";
if(template == null || template.getPath().toLowerCase().endsWith("pdf")) { if(template == null || template.getPath().toLowerCase().endsWith("pdf")) {
CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, score, passed, CertificatePDFFormWorker worker = new CertificatePDFFormWorker(identity, entry, score, passed,
dateCertification, dateFirstCertification, locale, userManager, this); dateCertification, dateFirstCertification, dateNextRecertification, locale, userManager, this);
certificateFile = worker.fill(template, dirFile, filename); certificateFile = worker.fill(template, dirFile, filename);
if(certificateFile == null) { if(certificateFile == null) {
certificate.setStatus(CertificateStatus.error); certificate.setStatus(CertificateStatus.error);
...@@ -834,7 +853,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ...@@ -834,7 +853,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList
} }
} else { } else {
CertificatePhantomWorker worker = new CertificatePhantomWorker(identity, entry, score, passed, CertificatePhantomWorker worker = new CertificatePhantomWorker(identity, entry, score, passed,
dateCertification, dateFirstCertification, locale, userManager, this); dateCertification, dateFirstCertification, dateNextRecertification, locale, userManager, this);
certificateFile = worker.fill(template, dirFile, filename); certificateFile = worker.fill(template, dirFile, filename);
if(certificateFile == null) { if(certificateFile == null) {
certificate.setStatus(CertificateStatus.error); certificate.setStatus(CertificateStatus.error);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment