Commit c56556b9 by chenith Committed by Harsh Shah

Updated CultureCriteriaAnswer and Answer relationship with Candidate.

- CultureCriteriaAnswer/Answer --> Move to candidate level instead of JobApplication level.
- CultureCriteriaAnswer -- Replace CultureCriteria for each answer with CultureElement.
parent 1da6ceaf
......@@ -10,10 +10,10 @@
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="answer_number" type="Long" nullable="false"/>
<column name="section_number" type="Long" length="11" nullable="true"/>
<column name="job_application_id" type="Long" length="11" nullable="false"/>
<column name="candidate_id" type="Long" length="11" nullable="false"/>
<column name="quest_number" type="Long" length="11" nullable="true"/>
</NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_answer" indexName="idx_tl_answer_job_application_id" isUnique="false"><column name="job_application_id"/></NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_answer" indexName="idx_tl_answer_candidate_id" isUnique="false"><column name="candidate_id"/></NODE>
</NODE></OBJECTS>
\ No newline at end of file
......@@ -8,13 +8,11 @@
<column name="object_id" type="Long" nullable="false" length="11"/>
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="culture_criteria_id" type="Long" length="11" nullable="false"/>
<column name="culture_element_id" type="Long" length="11" nullable="false"/>
<column name="selected_question_id" type="Long" length="11" nullable="false"/>
<column name="job_application_id" type="Long" length="11" nullable="false"/>
<column name="candidate_id" type="Long" length="11" nullable="false"/>
</NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_culture_criteria_answer" indexName="idx_tl_culture_criteria_answer_culture_criteria_id" isUnique="false"><column name="culture_criteria_id"/></NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_culture_criteria_answer" indexName="idx_tl_culture_criteria_answer_job_application_id" isUnique="false"><column name="job_application_id"/></NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_culture_criteria_answer" indexName="idx_tl_culture_criteria_answer_candidate_id" isUnique="false"><column name="candidate_id"/></NODE>
</NODE></OBJECTS>
\ No newline at end of file
......@@ -10,7 +10,7 @@ CREATE TABLE tl_answer (
,
answer_number numeric(12) NOT NULL,
section_number numeric(12) NULL,
job_application_id numeric(12) NOT NULL,
candidate_id numeric(12) NOT NULL,
quest_number numeric(12) NULL
);
......@@ -24,5 +24,5 @@ ALTER TABLE tl_answer ADD
CREATE INDEX idx_tl_answer_job_application_id
ON tl_answer (job_application_id);
CREATE INDEX idx_tl_answer_candidate_id
ON tl_answer (candidate_id);
......@@ -8,9 +8,9 @@ CREATE TABLE tl_culture_criteria_answer (
object_last_updated_date datetime DEFAULT getdate() NOT NULL ,
object_created_date datetime DEFAULT getdate() NOT NULL
,
culture_criteria_id numeric(12) NOT NULL,
culture_element_id numeric(12) NOT NULL,
selected_question_id numeric(12) NOT NULL,
job_application_id numeric(12) NOT NULL
candidate_id numeric(12) NOT NULL
);
......@@ -23,8 +23,5 @@ ALTER TABLE tl_culture_criteria_answer ADD
CREATE INDEX idx_tl_culture_criteria_answer_culture_criteria_id
ON tl_culture_criteria_answer (culture_criteria_id);
CREATE INDEX idx_tl_culture_criteria_answer_job_application_id
ON tl_culture_criteria_answer (job_application_id);
CREATE INDEX idx_tl_culture_criteria_answer_candidate_id
ON tl_culture_criteria_answer (candidate_id);
......@@ -11,7 +11,7 @@ CREATE TABLE tl_answer (
,
answer_number number(12) NOT NULL,
section_number number(12) NULL,
job_application_id number(12) NOT NULL,
candidate_id number(12) NOT NULL,
quest_number number(12) NULL
);
......@@ -25,5 +25,5 @@ ALTER TABLE tl_answer ADD
CREATE INDEX idx_tl_answer_job_application_id
ON tl_answer (job_application_id);
CREATE INDEX idx_tl_answer_candidate_id
ON tl_answer (candidate_id);
......@@ -9,9 +9,9 @@ CREATE TABLE tl_culture_criteria_answer (
object_last_updated_date date DEFAULT SYSDATE NOT NULL ,
object_created_date date DEFAULT SYSDATE NOT NULL
,
culture_criteria_id number(12) NOT NULL,
culture_element_id number(12) NOT NULL,
selected_question_id number(12) NOT NULL,
job_application_id number(12) NOT NULL
candidate_id number(12) NOT NULL
);
......@@ -24,8 +24,5 @@ ALTER TABLE tl_culture_criteria_answer ADD
CREATE INDEX idx_tl_culture_criteria_answer_culture_criteria_id
ON tl_culture_criteria_answer (culture_criteria_id);
CREATE INDEX idx_tl_culture_criteria_answer_job_application_id
ON tl_culture_criteria_answer (job_application_id);
CREATE INDEX idx_tl_culture_criteria_answer_candidate_id
ON tl_culture_criteria_answer (candidate_id);
......@@ -11,7 +11,7 @@ CREATE TABLE tl_answer (
,
answer_number numeric(12) NOT NULL,
section_number numeric(12) NULL,
job_application_id numeric(12) NOT NULL,
candidate_id numeric(12) NOT NULL,
quest_number numeric(12) NULL
);
......@@ -25,5 +25,5 @@ ALTER TABLE tl_answer ADD
CREATE INDEX idx_tl_answer_job_application_id
ON tl_answer (job_application_id);
CREATE INDEX idx_tl_answer_candidate_id
ON tl_answer (candidate_id);
......@@ -9,9 +9,9 @@ CREATE TABLE tl_culture_criteria_answer (
object_last_updated_date timestamp DEFAULT NOW() NOT NULL ,
object_created_date timestamp DEFAULT NOW() NOT NULL
,
culture_criteria_id numeric(12) NOT NULL,
culture_element_id numeric(12) NOT NULL,
selected_question_id numeric(12) NOT NULL,
job_application_id numeric(12) NOT NULL
candidate_id numeric(12) NOT NULL
);
......@@ -24,8 +24,5 @@ ALTER TABLE tl_culture_criteria_answer ADD
CREATE INDEX idx_tl_culture_criteria_answer_culture_criteria_id
ON tl_culture_criteria_answer (culture_criteria_id);
CREATE INDEX idx_tl_culture_criteria_answer_job_application_id
ON tl_culture_criteria_answer (job_application_id);
CREATE INDEX idx_tl_culture_criteria_answer_candidate_id
ON tl_culture_criteria_answer (candidate_id);
......@@ -45,9 +45,9 @@ public class CompleteApplicationFP extends SaveFP
HttpServletRequest request = submission.getRequest();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
if(jobApplication.getAlreadyCompletedApplicationForCulture()==null)
if(!jobApplication.cultureCompleted())
{
BusinessObjectParser.assertFieldCondition(jobApplication.getCultureCriteriaAnswersCount()>0, jobApplication, jobApplication.FIELD_ObjectID, "completeCulture", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(jobApplication.getCandidate().getCultureCriteriaAnswersCount()>0, jobApplication, jobApplication.FIELD_ObjectID, "completeCulture", exceptions, true, request);
}
super.validate(process, submission, exceptions, params);
......
......@@ -24,7 +24,7 @@ public class SaveAndExitCultureFP extends SaveFP
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveAndExitCultureFP saving job application: ", jobApplication );
for (CultureCriteriaAnswer answer : jobApplication.getCultureCriteriaAnswersSet())
for (CultureCriteriaAnswer answer : jobApplication.getCandidate().getCultureCriteriaAnswersSet())
{
if(answer.getSelectedQuestion() == null)
{
......
......@@ -24,7 +24,7 @@ public class SaveAndExitWorkStypeFP extends SaveFP
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveAndExitWorkStypeFP saving job application: ", jobApplication );
for (Answer answer : jobApplication.getProfileAssessmentAnswersSet())
for (Answer answer : jobApplication.getCandidate().getProfileAssessmentAnswersSet())
{
if(answer.getAnswerNo() == null)
{
......
package performa.form;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.business.content.Article;
import oneit.components.ParticipantInitialisationContext;
import oneit.email.ConfigurableArticleTemplateEmailer;
import oneit.email.ConfigurableEmailerException;
import oneit.logging.*;
import oneit.net.LoopbackHTTP;
import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser;
......@@ -18,7 +15,6 @@ import oneit.servlets.security.SessionSecUserDecorator;
import oneit.utils.*;
import performa.orm.*;
import performa.utils.Utils;
import performa.utils.WebUtils;
public class VerifyIdentityFP extends ORMProcessFormProcessor
......
......@@ -32,7 +32,7 @@ public class Answer extends BaseAnswer
{
Filter<Answer> filter = Answer.SearchByAll().andQuestion(new EqualsFilter<>(rightQuestion));
Answer rightAnswer = CollectionFilter.getFirstMatch(getJobApplication().getProfileAssessmentAnswersSet(), filter);
Answer rightAnswer = CollectionFilter.getFirstMatch(getCandidate().getProfileAssessmentAnswersSet(), filter);
if(rightAnswer!=null)
{
......
......@@ -9,7 +9,7 @@
<ATTRIB name="AnswerNo" type="Integer" dbcol="answer_number" mandatory="true"/>
<SINGLEREFERENCE name="Section" type="Section" dbcol="section_number" />
<SINGLEREFERENCE name="JobApplication" type="JobApplication" dbcol="job_application_id" backreferenceName="ProfileAssessmentAnswers" mandatory="true"/>
<SINGLEREFERENCE name="Candidate" type="Candidate" dbcol="candidate_id" backreferenceName="ProfileAssessmentAnswers" mandatory="true"/>
<SINGLEREFERENCE name="Question" type="Question" dbcol="quest_number" />
</TABLE>
......
......@@ -41,7 +41,7 @@ public class AnswerPersistenceMgr extends ObjectPersistenceMgr
}
private String SELECT_COLUMNS = "{PREFIX}tl_answer.object_id as id, {PREFIX}tl_answer.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_answer.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_answer.answer_number, {PREFIX}tl_answer.section_number, {PREFIX}tl_answer.job_application_id, {PREFIX}tl_answer.quest_number, 1 AS commasafe ";
private String SELECT_COLUMNS = "{PREFIX}tl_answer.object_id as id, {PREFIX}tl_answer.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_answer.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_answer.answer_number, {PREFIX}tl_answer.section_number, {PREFIX}tl_answer.candidate_id, {PREFIX}tl_answer.quest_number, 1 AS commasafe ";
private String SELECT_JOINS = "";
public BaseBusinessClass fetchByID(ObjectID id, PersistentSetCollection allPSets, RDBMSPersistenceContext context, SQLManager sqlMgr) throws SQLException, StorageException
......@@ -94,7 +94,7 @@ public class AnswerPersistenceMgr extends ObjectPersistenceMgr
if (false || !tl_answerPSet.containsAttrib(BaseBusinessClass.FIELD_ObjectLastModified) ||
!tl_answerPSet.containsAttrib(Answer.FIELD_AnswerNo)||
!tl_answerPSet.containsAttrib(Answer.SINGLEREFERENCE_Section)||
!tl_answerPSet.containsAttrib(Answer.SINGLEREFERENCE_JobApplication)||
!tl_answerPSet.containsAttrib(Answer.SINGLEREFERENCE_Candidate)||
!tl_answerPSet.containsAttrib(Answer.SINGLEREFERENCE_Question))
{
// We will need to retrieve it
......@@ -141,11 +141,11 @@ public class AnswerPersistenceMgr extends ObjectPersistenceMgr
{
throw new RuntimeException ();
}
else if (refName.equals (Answer.SINGLEREFERENCE_JobApplication))
else if (refName.equals (Answer.SINGLEREFERENCE_Candidate))
{
String query = "SELECT " + SELECT_COLUMNS +
"FROM {PREFIX}tl_answer " +
"WHERE " + SELECT_JOINS + "job_application_id = ?";
"WHERE " + SELECT_JOINS + "candidate_id = ?";
BaseBusinessClass[] results = loadQuery (allPSets, sqlMgr, context, query, new Object[] { _objectID.longID () }, null, false);
......@@ -175,10 +175,10 @@ public class AnswerPersistenceMgr extends ObjectPersistenceMgr
{
int rowsUpdated = executeStatement (sqlMgr,
"UPDATE {PREFIX}tl_answer " +
"SET answer_number = ?, section_number = ? , job_application_id = ? , quest_number = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"SET answer_number = ?, section_number = ? , candidate_id = ? , quest_number = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"WHERE tl_answer.object_id = ? AND " + getConcurrencyCheck (sqlMgr, "object_LAST_UPDATED_DATE", obj.getObjectLastModified ()) + " ",
CollectionUtils.listEntry (HELPER_AnswerNo.getForSQL(dummyAnswerNo, tl_answerPSet.getAttrib (Answer.FIELD_AnswerNo))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Section)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_JobApplication)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Question)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
CollectionUtils.listEntry (HELPER_AnswerNo.getForSQL(dummyAnswerNo, tl_answerPSet.getAttrib (Answer.FIELD_AnswerNo))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Section)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Candidate)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Question)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
if (rowsUpdated != 1)
{
......@@ -437,7 +437,7 @@ public class AnswerPersistenceMgr extends ObjectPersistenceMgr
tl_answerPSet.setAttrib(Answer.FIELD_AnswerNo, HELPER_AnswerNo.getFromRS(dummyAnswerNo, r, "answer_number"));
tl_answerPSet.setAttrib(Answer.SINGLEREFERENCE_Section, r.getObject ("section_number"));
tl_answerPSet.setAttrib(Answer.SINGLEREFERENCE_JobApplication, r.getObject ("job_application_id"));
tl_answerPSet.setAttrib(Answer.SINGLEREFERENCE_Candidate, r.getObject ("candidate_id"));
tl_answerPSet.setAttrib(Answer.SINGLEREFERENCE_Question, r.getObject ("quest_number"));
}
......@@ -455,10 +455,10 @@ public class AnswerPersistenceMgr extends ObjectPersistenceMgr
{
executeStatement (sqlMgr,
"INSERT INTO {PREFIX}tl_answer " +
" (answer_number, section_number, job_application_id, quest_number, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
" (answer_number, section_number, candidate_id, quest_number, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
"VALUES " +
" (?, ?, ?, ?, ?, " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ", " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ")",
CollectionUtils.listEntry (HELPER_AnswerNo.getForSQL(dummyAnswerNo, tl_answerPSet.getAttrib (Answer.FIELD_AnswerNo))) .listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Section)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_JobApplication)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Question)))) .listEntry (objectID.longID ()).toList().toArray());
CollectionUtils.listEntry (HELPER_AnswerNo.getForSQL(dummyAnswerNo, tl_answerPSet.getAttrib (Answer.FIELD_AnswerNo))) .listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Section)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Candidate)))).listEntry (SQLManager.CheckNull((Long)(tl_answerPSet.getAttrib (Answer.SINGLEREFERENCE_Question)))) .listEntry (objectID.longID ()).toList().toArray());
tl_answerPSet.setStatus (PersistentSetStatus.PROCESSED);
}
......
package performa.orm;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import oneit.objstore.MessageSource;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.objstore.rdbms.filters.IsNotNullFilter;
import oneit.objstore.utils.ObjstoreUtils;
import oneit.servlets.objstore.MessageSourceDecorator;
import oneit.servlets.process.ORMProcessState;
import oneit.utils.CollectionUtils;
import oneit.utils.DateDiff;
import oneit.utils.ObjectTransform;
import oneit.utils.StringUtils;
import oneit.utils.filter.Filter;
......@@ -78,10 +85,51 @@ public class Candidate extends BaseCandidate
return errorMsg;
}
public TestAnalysis getTestAnalysisFor(Level level)
{
Filter<TestAnalysis> testAnalysisFilter = TestAnalysis.SearchByAll().andLevel(new EqualsFilter(level));
return pipelineCandidate().toTestAnalysises(testAnalysisFilter).val();
}
public boolean cultureCompleted(Job job)
{
int allAnswersCount = getCultureCriteriaAnswersCount();
if(allAnswersCount == job.getCultureCriteriasCount())
{
Filter filter = CultureCriteriaAnswer.SearchByAll().andSelectedQuestion(new IsNotNullFilter<>());
Collection selectedAnswers = pipelineCandidate().toCultureCriteriaAnswers(filter).vals();
return (selectedAnswers.size() == allAnswersCount);
}
return false;
}
public boolean assessmentCompleted(Job job) //role
{
int allAnswersCount = job.getAllLeftQuestions(Arrays.asList(Question.searchAll(getTransaction()))).size();
if(allAnswersCount > 0)
{
Filter filter = Answer.SearchByAll().andAnswerNo(new IsNotNullFilter<>());
Collection selectedAnswers = pipelineCandidate().toProfileAssessmentAnswers(filter).vals();
return (selectedAnswers.size() >= allAnswersCount);
}
return false;
}
public List<CultureCriteriaAnswer> getSortedCultureCriteriaAnswers()
{
return ObjstoreUtils.sort(getCultureCriteriaAnswersSet(),
new ObjectTransform[] {CultureCriteriaAnswer.pipesCultureCriteriaAnswer().toObjectID()},
new Comparator[]{CollectionUtils.DEFAULT_COMPARATOR});
}
}
\ No newline at end of file
......@@ -6,8 +6,10 @@
<IMPORT value="oneit.security.*" />
<MULTIPLEREFERENCE name="TestAnalysises" type="TestAnalysis" backreferenceName="Candidate" />
<MULTIPLEREFERENCE name="JobApplications" type="JobApplication" backreferenceName="Candidate" />
<MULTIPLEREFERENCE name="TestAnalysises" type="TestAnalysis" backreferenceName="Candidate" />
<MULTIPLEREFERENCE name="JobApplications" type="JobApplication" backreferenceName="Candidate" />
<MULTIPLEREFERENCE name="CultureCriteriaAnswers" type="CultureCriteriaAnswer" backreferenceName="Candidate" />
<MULTIPLEREFERENCE name="ProfileAssessmentAnswers" type="Answer" backreferenceName="Candidate" />
<TABLE name="oneit_sec_user_extension" tablePrefix="object" polymorphic="TRUE">
......
......@@ -5,8 +5,6 @@
<BUSINESSCLASS name="CultureCriteria" package="performa.orm">
<IMPORT value="performa.orm.types.*"/>
<MULTIPLEREFERENCE name="Answers" type="CultureCriteriaAnswer" backreferenceName="CultureCriteria"/>
<TABLE name="tl_culture_criteria" tablePrefix="object" polymorphic="FALSE">
<ATTRIB name="Importance" type="Importance" dbcol="importance" attribHelper="EnumeratedAttributeHelper" mandatory="true" defaultValue="Importance.DESIRABLE"/>
......
package performa.orm;
import java.util.SortedSet;
import oneit.utils.CollectionUtils;
public class CultureCriteriaAnswer extends BaseCultureCriteriaAnswer
{
......@@ -10,4 +13,28 @@ public class CultureCriteriaAnswer extends BaseCultureCriteriaAnswer
{
// Do not add any code to this, always put it in initialiseNewObject
}
//to get relevant culture criteria by job
public CultureCriteria getCriteriaJob(Job job)
{
CultureCriteria criteria = null;
if(job!=null)
{
SortedSet<CultureCriteria> cultureCriteriasSet = job.getCultureCriteriasSet();
for(CultureCriteria cc: cultureCriteriasSet)
{
if(CollectionUtils.equals(cc.getCultureElement(), getCultureElement()))
{
criteria = cc;
break;
}
}
}
return criteria;
}
}
\ No newline at end of file
......@@ -6,9 +6,9 @@
<TABLE name="tl_culture_criteria_answer" tablePrefix="object" polymorphic="FALSE">
<SINGLEREFERENCE name="CultureCriteria" type="CultureCriteria" dbcol="culture_criteria_id" mandatory="true" backreferenceName="Answers"/>
<SINGLEREFERENCE name="CultureElement" type="CultureElement" dbcol="culture_element_id" mandatory="true"/>
<SINGLEREFERENCE name="SelectedQuestion" type="CultureElementQuestion" dbcol="selected_question_id" mandatory="true" />
<SINGLEREFERENCE name="JobApplication" type="JobApplication" dbcol="job_application_id" mandatory="true" backreferenceName="CultureCriteriaAnswers"/>
<SINGLEREFERENCE name="Candidate" type="Candidate" dbcol="candidate_id" mandatory="true" backreferenceName="CultureCriteriaAnswers"/>
</TABLE>
......
......@@ -38,7 +38,7 @@ public class CultureCriteriaAnswerPersistenceMgr extends ObjectPersistenceMgr
}
private String SELECT_COLUMNS = "{PREFIX}tl_culture_criteria_answer.object_id as id, {PREFIX}tl_culture_criteria_answer.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_culture_criteria_answer.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_culture_criteria_answer.culture_criteria_id, {PREFIX}tl_culture_criteria_answer.selected_question_id, {PREFIX}tl_culture_criteria_answer.job_application_id, 1 AS commasafe ";
private String SELECT_COLUMNS = "{PREFIX}tl_culture_criteria_answer.object_id as id, {PREFIX}tl_culture_criteria_answer.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_culture_criteria_answer.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_culture_criteria_answer.culture_element_id, {PREFIX}tl_culture_criteria_answer.selected_question_id, {PREFIX}tl_culture_criteria_answer.candidate_id, 1 AS commasafe ";
private String SELECT_JOINS = "";
public BaseBusinessClass fetchByID(ObjectID id, PersistentSetCollection allPSets, RDBMSPersistenceContext context, SQLManager sqlMgr) throws SQLException, StorageException
......@@ -89,9 +89,9 @@ public class CultureCriteriaAnswerPersistenceMgr extends ObjectPersistenceMgr
// Check for persistent sets already prefetched
if (false || !tl_culture_criteria_answerPSet.containsAttrib(BaseBusinessClass.FIELD_ObjectLastModified) ||
!tl_culture_criteria_answerPSet.containsAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_CultureCriteria)||
!tl_culture_criteria_answerPSet.containsAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_CultureElement)||
!tl_culture_criteria_answerPSet.containsAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion)||
!tl_culture_criteria_answerPSet.containsAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_JobApplication))
!tl_culture_criteria_answerPSet.containsAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_Candidate))
{
// We will need to retrieve it
idsToFetch.add (id.longValue());
......@@ -137,21 +137,11 @@ public class CultureCriteriaAnswerPersistenceMgr extends ObjectPersistenceMgr
{
throw new RuntimeException ();
}
else if (refName.equals (CultureCriteriaAnswer.SINGLEREFERENCE_CultureCriteria))
else if (refName.equals (CultureCriteriaAnswer.SINGLEREFERENCE_Candidate))
{
String query = "SELECT " + SELECT_COLUMNS +
"FROM {PREFIX}tl_culture_criteria_answer " +
"WHERE " + SELECT_JOINS + "culture_criteria_id = ?";
BaseBusinessClass[] results = loadQuery (allPSets, sqlMgr, context, query, new Object[] { _objectID.longID () }, null, false);
return results;
}
else if (refName.equals (CultureCriteriaAnswer.SINGLEREFERENCE_JobApplication))
{
String query = "SELECT " + SELECT_COLUMNS +
"FROM {PREFIX}tl_culture_criteria_answer " +
"WHERE " + SELECT_JOINS + "job_application_id = ?";
"WHERE " + SELECT_JOINS + "candidate_id = ?";
BaseBusinessClass[] results = loadQuery (allPSets, sqlMgr, context, query, new Object[] { _objectID.longID () }, null, false);
......@@ -181,10 +171,10 @@ public class CultureCriteriaAnswerPersistenceMgr extends ObjectPersistenceMgr
{
int rowsUpdated = executeStatement (sqlMgr,
"UPDATE {PREFIX}tl_culture_criteria_answer " +
"SET culture_criteria_id = ? , selected_question_id = ? , job_application_id = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"SET culture_element_id = ? , selected_question_id = ? , candidate_id = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"WHERE tl_culture_criteria_answer.object_id = ? AND " + getConcurrencyCheck (sqlMgr, "object_LAST_UPDATED_DATE", obj.getObjectLastModified ()) + " ",
CollectionUtils.listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_CultureCriteria)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_JobApplication)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
CollectionUtils.listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_CultureElement)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_Candidate)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
if (rowsUpdated != 1)
{
......@@ -441,9 +431,9 @@ public class CultureCriteriaAnswerPersistenceMgr extends ObjectPersistenceMgr
tl_culture_criteria_answerPSet.setAttrib(BaseBusinessClass.FIELD_ObjectCreated, r.getTimestamp ("CREATED_DATE"));
tl_culture_criteria_answerPSet.setAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_CultureCriteria, r.getObject ("culture_criteria_id"));
tl_culture_criteria_answerPSet.setAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_CultureElement, r.getObject ("culture_element_id"));
tl_culture_criteria_answerPSet.setAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion, r.getObject ("selected_question_id"));
tl_culture_criteria_answerPSet.setAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_JobApplication, r.getObject ("job_application_id"));
tl_culture_criteria_answerPSet.setAttrib(CultureCriteriaAnswer.SINGLEREFERENCE_Candidate, r.getObject ("candidate_id"));
}
......@@ -460,10 +450,10 @@ public class CultureCriteriaAnswerPersistenceMgr extends ObjectPersistenceMgr
{
executeStatement (sqlMgr,
"INSERT INTO {PREFIX}tl_culture_criteria_answer " +
" ( culture_criteria_id, selected_question_id, job_application_id, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
" ( culture_element_id, selected_question_id, candidate_id, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
"VALUES " +
" ( ?, ?, ?, ?, " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ", " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ")",
CollectionUtils .listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_CultureCriteria)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_JobApplication)))) .listEntry (objectID.longID ()).toList().toArray());
CollectionUtils .listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_CultureElement)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion)))).listEntry (SQLManager.CheckNull((Long)(tl_culture_criteria_answerPSet.getAttrib (CultureCriteriaAnswer.SINGLEREFERENCE_Candidate)))) .listEntry (objectID.longID ()).toList().toArray());
tl_culture_criteria_answerPSet.setStatus (PersistentSetStatus.PROCESSED);
}
......
......@@ -6,8 +6,6 @@
<IMPORT value="performa.orm.types.*"/>
<MULTIPLEREFERENCE name="AssessmentCriteriaAnswers" type="AssessmentCriteriaAnswer" backreferenceName="JobApplication" />
<MULTIPLEREFERENCE name="CultureCriteriaAnswers" type="CultureCriteriaAnswer" backreferenceName="JobApplication" />
<MULTIPLEREFERENCE name="ProfileAssessmentAnswers" type="Answer" backreferenceName="JobApplication" />
<TRANSIENT name="AppProcessOption" type="AppProcessOption" attribHelper="EnumeratedAttributeHelper"/>
<TRANSIENT name="OverallSuitability" type="Integer"/>
......
......@@ -23,7 +23,7 @@ public class TestInput extends BaseTestInput
Set<Factor> levelFactors = pipelineTestInput().toLevel().toFactors().toFactor().uniqueVals();
Filter<FactorQuestionLink> factorFilter = FactorQuestionLink.SearchByAll().andFactor(new InFilter(levelFactors));
return ObjstoreUtils.sort(pipelineTestInput().toCandidates().toJobApplications().toProfileAssessmentAnswers().toQuestion().toFactors(factorFilter).toFactor().uniqueVals(),
return ObjstoreUtils.sort(pipelineTestInput().toCandidates().toProfileAssessmentAnswers().toQuestion().toFactors(factorFilter).toFactor().uniqueVals(),
new ObjectTransform[]{Factor.pipesFactor().toDescription()},
new Comparator[]{CollectionUtils.DEFAULT_COMPARATOR});
}
......
......@@ -230,13 +230,13 @@ public class AnalysisEngine
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "AnalysisEngine --> analyseAnswers completed for Candidate ", candidate, " Level:", level);
}
public static Map<CultureClass, Long> getCultureFit(Set<CultureCriteriaAnswer> cultureCriteriaAnswers)
public static Map<CultureClass, Long> getCultureFit(Set<CultureCriteriaAnswer> cultureCriteriaAnswers, Job job)
{
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "AnalysisEngine --> getCultureFit called");
//Preloading data
CultureCriteriaAnswer.pipesCultureCriteriaAnswer(cultureCriteriaAnswers).toSelectedQuestion().toNarratives().toCultureElementRating().uniqueVals();
CultureCriteriaAnswer.pipesCultureCriteriaAnswer(cultureCriteriaAnswers).toCultureCriteria().toCultureElementRating().toCultureElement().uniqueVals();
CultureCriteriaAnswer.pipesCultureCriteriaAnswer(cultureCriteriaAnswers).toCultureElement().uniqueVals();
Map<CultureClass, Integer> scoreMap = new HashMap();
Map<CultureClass, Integer> maxScoreMap = new HashMap();
......@@ -247,9 +247,10 @@ public class AnalysisEngine
maxScoreMap.put(cultureClass, 0);
}
for(CultureCriteriaAnswer answer : cultureCriteriaAnswers)
{
CultureCriteria criteria = answer.getCultureCriteria();
CultureCriteria criteria = answer.getCriteriaJob(job);
if(criteria != null && criteria.getImportance() != null && criteria.getImportance() != Importance.NOT_APPLICABLE)
{
......
......@@ -148,8 +148,7 @@
</div>
<div class="tab-pane" id="2a">
<%
JobApplication completeaApp = jobApplication.getAlreadyCompletedApplicationForCulture();
Map<CultureClass, Long> cultureFitData = AnalysisEngine.getCultureFit(completeaApp!=null ? completeaApp.getCultureCriteriaAnswersSet() : jobApplication.getCultureCriteriaAnswersSet());
Map<CultureClass, Long> cultureFitData = AnalysisEngine.getCultureFit(candidate.getCultureCriteriaAnswersSet(), job);
for(CultureClass cClass: cultureFitData.keySet())
{
......
......@@ -124,7 +124,8 @@
for(JobApplication jobApplication : sortedApplications)
{
String appID = "app-id-" + jobApplication.getID().toString();
Candidate candidate = jobApplication.getCandidate();
String appID = "app-id-" + jobApplication.getID().toString();
%>
<div class="<%= "appl-c-box " + (i == 0 ? " cb-one" : "")%> ">
<oneit:button value=" " name="gotoPage" skin="link"
......@@ -137,7 +138,7 @@
<div class="checkbox-list">
<input type="checkbox" name="IsSelected" value="<%= jobApplication.getObjectID().toString() %>" id="<%= appID %>" class="applicant" >
<label for="<%= appID %>">
<oneit:toString value="<%= jobApplication.getCandidate() %>" mode="EscapeHTML" />
<oneit:toString value="<%= candidate %>" mode="EscapeHTML" />
</label>
</div>
</div>
......@@ -185,8 +186,7 @@
</div>
<div class="detail-box">
<%
JobApplication completeaApp = jobApplication.getAlreadyCompletedApplicationForCulture();
Map<CultureClass, Long> cultureFitData = AnalysisEngine.getCultureFit(completeaApp!=null ? completeaApp.getCultureCriteriaAnswersSet() : jobApplication.getCultureCriteriaAnswersSet());
Map<CultureClass, Long> cultureFitData = AnalysisEngine.getCultureFit(candidate.getCultureCriteriaAnswersSet(), job);
for(CultureClass cClass: cultureFitData.keySet())
{
......
......@@ -27,25 +27,25 @@
jobApplication = JobApplication.createNewApplication(candidate, job);
}
//to store already completed culture or role data
Boolean alreadyCompletedCulture = (Boolean) process.getAttribute("AlreadyCompletedCulture");
Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
if(alreadyCompletedCulture==null)
{
alreadyCompletedCulture = jobApplication.getAlreadyCompletedApplicationForCulture()!=null;
process.setAttribute("AlreadyCompletedCulture", alreadyCompletedCulture);
}
if(alreadyCompletedRole==null)
{
alreadyCompletedRole = jobApplication.getAlreadyCompletedApplicationForRole()!=null;
process.setAttribute("AlreadyCompletedRole", alreadyCompletedRole);
}
// //to store already completed culture or role data
// Boolean alreadyCompletedCulture = (Boolean) process.getAttribute("AlreadyCompletedCulture");
// Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
//
// if(alreadyCompletedCulture==null)
// {
// alreadyCompletedCulture = jobApplication.getAlreadyCompletedApplicationForCulture()!=null;
// process.setAttribute("AlreadyCompletedCulture", alreadyCompletedCulture);
// }
//
// if(alreadyCompletedRole==null)
// {
// alreadyCompletedRole = jobApplication.getAlreadyCompletedApplicationForRole()!=null;
// process.setAttribute("AlreadyCompletedRole", alreadyCompletedRole);
// }
Boolean isSelectionComplete = jobApplication.selectionCompleted();
Boolean isCultureComplete = jobApplication.cultureCompleted() || alreadyCompletedCulture;
Boolean isAssesmentComplete = jobApplication.assessmentCompleted() || alreadyCompletedRole;
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
if(!jobApplication.isIncludeAssessmentCriteria())
......
......@@ -12,11 +12,11 @@
String thirdPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
boolean includeAssessment = jobApplication.isIncludeAssessmentCriteria();
Boolean alreadyCompletedCulture = (Boolean) process.getAttribute("AlreadyCompletedCulture");
Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
// Boolean alreadyCompletedCulture = (Boolean) process.getAttribute("AlreadyCompletedCulture");
// Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
Boolean isSelectionComplete = jobApplication.selectionCompleted(); //REQ
Boolean isCultureComplete = jobApplication.cultureCompleted() || alreadyCompletedCulture;
Boolean isAssesmentComplete = jobApplication.assessmentCompleted() || alreadyCompletedRole;
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
%>
<oneit:dynIncluded>
......
......@@ -10,6 +10,7 @@
String nextPage = WebUtils.getSamePageInRenderMode(request, "SubmitApplication");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
Job job = jobApplication.getJob();
Candidate candidate = jobApplication.getCandidate();
int questionNumber = process.getAttribute("QuestionNumber")!= null ? (int) process.getAttribute("QuestionNumber") : jobApplication.getQuestionNumber();
int actualNumber = process.getAttribute("ActualNumber")!= null ? (int) process.getAttribute("ActualNumber") : jobApplication.getActualQuestionNumber();
List<Question> totalQuestions = (List<Question>) process.getAttribute("TotalQuestions");
......
......@@ -12,10 +12,10 @@
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() || alreadyCompletedCulture;
Boolean isAssesmentComplete = jobApplication.assessmentCompleted() || alreadyCompletedRole;
// 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)
......
......@@ -10,11 +10,12 @@
String nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
Job job = jobApplication.getJob();
int cultureQuestionNo = process.getAttribute("CultureQuestionNo")!= null ? (int) process.getAttribute("CultureQuestionNo") : jobApplication.getCultureCriteriaAnswersCount();
Candidate candidate = jobApplication.getCandidate();
int cultureQuestionNo = process.getAttribute("CultureQuestionNo")!= null ? (int) process.getAttribute("CultureQuestionNo") : candidate.getCultureCriteriaAnswersCount();
String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey();
boolean toRedirect = jobApplication.createCultureCriteriaObjects();
Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
Boolean isAssesmentComplete = jobApplication.assessmentCompleted() || alreadyCompletedRole;
// Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
if(isAssesmentComplete)
{
......@@ -28,7 +29,7 @@
%><%@include file="/saferedirect.jsp" %><%
}
int total = jobApplication.getCultureCriteriaAnswersCount();
int total = candidate.getCultureCriteriaAnswersCount();
boolean isLast = total == cultureQuestionNo;
if(isLast)
......@@ -36,7 +37,7 @@
cultureQuestionNo = total -1;
}
CultureCriteriaAnswer answer = jobApplication.getSortedCultureCriteriaAnswers().get(cultureQuestionNo);
CultureCriteriaAnswer answer = candidate.getSortedCultureCriteriaAnswers().get(cultureQuestionNo);
String numberText = (cultureQuestionNo + 1) + "/" + total;
process.setAttribute("JobApplication", jobApplication);
......@@ -93,7 +94,7 @@
FormTag applicationForm = FormTag.getActiveFormTag(request);
FormBuilder formBuilder = applicationForm.getFormBuilder();
CultureCriteria criteria = answer.getCultureCriteria();
CultureCriteria criteria = answer.getCriteriaJob(job);
Collection<CultureElementQuestion> questions = criteria.pipelineCultureCriteria().toCultureElement().toQuestions().vals();
String optionKey = WebUtils.getRadioSingleAssocKey(request, answer, CultureCriteriaAnswer.SINGLEREFERENCE_SelectedQuestion);
String formValue = formBuilder.fieldValue (optionKey, answer.getSelectedQuestion() == null ? "" : String.valueOf(answer.getSelectedQuestionID()));
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au">
<NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.RedefineTableOperation">
<tableName factory="String">tl_answer</tableName>
<column name="candidate_id" type="Long" length="11" nullable="true"/>
</NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_answer" indexName="idx_tl_answer_candidate_id" isUnique="false"><column name="candidate_id"/></NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au">
<NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.RedefineTableOperation">
<tableName factory="String">tl_culture_criteria_answer</tableName>
<column name="culture_element_id" type="Long" length="11" nullable="true"/>
<column name="candidate_id" type="Long" length="11" nullable="true"/>
</NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_culture_criteria_answer" indexName="idx_tl_culture_criteria_answer_candidate_id" isUnique="false"><column name="candidate_id"/></NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
-- @AutoRun
UPDATE tl_answer AS an
SET candidate_id = ja.candidate_id
FROM tl_job_application AS ja
WHERE an.job_application_id = ja.object_id;
UPDATE tl_culture_criteria_answer AS ca
SET candidate_id = ja.candidate_id
FROM tl_job_application AS ja
WHERE ca.job_application_id = ja.object_id;
UPDATE tl_culture_criteria_answer AS ca
SET culture_element_id = cc.culture_element_id
FROM tl_culture_criteria AS cc
WHERE ca.culture_criteria_id = cc.object_id;
ALTER TABLE tl_answer ALTER COLUMN candidate_id SET NOT NULL;
ALTER TABLE tl_culture_criteria_answer ALTER COLUMN candidate_id SET NOT NULL;
ALTER TABLE tl_culture_criteria_answer ALTER COLUMN culture_element_id SET NOT NULL;
DROP INDEX idx_tl_culture_criteria_answer_job_application_id;
ALTER TABLE tl_answer DROP COLUMN job_application_id;
ALTER TABLE tl_culture_criteria_answer DROP COLUMN job_application_id;
ALTER TABLE tl_culture_criteria_answer DROP COLUMN culture_criteria_id;
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