Commit 878b1b1e by Nilu Committed by Harsh Shah

call analysis engine when submitting the application

parent 5bd1ea68
......@@ -8,6 +8,7 @@
<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="job_id" type="Long" length="11" nullable="true"/>
<column name="level_id" type="Long" length="11" nullable="true"/>
<column name="candidate_id" type="Long" length="11" nullable="true"/>
</NODE>
......
......@@ -8,6 +8,7 @@ CREATE TABLE tl_test_analysis (
object_last_updated_date datetime DEFAULT getdate() NOT NULL ,
object_created_date datetime DEFAULT getdate() NOT NULL
,
job_id numeric(12) NULL,
level_id numeric(12) NULL,
candidate_id numeric(12) NULL
);
......
......@@ -9,6 +9,7 @@ CREATE TABLE tl_test_analysis (
object_last_updated_date date DEFAULT SYSDATE NOT NULL ,
object_created_date date DEFAULT SYSDATE NOT NULL
,
job_id number(12) NULL,
level_id number(12) NULL,
candidate_id number(12) NULL
);
......
......@@ -9,6 +9,7 @@ CREATE TABLE tl_test_analysis (
object_last_updated_date timestamp DEFAULT NOW() NOT NULL ,
object_created_date timestamp DEFAULT NOW() NOT NULL
,
job_id numeric(12) NULL,
level_id numeric(12) NULL,
candidate_id numeric(12) NULL
);
......
......@@ -10,6 +10,7 @@ import oneit.servlets.process.*;
import oneit.utils.*;
import performa.orm.*;
import performa.orm.types.ApplicationStatus;
import performa.utils.AnalysisEngine;
public class CompleteApplicationFP extends SaveFP
......@@ -21,6 +22,8 @@ public class CompleteApplicationFP extends SaveFP
jobApplication.setApplicationStatus(ApplicationStatus.SUBMITTED);
AnalysisEngine.analyseAnswers(jobApplication);
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING2, "Job Application Completed", jobApplication);
return super.processForm(process, submission, params);
......
......@@ -38,7 +38,7 @@ public class TestAnalysisFP extends ORMProcessFormProcessor
loadData(testInput, process.getTransaction());
AnalysisEngine.analyseAnswers(testInput);
// AnalysisEngine.analyseAnswers(testInput);
try
{
......
......@@ -10,6 +10,7 @@ import oneit.utils.filter.CollectionFilter;
import oneit.utils.filter.Filter;
import oneit.utils.parsers.FieldException;
import performa.orm.types.CriteriaType;
import performa.utils.AnalysisEngine;
public class JobApplication extends BaseJobApplication
......
......@@ -8,6 +8,7 @@
<TABLE name="tl_test_analysis" tablePrefix="object" polymorphic="FALSE">
<SINGLEREFERENCE name="Job" type="Job" dbcol="job_id"/>
<SINGLEREFERENCE name="Level" type="Level" dbcol="level_id" backreferenceName="TestAnalysises"/>
<SINGLEREFERENCE name="Candidate" type="Candidate" dbcol="candidate_id" backreferenceName="TestAnalysises"/>
......
......@@ -38,7 +38,7 @@ public class TestAnalysisPersistenceMgr extends ObjectPersistenceMgr
}
private String SELECT_COLUMNS = "{PREFIX}tl_test_analysis.object_id as id, {PREFIX}tl_test_analysis.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_test_analysis.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_test_analysis.level_id, {PREFIX}tl_test_analysis.candidate_id, 1 AS commasafe ";
private String SELECT_COLUMNS = "{PREFIX}tl_test_analysis.object_id as id, {PREFIX}tl_test_analysis.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_test_analysis.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_test_analysis.job_id, {PREFIX}tl_test_analysis.level_id, {PREFIX}tl_test_analysis.candidate_id, 1 AS commasafe ";
private String SELECT_JOINS = "";
public BaseBusinessClass fetchByID(ObjectID id, PersistentSetCollection allPSets, RDBMSPersistenceContext context, SQLManager sqlMgr) throws SQLException, StorageException
......@@ -89,6 +89,7 @@ public class TestAnalysisPersistenceMgr extends ObjectPersistenceMgr
// Check for persistent sets already prefetched
if (false || !tl_test_analysisPSet.containsAttrib(BaseBusinessClass.FIELD_ObjectLastModified) ||
!tl_test_analysisPSet.containsAttrib(TestAnalysis.SINGLEREFERENCE_Job)||
!tl_test_analysisPSet.containsAttrib(TestAnalysis.SINGLEREFERENCE_Level)||
!tl_test_analysisPSet.containsAttrib(TestAnalysis.SINGLEREFERENCE_Candidate))
{
......@@ -180,10 +181,10 @@ public class TestAnalysisPersistenceMgr extends ObjectPersistenceMgr
{
int rowsUpdated = executeStatement (sqlMgr,
"UPDATE {PREFIX}tl_test_analysis " +
"SET level_id = ? , candidate_id = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"SET job_id = ? , level_id = ? , candidate_id = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"WHERE tl_test_analysis.object_id = ? AND " + getConcurrencyCheck (sqlMgr, "object_LAST_UPDATED_DATE", obj.getObjectLastModified ()) + " ",
CollectionUtils.listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Level)))).listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Candidate)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
CollectionUtils.listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Job)))).listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Level)))).listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Candidate)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
if (rowsUpdated != 1)
{
......@@ -440,6 +441,7 @@ public class TestAnalysisPersistenceMgr extends ObjectPersistenceMgr
tl_test_analysisPSet.setAttrib(BaseBusinessClass.FIELD_ObjectCreated, r.getTimestamp ("CREATED_DATE"));
tl_test_analysisPSet.setAttrib(TestAnalysis.SINGLEREFERENCE_Job, r.getObject ("job_id"));
tl_test_analysisPSet.setAttrib(TestAnalysis.SINGLEREFERENCE_Level, r.getObject ("level_id"));
tl_test_analysisPSet.setAttrib(TestAnalysis.SINGLEREFERENCE_Candidate, r.getObject ("candidate_id"));
......@@ -458,10 +460,10 @@ public class TestAnalysisPersistenceMgr extends ObjectPersistenceMgr
{
executeStatement (sqlMgr,
"INSERT INTO {PREFIX}tl_test_analysis " +
" ( level_id, candidate_id, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
" ( job_id, level_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_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Level)))).listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Candidate)))) .listEntry (objectID.longID ()).toList().toArray());
" ( ?, ?, ?, ?, " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ", " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ")",
CollectionUtils .listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Job)))).listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Level)))).listEntry (SQLManager.CheckNull((Long)(tl_test_analysisPSet.getAttrib (TestAnalysis.SINGLEREFERENCE_Candidate)))) .listEntry (objectID.longID ()).toList().toArray());
tl_test_analysisPSet.setStatus (PersistentSetStatus.PROCESSED);
}
......
......@@ -15,93 +15,92 @@ import performa.orm.types.*;
*/
public class AnalysisEngine
{
public static void analyseAnswers(TestInput testInput) throws StorageException, FieldException
public static void analyseAnswers(JobApplication jobApplication) throws StorageException, FieldException
{
LogMgr.log(TestInput.LOG, LogLevel.PROCESSING1, "Inside AnalysisEngine --> analyseAnswers");
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "Inside AnalysisEngine --> analyseAnswers");
ObjectTransaction objTran = testInput.getTransaction();
Set<Factor> levelFactors = testInput.pipelineTestInput().toLevel().toFactors().toFactor().uniqueVals();
ObjectTransaction objTran = jobApplication.getTransaction();
Set<Factor> levelFactors = jobApplication.pipelineJobApplication().toJob().toLevel().toFactors().toFactor().uniqueVals();
Filter<FactorQuestionLink> factorFilter = FactorQuestionLink.SearchByAll().andFactor(new InFilter(levelFactors));
//Preloading Data
testInput.pipelineTestInput().toCandidates().toJobApplications().toProfileAssessmentAnswers().toQuestion().toSection().uniqueVals();
testInput.pipelineTestInput().toCandidates().toJobApplications().toProfileAssessmentAnswers().toQuestion().toFactors().toFactor().uniqueVals();
jobApplication.pipelineJobApplication().toProfileAssessmentAnswers().toQuestion().toSection().uniqueVals();
jobApplication.pipelineJobApplication().toProfileAssessmentAnswers().toQuestion().toFactors().toFactor().uniqueVals();
Factor.pipesFactor(levelFactors).toResults().uniqueVals();
for (Candidate candidate : testInput.getCandidatesSet())
{
LogMgr.log(TestInput.LOG, LogLevel.PROCESSING1, "Processing candidate ", candidate);
Map<Factor, Integer> factorScoreMap = new HashMap();
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "Processing Job Application ", jobApplication);
Map<Factor, Integer> factorScoreMap = new HashMap();
for(JobApplication application: candidate.getJobApplicationsSet())
for (Answer answer : jobApplication.getProfileAssessmentAnswersSet())
{
Set<FactorQuestionLink> links = answer.pipelineAnswer().toQuestion().toFactors(factorFilter).uniqueVals();
for (FactorQuestionLink link : links)
{
for (Answer answer : application.getProfileAssessmentAnswersSet())
int factorScore = 0;
Factor factor = link.getFactor();
if(factorScoreMap.containsKey(factor))
{
Set<FactorQuestionLink> links = answer.pipelineAnswer().toQuestion().toFactors(factorFilter).uniqueVals();
factorScore = factorScoreMap.get(factor);
}
for (FactorQuestionLink link : links)
if(link.isTrue(link.getReverseScore()))
{
if(answer.getQuestion().getQuestionType() == QuestionType.IPSATIVE)
{
int factorScore = 0;
Factor factor = link.getFactor();
if(factorScoreMap.containsKey(factor))
{
factorScore = factorScoreMap.get(factor);
}
if(link.isTrue(link.getReverseScore()))
{
if(answer.getQuestion().getQuestionType() == QuestionType.IPSATIVE)
{
factorScore += (10 - answer.getAnswerNo());
}
else
{
factorScore += (8 - answer.getAnswerNo());
}
}
else
{
factorScore += answer.getAnswerNo();
}
factorScoreMap.put(factor, factorScore);
factorScore += (10 - answer.getAnswerNo());
}
else
{
factorScore += (8 - answer.getAnswerNo());
}
}
else
{
factorScore += answer.getAnswerNo() != null ? answer.getAnswerNo() : 0;
}
factorScoreMap.put(factor, factorScore);
}
TestAnalysis testAnalysis = TestAnalysis.createTestAnalysis(objTran);
testInput.getLevel().addToTestAnalysises(testAnalysis);
candidate.addToTestAnalysises(testAnalysis);
}
TestAnalysis testAnalysis = TestAnalysis.createTestAnalysis(objTran);
for(Factor factor : factorScoreMap.keySet())
jobApplication.getJob().getLevel().addToTestAnalysises(testAnalysis);
jobApplication.getCandidate().addToTestAnalysises(testAnalysis);
testAnalysis.setJob(jobApplication.getJob());
for(Factor factor : factorScoreMap.keySet())
{
int score = factorScoreMap.get(factor);
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "Candidate:", jobApplication.getCandidate(), " Factor:", factor, " Score:", score);
Filter<FactorScoreResult> factorScoreFilter = FactorScoreResult.SearchByAll().andLevel(new EqualsFilter<>(jobApplication.getJob().getLevel()))
.andFromScore(new LessThanEqualFilter<>(score))
.andToScore(new GreaterThanEqualFilter<>(score));
List<FactorScoreResult> factorScoreResults = (List<FactorScoreResult>) factor.pipelineFactor().toResults(factorScoreFilter).vals();
if(factorScoreResults != null && !factorScoreResults.isEmpty())
{
int score = factorScoreMap.get(factor);
LogMgr.log(TestInput.LOG, LogLevel.PROCESSING1, "Candidate:", candidate, " Factor:", factor, " Score:", score);
Filter<FactorScoreResult> factorScoreFilter = FactorScoreResult.SearchByAll().andLevel(new EqualsFilter<>(testInput.getLevel()))
.andFromScore(new LessThanEqualFilter<>(score))
.andToScore(new GreaterThanEqualFilter<>(score));
List<FactorScoreResult> factorScoreResults = (List<FactorScoreResult>) factor.pipelineFactor().toResults(factorScoreFilter).vals();
FactorScoreResult factorScoreResult = factorScoreResults.get(0);
if(factorScoreResults != null && !factorScoreResults.isEmpty())
{
FactorScoreResult factorScoreResult = factorScoreResults.get(0);
FactorScore factorScore = FactorScore.createFactorScore(objTran);
FactorScore factorScore = FactorScore.createFactorScore(objTran);
factorScore.setFactor(factor);
factorScore.setScore(score);
factorScore.setColorCode(factorScoreResult.getColorCode());
factorScore.setColorRank(factorScoreResult.getColorCode() != null ? factorScoreResult.getColorCode().getWeightage() : 0);
factorScore.setNarrative(factorScoreResult.getNarrative());
factorScore.setFactor(factor);
factorScore.setLevel(jobApplication.getJob().getLevel());
factorScore.setScore(score);
factorScore.setColorCode(factorScoreResult.getColorCode());
factorScore.setColorRank(factorScoreResult.getColorCode() != null ? factorScoreResult.getColorCode().getWeightage() : 0);
factorScore.setNarrative(factorScoreResult.getNarrative());
testAnalysis.addToFactorScores(factorScore);
}
testAnalysis.addToFactorScores(factorScore);
}
}
LogMgr.log(TestInput.LOG, LogLevel.PROCESSING1, "AnalysisEngine --> analyseAnswers completed");
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "AnalysisEngine --> analyseAnswers completed");
}
}
\ No newline at end of file
......@@ -23,11 +23,11 @@
$('.' + id).click();
});
$(".job-status").change(function(){
$(".job-status").change(function()
{
var id = $(this).closest('.job-list').attr('id');
$('.save-job' + id).click();
});
});
</script>
......
<?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_test_analysis</tableName>
<column name="job_id" type="Long" length="11" nullable="true"/>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
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