Commit 4d8872f4 by nilu

S43014153 # Matchd / Talentology - No Plan [Enhancement] #Including diversity…

S43014153 # Matchd / Talentology - No Plan [Enhancement] #Including diversity questions in applicant process
parent bad2fe18
......@@ -39,16 +39,28 @@ public class SaveDiversityAnswersFP extends SaveFP
{
CandidateDiversityAnswer diversityAnswer = candidate.getDiversityAnswerByQuestion(htQuestion.getQuestion());
if(htQuestion.getQuestion().getMultipleAnswers())
{
for(AnswerOption answer : diversityAnswer.getAnswersSet())
{
if(!answer.isTrue(answer.getIsSelected()))
{
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveDiversityAnswersFP deleting AnswerOption : ", answer );
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveDiversityAnswersFP for multiple answer questions deleting AnswerOption : ", answer );
answer.delete();
}
}
}
else
{
AnswerOption answerOption = AnswerOption.createAnswerOption(process.getTransaction());
diversityAnswer.addToAnswers(answerOption);
answerOption.setAnswer(diversityAnswer.getAnswerOption());
answerOption.setIsSelected(Boolean.TRUE);
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveDiversityAnswersFP created AnswerOption : ", answerOption);
}
}
return super.processForm(process, submission, params);
}
......@@ -64,10 +76,18 @@ public class SaveDiversityAnswersFP extends SaveFP
for(HTDiversityQuestion htQuestion : job.getDiversityQuestions())
{
CandidateDiversityAnswer diversityAnswer = candidate.getDiversityAnswerByQuestion(htQuestion.getQuestion());
if(htQuestion.getQuestion().getMultipleAnswers())
{
Filter<AnswerOption> filter = AnswerOption.SearchByAll().andIsSelected(new EqualsFilter<>(Boolean.TRUE));
BusinessObjectParser.assertFieldCondition(diversityAnswer.pipelineCandidateDiversityAnswer().toAnswers(filter).uniqueVals().size() >= 1 , diversityAnswer, CandidateDiversityAnswer.MULTIPLEREFERENCE_Answers, "atleastOneAnswer", exceptions, true, request);
}
else
{
BusinessObjectParser.assertFieldCondition(diversityAnswer.getAnswerOption() != null , diversityAnswer, CandidateDiversityAnswer.SINGLEREFERENCE_AnswerOption, "mandatory", exceptions, true, request);
}
}
super.validate(process, submission, exceptions, params);
}
......
......@@ -38,6 +38,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
// Static constants corresponding to field names
public static final String SINGLEREFERENCE_AnswerOption = "AnswerOption";
public static final String SINGLEREFERENCE_Question = "Question";
public static final String SINGLEREFERENCE_Candidate = "Candidate";
public static final String BACKREF_Candidate = "";
......@@ -55,6 +56,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
// Private attributes corresponding to single references
private SingleAssociation<CandidateDiversityAnswer, DiversityAnswer> _AnswerOption;
private SingleAssociation<CandidateDiversityAnswer, DiversityQuestion> _Question;
private SingleAssociation<CandidateDiversityAnswer, Candidate> _Candidate;
......@@ -82,6 +84,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
Map validatorMapping = ((Map)ConfigMgr.getConfigObject ("CONFIG.ORMVALIDATOR", "ValidatorMapping"));
setupAssocMetaData_AnswerOption();
setupAssocMetaData_Answers();
setupAssocMetaData_Question();
setupAssocMetaData_Candidate();
......@@ -100,6 +103,19 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
// Meta Info setup
private static void setupAssocMetaData_AnswerOption()
{
Map metaInfo = new HashMap ();
metaInfo.put ("name", "AnswerOption");
metaInfo.put ("type", "DiversityAnswer");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for CandidateDiversityAnswer.AnswerOption:", metaInfo);
ATTRIBUTES_METADATA_CandidateDiversityAnswer.put (SINGLEREFERENCE_AnswerOption, Collections.unmodifiableMap (metaInfo));
}
// Meta Info setup
private static void setupAssocMetaData_Answers()
{
Map metaInfo = new HashMap ();
......@@ -179,6 +195,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
super._initialiseAssociations ();
_AnswerOption = new SingleAssociation<CandidateDiversityAnswer, DiversityAnswer> (this, SINGLEREFERENCE_AnswerOption, null, DiversityAnswer.REFERENCE_DiversityAnswer, "");
_Question = new SingleAssociation<CandidateDiversityAnswer, DiversityQuestion> (this, SINGLEREFERENCE_Question, null, DiversityQuestion.REFERENCE_DiversityQuestion, "tl_candidate_diversity_answer");
_Candidate = new SingleAssociation<CandidateDiversityAnswer, Candidate> (this, SINGLEREFERENCE_Candidate, Candidate.MULTIPLEREFERENCE_DiversityAnswers, Candidate.REFERENCE_Candidate, "tl_candidate_diversity_answer");
_Answers = new MultipleAssociation<CandidateDiversityAnswer, AnswerOption> (this, MULTIPLEREFERENCE_Answers, AnswerOption.SINGLEREFERENCE_CandidateAnswer, AnswerOption.REFERENCE_AnswerOption);
......@@ -191,6 +208,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
super.initialiseReference ();
_AnswerOption = new SingleAssociation<CandidateDiversityAnswer, DiversityAnswer> (this, SINGLEREFERENCE_AnswerOption, null, DiversityAnswer.REFERENCE_DiversityAnswer, "");
_Question = new SingleAssociation<CandidateDiversityAnswer, DiversityQuestion> (this, SINGLEREFERENCE_Question, null, DiversityQuestion.REFERENCE_DiversityQuestion, "tl_candidate_diversity_answer");
_Candidate = new SingleAssociation<CandidateDiversityAnswer, Candidate> (this, SINGLEREFERENCE_Candidate, Candidate.MULTIPLEREFERENCE_DiversityAnswers, Candidate.REFERENCE_Candidate, "tl_candidate_diversity_answer");
_Answers = new MultipleAssociation<CandidateDiversityAnswer, AnswerOption> (this, MULTIPLEREFERENCE_Answers, AnswerOption.SINGLEREFERENCE_CandidateAnswer, AnswerOption.REFERENCE_AnswerOption);
......@@ -211,6 +229,8 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
List result = super.getSingleAssocs ();
result.add("AnswerOption");
result.add("Question");
result.add("Candidate");
......@@ -226,7 +246,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
throw new RuntimeException ("Game over == null!");
}
else if (assocName.equals (SINGLEREFERENCE_Question))
else if (assocName.equals (SINGLEREFERENCE_AnswerOption))
{
return _AnswerOption.getReferencedType ();
}else if (assocName.equals (SINGLEREFERENCE_Question))
{
return _Question.getReferencedType ();
}else if (assocName.equals (SINGLEREFERENCE_Candidate))
......@@ -266,7 +289,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
throw new RuntimeException ("Game over == null!");
}
else if (assocName.equals (SINGLEREFERENCE_Question))
else if (assocName.equals (SINGLEREFERENCE_AnswerOption))
{
return getAnswerOption ();
}else if (assocName.equals (SINGLEREFERENCE_Question))
{
return getQuestion ();
}else if (assocName.equals (SINGLEREFERENCE_Candidate))
......@@ -286,7 +312,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
throw new RuntimeException ("Game over == null!");
}
else if (assocName.equals (SINGLEREFERENCE_Question))
else if (assocName.equals (SINGLEREFERENCE_AnswerOption))
{
return getAnswerOption (getType);
}else if (assocName.equals (SINGLEREFERENCE_Question))
{
return getQuestion (getType);
}else if (assocName.equals (SINGLEREFERENCE_Candidate))
......@@ -306,7 +335,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
throw new RuntimeException ("Game over == null!");
}
else if (assocName.equals (SINGLEREFERENCE_Question))
else if (assocName.equals (SINGLEREFERENCE_AnswerOption))
{
return getAnswerOptionID ();
}else if (assocName.equals (SINGLEREFERENCE_Question))
{
return getQuestionID ();
}else if (assocName.equals (SINGLEREFERENCE_Candidate))
......@@ -326,7 +358,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
throw new RuntimeException ("Game over == null!");
}
else if (assocName.equals (SINGLEREFERENCE_Question))
else if (assocName.equals (SINGLEREFERENCE_AnswerOption))
{
setAnswerOption ((DiversityAnswer)(newValue));
}else if (assocName.equals (SINGLEREFERENCE_Question))
{
setQuestion ((DiversityQuestion)(newValue));
}else if (assocName.equals (SINGLEREFERENCE_Candidate))
......@@ -342,6 +377,100 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
/**
* Get the reference AnswerOption
*/
public DiversityAnswer getAnswerOption () throws StorageException
{
assertValid();
try
{
return (DiversityAnswer)(_AnswerOption.get ());
}
catch (ClassCastException e)
{
LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Cache collision in CandidateDiversityAnswer:", this.getObjectID (), ", was trying to get DiversityAnswer:", getAnswerOptionID ());
LogMgr.log (BUSINESS_OBJECTS, LogLevel.SYSTEMERROR2, "Instead I got:", _AnswerOption.get ().getClass ());
throw e;
}
}
/**
* Get the object id for the referenced object. Does not force a DB access.
*/
public DiversityAnswer getAnswerOption (Get getType) throws StorageException
{
assertValid();
return _AnswerOption.get(getType);
}
/**
* Get the object id for the referenced object. Does not force a DB access.
*/
public Long getAnswerOptionID ()
{
assertValid();
if (_AnswerOption == null)
{
return null;
}
else
{
return _AnswerOption.getID ();
}
}
/**
* Called prior to the assoc changing. Subclasses need not call super. If a field exception
* is thrown, the attribute change will fail. The new value is different to the old value.
*/
protected void preAnswerOptionChange (DiversityAnswer newAnswerOption) throws FieldException
{
}
/**
* Called after the assoc changes.
* If a field exception is thrown, the value is still changed, however it
* may lead to the TX being rolled back
*/
protected void postAnswerOptionChange () throws FieldException
{
}
public FieldWriteability getWriteability_AnswerOption ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the reference AnswerOption. Checks to ensure a new value
* has been supplied. If so, marks the reference as altered and sets it.
*/
public void setAnswerOption (DiversityAnswer newAnswerOption) throws StorageException, FieldException
{
if (_AnswerOption.wouldReferencedChange (newAnswerOption))
{
assertValid();
Debug.assertion (getWriteability_AnswerOption () != FieldWriteability.FALSE, "Assoc AnswerOption is not writeable");
preAnswerOptionChange (newAnswerOption);
_AnswerOption.set (newAnswerOption);
postAnswerOptionChange ();
}
}
/**
* Get the reference Question
*/
public DiversityQuestion getQuestion () throws StorageException
......@@ -902,6 +1031,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
BaseCandidateDiversityAnswer sourceCandidateDiversityAnswer = (BaseCandidateDiversityAnswer)(source);
_AnswerOption.copyFrom (sourceCandidateDiversityAnswer._AnswerOption, linkToGhosts);
_Question.copyFrom (sourceCandidateDiversityAnswer._Question, linkToGhosts);
_Candidate.copyFrom (sourceCandidateDiversityAnswer._Candidate, linkToGhosts);
......@@ -945,6 +1075,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
super.readExternalData(vals);
_AnswerOption.readExternalData(vals.get(SINGLEREFERENCE_AnswerOption));
_Question.readExternalData(vals.get(SINGLEREFERENCE_Question));
_Candidate.readExternalData(vals.get(SINGLEREFERENCE_Candidate));
_Answers.readExternalData(vals.get(MULTIPLEREFERENCE_Answers));
......@@ -959,6 +1090,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
super.writeExternalData(vals);
vals.put (SINGLEREFERENCE_AnswerOption, _AnswerOption.writeExternalData());
vals.put (SINGLEREFERENCE_Question, _Question.writeExternalData());
vals.put (SINGLEREFERENCE_Candidate, _Candidate.writeExternalData());
vals.put (MULTIPLEREFERENCE_Answers, _Answers.writeExternalData());
......@@ -977,6 +1109,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
// Compare single assocs
_AnswerOption.compare (otherCandidateDiversityAnswer._AnswerOption, listener);
_Question.compare (otherCandidateDiversityAnswer._Question, listener);
_Candidate.compare (otherCandidateDiversityAnswer._Candidate, listener);
......@@ -1000,6 +1133,7 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
super.visitAttributes (visitor);
visitor.visitAssociation (_AnswerOption);
visitor.visitAssociation (_Question);
visitor.visitAssociation (_Candidate);
visitor.visitAssociation (_Answers);
......@@ -1011,6 +1145,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
super.visitAssociations (visitor, scope);
if (scope.includes (_AnswerOption))
{
visitor.visit (_AnswerOption);
}
if (scope.includes (_Question))
{
visitor.visit (_Question);
......@@ -1192,6 +1330,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
{
return getWriteability_Candidate ();
}
else if (fieldName.equals (SINGLEREFERENCE_AnswerOption))
{
return getWriteability_AnswerOption ();
}
else
{
return super.getWriteable (fieldName);
......@@ -1313,6 +1455,10 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
public PipeLine<From, ? extends Object> to(String name)
{
if (name.equals ("AnswerOption"))
{
return toAnswerOption ();
}
if (name.equals ("Answers"))
{
return toAnswers ();
......@@ -1330,6 +1476,12 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
return super.to(name);
}
public DiversityAnswer.DiversityAnswerPipeLineFactory<From, DiversityAnswer> toAnswerOption () { return toAnswerOption (Filter.ALL); }
public DiversityAnswer.DiversityAnswerPipeLineFactory<From, DiversityAnswer> toAnswerOption (Filter<DiversityAnswer> filter)
{
return DiversityAnswer.REFERENCE_DiversityAnswer.new DiversityAnswerPipeLineFactory<From, DiversityAnswer> (this, new ORMSingleAssocPipe<Me, DiversityAnswer>(SINGLEREFERENCE_AnswerOption, filter));
}
public DiversityQuestion.DiversityQuestionPipeLineFactory<From, DiversityQuestion> toQuestion () { return toQuestion (Filter.ALL); }
public DiversityQuestion.DiversityQuestionPipeLineFactory<From, DiversityQuestion> toQuestion (Filter<DiversityQuestion> filter)
......@@ -1361,6 +1513,11 @@ public abstract class BaseCandidateDiversityAnswer extends BaseBusinessClass
public boolean isTransientSingleReference(String assocName)
{
if(CollectionUtils.equals(assocName, "AnswerOption"))
{
return true;
}
return super.isTransientSingleReference(assocName);
}
......@@ -1379,6 +1536,20 @@ class DummyCandidateDiversityAnswer extends CandidateDiversityAnswer
}
public DiversityAnswer getAnswerOption () throws StorageException
{
return (DiversityAnswer)(DiversityAnswer.DUMMY_DiversityAnswer);
}
/**
* Get the object id for the referenced object. Does not force a DB access.
*/
public Long getAnswerOptionID ()
{
return DiversityAnswer.DUMMY_DiversityAnswer.getObjectID();
}
public DiversityQuestion getQuestion () throws StorageException
{
return (DiversityQuestion)(DiversityQuestion.DUMMY_DiversityQuestion);
......
package performa.orm;
import oneit.utils.CollectionUtils;
public class CandidateDiversityAnswer extends BaseCandidateDiversityAnswer
{
......@@ -12,24 +10,4 @@ public class CandidateDiversityAnswer extends BaseCandidateDiversityAnswer
{
// Do not add any code to this, always put it in initialiseNewObject
}
public CandidateDiversityAnswer getAnswerForQuestion(HTDiversityQuestion htQuestion)
{
CandidateDiversityAnswer answer = null;
if(htQuestion != null)
{
// for(CultureCriteria cc: htQuestion.getQ)
// {
// if(CollectionUtils.equals(cc.getCultureElement(), getCultureElement()))
// {
// criteria = cc;
//
// break;
// }
// }
}
return answer;
}
}
\ No newline at end of file
......@@ -4,6 +4,8 @@
<BUSINESSCLASS name="CandidateDiversityAnswer" package="performa.orm">
<TRANSIENTSINGLE name="AnswerOption" type="DiversityAnswer" />
<MULTIPLEREFERENCE name="Answers" type="AnswerOption" backreferenceName="CandidateAnswer" />
<TABLE name="tl_candidate_diversity_answer" tablePrefix="object" polymorphic="FALSE">
......
......@@ -228,6 +228,8 @@ public class JobApplication extends BaseJobApplication
{
CandidateDiversityAnswer answer = CandidateDiversityAnswer.createCandidateDiversityAnswer(getTransaction());
if(question.getMultipleAnswers())
{
for(DiversityAnswer diversityAnswer : question.getAnswersSet())
{
AnswerOption answerOption = AnswerOption.createAnswerOption(getTransaction());
......@@ -235,6 +237,7 @@ public class JobApplication extends BaseJobApplication
answer.addToAnswers(answerOption);
answerOption.setAnswer(diversityAnswer);
}
}
candidate.addToDiversityAnswers(answer);
answer.setQuestion(question);
......@@ -246,6 +249,21 @@ public class JobApplication extends BaseJobApplication
return safeRedirect;
}
public void setDiversityAnswerOptions() throws StorageException, FieldException
{
for(CandidateDiversityAnswer candidateAnswer : pipelineJobApplication().toCandidate().toDiversityAnswers().uniqueVals())
{
if(!candidateAnswer.getQuestion().getMultipleAnswers())
{
AnswerOption answerOption = candidateAnswer.pipelineCandidateDiversityAnswer().toAnswers().val();
if(answerOption != null && answerOption.getAnswer() != null && answerOption.isTrue(answerOption.getIsSelected()))
{
candidateAnswer.setAnswerOption(answerOption.getAnswer());
}
}
}
}
public Answer getAnswerForQuestion(Question question) throws FieldException
{
......
......@@ -23,6 +23,11 @@
Debug.assertion(jobApplication != null, "Invalid Job Application in applicant portal");
if(jobApplication.diversityCompleted())
{
response.sendRedirect(WebUtils.getSamePageInRenderMode(request, "VerificationSent") + "&JobID=" + job.getID());
}
Boolean isSelectionComplete = jobApplication.selectionCompleted();
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
......@@ -56,6 +61,8 @@
%><%@include file="/saferedirect.jsp" %><%
}
jobApplication.setDiversityAnswerOptions();
process.setAttribute("JobApplication", jobApplication);
%>
<oneit:form name="diversity" method="post" enctype="multipart/form-data">
......@@ -89,18 +96,27 @@
<div class="main-verify-identity">
<div class="main-box-layout main-verify-step-2">
<%
FormTag applicationForm = FormTag.getActiveFormTag(request);
FormBuilder formBuilder = applicationForm.getFormBuilder();
for(HTDiversityQuestion question : job.getDiversityQuestions())
{
DiversityQuestion originalQuestion = question.getQuestion();
CandidateDiversityAnswer candidateAnswer = candidate.getDiversityAnswerByQuestion(originalQuestion);
// not showing question if already answered
if(candidateAnswer.pipelineCandidateDiversityAnswer().toAnswers(AnswerOption.SearchByAll().andIsSelected(new EqualsFilter<>(Boolean.TRUE))).uniqueVals().size() >= 1)
{
continue;
}
%>
<div class="form-group text-left">
<label><%= question.getQuestionText() %></label>
<%
for(AnswerOption answer : candidateAnswer.getAnswersSet())
{
if(originalQuestion.getMultipleAnswers())
{
for(AnswerOption answer : candidateAnswer.getAnswersSet())
{
%>
<div class="styled_checkboxes">
<div class="checkbox checkbox-primary">
......@@ -114,14 +130,31 @@
</div>
<%
}
}
else
{
String optionKey = WebUtils.getRadioSingleAssocKey(request, candidateAnswer, CandidateDiversityAnswer.SINGLEREFERENCE_AnswerOption);
String formValue = formBuilder.fieldValue (optionKey, candidateAnswer.getAnswerOption() == null ? "" : String.valueOf(candidateAnswer.getAnswerOptionID()));
%>
<div class="radio radio-primary second-radio-primary full-width">
<%--<div class="radio radio-primary second-radio-primary full-width">
<input type="radio" name="<%= candidateAnswer.getObjectID() %>" value="<%= answer.getIsSelected() %>" id="<%= answer.getObjectID() %>"/>
<label for="<%= answer.getObjectID() %>">
<%= answer.getAnswer().getAnswer() %>
</label>
</div>--%>
<%
for(DiversityAnswer diversityAnswer : originalQuestion.getAnswersSet())
{
String answerId = String.valueOf(diversityAnswer.getID().longID());
String selectedStr = (CollectionUtils.equals(answerId, formValue) ? "checked" : "");
%>
<div class="radio radio-primary second-radio-primary full-width">
<input type="radio" name="<%= optionKey %>" id="<%= answerId %>" class="element_rating_radio" value="<%= answerId %>" <%= selectedStr %>>
<label for="<%= answerId %>">
<oneit:toString value="<%= diversityAnswer.getAnswer() %>" mode="EscapeHTML" nullValue="-"/>
</label>
</div>
<%
}
......
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