[Ils-source] r1496 - in trunk: src/com/resolutions/ils/data webapp webapp/WEB-INF
scribe at crosswire.org
scribe at crosswire.org
Thu Nov 3 16:35:44 MST 2016
Author: scribe
Date: 2016-11-03 16:35:44 -0700 (Thu, 03 Nov 2016)
New Revision: 1496
Modified:
trunk/src/com/resolutions/ils/data/Course.java
trunk/src/com/resolutions/ils/data/CourseAttempt.java
trunk/src/com/resolutions/ils/data/UserProfile.java
trunk/webapp/WEB-INF/sysconfig.properties
trunk/webapp/admin_coursenew.jsp
trunk/webapp/admin_curricnew.jsp
trunk/webapp/aicc.jsp
trunk/webapp/employee.jsp
trunk/webapp/employeehometable.jsp
trunk/webapp/manager_authorization.jsp
trunk/webapp/menu.jsp
trunk/webapp/report_employeecourseatt.jsp
trunk/webapp/report_recurrent_training.jsp
Log:
bunch of crap to close out final bugs for 1.81
Modified: trunk/src/com/resolutions/ils/data/Course.java
===================================================================
--- trunk/src/com/resolutions/ils/data/Course.java 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/src/com/resolutions/ils/data/Course.java 2016-11-03 23:35:44 UTC (rev 1496)
@@ -2,6 +2,7 @@
import org.apache.log4j.Logger;
import org.crosswire.utils.HTTPUtils;
+import org.crosswire.xml.XMLBlock;
import org.crosswire.data.*;
import com.resolutions.ils.ILSSession;
import java.util.Vector;
@@ -304,6 +305,14 @@
return getStringValue("COURSCERTGEN");
}
+ public boolean isCourseCertificateStore() {
+ return ("T".equals(getValue("COURSISCERTSTORE")));
+ }
+
+ public void setCourseCertificateStore(boolean val) {
+ setValue("COURSISCERTSTORE", (val) ? "T" : "F");
+ }
+
public String getCourseName() {
return getStringValue("COURSNAME");
}
@@ -502,6 +511,7 @@
// Default
String retVal = "width=800,height=600";
+/*
String url = getCourseURL();
if ((url != null) && (url.endsWith("frameset.htm"))) {
@@ -510,16 +520,21 @@
java.net.URL courseXML = null;
org.xml.sax.InputSource inputSource = null;
String expression = "/course";
+ XMLBlock courseXMLBlock = null;
try {
courseXML = new java.net.URL(url);
+ courseXMLBlock = XMLBlock.loadXMLBlock(courseXML.openStream());
+logger.info("courseXML: " + courseXMLBlock);
inputSource = new org.xml.sax.InputSource(courseXML.openStream());
}
catch (Exception ex) {
// logger.error(ex, ex);
}
- if (inputSource == null) {
+ if (courseXMLBlock == null) {
try {
File f = new File(context.getRealPath(url));
+ courseXMLBlock = XMLBlock.loadXMLBlock(new java.io.FileInputStream(f));
+logger.info("courseXML: " + courseXMLBlock);
inputSource = new org.xml.sax.InputSource(new java.io.FileInputStream(f));
}
catch (Exception ex) {
@@ -545,6 +560,7 @@
logger.error("Bad course URL: " + url);
}
}
+*/
return retVal;
}
Modified: trunk/src/com/resolutions/ils/data/CourseAttempt.java
===================================================================
--- trunk/src/com/resolutions/ils/data/CourseAttempt.java 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/src/com/resolutions/ils/data/CourseAttempt.java 2016-11-03 23:35:44 UTC (rev 1496)
@@ -363,14 +363,18 @@
public void passAllAssociatedCurriculum(ILSSession session, HttpServletRequest request, String forcePassReason) {
Collection<Course> curs = Course.getUserCurricula(session, getCourseAttemptUserProfileID());
if (curs != null) {
+ // find all curricula our user is assigned and check each one
for (Course cur : curs) {
+
boolean isPassed = false;
Vector<Course> courses = cur.getCurriculumCourses();
if (courses != null) {
- // is this course a member of the curriculum?
+ // is this course a member of the tested curriculum?
+ boolean isPertinent = false;
for (Course c : courses) {
if (c.getCourseID() == getCourseAttemptCourseID()) {
- isPassed = true;
+ isPertinent = true;
+logger.info("curr is pertinent: " + cur.getCourseName());
break;
}
}
@@ -381,7 +385,7 @@
int score = 0;
int courseCount = 0;
- if (isPassed) {
+ if (isPertinent) {
for (Course c : courses) {
isPassed = false;
@@ -394,13 +398,15 @@
d = ca.getCourseAttemptCompleteDate();
endDate = (d != null && (endDate == 0 || endDate < d.getTime())) ? d.getTime() : endDate;
- if (ca.getCourseAttemptStatusID() == STATUS_PASSED) {
+ boolean finished = !c.isCourseRequiresManagerApproval() || ca.isCourseAttemptManagerApproved();
+ if (finished && ca.getCourseAttemptStatusID() == STATUS_PASSED) {
int s = ca.getCourseAttemptScore();
if (s > -1) {
++courseCount;
score += s;
}
isPassed = true;
+logger.info("course is passed: " + c.getCourseName());
break;
}
}
@@ -412,7 +418,7 @@
}
// if we have a curriculum of which our course is a member and all courses in this curriculum are passed,
// then create a passed course attempt for this curriculum
- if (isPassed) {
+ if (isPertinent && isPassed) {
if (courseCount != 0) score /= courseCount;
@@ -429,10 +435,10 @@
// TODO: timeframe?
ca = ca.saveNew(session);
+logger.info("passing curriulum: " + cur.getCourseName());
// render certificate
- String certgen = cur.getCourseCertificateGenerator();
- if (certgen != null && certgen.trim().length() > 0) {
+ if (cur.isCourseCertificateStore()) {
try {
ca.saveCertificate(ca.generateCertificate(session, request));
}
@@ -981,8 +987,7 @@
ca.sendStatusUpdateEvent(httpRequest.getSession().getServletContext());
- String certgen = course.getCourseCertificateGenerator();
- if (certgen != null && certgen.trim().length() > 0) {
+ if (course.isCourseCertificateStore()) {
try {
ca.saveCertificate(ca.generateCertificate(ilsSession, httpRequest));
}
@@ -997,16 +1002,22 @@
if (allCurriculumCourses && course.isCourseCurriculum()) {
for (Course curCourse : course.getCurriculumCourses()) {
Vector<CourseAttempt> cas = CourseAttempt.getUserCourseAttempts(ilsSession, userProfileID, curCourse.getCourseID(), false);
+ int caid = -1;
boolean skipCourse = false;
if (cas != null) {
for (CourseAttempt ca2 : cas) {
- if (ca2.getCourseAttemptStatusID() == STATUS_PASSED && !ca2.isCourseAttemptExpired()) {
- skipCourse = true;
+ if (!ca2.isCourseAttemptExpired()) {
+ if (ca2.getCourseAttemptStatusID() == STATUS_PASSED) {
+ skipCourse = true;
+ }
+ else {
+ caid = ca2.getCourseAttemptID();
+ }
}
}
}
if (!skipCourse) {
- CourseAttempt.forcePass(curCourse.getCourseID(), userProfileID, reason, ilsSession, httpRequest, allCurriculumCourses, -1);
+ CourseAttempt.forcePass(curCourse.getCourseID(), userProfileID, reason, ilsSession, httpRequest, allCurriculumCourses, caid);
}
}
}
Modified: trunk/src/com/resolutions/ils/data/UserProfile.java
===================================================================
--- trunk/src/com/resolutions/ils/data/UserProfile.java 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/src/com/resolutions/ils/data/UserProfile.java 2016-11-03 23:35:44 UTC (rev 1496)
@@ -80,10 +80,21 @@
static String COUNTWOULDBEDELETES = "SELECT COUNT(*) WOULDBE FROM ("+SELECTOLDIDS+") TMPTABLE";
static String LOOKUPUSERGROUPS = "SELECT * FROM ILSGROUP T1, USERGROUP T2 WHERE T1.ILSGROUPID=T2.ILSGROUPID AND T2.USERPRID={USERPRID} AND T1.COMPANYID={COMPANYID} AND T2.COMPANYID={COMPANYID}";
- static String RECURRENT_TRAINING_REPORT = "SELECT DISTINCT CASS.COMPANYID, CASS.USERPRID, CASS.COURSID, UP.USERPRLNAME, UP.USERPRFNAME, UP.USERPRNUM, "
+ static String RECURRENT_TRAINING_REPORT = "SELECT DISTINCT CASS.COMPANYID, CASS.USERPRID, CASS.COURSID, "
+ + " CASS.FROMCURRICULUM, CURDET.COURSISCURRICCERT, "
+ + " UP.USERPRLNAME, UP.USERPRFNAME, UP.USERPRNUM, "
+ " (SELECT MAX(GROUPNAME) FROM USERGROUP UG JOIN ILSGROUP IG ON UG.ILSGROUPID=IG.ILSGROUPID AND UG.USERPRID=UP.USERPRID AND GROUPTYPEID=2) WORKGROUP,"
+ " (SELECT MAX(GROUPNAME) FROM USERGROUP UG JOIN ILSGROUP IG ON UG.ILSGROUPID=IG.ILSGROUPID AND UG.USERPRID=UP.USERPRID AND GROUPTYPEID=1) ROLE, "
- + "C.COURSNAME, CA.CACOMPLETEDATE, CASE C.COURSPASSEXPDAYS WHEN 0 THEN CA.CAEXPIREDON ELSE COALESCE(CA.CAEXPIREDON, CA.CACOMPLETEDATE+C.COURSPASSEXPDAYS) END AS CAEXPIREDON, DATEDIFF(day, CA.CAEXPIREDON, CURRENT_TIMESTAMP) as DAYSEXPIRED, CASE C.COURSPASSEXPDAYS WHEN 0 THEN NULL ELSE C.COURSPASSEXPDAYS - DATEDIFF(day, CA.CACOMPLETEDATE, CURRENT_TIMESTAMP) END as DAYSSHOULDEXPIRE from USERCOURSEASSIGNMENTSWITHGROUPS CASS LEFT JOIN COURSE C ON C.COURSID = CASS.COURSID LEFT JOIN COURSEATTEMPT CA ON CA.USERPRID=CASS.USERPRID AND CA.COURSID=CASS.COURSID INNER JOIN (SELECT USERPRID, COURSID, MAX(CACOMPLETEDATE) as max_date FROM COURSEATTEMPT GROUP BY USERPRID, COURSID)a on a.USERPRID = CA.USERPRID AND a.COURSID=CA.COURSID and a.max_date = CA.CACOMPLETEDATE LEFT JOIN USERPROFILE UP ON UP.COMPANYID=CASS.COMPANYID AND UP.USERPRID = CASS.USERPRID WHERE CASS.COMPANYID={COMPANYID} AND (DATEDIFF(day, CA.CAEXPIREDON, CURRENT_TIMESTAMP) >= 0 OR CASE C.COURSPASSEXPDAYS WHEN 0 THEN NULL ELSE C.COURSPASSEXPDAYS - DATEDIFF(day, CA.CACOMPLETEDATE, CURRENT_TIMESTAMP) END <={DAYSTILEXP}) AND UP.USERPRSTATUSID=" + STATUS_ACTIVE;
+ + " C.COURSNAME, CA.CACOMPLETEDATE, CASE C.COURSPASSEXPDAYS WHEN 0 THEN CA.CAEXPIREDON ELSE COALESCE(CA.CAEXPIREDON, CA.CACOMPLETEDATE+C.COURSPASSEXPDAYS) END AS CAEXPIREDON, DATEDIFF(day, CA.CAEXPIREDON, CURRENT_TIMESTAMP) as DAYSEXPIRED, CASE C.COURSPASSEXPDAYS WHEN 0 THEN NULL ELSE C.COURSPASSEXPDAYS - DATEDIFF(day, CA.CACOMPLETEDATE, CURRENT_TIMESTAMP) END as DAYSSHOULDEXPIRE "
+ + " FROM USERCOURSEASSIGNMENTSWITHGROUPS CASS "
+ + " LEFT JOIN COURSE C ON C.COURSID = CASS.COURSID "
+ + " LEFT JOIN COURSE CURDET ON CURDET.COURSID = CASS.FROMCURRICULUM "
+ + " LEFT JOIN COURSEATTEMPT CA ON CA.USERPRID=CASS.USERPRID AND CA.COURSID=CASS.COURSID "
+ + " INNER JOIN (SELECT USERPRID, COURSID, MAX(CACOMPLETEDATE) as max_date FROM COURSEATTEMPT GROUP BY USERPRID, COURSID)a on a.USERPRID = CA.USERPRID AND a.COURSID=CA.COURSID and a.max_date = CA.CACOMPLETEDATE "
+ + " LEFT JOIN USERPROFILE UP ON UP.COMPANYID=CASS.COMPANYID AND UP.USERPRID = CASS.USERPRID "
+ + " WHERE CASS.COMPANYID={COMPANYID} AND (DATEDIFF(day, CA.CAEXPIREDON, CURRENT_TIMESTAMP) >= 0 OR CASE C.COURSPASSEXPDAYS WHEN 0 THEN NULL ELSE C.COURSPASSEXPDAYS - DATEDIFF(day, CA.CACOMPLETEDATE, CURRENT_TIMESTAMP) END <={DAYSTILEXP}) AND UP.USERPRSTATUSID=" + STATUS_ACTIVE
+ + " AND (CURDET.COURSISCURRICCERT IS NULL OR CURDET.COURSISCURRICCERT = 'F')"
+ + "";
static String RECURRENT_TRAINING_REPORT_LIMIT_TO_MANAGER = " AND CASS.USERPRID IN (SELECT DISTINCT UG.USERPRID FROM MANAGERGROUP MG LEFT JOIN USERGROUP UG ON UG.COMPANYID = MG.COMPANYID AND UG.ILSGROUPID=MG.ILSGROUPID WHERE MG.COMPANYID={COMPANYID} AND MG.USERPRID={USERPRID}) AND (GROUPTYPEID <> 2 OR ILSGROUPID IN (SELECT ILSGROUPID FROM MANAGERGROUP WHERE COMPANYID={COMPANYID} AND USERPRID={USERPRID}))";
@@ -174,7 +185,7 @@
}
if (modCols.contains("USERPRPASSWD")) {
eventsLogger.info("User: " + getUserProfileNum() + " PASSWORD changed " + "by user: " + session.getCurrentUserProfile().getUserProfileNum());
- if (email != null) {
+ if (email != null && getUserProfileStatusID() == STATUS_ACTIVE) {
try {
String subject = Utils.getSysConfig(email).getProperty("EmailTemplate1Subject");
String body = Utils.getSysConfig(email).getProperty("EmailTemplate1Body");
@@ -223,7 +234,7 @@
try {
Properties sysConfig = Utils.getSysConfig(email);
boolean emailNotice = "on".equals(sysConfig.getProperty("EmailEnableWelcome", "off"));
- if (emailNotice) {
+ if (emailNotice && getUserProfileStatusID() == STATUS_ACTIVE) {
String subject = sysConfig.getProperty("EmailTemplate6Subject");
String body = sysConfig.getProperty("EmailTemplate6Body");
HashMap<String, Object> params = new HashMap<String, Object>();
@@ -422,7 +433,7 @@
UserProfile retVal = new UserProfile();
- String sql = "SELECT * FROM USERPROFILE UP WHERE UP.COMPANYID={COMPANYID} AND EXISTS (SELECT USERPRID FROM MANAGERGROUP MG WHERE MG.USERPRID=UP.USERPRID AND MG.COMPANYID={COMPANYID})";
+ String sql = "SELECT * FROM USERPROFILE UP WHERE UP.COMPANYID={COMPANYID} AND EXISTS (SELECT USERPRID FROM MANAGERGROUP MG WHERE MG.USERPRID=UP.USERPRID AND MG.COMPANYID={COMPANYID}) AND UP.USERPRSTATUSID=" + STATUS_ACTIVE;
retVal.setCompanyID(companyID);
if (excludeRecurEmailOverrides) {
@@ -558,7 +569,7 @@
}
public UserProfile []getManagers() {
- String sql = LOOKUP + " AND USERPRID IN (" + LOOKUPMANAGERS + ")";
+ String sql = LOOKUP + " AND USERPRID IN (" + LOOKUPMANAGERS + ") AND USERPRSTATUSID=" + STATUS_ACTIVE;
Vector<UserProfile> rows = this.getDataSet(sql);
return rows.toArray(new UserProfile[0]);
}
Modified: trunk/webapp/WEB-INF/sysconfig.properties
===================================================================
--- trunk/webapp/WEB-INF/sysconfig.properties 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/WEB-INF/sysconfig.properties 2016-11-03 23:35:44 UTC (rev 1496)
@@ -52,3 +52,6 @@
Docusign.integratorKey=SSIX-55285494-f60e-49a6-bb5c-70c8605fbee4
Docusign.accountID=f1f63527-3250-49c8-b31b-3166cb3e6a46
DefaultPasswd=changeme
+Add alternate certificate generators here
+#CertificateGeneratorCourse.1=certificate_alt.jsp|Alternate Course Certificate
+#CertificateGeneratorCurriculum.1=certificate_curriculum_alt.jsp|Alternate Curriculum Certificate
Modified: trunk/webapp/admin_coursenew.jsp
===================================================================
--- trunk/webapp/admin_coursenew.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/admin_coursenew.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -146,6 +146,9 @@
else if ("certgen".equals(fi.getFieldName())) {
if (fi.getString() != null) try { current.setCourseCertificateGenerator(fi.getString()); } catch (Exception e) { logger.error(e); }
}
+ else if ("certstore".equals(fi.getFieldName())) {
+ if (fi.getString() != null) try { current.setCourseCertificateStore(Integer.parseInt(fi.getString())>0); } catch (Exception e) { logger.error(e); }
+ }
else if ("passexp".equals(fi.getFieldName())) {
if (fi.getString() != null) try { current.setCoursePassExpireDays(Integer.parseInt(fi.getString())); } catch (Exception e) { logger.error(e); }
}
@@ -399,8 +402,34 @@
<td><input name="pass" type="text" value="<%=current.getCoursePass()%>" size="6"/> % </td>
</tr>
<tr>
+ <td class="formHeadings">Course Certificate</td>
+ <td>
+ <input id="dontStoreCert" name="certstore" type="radio" <%=!current.isCourseCertificateStore()?"checked=\"true\"":""%> value="0" />
+ <label for="dontStoreCert">Displays Current Template and Data</label>
+ <input id="storeCert" name="certstore" type="radio" <%=current.isCourseCertificateStore()?"checked=\"true\"":""%> value="1" />
+ <label for="storeCert">Imaged At Time of Completion</label>
+ </td>
+ </tr>
+ <tr>
<td class="formHeadings">Course Certificate Generator </td>
- <td><input name="certgen" style="width:100%" type="text" placeholder="default or certificate.jsp or certificate_curriculum.jsp" value="<%=current.getCourseCertificateGenerator()%>" size="40"/></td>
+ <td>
+ <select name="certgen">
+ <option value="">default</option>
+<%
+ for (int i = 1; true; ++i) {
+ String gen = Utils.getSysConfig(session).getProperty("CertificateGeneratorCourse."+i);
+ if (gen == null) break;
+
+ String genPage = gen.split("\\|")[0];
+ String genName = gen.split("\\|")[1];
+%>
+ <option value="<%=genPage%>"<%=genPage.equals(current.getCourseCertificateGenerator())?" selected=\"selected\"":""%> size="40"/><%=genName%></option>
+<%
+ }
+%>
+
+ </select>
+ </td>
</tr>
<tr>
<td class="formHeadings">Course Certificate Expires After </td>
@@ -524,7 +553,7 @@
<td>
<table class="tableData">
<tr>
- <th><input type="checkbox" name="cba1" onClick="checkAll('roleck', this.checked);"></th>
+ <th><input type="checkbox" name="cba1" onClick="checkAll('roleck', this.checked);" /></th>
<th><a href="admin_coursenew.jsp?courseid=<%=courseID%>&sort=name"><t:t>role name</t:t></a></th>
<th><a href="admin_coursenew.jsp?courseid=<%=courseID%>&sort=desc">description</a></th>
</tr>
@@ -534,7 +563,7 @@
boolean checked = (inCourse.contains(new Integer(role.getGroupID())));
%>
<tr>
- <td><input id="roleck<%=i%>" type="checkbox" <%=(checked)?"checked=\"true\"":""%> name="roleid" value="<%=role.getGroupID()%>"></td>
+ <td><input id="roleck<%=i%>" type="checkbox" <%=(checked)?"checked=\"true\"":""%> name="roleid" value="<%=role.getGroupID()%>" /></td>
<td><%=role.getGroupName()%></td>
<td><%=role.getGroupDesc()%></td>
</tr>
Modified: trunk/webapp/admin_curricnew.jsp
===================================================================
--- trunk/webapp/admin_curricnew.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/admin_curricnew.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -76,6 +76,8 @@
if (val != null) current.setCourseDesc(val);
val = request.getParameter("certgen");
if (val != null) current.setCourseCertificateGenerator(val);
+ val = request.getParameter("certstore");
+ if (val != null) try { current.setCourseCertificateStore(Integer.parseInt(val)>0); } catch (Exception e) { logger.error(e); }
val = request.getParameter("passexp");
if (val != null) try { current.setCoursePassExpireDays(Integer.parseInt(val)); } catch (Exception e) { logger.error(e); }
val = request.getParameter("passreassign");
@@ -144,9 +146,10 @@
<head>
<title><%= ilsSession.getCurrentCompany().getCompanyName() %> eLearning Portal</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <script type="text/javascript" src="crosswire.js"></script>
- <link href="lms_style.css" rel="stylesheet" type="text/css">
- <script type="text/javascript" language="JavaScript">
+ <script type="text/javascript" src="crosswire.js"></script>
+ <script type="text/javascript" src="js/jquery/jquery.min.js"></script>
+ <link href="lms_style.css" rel="stylesheet" type="text/css">
+ <script type="text/javascript" language="JavaScript">
<!--
function confirmRevoke() {
if (confirm("Running this routine will assign this curriculum as recurrent training to all applicable users. Are you sure?")) {
@@ -160,6 +163,17 @@
function rC(val) {
document.coursesave.locURL.value = 'courses/'+val+'/frameset.htm';
}
+function updateCertVisibility() {
+ var hide = !$('#curricCert').is(':checked');
+ $('#dontStoreCert').prop('disabled', hide);
+ $('#storeCert').prop('disabled', hide);
+ $('#certgen').prop('disabled', hide);
+}
+
+$(document).ready(function() {
+ updateCertVisibility();
+});
+
// -->
</script>
@@ -215,11 +229,37 @@
</tr>
<tr>
<td class="formHeadings">Enable Curriculum Certificate :</td>
- <td><input type="checkbox" <%=(current.isCourseCurriculumCertificate())?"checked=\"checked\"":""%> name="curricCert" value="true" /></td>
+ <td><input onclick="updateCertVisibility();" type="checkbox" <%=(current.isCourseCurriculumCertificate())?"checked=\"checked\"":""%> id="curricCert" name="curricCert" value="true" /></td>
</tr>
<tr>
+ <td class="formHeadings">Curriculum Certificate</td>
+ <td>
+ <input id="dontStoreCert" name="certstore" type="radio" <%=!current.isCourseCertificateStore()?"checked=\"true\"":""%> value="0" />
+ <label for="dontStoreCert">Displays Current Template and Data</label>
+ <input id="storeCert" name="certstore" type="radio" <%=current.isCourseCertificateStore()?"checked=\"true\"":""%> value="1" />
+ <label for="storeCert">Imaged At Time of Completion</label>
+ </td>
+ </tr>
+ <tr>
<td class="formHeadings">Curriculum Certificate Generator </td>
- <td><input name="certgen" style="width:100%" type="text" placeholder="default or certificate.jsp or certificate_curriculum.jsp" value="<%=current.getCourseCertificateGenerator()%>" size="40"/></td>
+ <td>
+ <select id="certgen" name="certgen">
+ <option value="">default</option>
+<%
+ for (int i = 1; true; ++i) {
+ String gen = Utils.getSysConfig(session).getProperty("CertificateGeneratorCurriculum."+i);
+ if (gen == null) break;
+
+ String genPage = gen.split("\\|")[0];
+ String genName = gen.split("\\|")[1];
+%>
+ <option value="<%=genPage%>"<%=genPage.equals(current.getCourseCertificateGenerator())?" selected=\"selected\"":""%> size="40"/><%=genName%></option>
+<%
+ }
+%>
+
+ </select>
+ </td>
</tr>
<tr>
<td class="formHeadings">Enable Curriculum Part Retake :</td>
Modified: trunk/webapp/aicc.jsp
===================================================================
--- trunk/webapp/aicc.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/aicc.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -242,9 +242,9 @@
ca.setCourseAttemptCompleteDate(new Date());
ca.save(orig);
if (ca.getCourseAttemptStatusID() != originalStatusID) {
- if (ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_PASSED) {
- String certgen = course.getCourseCertificateGenerator();
- if (certgen != null && certgen.trim().length() > 0) {
+ boolean finished = !((course.isCourseRequiresManagerApproval()) && (!ca.isCourseAttemptManagerApproved()));
+ if (finished && ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_PASSED) {
+ if (course.isCourseCertificateStore()) {
try {
ca.saveCertificate(ca.generateCertificate(ilsSession, request));
}
Modified: trunk/webapp/employee.jsp
===================================================================
--- trunk/webapp/employee.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/employee.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -153,8 +153,10 @@
<td width="10%">
<%
if (curricCompleted) {
- out.append("<a href=\"#\" onClick=\"showWindow('certificate_curriculum.jsp?c=" + c.getCourseID() + "'); return false;\">");
- out.append("<img src=\"images/print_certficate.png\" border=\"0\" alt=\"Certificate\" width=\"21\" height=\"20\"/> </a>");
+ String generator = c.getCourseCertificateGenerator();
+ if (generator == null || generator.length() < 1) generator = "certificate_curriculum..jsp";
+ out.append("<a href=\"#\" onClick=\"showWindow('"+generator+"?c=" + c.getCourseID() + "'); return false;\">");
+ out.append("<img src=\"images/print_certficate.png\" border=\"0\" alt=\"Certificate\" width=\"21\" height=\"20\"/> </a>");
}
%>
</td>
@@ -338,8 +340,10 @@
<td class="centered">
<%
if (finished) {
+ String generator = cc.getCourseCertificateGenerator();
+ if (generator == null || generator.length() < 1) generator = "certificate.jsp";
%>
- <a href="#" onClick="showWindow('certificate.jsp?ca=<%=ca.getCourseAttemptID()%>'); return false;">
+ <a href="#" onClick="showWindow('<%=generator%>?ca=<%=ca.getCourseAttemptID()%>'); return false;">
<img src="images/print_certficate.png" border="0" alt="Certificate" width="21" height="20"/> </a>
<%
}
@@ -586,9 +590,11 @@
out.append("</a></td>");
out.append("<td class=\"centered\">");
if (finished && !supressCerts) {
- out.append("<a href=\"#\" onClick=\"showWindow('certificate.jsp?ca=" + ca.getCourseAttemptID() + "'); return false;\">");
- out.append("<img src=\"images/print_certficate.png\" border=\"0\" alt=\"Certificate\" width=\"21\" height=\"20\"/> </a>");
- }
+ String generator = cc.getCourseCertificateGenerator();
+ if (generator == null || generator.length() < 1) generator = "certificate.jsp";
+ out.append("<a href=\"#\" onClick=\"showWindow('"+generator+"?ca=" + ca.getCourseAttemptID() + "'); return false;\">");
+ out.append("<img src=\"images/print_certficate.png\" border=\"0\" alt=\"Certificate\" width=\"21\" height=\"20\"/> </a>");
+ }
out.append("</td>");
out.append("<td> " + score + " </td>");
out.append("</tr>");
Modified: trunk/webapp/employeehometable.jsp
===================================================================
--- trunk/webapp/employeehometable.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/employeehometable.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -219,8 +219,10 @@
<td class="centered">
<%
if (finished) {
+ String generator = cc.getCourseCertificateGenerator();
+ if (generator == null || generator.length() < 1) generator = "certificate.jsp";
%>
- <a href="#" onClick="showWindow('certificate.jsp?ca=<%=ca.getCourseAttemptID()%>'); return false;">
+ <a href="#" onClick="showWindow('<%=generator%>?ca=<%=ca.getCourseAttemptID()%>'); return false;">
<img src="images/print_certficate.png" border="0" alt="Certificate" width="21" height="20"/> </a>
<%
}
@@ -344,8 +346,10 @@
<td class="centered">
<%
if (finished) {
+ String generator = cc.getCourseCertificateGenerator();
+ if (generator == null || generator.length() < 1) generator = "certificate.jsp";
%>
- <a href="#" onClick="showWindow('certificate.jsp?ca=<%=ca.getCourseAttemptID()%>'); return false;">
+ <a href="#" onClick="showWindow('<%=generator%>?ca=<%=ca.getCourseAttemptID()%>'); return false;">
<img src="images/print_certficate.png" border="0" alt="Certificate" width="21" height="20"/> </a>
<%
}
Modified: trunk/webapp/manager_authorization.jsp
===================================================================
--- trunk/webapp/manager_authorization.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/manager_authorization.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -14,6 +14,7 @@
<%
+ Logger logger = Logger.getLogger("report/manager/approval");
String statusMsg = "";
String validError = "";
String action = request.getParameter("action");
@@ -40,8 +41,18 @@
for (int i = 0; i < caids.length; i++) {
CourseAttempt ca = CourseAttempt.getCourseAttempt(ilsSession, Integer.parseInt(caids[i]));
CourseAttempt orig = (CourseAttempt)ca.clone();
+ Course c = Course.getCourse(ilsSession, ca.getCourseAttemptCourseID());
ca.setCourseAttemptManagerApproved(true);
ca.save(orig);
+ if (c.isCourseCertificateStore()) {
+ try {
+ ca.saveCertificate(ca.generateCertificate(ilsSession, request));
+ }
+ catch (Exception e) {
+ logger.error(e, e);
+ }
+ }
+ ca.passAllAssociatedCurriculum(ilsSession, request);
}
}
statusMsg = "" + caids.length + " course" + ((caids.length != 1) ? "s have" : " has") + " been approved.";
Modified: trunk/webapp/menu.jsp
===================================================================
--- trunk/webapp/menu.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/menu.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -31,6 +31,8 @@
}
</style>
+ <form name="report_recurrent_training" action="report_recurrent_training.jsp" style="display:none;"></form>
+
<div id="Banner"><span class="loggedinBar">Logged in as:<%=user.getUserProfileNum()%></span></div>
<div id="MainMenu">
<%
@@ -87,7 +89,7 @@
}
if ((user.getUserProfileAccessLevel() > UserProfile.ACCESS_MANAGER) || (user.hasAccess(UserProfile.ACCESS_MODE_MENU_STUDENT_RECORDS))) {
%>
- <li><a href="report_recurrent_training.jsp">Recurrent Training Report</a></li>
+ <li><a href="#" onclick="$.blockUI({ message: '<h3><img width="30" height="30" style="margin-right:10px;vertical-align:middle;" src="images/loading.gif"/> Generating Report...</h3>' }); document.report_recurrent_training.submit();return false;">Recurrent Training Report</a></li>
<%
}
if (user.getUserProfileAccessLevel() >= UserProfile.ACCESS_MANAGER) {
Modified: trunk/webapp/report_employeecourseatt.jsp
===================================================================
--- trunk/webapp/report_employeecourseatt.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/report_employeecourseatt.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -20,7 +20,7 @@
<%!
static SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
- Logger logger = Logger.getLogger(this.getClass());
+ static Logger logger = Logger.getLogger("report/employee/course/attempt");
%>
<%
ILSSession ilsSession = (ILSSession)session.getAttribute("ilsSession");
@@ -109,7 +109,7 @@
HashSet<CourseAttempt> meCourseAttempts = new HashSet<CourseAttempt>();
courseCourseAttempts.put(mainCourse.getCourseID(), meCourseAttempts);
logger.debug("processing course: " + mainCourse.getCourseName());
- Vector cas = CourseAttempt.getUserCourseAttempts(ilsSession, current.getUserProfileID(), mainCourse.getCourseID());
+ Vector cas = CourseAttempt.getUserCourseAttempts(ilsSession, current.getUserProfileID(), mainCourse.getCourseID());
boolean nonExpired = false;
for (int i = 0; i < cas.size() + 1; i++) {
CourseAttempt ca = null;
@@ -119,6 +119,7 @@
else {
ca = new CourseAttempt();
ca.setCourseAttemptID(-1);
+ ca.setIntValue("COMPANYID", ilsSession.getCompanyID());
}
}
else {
@@ -161,7 +162,7 @@
ca.setValue("coursename", mainCourse.getCourseName());
ca.setValue("seattimetext", mainCourse.getCourseSeatTimeText());
ca.setCourseAttemptCourseID(mainCourse.getCourseID());
- if (mainCourse.isCourseActive() || (ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_FAILED) || (ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_PASSED)) {
+ if (mainCourse.isCourseActive() || (ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_FAILED) || (finished && ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_PASSED)) {
courseAttempts.add(ca);
meCourseAttempts.add(ca);
}
@@ -203,8 +204,11 @@
cursor: pointer;
}
</style>
-<script type="text/javascript" src="crosswire.js"></script>
-<script type="text/javascript" src="js/jquery/jquery.min.js"></script>
+
+ <script type="text/javascript" src="crosswire.js"></script>
+ <script type="text/javascript" src="js/jquery/jquery.min.js"></script>
+ <script type="text/javascript" src="js/jquery/jquery.blockUI.js"></script>
+
<script type="text/javascript">
var rcid=0;
function retake(inCID) {
@@ -213,6 +217,7 @@
}
function retakeComplete(resultObject) {
+ $.blockUI({ message: '<h3><img width="30" height="30" style="margin-right:10px;vertical-align:middle;" src="images/loading.gif"/> Generating Report...</h3>' });
reason = resultObject.value;
document.getElementById('revokeCID').value=rcid;
if (reason.length > 0) reason = reason + ' / ';
@@ -229,6 +234,7 @@
}
function forcePassComplete(resultObject) {
+ $.blockUI({ message: '<h3><img width="30" height="30" style="margin-right:10px;vertical-align:middle;" src="images/loading.gif"/> Generating Report...</h3>' });
reason = resultObject.value;
document.getElementById('passCID').value=pcid;
document.getElementById('passCourseID').value=pcourseid;
@@ -464,9 +470,10 @@
int passedCourseCount = (Integer)values.get("passedCourseCount");
int totalCourseCount = (Integer)values.get("totalCourseCount");
ca.setValue("seattimetext", Course.getNiceTimeText(timeFrame));
+ boolean finished = !((curr.isCourseRequiresManagerApproval()) && (!ca.isCourseAttemptManagerApproved()));
// if we have a stored history of passed or failed, use it. Otherwise, compute curriculum status based on course progress
if (
- ca.getCourseAttemptStatusID() != CourseAttempt.STATUS_PASSED
+ (!finished || ca.getCourseAttemptStatusID() != CourseAttempt.STATUS_PASSED)
&& ca.getCourseAttemptStatusID() != CourseAttempt.STATUS_FAILED
) {
ca.setValue("status", passedCourseCount == totalCourseCount ? "Passed" : (inProgressCourseCount == 0 && passedCourseCount == 0) ? "New" : "In Progress");
@@ -518,7 +525,8 @@
}
else if ("Passed".equals(status) && !supressCert) {
Course c = Course.getCourse(ca.getCompanyID(), ca.getCourseAttemptCourseID());
- String urlString = (c.isCourseCurriculum() ? "certificate_curriculum.jsp" : "certificate.jsp");
+ String urlString = c.getCourseCertificateGenerator();
+ if (urlString == null || urlString.length() < 1) urlString = (c.isCourseCurriculum() ? "certificate_curriculum.jsp" : "certificate.jsp");
urlString += "?ca=" + ca.getCourseAttemptID();
urlString += "&c=" + c.getCourseID();
urlString += "&up=" + ca.getCourseAttemptUserProfileID();
@@ -554,7 +562,8 @@
d = ca.getCourseAttemptCompleteDate();
endDate = (d != null && (endDate == 0 || endDate < d.getTime())) ? d.getTime() : endDate;
- if (ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_PASSED && !ca.isCourseAttemptExpired()) {
+ boolean finished = !((c.isCourseRequiresManagerApproval()) && (!ca.isCourseAttemptManagerApproved()));
+ if (finished && ca.getCourseAttemptStatusID() == CourseAttempt.STATUS_PASSED && !ca.isCourseAttemptExpired()) {
int s = ca.getCourseAttemptScore();
++passedCourseCount;
if (s > -1) {
@@ -581,5 +590,6 @@
values.put("totalCourseCount", totalCourseCount);
values.put("timeFrame", timeFrame);
+logger.debug("curriculum: " + curriculumID + "; values: " + values);
}
%>
Modified: trunk/webapp/report_recurrent_training.jsp
===================================================================
--- trunk/webapp/report_recurrent_training.jsp 2016-10-27 21:13:14 UTC (rev 1495)
+++ trunk/webapp/report_recurrent_training.jsp 2016-11-03 23:35:44 UTC (rev 1496)
@@ -174,7 +174,7 @@
<td><a href="?action=csv"><img border="0" src="images/download_btn.gif" width="24" height="24" alt=""></a></td>
<td></td>
<td><a href="?action=csv" class="formButtons">Download to Excel File </a></td>
- <td><form action="#">View Upcoming Training Within The Next <input name="daysTilDue" size="5" value="<%=daysTilDue%>"/> Days <button>Go</button></form></td>
+ <td><form id="report_recurrent_training" action="report_recurrent_training.jsp">View Upcoming Training Within The Next <input name="daysTilDue" size="5" value="<%=daysTilDue%>"/> Days <button onclick="$.blockUI({ message: '<h3><img width="30" height="30" style="margin-right:10px;vertical-align:middle;" src="images/loading.gif"/> Generating Report...</h3>' });return true;">Go</button></form></td>
</tr>
</table>
</td>
More information about the Ils-source
mailing list