Commit d704e5ff by Nilu

C002, Auto save.

parent 9ed66a9d
......@@ -59,11 +59,19 @@ public class CompleteApplicationFP extends SaveFP
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = ObjectTransaction.getTransaction();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
if(!jobApplication.cultureCompleted())
{
BusinessObjectParser.assertFieldCondition(jobApplication.getCandidate().getCultureCriteriaAnswersCount()>0, jobApplication, jobApplication.FIELD_ObjectID, "completeCulture", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(jobApplication.getCandidate().getCultureCriteriaAnswersCount()>0, jobApplication, JobApplication.FIELD_ObjectID, "completeCulture", exceptions, true, request);
}
if(jobApplication.isIncludeAssessmentCriteria())
{
JobApplication application = jobApplication.getInTransaction(objTran);
BusinessObjectParser.assertFieldCondition(jobApplication.getJob().getAssessmentCriteriasCount() == application.getAssessmentCriteriaAnswersCount(), jobApplication, JobApplication.FIELD_ObjectID, "completeAssessment", exceptions, true, request);
}
super.validate(process, submission, exceptions, params);
......
package performa.form;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.ProcessRedirectResult;
import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import oneit.utils.Debug;
import oneit.utils.MultiException;
import performa.orm.JobApplication;
public class ValidateApplicationFP extends SaveFP
{
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{
return new ProcessRedirectResult((String) submission.getRequest().getAttribute("nextPage"), new String[0]);
}
@Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
super.validate(process, submission, exceptions, params);
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = ObjectTransaction.getTransaction();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
boolean fromRequirements = request.getAttribute("fromRequirements") != null ? (boolean) request.getAttribute("fromRequirements"): false;
Debug.assertion(jobApplication != null, "No jobApplication found . Call from " + getClass().getName());
if(jobApplication.isIncludeAssessmentCriteria() && fromRequirements)
{
JobApplication application = jobApplication.getInTransaction(objTran);
BusinessObjectParser.assertFieldCondition(jobApplication.getJob().getAssessmentCriteriasCount() == application.getAssessmentCriteriaAnswersCount(), jobApplication, JobApplication.FIELD_ObjectID, "completeAssessment", exceptions, true, request);
}
}
}
\ No newline at end of file
......@@ -187,6 +187,14 @@ public class JobApplication extends BaseJobApplication
}
public AssessmentCriteriaAnswer getAssessmentCriteriaAnswer(AssessmentCriteria criteria)
{
Filter<AssessmentCriteriaAnswer> filter = AssessmentCriteriaAnswer.SearchByAll().andAssessmentCriteria(new EqualsFilter<>(criteria));
return pipelineJobApplication().toAssessmentCriteriaAnswers(filter).val();
}
public boolean selectionCompleted() //req
{
if(getJob()!=null && getJob().getIncludeAssessmentCriteria()!=Boolean.TRUE)
......
......@@ -339,7 +339,7 @@ public class Utils
{
SecUser secUser = SecUser.searchNAME(objTran, email.toLowerCase());
if(isCandidate)
if(isCandidate && secUser != null)
{
Candidate candidate = secUser.getExtension(Candidate.REFERENCE_Candidate);
......
......@@ -7,6 +7,7 @@
<ApplicantAccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="ApplicantAccountCreatedMail"/>
</FORM>
<FORM name="*.completeApplication" factory="Participant" class="performa.form.CompleteApplicationFP"/>
<FORM name="*.validateApplication" factory="Participant" class="performa.form.ValidateApplicationFP"/>
<FORM name="*.saveAndExitExperienece" factory="Participant" class="performa.form.SaveAndExitExperienceFP"/>
<FORM name="*.saveAndExitCulture" factory="Participant" class="performa.form.SaveAndExitCultureFP"/>
<FORM name="*.saveAndExitWorkStyle" factory="Participant" class="performa.form.SaveAndExitWorkStypeFP"/>
......@@ -43,4 +44,8 @@
<NODE name="save_job_match_answers_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
<NODE name="save_assessment_criteria_answers_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
</OBJECTS>
......@@ -223,9 +223,11 @@
else
{
%>
<oneit:button value="<%= btnText %>" name="gotoPage" skin="link" cssClass="box-btn"
<oneit:button value="<%= btnText %>" name="save" skin="link" cssClass="box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.mapEntry("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.toMap() %>"/>
<%
}
......
......@@ -17,6 +17,8 @@
Boolean isSelectionComplete = jobApplication.selectionCompleted(); //REQ
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
boolean fromRequirements = pageNumber == "1";
%>
<oneit:dynIncluded>
......@@ -40,21 +42,20 @@
}
%>
<li class="<%= pageNumber == "2" ? "active" : isCultureComplete ? "complate" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link" disabled="<%= isCultureComplete ? "true" : "false"%>"
<oneit:button value=" " name="validateApplication" skin="link" disabled="<%= isCultureComplete ? "true" : "false"%>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("fromRequirements", fromRequirements)
.toMap() %>">
<span><%= isCultureComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "2" : "1")%></span>
<div class="mobile-hide">Workplace Preferences</div>
</oneit:button>
</li>
<li class="<%= pageNumber == "3" ? "active" : isAssesmentComplete ? "complate" : ""%>">
<oneit:button value=" " name="save" skin="link" disabled="<%= isAssesmentComplete ? "true" : "false"%>"
<oneit:button value=" " name="validateApplication" skin="link" disabled="<%= isAssesmentComplete ? "true" : "false"%>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.mapEntry("fromRequirements", fromRequirements)
.toMap() %>">
<span><%= isAssesmentComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "3" : "2")%></span>
<div class="mobile-hide">Your Work Style</div>
......
<%@ page extends="oneit.servlets.process.AJAXProcessJSP" %>
<%@ page import="oneit.servlets.jsp.*,oneit.servlets.orm.*,oneit.servlets.objstore.*,oneit.servlets.jsp.tabs.*,oneit.logging.*,oneit.sql.*,oneit.objstore.services.*" %>
<%@ page import="performa.orm.*,performa.orm.types.*,performa.utils.*, java.util.*, oneit.objstore.*, oneit.servlets.process.*, oneit.utils.*" %>
<%@ page import="oneit.utils.filter.Filter, oneit.objstore.rdbms.filters.EqualsFilter" %>
<%@ include file="../../../setuprequest.jsp" %>
<%! protected String getName (ServletConfig config) { return "save_assessment_criteria_answers_jsp"; } %>
<oneit:form method="POST">
<%
ORMProcessState process = (ORMProcessState)ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = ObjectTransaction.getTransaction();
Long criteriaID = Long.valueOf(request.getParameter ("criteriaID"));
boolean answerOption = Boolean.valueOf(request.getParameter ("answerOption"));
String note = request.getParameter ("note");
Long jobAppId = (Long) process.getAttribute("JobApplicationID");
JobApplication jobApplication = JobApplication.getJobApplicationByID(objTran, jobAppId);
jobApplication = (JobApplication) jobApplication.getInTransaction (objTran);
Debug.assertion (jobApplication.getObjectWriteability() == FieldWriteability.TRUE, "Must be able to edit");
AssessmentCriteria criteria = AssessmentCriteria.getAssessmentCriteriaByID(objTran, criteriaID);
AssessmentCriteriaAnswer answer = jobApplication.getAssessmentCriteriaAnswer(criteria);
if(answer == null)
{
answer = AssessmentCriteriaAnswer.createAssessmentCriteriaAnswer(objTran).getInTransaction (objTran);
jobApplication.addToAssessmentCriteriaAnswers(answer);
answer.setAssessmentCriteria(criteria);
}
answer.setAnswer(answerOption);
answer.setNotes(note);
%>
</oneit:form>
\ No newline at end of file
#completeCulture = Please complete the culture assessment.
#completeCulture = Please complete workplace preferences.
#completeAssessment = Please complete your experience.
#emailExists = An account already exists with this email address.
#emailSent = A verification email has been sent to you. Please check your email :).
#alreadyApplied = You have already applied for this job.
......@@ -5,18 +5,35 @@
<oneit:dynIncluded>
<%
ObjectTransaction objTran = process.getTransaction ();
ObjectTransaction objTran = ObjectTransaction.getTransaction();
String nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
Long jobAppId = process.getAttribute("JobApplicationID") != null ?
(Long) process.getAttribute("JobApplicationID") :
((JobApplication) process.getAttribute("JobApplication")).getID().longValue();
JobApplication jobApplication = null;
if(jobAppId != null)
{
jobApplication = JobApplication.getJobApplicationByID(objTran, jobAppId);
}
if(jobApplication == null)
{
jobApplication = (JobApplication) process.getAttribute("JobApplication");
}
Debug.assertion(jobApplication != null, "Job Application cannot be null in applicant portal - selection criteria ");
if(process.getAttribute("JobApplicationID") == null)
{
process.setAttribute("JobApplicationID" , jobApplication.getID().longValue());
}
Job job = jobApplication.getJob();
String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page");
exitPage = exitPage + "&id=" + job.getID() + "&key=" + job.getRandomKey();
// Boolean alreadyCompletedCulture = (Boolean) process.getAttribute("AlreadyCompletedCulture");
// Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
boolean toRedirect = jobApplication.createAssessmentCriteriaObjects();
if(isCultureComplete && isAssesmentComplete)
{
......@@ -26,13 +43,6 @@
{
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
}
if (toRedirect)
{
%>
<%@ include file="/saferedirect.jsp" %>
<%
}
%>
<script type="text/javascript">
$(document).ready(function()
......@@ -40,7 +50,42 @@
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$('.first-element-focus').focus();
$('.timer').countimer({
displayMode: 1,
initMinutes: 0,
minuteIndicator: ' min ago',
leadingZeros: 0
});
});
function saveAnswer(criteriaID, answerOption, note)
{
ajaxProcessAddJQ ("<%= request.getContextPath() %>/extensions/applicantportal/inc/save_assessment_criteria_answers.jsp", 'form' ,
{criteriaID : criteriaID, answerOption: answerOption, note: note},
function () {},
function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 0) {
log("Empty Response. Status : " + jqXHR.status);
} else {
window.alert("Error processing request:" + errorThrown);
}
},
"POST");
if(answerOption === true)
{
$('#' + criteriaID).removeClass("hide");
$('#' + criteriaID).addClass("show");
}
else
{
$('#' + criteriaID).removeClass("show");
$('#' + criteriaID).addClass("hide");
}
$('.timer').countimer('start');
}
$(document.body).addClass('bg-color');
</script>
......@@ -86,57 +131,58 @@
</p>
</div>
<%
FormTag applicationForm = FormTag.getActiveFormTag(request);
FormBuilder formBuilder = applicationForm.getFormBuilder();
boolean first = true;
for(CriteriaType ct: CriteriaType.getCriteriaTypeArray())
{
Collection<AssessmentCriteriaAnswer> answerList = jobApplication.getACAnswersByType(ct);
Collection<AssessmentCriteria> criteriaList = jobApplication.getJob().getAssessmentCriteraByType(ct);
if(!answerList.isEmpty())
if(!criteriaList.isEmpty())
{
%>
<div class="selection-br-line"></div>
<div class="main-sc-section">
<div class="selection-form-title"><oneit:toString value="<%= ct %>" mode="EscapeHTML"/></div>
<%
int total = answerList.size();
int total = criteriaList.size();
int answerNo = 1;
for(AssessmentCriteriaAnswer answer: answerList)
for(AssessmentCriteria criteria : criteriaList)
{
String trueID = criteria.getObjectID() + "_Y";
String falseID = criteria.getObjectID() + "_N";
String trueSelected = "";
String falseSelected = "";
AssessmentCriteriaAnswer answer = jobApplication.getAssessmentCriteriaAnswer(criteria);
if(answer != null)
{
String optionKey = WebUtils.getInputKey(request, answer, AssessmentCriteriaAnswer.FIELD_Answer);
String formValue = formBuilder.fieldValue (optionKey, answer.getAnswer() == null ? "" : String.valueOf(answer.getAnswer()));
String trueID = answer.getObjectID() + "_Y";
String falseID = answer.getObjectID() + "_N";
String trueSelected = CollectionUtils.equals("true", formValue) ? "checked" : "";
String falseSelected = CollectionUtils.equals("false", formValue) ? "checked" : "";
trueSelected = CollectionUtils.equals(answer.getAnswer(), Boolean.TRUE) ? "checked" : "";
falseSelected = CollectionUtils.equals(answer.getAnswer(), Boolean.FALSE) ? "checked" : "";
}
%>
<div class="form-group-new question-y-n">
<label class="second-label">
<oneit:toString value="<%= answer.getAssessmentCriteria() %>" mode="EscapeHTML"/>
<oneit:toString value="<%= criteria %>" mode="EscapeHTML"/>
</label>
<div class="radio radio-primary second-radio-primary">
<input type="radio" name="<%= optionKey %>" value="true" id="<%= trueID%>" <%= trueSelected %> class="<%= first ? "first-element-focus" : ""%>"/>
<label for="<%= trueID%>">
<input type="radio" name="<%= criteria.getObjectID() %>" value="true" id="<%= trueID%>" <%= trueSelected %> class="<%= first ? "first-element-focus" : ""%>" onchange="saveAnswer(<%= criteria.getObjectID() %>, true)"/>
<label for="<%= trueID %>">
Yes
</label>
</div>
<div class="radio radio-primary second-radio-primary">
<input type="radio" name="<%= optionKey %>" value="false" id="<%= falseID%>" <%= falseSelected %>/>
<label for="<%= falseID%>">
<input type="radio" name="<%= criteria.getObjectID() %>" value="false" id="<%= falseID%>" <%= falseSelected %> onchange="saveAnswer(<%= criteria.getObjectID() %>, false)"/>
<label for="<%= falseID %>">
No
</label>
</div>
</div>
<oneit:recalcClass htmlTag="div" classScript="answer.getAnswer() != null && answer.getAnswer() ? 'show': 'hide'" answer="<%= answer %>">
<div class="textarea-box">
<oneit:ormtextarea obj="<%= answer %>" attributeName="Notes" cssClass="form-control second-style"
placeholder="Please add any notes to support your answer"/>
<div id="<%= criteria.getObjectID() %>" class="<%= (answer != null && answer.getAnswer() != null && answer.getAnswer() ? "show": "hide") + " textarea-box" %>">
<textarea name="<%= criteria.getObjectID() + "_notes"%>" placeholder="Please add any notes to support your answer"
class="form-control second-style" onblur="saveAnswer(<%= criteria.getObjectID() %>, true, this.value)"><%= answer != null && answer.getNotes() != null ? answer.getNotes() : ""%></textarea>
</div>
</oneit:recalcClass>
<%
first = false;
......@@ -155,14 +201,14 @@
}
}
%>
<div class="auto-save">
Autosaved <span class="timer"></span>
</div>
<div class="selection-br-line"></div>
<div class="main-sc-section-bottom btn-remove-padd">
<div class="section-btn text-center">
<oneit:button value="Save and exit" name="saveAndExitExperienece" cssClass="box-btn-gray half-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", exitPage)
.mapEntry ("JobApplication", jobApplication)
.mapEntry(UpdateMappedObjFP.FAIL_VALIDATION_ERRORS, Boolean.FALSE)
.toMap() %>"/>
<a href="<%= exitPage%>" class="btn box-btn-gray">Save and exit</a>
<%
if(isCultureComplete && isAssesmentComplete)
{
......@@ -179,12 +225,14 @@
{
%>
<oneit:button value="Proceed to next step" name="gotoPage" cssClass="box-btn m-hide"
<oneit:button value="Proceed to next step" name="validateApplication" cssClass="box-btn m-hide"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromRequirements", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/>
<oneit:button value="Proceed" name="gotoPage" cssClass="box-btn show-mobile"
<oneit:button value="Proceed" name="validateApplication" cssClass="box-btn show-mobile"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromRequirements", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/>
<%
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment