[Ils-source] r1459 - in trunk: db/mssql src/com/resolutions/ils/data webapp

scribe at crosswire.org scribe at crosswire.org
Mon May 16 09:08:45 MST 2016


Author: scribe
Date: 2016-05-16 09:08:45 -0700 (Mon, 16 May 2016)
New Revision: 1459

Modified:
   trunk/db/mssql/ilsdb.sql
   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/admin_coursenew.jsp
   trunk/webapp/admin_curricnew.jsp
Log:
First cut of auto assign recurrent curriculum training
First cut of support for curriculum in recurrent training report


Modified: trunk/db/mssql/ilsdb.sql
===================================================================
--- trunk/db/mssql/ilsdb.sql	2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/db/mssql/ilsdb.sql	2016-05-16 16:08:45 UTC (rev 1459)
@@ -42,7 +42,7 @@
 
 CREATE VIEW USERCOURSEASSIGNMENTS WITH SCHEMABINDING AS SELECT DISTINCT T2.COMPANYID, T2.USERPRID, COALESCE (T9.COURSID, T1.COURSID) AS COURSID FROM   dbo.USERGROUP AS T2 INNER JOIN dbo.COURSEGROUP AS T3 ON T3.COMPANYID = T2.COMPANYID AND T3.ILSGROUPID = T2.ILSGROUPID INNER JOIN dbo.COURSE AS T1 ON T1.COMPANYID = T3.COMPANYID AND T1.COURSID = T3.COURSID LEFT OUTER JOIN dbo.CURRICULUMCOURSE AS T5 ON T5.COMPANYID = T1.COMPANYID AND T5.CURRICULUMID = T1.COURSID AND T1.COURSISCURRICULUM = 'T' LEFT OUTER JOIN dbo.COURSE AS T9 ON T5.COMPANYID IS NOT NULL AND T9.COMPANYID = T5.COMPANYID AND T9.COURSID = T5.COURSID WHERE (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NOT NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID) OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID);
 
-CREATE VIEW USERCOURSEASSIGNMENTSWITHGROUPS WITH SCHEMABINDING AS SELECT DISTINCT T2.COMPANYID, T2.USERPRID, COALESCE (T9.COURSID, T1.COURSID) AS COURSID, G.ILSGROUPID, G.GROUPTYPEID FROM   dbo.USERGROUP AS T2 INNER JOIN dbo.COURSEGROUP AS T3 ON T3.COMPANYID = T2.COMPANYID AND T3.ILSGROUPID = T2.ILSGROUPID INNER JOIN dbo.COURSE AS T1 ON T1.COMPANYID = T3.COMPANYID AND T1.COURSID = T3.COURSID LEFT OUTER JOIN dbo.CURRICULUMCOURSE AS T5 ON T5.COMPANYID = T1.COMPANYID AND T5.CURRICULUMID = T1.COURSID AND T1.COURSISCURRICULUM = 'T' LEFT OUTER JOIN dbo.COURSE AS T9 ON T5.COMPANYID IS NOT NULL AND T9.COMPANYID = T5.COMPANYID AND T9.COURSID = T5.COURSID LEFT OUTER JOIN dbo.ILSGROUP G ON G.ILSGROUPID=T2.ILSGROUPID WHERE (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NOT NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID) OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID);
+CREATE VIEW USERCOURSEASSIGNMENTSWITHGROUPS WITH SCHEMABINDING AS SELECT DISTINCT T2.COMPANYID, T2.USERPRID, COALESCE (T9.COURSID, T1.COURSID) AS COURSID, G.ILSGROUPID, G.GROUPTYPEID FROM   dbo.USERGROUP AS T2 INNER JOIN dbo.COURSEGROUP AS T3 ON T3.COMPANYID = T2.COMPANYID AND T3.ILSGROUPID = T2.ILSGROUPID INNER JOIN dbo.COURSE AS T1 ON T1.COMPANYID = T3.COMPANYID AND T1.COURSID = T3.COURSID LEFT OUTER JOIN dbo.CURRICULUMCOURSE AS T5 ON T5.COMPANYID = T1.COMPANYID AND T5.CURRICULUMID = T1.COURSID AND T1.COURSISCURRICULUM = 'T' LEFT OUTER JOIN dbo.COURSE AS T9 ON T5.COMPANYID IS NOT NULL AND T9.COMPANYID = T5.COMPANYID AND T9.COURSID = T5.COURSID LEFT OUTER JOIN dbo.ILSGROUP G ON G.ILSGROUPID=T2.ILSGROUPID WHERE (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID) OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID);
 
 CREATE VIEW COURSEATTEMPTSTATUS WITH SCHEMABINDING AS SELECT CA.COMPANYID, CA.USERPRID, CA.COURSID, CA.COURSATTID, CA.CACOMPLETEDATE, CA.CAEXPIREDON,  COALESCE(CA.CASTATUSID, 0) AS CASTATUSID, CASE COALESCE(CA.CASTATUSID, 0) WHEN 3 THEN 1 WHEN 0 THEN 1 ELSE 0 END AS CRS_OPEN, CASE COALESCE(CA.CASTATUSID, 0) WHEN 1 THEN 1 ELSE 0 END               AS CRS_COMPLETED, CASE COALESCE(CA.CASTATUSID, 0) WHEN 2 THEN 1 ELSE 0 END               AS CRS_FAILED FROM DBO.COURSEATTEMPT CA;
 

Modified: trunk/src/com/resolutions/ils/data/Course.java
===================================================================
--- trunk/src/com/resolutions/ils/data/Course.java	2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/src/com/resolutions/ils/data/Course.java	2016-05-16 16:08:45 UTC (rev 1459)
@@ -91,10 +91,14 @@
 
 
     static public Course getCourse(ILSSession session, int courseID) {
+	return getCourse(session.getCompanyID(), courseID);
+    }
+
+    static public Course getCourse(int companyID, int courseID) {
         Course query = new Course();
         String sql = LOOKUP + " AND COURSID={COURSID}";
         query.setCourseID(courseID);
-        query.setCompanyID(session.getCompanyID());
+        query.setCompanyID(companyID);
         Vector rows = query.getDataSet(sql);
         return (rows.size() > 0) ? (Course) rows.get(0) : null;
     }

Modified: trunk/src/com/resolutions/ils/data/CourseAttempt.java
===================================================================
--- trunk/src/com/resolutions/ils/data/CourseAttempt.java	2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/src/com/resolutions/ils/data/CourseAttempt.java	2016-05-16 16:08:45 UTC (rev 1459)
@@ -77,7 +77,7 @@
     static String LOOKUP = "SELECT * FROM COURSEATTEMPT WHERE COMPANYID={COMPANYID}";
     static String DELETE = "DELETE FROM COURSEATTEMPT WHERE COURSATTID={COURSATTID} AND COMPANYID={COMPANYID}";
 
-    static String LOOKUPCOURSECOMPLETE = "SELECT CA.COURSATTID, UP.USERPRID, UP.USERPRNUM, UP.USERPREMAIL, CC.COURSNAME FROM COURSEATTEMPT CA" +
+    static String LOOKUPCOURSECOMPLETE = "SELECT CA.COMPANYID, CA.COURSATTID, UP.USERPRID, UP.USERPRNUM, UP.USERPREMAIL, CC.COURSNAME, CC.COURSISCURRICULUM FROM COURSEATTEMPT CA" +
     				" join USERPROFILE UP on UP.USERPRID = CA.USERPRID" +
     				" join COURSE CC on CC.COURSID=CA.COURSID";
     
@@ -119,9 +119,12 @@
         return getUserCourseAttempts(session, userID, courseID, true);
     }
 
-    static public Vector getUserCourseAttempts(ILSSession session, int userID, int courseID, boolean includeExpireds) {
+	static public Vector getUserCourseAttempts(ILSSession session, int userID, int courseID, boolean includeExpireds) {
+		return getUserCourseAttempts(session.getCompanyID(), userID, courseID, includeExpireds);
+	}
+    static public Vector getUserCourseAttempts(int companyID, int userID, int courseID, boolean includeExpireds) {
         CourseAttempt query = new CourseAttempt();
-        query.setCompanyID(session.getCompanyID());
+        query.setCompanyID(companyID);
         query.setCourseAttemptUserProfileID(userID);
         query.setCourseAttemptCourseID(courseID);
         return query.getDataSet(includeExpireds?LOOKUPALLUSERCOURSEATTEMPTS:LOOKUPUSERCOURSEATTEMPTS);
@@ -162,22 +165,34 @@
 	query.setCompanyID(companyID);
 	Vector results = null;
 	int count = 0;
+	Course course = null;
 	if (courseID > 0) {
+		course = Course.getCourse(companyID, courseID);
 		query.setCourseAttemptCourseID(courseID);
-		if (sendEmail) results = query.getDataSet(LOOKUPCOURSECOMPLETEEXPCOURSE + " AND CC.COURSISACTIVE='T'");
+		results = query.getDataSet(LOOKUPCOURSECOMPLETEEXPCOURSE + " AND CC.COURSISACTIVE='T'");
 		count = query.executeSQL(REVOKEEXPCOURSE);
 	}
 	else {
-		if (sendEmail) results = query.getDataSet(LOOKUPCOURSECOMPLETEEXP + " AND CC.COURSISACTIVE='T'");
+		results = query.getDataSet(LOOKUPCOURSECOMPLETEEXP + " AND CC.COURSISACTIVE='T'");
 		count = query.executeSQL(REVOKEEXP);
 	}
+	// if we're a course we can optimize; if we're a curriculum we have to do this the long way
+	if ((course == null || course.isCourseCurriculum()) && results != null) {
+		for (Object o: results) {
+			CourseAttempt ca = (CourseAttempt)o;
+			if ("T".equals(ca.getValue("COURSISCURRICULUM"))) {
+				// don't send emails and be sure to expire all children (null, true)
+				ca.assignRetake("Recurrent Training Assigned", null, true);
+			}
+		}
+	}
 
 
 System.out.println("**** revokeAllExpired: emailSet.size(): " + (results != null ? results.size() : 0));
 System.out.println("**** revokeAllExpired: revoke.size(): " + count);
 
 	// Send Emails
-	if (results != null) {
+	if (sendEmail && results != null) {
 		String subjectTemplate = sysConfig.getProperty("EmailTemplate5Subject");
 		String bodyTemplate    = sysConfig.getProperty("EmailTemplate5Body");
 		String from            = sysConfig.getProperty("SendMailFrom");
@@ -988,34 +1003,40 @@
 		assignRetake(reason, ilsSession, httpSession, false);
 	}
 	public void assignRetake(String reason, ILSSession ilsSession, HttpSession httpSession, boolean allCurriculumCourses) {
+		assignRetake(reason, httpSession, allCurriculumCourses);
+	}
+	public void assignRetake(String reason, HttpSession httpSession, boolean allCurriculumCourses) {
 		CourseAttempt ca = (CourseAttempt)this.clone();
 		setCourseAttemptExpired(reason);
 		save(ca);
-		Course course = Course.getCourse(ilsSession, ca.getCourseAttemptCourseID());
-		Properties sysConfig = Utils.getSysConfig(httpSession.getServletContext(), getCompanyID());
-		boolean emailNotice = "on".equals(sysConfig.getProperty("EmailEnableAssignedRetakes", "off"));
-		if (emailNotice) {
-			try {
-				UserProfile up = UserProfile.getUserProfile(ilsSession, ca.getCourseAttemptUserProfileID());
-				String subject = "Assigned Retake Notice";
-				String body =  "You have been reassigned to take " + course.getCourseName() + " training.  ";
-				body += "Please Log on to " + sysConfig.getProperty("SiteURL", "your training site")+" to complete your training.\n\n";
-				body += "Login Account: " + up.getUserProfileNum() + "\n";
-				body += "Course Name  : " + course.getCourseName() + "\n\n";
-				body += sysConfig.getProperty("SendMailSig", "");
-				SMTPMail.sendEmail(httpSession, sysConfig.getProperty("SendMailFrom", ilsSession.getCurrentCompany().getCompanyAdminContactEMail()), up.getUserProfileEMail(), subject, body, true);
+		Course course = Course.getCourse(getCompanyID(), ca.getCourseAttemptCourseID());
+		if (httpSession != null) {
+			Properties sysConfig = Utils.getSysConfig(httpSession.getServletContext(), getCompanyID());
+			boolean emailNotice = "on".equals(sysConfig.getProperty("EmailEnableAssignedRetakes", "off"));
+			if (emailNotice) {
+				try {
+					Company company = Company.getCompany(getCompanyID());
+					UserProfile up = UserProfile.getUserProfile(getCompanyID(), ca.getCourseAttemptUserProfileID());
+					String subject = "Assigned Retake Notice";
+					String body =  "You have been reassigned to take " + course.getCourseName() + " training.  ";
+					body += "Please Log on to " + sysConfig.getProperty("SiteURL", "your training site")+" to complete your training.\n\n";
+					body += "Login Account: " + up.getUserProfileNum() + "\n";
+					body += "Course Name  : " + course.getCourseName() + "\n\n";
+					body += sysConfig.getProperty("SendMailSig", "");
+					SMTPMail.sendEmail(httpSession, sysConfig.getProperty("SendMailFrom", company.getCompanyAdminContactEMail()), up.getUserProfileEMail(), subject, body, true);
+				}
+				catch (Exception e) {
+					e.printStackTrace();
+				}
 			}
-			catch (Exception e) {
-				e.printStackTrace();
-			}
 		}
 		if (allCurriculumCourses && course.isCourseCurriculum()) {
 			for (Course curCourse : course.getCurriculumCourses()) {
-				Vector<CourseAttempt> cas = CourseAttempt.getUserCourseAttempts(ilsSession, getCourseAttemptUserProfileID(), curCourse.getCourseID(), false);
+				Vector<CourseAttempt> cas = CourseAttempt.getUserCourseAttempts(getCompanyID(), getCourseAttemptUserProfileID(), curCourse.getCourseID(), false);
 				if (cas != null) {
 					for (CourseAttempt ca2 : cas) {
 						if (ca2.getCourseAttemptStatusID() == STATUS_PASSED && !ca2.isCourseAttemptExpired()) {
-							ca2.assignRetake(reason, ilsSession, httpSession, allCurriculumCourses);
+							ca2.assignRetake(reason, httpSession, allCurriculumCourses);
 						}
 					}
 				}

Modified: trunk/src/com/resolutions/ils/data/UserProfile.java
===================================================================
--- trunk/src/com/resolutions/ils/data/UserProfile.java	2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/src/com/resolutions/ils/data/UserProfile.java	2016-05-16 16:08:45 UTC (rev 1459)
@@ -249,18 +249,19 @@
     }
 
 
-    static public UserProfile getUserProfile(ILSSession session,
-                                             int userProfileID) {
+	static public UserProfile getUserProfile(ILSSession session, int userProfileID) {
+		return getUserProfile(session.getCompanyID(), userProfileID);
+	}
+    static public UserProfile getUserProfile(int companyID, int userProfileID) {
         UserProfile retVal = new UserProfile();
         String sql = LOOKUP + " AND USERPRID={USERPRID}";
         retVal.setUserProfileID(userProfileID);
-        retVal.setCompanyID(session.getCompanyID());
+        retVal.setCompanyID(companyID);
         Vector<UserProfile> rows = retVal.getDataSet(sql);
         return (rows.size() > 0) ? rows.get(0) : null;
     }
 
-    static public UserProfile getUserProfile(ILSSession session,
-                                             String userProfileNum) {
+    static public UserProfile getUserProfile(ILSSession session, String userProfileNum) {
         UserProfile retVal = new UserProfile();
         String sql = LOOKUP + " AND USERPRNUM={USERPRNUM}";
         retVal.setUserProfileNum(userProfileNum);
@@ -269,8 +270,7 @@
         return (rows.size() > 0) ? rows.get(0) : null;
     }
 
-    static public UserProfile getUserProfileByUserData(ILSSession session,
-                                             String userData) {
+    static public UserProfile getUserProfileByUserData(ILSSession session, String userData) {
         UserProfile retVal = new UserProfile();
         String sql = LOOKUP + " AND USERPROFILE.USERDATA={USERDATA}";
         retVal.setValue("USERDATA", userData);

Modified: trunk/webapp/admin_coursenew.jsp
===================================================================
--- trunk/webapp/admin_coursenew.jsp	2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/webapp/admin_coursenew.jsp	2016-05-16 16:08:45 UTC (rev 1459)
@@ -143,12 +143,12 @@
               else if ("pass".equals(fi.getFieldName())) {
                   if (fi.getString() != null) try { current.setCoursePass(Integer.parseInt(fi.getString())); } catch (Exception e) { logger.error(e); }
                 }
+              else if ("certgen".equals(fi.getFieldName())) {
+                  if (fi.getString() != null) try { current.setCourseCertificateGenerator(fi.getString()); } 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); }
                 }
-              else if ("certgen".equals(fi.getFieldName())) {
-                  if (fi.getString() != null) try { current.setCourseCertificateGenerator(fi.getString()); } catch (Exception e) { logger.error(e); }
-                }
               else if ("passreassign".equals(fi.getFieldName())) {
                   if (fi.getString() != null) try { current.setCourseReassignBeforeDays(Integer.parseInt(fi.getString())); } catch (Exception e) { logger.error(e); }
                 }

Modified: trunk/webapp/admin_curricnew.jsp
===================================================================
--- trunk/webapp/admin_curricnew.jsp	2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/webapp/admin_curricnew.jsp	2016-05-16 16:08:45 UTC (rev 1459)
@@ -55,6 +55,17 @@
     current.setCourseTypeID(2);
     current.setCourseURL("");
   }
+    if ("revokeExpCourses".equals(action)) {
+    	if (current.getCourseID() > 0) {
+		    boolean emailNotice = "on".equals(Utils.getSysConfig(session).getProperty("EmailEnableAssignedRetakes", "off"));
+	    	int count = CourseAttempt.revokeAllExpired(ilsSession.getCompanyID(), current.getCourseID(), session.getServletContext(), emailNotice);
+   		 	statusMsg = "Assigned " + Integer.toString(count) + " Recurrent Trainings for Course " + current.getCourseNum() + ".";
+            eventsLogger.info(statusMsg + " by user: " + ilsSession.getCurrentUserProfile().getUserProfileNum());
+    	}
+    	else {
+    		validError = "You must be editing a saved curriculum with assigned users to perform this action.";
+    	}
+    }
     if ("Save".equals(action)) {
         Course orig = (Course)current.clone();
         String val = request.getParameter("num");
@@ -65,6 +76,10 @@
         if (val != null) current.setCourseDesc(val);
         val = request.getParameter("certgen");
   	if (val != null) current.setCourseCertificateGenerator(val);
+        val = request.getParameter("passexp");
+	if (val != null) try { current.setCoursePassExpireDays(Integer.parseInt(val)); } catch (Exception e) { logger.error(e); }
+        val = request.getParameter("passreassign");
+	if (val != null) try { current.setCourseReassignBeforeDays(Integer.parseInt(val)); } catch (Exception e) { logger.error(e); }
 try {
         val = request.getParameter("statusID");
         if (val != null) current.setCourseActive(Integer.parseInt(val)>0);
@@ -133,6 +148,12 @@
   <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?")) {
+        document.getElementById("sysMaintAction").value = 'revokeExpCourses';
+	    document.sysmaint.submit();
+    }
+}
 function rD(val) {
     document.coursesave.activeDate.value = val;
 }
@@ -197,13 +218,25 @@
                               <td><input type="checkbox" <%=(current.isCourseCurriculumCertificate())?"checked=\"checked\"":""%> name="curricCert" value="true" /></td>
                             </tr>
 			      <tr>
-				<td class="formHeadings">Course Certificate Generator </td>
+				<td class="formHeadings">Curriculum Certificate Generator </td>
 				<td><input name="certgen" style="width:100%" type="text" placeholder="default or certificate.jsp or curriculum_certificate.jsp" value="<%=current.getCourseCertificateGenerator()%>" size="40"/></td>
 			      </tr>
                             <tr>
                               <td class="formHeadings">Enable Curriculum Part Retake :</td>
                               <td><input type="checkbox" <%=(current.isCourseAllowCurriculumPartRetake())?"checked=\"checked\"":""%> name="curricPartRetake" value="true" /></td>
                             </tr>
+                      <tr>
+                        <td class="formHeadings">Curriculum Certificate Expires After </td>
+                        <td><input name="passexp" type="text" value="<%=current.getCoursePassExpireDays()%>" size="6"/> Days</td>
+                      </tr>
+                      <tr>
+                        <td class="formHeadings">Reassign As Recurrent Training </td>
+                        <td><input name="passreassign" type="text" value="<%=current.getCourseReassignBeforeDays()%>" size="6"/> Days Before Expiration</td>
+                      </tr>
+                       <tr>
+                        <td class="formHeadings">Reassign Now As Recurrent Training To All Applicable Users</td>
+                        <td><a href="#" onClick="confirmRevoke(); return false;"><img border="0" src="images/run_btn.gif" width="51" height="24" alt="Perform Action"/></a></td>
+                      </tr>
                             <tr>
                               <td>&nbsp;</td>
                               <td>&nbsp;</td>
@@ -385,6 +418,10 @@
   }
 %>
 </div>
+	<form style="display:none;" name="sysmaint" method="post" action="admin_curricnew.jsp">
+		<input type="hidden" id="sysMaintAction" name="action" value=""/>
+		<input type="hidden" name="courseid" value="<%= current.getCourseID() %>"/>
+	</form>
 <%@ include file="footer.jsp" %>
 </div>
 




More information about the Ils-source mailing list