From ef052552a7cce38397f83f037106a02eadff18f2 Mon Sep 17 00:00:00 2001 From: hg <none@none> Date: Thu, 16 Jun 2016 15:22:23 +0200 Subject: [PATCH] OO-2063 add next recertification date to certificate --- .../certificate/CertificatesManager.java | 8 +++ .../manager/CertificatePDFFormWorker.java | 24 +++++++-- .../manager/CertificatePhantomWorker.java | 18 +++++-- .../manager/CertificatesManagerImpl.java | 53 +++++++++++++------ 4 files changed, 78 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/olat/course/certificate/CertificatesManager.java b/src/main/java/org/olat/course/certificate/CertificatesManager.java index d9d8377ca0c..2f177e07609 100644 --- a/src/main/java/org/olat/course/certificate/CertificatesManager.java +++ b/src/main/java/org/olat/course/certificate/CertificatesManager.java @@ -148,6 +148,14 @@ public interface CertificatesManager { 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 Certificate uploadCertificate(Identity identity, Date creationDate, OLATResource resource, File certificateFile); diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java b/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java index e0cc995f86f..6f866c6b426 100644 --- a/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java +++ b/src/main/java/org/olat/course/certificate/manager/CertificatePDFFormWorker.java @@ -68,6 +68,7 @@ public class CertificatePDFFormWorker { private Date dateCertification; private Date dateFirstCertification; + private Date dateNextRecertification; private final Locale locale; private final UserManager userManager; @@ -75,7 +76,7 @@ public class CertificatePDFFormWorker { public CertificatePDFFormWorker(Identity identity, RepositoryEntry entry, Float score, Boolean passed, Date dateCertification, - Date dateFirstCertification, Locale locale, + Date dateFirstCertification, Date dateNextRecertification, Locale locale, UserManager userManager, CertificatesManagerImpl certificatesManager) { this.entry = entry; this.score = score; @@ -84,6 +85,7 @@ public class CertificatePDFFormWorker { this.identity = identity; this.dateCertification = dateCertification; this.dateFirstCertification = dateFirstCertification; + this.dateNextRecertification = dateNextRecertification; this.userManager = userManager; this.certificatesManager = certificatesManager; } @@ -201,10 +203,11 @@ public class CertificatePDFFormWorker { if(dateCertification == null) { fillField("dateCertification", "", acroForm); } else { - String formattedDateCertification= format.formatDate(dateCertification); + String formattedDateCertification = format.formatDate(dateCertification); fillField("dateCertification", formattedDateCertification, acroForm); - String formattedDateCertificationLong= format.formatDateLong(dateCertification); - fillField("dateCertificationLong", formattedDateCertificationLong, acroForm); } + String formattedDateCertificationLong = format.formatDateLong(dateCertification); + fillField("dateCertificationLong", formattedDateCertificationLong, acroForm); + } if(dateFirstCertification == null) { fillField("dateFirstCertification", "", acroForm); @@ -212,7 +215,18 @@ public class CertificatePDFFormWorker { String formattedDateFirstCertification = format.formatDate(dateFirstCertification); fillField("dateFirstCertification", formattedDateFirstCertification, acroForm); 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 { diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java index 2c938cbeca4..d8fc9696503 100644 --- a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java +++ b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java @@ -68,6 +68,7 @@ public class CertificatePhantomWorker { private Date dateCertification; private Date dateFirstCertification; + private Date dateNextRecertification; private final Locale locale; private final UserManager userManager; @@ -75,7 +76,7 @@ public class CertificatePhantomWorker { public CertificatePhantomWorker(Identity identity, RepositoryEntry entry, Float score, Boolean passed, Date dateCertification, - Date dateFirstCertification, Locale locale, + Date dateFirstCertification, Date nextRecertificationDate, Locale locale, UserManager userManager, CertificatesManagerImpl certificatesManager) { this.entry = entry; this.score = score; @@ -84,6 +85,7 @@ public class CertificatePhantomWorker { this.identity = identity; this.dateCertification = dateCertification; this.dateFirstCertification = dateFirstCertification; + this.dateNextRecertification = nextRecertificationDate; this.userManager = userManager; this.certificatesManager = certificatesManager; } @@ -215,9 +217,9 @@ public class CertificatePhantomWorker { if(dateCertification == null) { context.put("dateCertification", ""); } else { - String formattedDateCertification= format.formatDate(dateCertification); + String formattedDateCertification = format.formatDate(dateCertification); context.put("dateCertification", formattedDateCertification); - String formattedDateCertificationLong= format.formatDateLong(dateCertification); + String formattedDateCertificationLong = format.formatDateLong(dateCertification); context.put("dateCertificationLong", formattedDateCertificationLong); context.put("dateCertificationRaw", dateCertification); } @@ -231,6 +233,16 @@ public class CertificatePhantomWorker { context.put("dateFirstCertificationLong", formattedDateFirstCertificationLong); 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) { diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java index 3c734242043..35aeb436178 100644 --- a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java +++ b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java @@ -518,24 +518,14 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList ICourse course = CourseFactory.loadCourse(entry); CourseConfig config = course.getCourseEnvironment().getCourseConfig(); if(config.isRecertificationEnabled()) { - int time = config.getRecertificationTimelapse(); - RecertificationTimeUnit timeUnit = config.getRecertificationTimelapseUnit(); Certificate certificate = getLastCertificate(identity, entry.getOlatResource().getKey()); if(certificate == null) { allowed = true; } else { - Date date = certificate.getCreationDate(); Calendar cal = Calendar.getInstance(); Date now = cal.getTime(); - 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(); - allowed = nextCertification.before(now); + Date nextCertificationDate = getDateNextRecertification(certificate, config); + allowed = (nextCertificationDate != null ? nextCertificationDate.before(now) : false); } } else { allowed = !hasCertificate(identity, entry.getOlatResource().getKey()); @@ -546,6 +536,34 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList 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 public void deleteCertificate(Certificate certificate) { File certificateFile = getCertificateFile(certificate); @@ -678,15 +696,15 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList File dirFile = new File(WebappHelper.getTmpDir(), UUID.randomUUID().toString()); if(template == null) { 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"); } else if(template.getPath().toLowerCase().endsWith("pdf")) { 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"); } else { 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"); } return certificateFile; @@ -815,6 +833,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList Boolean passed = workUnit.getPassed(); Date dateCertification = certificate.getCreationDate(); Date dateFirstCertification = getDateFirstCertification(identity, resource.getKey()); + Date dateNextRecertification = getDateNextRecertification(certificate, entry); File certificateFile; StringBuilder sb = new StringBuilder(); @@ -825,7 +844,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList String filename = FileUtils.normalizeFilename(sb.toString()) + ".pdf"; if(template == null || template.getPath().toLowerCase().endsWith("pdf")) { 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); if(certificateFile == null) { certificate.setStatus(CertificateStatus.error); @@ -834,7 +853,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList } } else { 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); if(certificateFile == null) { certificate.setStatus(CertificateStatus.error); -- GitLab