Commit 1e3d04ab by Harsh Shah

Finish Release-20171222

parents a85473f2 282d184e
...@@ -4,6 +4,7 @@ import java.util.Date; ...@@ -4,6 +4,7 @@ import java.util.Date;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import oneit.logging.*; import oneit.logging.*;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException; import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser; import oneit.objstore.parser.BusinessObjectParser;
import oneit.servlets.forms.*; import oneit.servlets.forms.*;
...@@ -21,8 +22,11 @@ public class CompleteApplicationFP extends SaveFP ...@@ -21,8 +22,11 @@ public class CompleteApplicationFP extends SaveFP
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{ {
HttpServletRequest request = submission.getRequest(); HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = ObjectTransaction.getTransaction();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication"); JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
jobApplication = (JobApplication) jobApplication.getInTransaction (objTran);
jobApplication.setApplicationStatus(ApplicationStatus.SUBMITTED); jobApplication.setApplicationStatus(ApplicationStatus.SUBMITTED);
jobApplication.setSubmittedDate(new Date()); jobApplication.setSubmittedDate(new Date());
...@@ -55,11 +59,19 @@ public class CompleteApplicationFP extends SaveFP ...@@ -55,11 +59,19 @@ public class CompleteApplicationFP extends SaveFP
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{ {
HttpServletRequest request = submission.getRequest(); HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = ObjectTransaction.getTransaction();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication"); JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
if(!jobApplication.cultureCompleted()) 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); super.validate(process, submission, exceptions, params);
......
...@@ -2,15 +2,13 @@ package performa.form; ...@@ -2,15 +2,13 @@ package performa.form;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import oneit.logging.LogLevel; import oneit.objstore.ObjectTransaction;
import oneit.logging.LogMgr;
import oneit.objstore.StorageException; import oneit.objstore.StorageException;
import oneit.servlets.forms.SubmissionDetails; import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.forms.SuccessfulResult; import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState; import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.SaveFP; import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException; import oneit.utils.BusinessException;
import performa.orm.Answer;
import performa.orm.JobApplication; import performa.orm.JobApplication;
...@@ -19,20 +17,13 @@ public class SaveAndExitWorkStypeFP extends SaveFP ...@@ -19,20 +17,13 @@ public class SaveAndExitWorkStypeFP extends SaveFP
@Override @Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{ {
HttpServletRequest request = submission.getRequest(); HttpServletRequest request = submission.getRequest();
JobApplication jobApplication = process.getAttribute("JobApplication") != null ? (JobApplication) process.getAttribute("JobApplication") : (JobApplication) request.getAttribute("JobApplication"); ObjectTransaction objTran = ObjectTransaction.getTransaction();
Long appID = (Long) process.getAttribute("JobApplicationID");
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveAndExitWorkStypeFP saving job application: ", jobApplication ); JobApplication jobApplication = JobApplication.getJobApplicationByID(objTran, appID);
for (Answer answer : jobApplication.getCandidate().getProfileAssessmentAnswersSet())
{
if(answer.getAnswerNo() == null)
{
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In SaveAndExitWorkStypeFP deleting ProfileAssessmentAnswer : ", answer );
answer.delete(); process.setAttribute("JobApplication", jobApplication);
}
}
return super.processForm(process, submission, params); return super.processForm(process, submission, params);
} }
} }
\ No newline at end of file
...@@ -29,23 +29,30 @@ public class SaveJobFP extends SaveFP ...@@ -29,23 +29,30 @@ public class SaveJobFP extends SaveFP
{ {
HttpServletRequest request = submission.getRequest(); HttpServletRequest request = submission.getRequest();
Job job = process.getAttribute("Job") != null ? (Job) process.getAttribute("Job") : (Job) request.getAttribute("Job"); Job job = process.getAttribute("Job") != null ? (Job) process.getAttribute("Job") : (Job) request.getAttribute("Job");
Boolean openJob = (Boolean) request.getAttribute("openJob"); JobStatus status = (JobStatus) request.getAttribute("JobStatus");
LogMgr.log(Job.LOG, LogLevel.PROCESSING1,"In SaveJobFP saving job : ", job ); LogMgr.log(Job.LOG, LogLevel.PROCESSING1,"In SaveJobFP saving job : ", job );
Job oldJob = (Job) job.getEarliestBackup(); if(status != null)
if(openJob==Boolean.TRUE)
{ {
job.setJobStatus(JobStatus.OPEN); LogMgr.log(Job.LOG, LogLevel.PROCESSING1,"In SaveJobFP setting job status to session : ", status );
LogMgr.log(Job.LOG, LogLevel.PROCESSING1,"Job status changed as Open. ", job ); request.getSession().setAttribute("JobStatus", status);
} }
if(oldJob != null && oldJob.getJobStatus() == JobStatus.DRAFT && job.getJobStatus() == JobStatus.OPEN) Job oldJob = (Job) job.getEarliestBackup();
if(oldJob != null && oldJob.getJobStatus() == JobStatus.DRAFT && (job.getJobStatus() == JobStatus.OPEN || status == JobStatus.OPEN))
{ {
job.setApplyBy(DateDiff.add(DateDiff.getToday(), Calendar.DATE, 30)); job.setApplyBy(DateDiff.add(DateDiff.getToday(), Calendar.DATE, 30));
job.setOpenDate(new Date()); job.setOpenDate(new Date());
if(status == JobStatus.OPEN)
{
job.setJobStatus(status);
LogMgr.log(Job.LOG, LogLevel.PROCESSING1,"Job status changed as Open. ", job );
}
} }
if(job.getJobStatus() == JobStatus.OPEN && job.getShortenedURL() == null) if(job.getJobStatus() == JobStatus.OPEN && job.getShortenedURL() == null)
......
...@@ -42,11 +42,11 @@ public class SendVerificationMailFP extends SaveFP ...@@ -42,11 +42,11 @@ public class SendVerificationMailFP extends SaveFP
CompanyUser companyUser = company.getAddedByUser(); CompanyUser companyUser = company.getAddedByUser();
SecUser secUser = companyUser.getUser(); SecUser secUser = companyUser.getUser();
BusinessObjectParser.assertFieldCondition(!Utils.emailExists(process.getTransaction(), secUser.getEmail()), secUser, SecUser.FIELD_Email, "emailExists", exceptions, true, request); BusinessObjectParser.assertFieldCondition(!Utils.emailExists(process.getTransaction(), secUser.getEmail(), false), secUser, SecUser.FIELD_Email, "emailExists", exceptions, true, request);
} }
else else
{ {
BusinessObjectParser.assertFieldCondition(!Utils.emailExists(process.getTransaction(), job.getEmail()), job, Job.FIELD_Email, "emailExists", exceptions, true, request); BusinessObjectParser.assertFieldCondition(!Utils.emailExists(process.getTransaction(), job.getEmail(), true), job, Job.FIELD_Email, "emailExists", exceptions, true, request);
} }
super.validate(process, submission, exceptions, params); super.validate(process, submission, exceptions, params);
...@@ -117,7 +117,9 @@ public class SendVerificationMailFP extends SaveFP ...@@ -117,7 +117,9 @@ public class SendVerificationMailFP extends SaveFP
if(secUser!=null) if(secUser!=null)
{ {
Debug.assertion(secUser.getExtension(Candidate.REFERENCE_Candidate)==null, "user available", email, secUser); Candidate tmpCandidate = secUser.getExtension(Candidate.REFERENCE_Candidate);
Debug.assertion((tmpCandidate == null || !tmpCandidate.getIsAccountVerified()), "user available", email, secUser);
} }
LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside SendVerificationMailFP for send account verification mail for ", email); LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside SendVerificationMailFP for send account verification mail for ", email);
......
...@@ -67,4 +67,11 @@ public class SignInCandidateFP extends LoginProcessor ...@@ -67,4 +67,11 @@ public class SignInCandidateFP extends LoginProcessor
{ {
return new RedirectResult((String)submission.getRequest().getAttribute("nextPage"), null); return new RedirectResult((String)submission.getRequest().getAttribute("nextPage"), null);
} }
@Override
public boolean shouldForcePasswordReset(SubmissionDetails submission, Map requestParameters, SecUser secUser)
{
return false;
}
} }
\ No newline at end of file
...@@ -33,4 +33,11 @@ public class UserLoginFP extends LoginProcessor ...@@ -33,4 +33,11 @@ public class UserLoginFP extends LoginProcessor
companyUser.changeEmail(submission.getRequest()); companyUser.changeEmail(submission.getRequest());
} }
} }
@Override
public boolean shouldForcePasswordReset(SubmissionDetails submission, Map requestParameters, SecUser secUser)
{
return false;
}
} }
\ No newline at end of file
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
package performa.orm; package performa.orm;
import oneit.objstore.rdbms.filters.EqualsFilter; import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.utils.BusinessException;
import oneit.utils.filter.CollectionFilter; import oneit.utils.filter.CollectionFilter;
import oneit.utils.filter.Filter; import oneit.utils.filter.Filter;
import oneit.utils.parsers.FieldException; import oneit.utils.parsers.FieldException;
...@@ -17,6 +18,16 @@ public class Answer extends BaseAnswer ...@@ -17,6 +18,16 @@ public class Answer extends BaseAnswer
// Do not add any code to this, always put it in initialiseNewObject // Do not add any code to this, always put it in initialiseNewObject
} }
@Override
protected void postInitNewObj() throws BusinessException
{
super.postInitNewObj();
setAnswerNo(0);
}
@Override @Override
public void setAnswerNo(Integer newAnswerNo) throws FieldException public void setAnswerNo(Integer newAnswerNo) throws FieldException
{ {
...@@ -34,10 +45,15 @@ public class Answer extends BaseAnswer ...@@ -34,10 +45,15 @@ public class Answer extends BaseAnswer
Answer rightAnswer = CollectionFilter.getFirstMatch(getCandidate().getProfileAssessmentAnswersSet(), filter); Answer rightAnswer = CollectionFilter.getFirstMatch(getCandidate().getProfileAssessmentAnswersSet(), filter);
if(rightAnswer!=null) if(rightAnswer == null)
{ {
rightAnswer.setAnswerNo(10 - getAnswerNo()); //Refer below calculation table rightAnswer = Answer.createAnswer(getTransaction());
getCandidate().addToProfileAssessmentAnswers(rightAnswer);
rightAnswer.setQuestion(rightQuestion);
} }
rightAnswer.setAnswerNo(10 - getAnswerNo()); //Refer below calculation table
} }
} }
} }
......
...@@ -18,6 +18,12 @@ ...@@ -18,6 +18,12 @@
<SEARCH type="All" paramFilter="tl_assessment_template.object_id is not null" orderBy="tl_assessment_template.object_id" /> <SEARCH type="All" paramFilter="tl_assessment_template.object_id is not null" orderBy="tl_assessment_template.object_id" />
<SEARCH type="Company" paramFilter="tl_assessment_template.object_id is not null" orderBy="tl_assessment_template.object_id">
<TABLE name="oneit_sec_user_extension" join="oneit_sec_user_extension.user_id = tl_assessment_template.user_id"/>
<TABLE name="tl_company" join="tl_company.object_id = oneit_sec_user_extension.company_id"/>
<PARAM name="Company" type="Company" transform="Company.getObjectID ()" paramFilter="tl_company.object_id = ${Company}"/>
</SEARCH>
</BUSINESSCLASS> </BUSINESSCLASS>
</ROOT> </ROOT>
\ No newline at end of file
...@@ -255,6 +255,10 @@ public class AssessmentCriteriaTemplatePersistenceMgr extends ObjectPersistenceM ...@@ -255,6 +255,10 @@ public class AssessmentCriteriaTemplatePersistenceMgr extends ObjectPersistenceM
{ {
throw new RuntimeException ("NOT implemented: executeSearchQueryAll"); throw new RuntimeException ("NOT implemented: executeSearchQueryAll");
} }
public ResultSet executeSearchQueryCompany (SQLManager sqlMgr, Company Company) throws SQLException
{
throw new RuntimeException ("NOT implemented: executeSearchQueryCompany");
}
...@@ -404,6 +408,56 @@ public class AssessmentCriteriaTemplatePersistenceMgr extends ObjectPersistenceM ...@@ -404,6 +408,56 @@ public class AssessmentCriteriaTemplatePersistenceMgr extends ObjectPersistenceM
return results; return results;
} }
else if (searchType.equals (AssessmentCriteriaTemplate.SEARCH_Company))
{
// Local scope for transformed variables
{
if (criteria.containsKey("Company"))
{
Company Company = (Company)(criteria.get("Company"));
criteria.put ("Company", Company.getObjectID ());
}
}
String orderBy = " ORDER BY tl_assessment_template.object_id";
String tables = ", oneit_sec_user_extension, tl_company ";
Set<String> joinTableSet = new HashSet<String>();
String filter;
Object[] searchParams; // paramFilter: tl_assessment_template.object_id is not null
String preFilter = "(tl_assessment_template.object_id is not null)"
+ " AND (oneit_sec_user_extension.user_id = tl_assessment_template.user_id) AND (tl_company.object_id = oneit_sec_user_extension.company_id) ";
if (criteria.containsKey("Company"))
{
preFilter += " AND (tl_company.object_id = ${Company}) ";
preFilter += "";
}
preFilter += context.getLoadingAttributes ().getCustomSQL() ;
SearchParamTransform tx = new SearchParamTransform (criteria);
filter = StringUtils.replaceParams (preFilter, tx);
searchParams = tx.getParamsArray();
Integer maxRows = context.getLoadingAttributes ().getMaxRows ();
boolean truncateExtra = !context.getLoadingAttributes ().isFailIfMaxExceeded();
String query = "SELECT " + SELECT_COLUMNS +
"FROM {PREFIX}tl_assessment_template " + tables + tableSetToSQL(joinTableSet) +
"WHERE " + SELECT_JOINS + " " + filter + orderBy;
BaseBusinessClass[] results = loadQuery (allPSets, sqlMgr, context, query, searchParams, maxRows, truncateExtra);
return results;
}
else else
{ {
......
...@@ -47,6 +47,7 @@ public abstract class BaseAssessmentCriteriaTemplate extends BaseBusinessClass ...@@ -47,6 +47,7 @@ public abstract class BaseAssessmentCriteriaTemplate extends BaseBusinessClass
// Static constants corresponding to searches // Static constants corresponding to searches
public static final String SEARCH_All = "All"; public static final String SEARCH_All = "All";
public static final String SEARCH_Company = "Company";
// Static constants corresponding to attribute helpers // Static constants corresponding to attribute helpers
...@@ -1090,6 +1091,76 @@ public abstract class BaseAssessmentCriteriaTemplate extends BaseBusinessClass ...@@ -1090,6 +1091,76 @@ public abstract class BaseAssessmentCriteriaTemplate extends BaseBusinessClass
.search (transaction); .search (transaction);
} }
public static SearchCompany SearchByCompany () { return new SearchCompany (); }
public static class SearchCompany extends SearchObject<AssessmentCriteriaTemplate>
{
public SearchCompany byCompany (Company Company)
{
by ("Company", Company);
return this;
}
public SearchCompany andObjectID (QueryFilter<Long> filter)
{
filter.addFilter (context, "tl_assessment_template.object_id", FIELD_ObjectID);
return this;
}
public SearchCompany andObjectCreated (QueryFilter<Date> filter)
{
filter.addFilter (context, "tl_assessment_template.object_created_date", FIELD_ObjectCreated);
return this;
}
public SearchCompany andObjectLastModified (QueryFilter<Date> filter)
{
filter.addFilter (context, "tl_assessment_template.object_last_updated_date", FIELD_ObjectLastModified);
return this;
}
public SearchCompany andTemplateName (QueryFilter<String> filter)
{
filter.addFilter (context, "tl_assessment_template.template_name", "TemplateName");
return this;
}
public SearchCompany andUser (QueryFilter<SecUser> filter)
{
filter.addFilter (context, "tl_assessment_template.user_id", "User");
return this;
}
public AssessmentCriteriaTemplate[]
search (ObjectTransaction transaction) throws StorageException
{
BaseBusinessClass[] results = super.search (transaction, REFERENCE_AssessmentCriteriaTemplate, SEARCH_Company, criteria);
Set<AssessmentCriteriaTemplate> typedResults = new LinkedHashSet <AssessmentCriteriaTemplate> ();
for (BaseBusinessClass bbcResult : results)
{
AssessmentCriteriaTemplate aResult = (AssessmentCriteriaTemplate)bbcResult;
typedResults.add (aResult);
}
return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new AssessmentCriteriaTemplate[0]);
}
}
public static AssessmentCriteriaTemplate[]
searchCompany (ObjectTransaction transaction, Company Company) throws StorageException
{
return SearchByCompany ()
.byCompany (Company)
.search (transaction);
}
public Object getAttribute (String attribName) public Object getAttribute (String attribName)
......
...@@ -47,6 +47,7 @@ public abstract class BaseCultureCriteriaTemplate extends BaseBusinessClass ...@@ -47,6 +47,7 @@ public abstract class BaseCultureCriteriaTemplate extends BaseBusinessClass
// Static constants corresponding to searches // Static constants corresponding to searches
public static final String SEARCH_All = "All"; public static final String SEARCH_All = "All";
public static final String SEARCH_Company = "Company";
// Static constants corresponding to attribute helpers // Static constants corresponding to attribute helpers
...@@ -1090,6 +1091,76 @@ public abstract class BaseCultureCriteriaTemplate extends BaseBusinessClass ...@@ -1090,6 +1091,76 @@ public abstract class BaseCultureCriteriaTemplate extends BaseBusinessClass
.search (transaction); .search (transaction);
} }
public static SearchCompany SearchByCompany () { return new SearchCompany (); }
public static class SearchCompany extends SearchObject<CultureCriteriaTemplate>
{
public SearchCompany byCompany (Company Company)
{
by ("Company", Company);
return this;
}
public SearchCompany andObjectID (QueryFilter<Long> filter)
{
filter.addFilter (context, "tl_culture_template.object_id", FIELD_ObjectID);
return this;
}
public SearchCompany andObjectCreated (QueryFilter<Date> filter)
{
filter.addFilter (context, "tl_culture_template.object_created_date", FIELD_ObjectCreated);
return this;
}
public SearchCompany andObjectLastModified (QueryFilter<Date> filter)
{
filter.addFilter (context, "tl_culture_template.object_last_updated_date", FIELD_ObjectLastModified);
return this;
}
public SearchCompany andTemplateName (QueryFilter<String> filter)
{
filter.addFilter (context, "tl_culture_template.template_name", "TemplateName");
return this;
}
public SearchCompany andUser (QueryFilter<SecUser> filter)
{
filter.addFilter (context, "tl_culture_template.user_id", "User");
return this;
}
public CultureCriteriaTemplate[]
search (ObjectTransaction transaction) throws StorageException
{
BaseBusinessClass[] results = super.search (transaction, REFERENCE_CultureCriteriaTemplate, SEARCH_Company, criteria);
Set<CultureCriteriaTemplate> typedResults = new LinkedHashSet <CultureCriteriaTemplate> ();
for (BaseBusinessClass bbcResult : results)
{
CultureCriteriaTemplate aResult = (CultureCriteriaTemplate)bbcResult;
typedResults.add (aResult);
}
return ObjstoreUtils.removeDeleted(transaction, typedResults).toArray (new CultureCriteriaTemplate[0]);
}
}
public static CultureCriteriaTemplate[]
searchCompany (ObjectTransaction transaction, Company Company) throws StorageException
{
return SearchByCompany ()
.byCompany (Company)
.search (transaction);
}
public Object getAttribute (String attribName) public Object getAttribute (String attribName)
......
...@@ -17,7 +17,13 @@ ...@@ -17,7 +17,13 @@
</TABLE> </TABLE>
<SEARCH type="All" paramFilter="tl_culture_template.object_id is not null" orderBy="tl_culture_template.object_id" /> <SEARCH type="All" paramFilter="tl_culture_template.object_id is not null" orderBy="tl_culture_template.object_id" />
<SEARCH type="Company" paramFilter="tl_culture_template.object_id is not null" orderBy="tl_culture_template.object_id">
<TABLE name="oneit_sec_user_extension" join="oneit_sec_user_extension.user_id = tl_culture_template.user_id"/>
<TABLE name="tl_company" join="tl_company.object_id = oneit_sec_user_extension.company_id"/>
<PARAM name="Company" type="Company" transform="Company.getObjectID ()" paramFilter="tl_company.object_id = ${Company}"/>
</SEARCH>
</BUSINESSCLASS> </BUSINESSCLASS>
</ROOT> </ROOT>
\ No newline at end of file
...@@ -255,6 +255,10 @@ public class CultureCriteriaTemplatePersistenceMgr extends ObjectPersistenceMgr ...@@ -255,6 +255,10 @@ public class CultureCriteriaTemplatePersistenceMgr extends ObjectPersistenceMgr
{ {
throw new RuntimeException ("NOT implemented: executeSearchQueryAll"); throw new RuntimeException ("NOT implemented: executeSearchQueryAll");
} }
public ResultSet executeSearchQueryCompany (SQLManager sqlMgr, Company Company) throws SQLException
{
throw new RuntimeException ("NOT implemented: executeSearchQueryCompany");
}
...@@ -404,6 +408,56 @@ public class CultureCriteriaTemplatePersistenceMgr extends ObjectPersistenceMgr ...@@ -404,6 +408,56 @@ public class CultureCriteriaTemplatePersistenceMgr extends ObjectPersistenceMgr
return results; return results;
} }
else if (searchType.equals (CultureCriteriaTemplate.SEARCH_Company))
{
// Local scope for transformed variables
{
if (criteria.containsKey("Company"))
{
Company Company = (Company)(criteria.get("Company"));
criteria.put ("Company", Company.getObjectID ());
}
}
String orderBy = " ORDER BY tl_culture_template.object_id";
String tables = ", oneit_sec_user_extension, tl_company ";
Set<String> joinTableSet = new HashSet<String>();
String filter;
Object[] searchParams; // paramFilter: tl_culture_template.object_id is not null
String preFilter = "(tl_culture_template.object_id is not null)"
+ " AND (oneit_sec_user_extension.user_id = tl_culture_template.user_id) AND (tl_company.object_id = oneit_sec_user_extension.company_id) ";
if (criteria.containsKey("Company"))
{
preFilter += " AND (tl_company.object_id = ${Company}) ";
preFilter += "";
}
preFilter += context.getLoadingAttributes ().getCustomSQL() ;
SearchParamTransform tx = new SearchParamTransform (criteria);
filter = StringUtils.replaceParams (preFilter, tx);
searchParams = tx.getParamsArray();
Integer maxRows = context.getLoadingAttributes ().getMaxRows ();
boolean truncateExtra = !context.getLoadingAttributes ().isFailIfMaxExceeded();
String query = "SELECT " + SELECT_COLUMNS +
"FROM {PREFIX}tl_culture_template " + tables + tableSetToSQL(joinTableSet) +
"WHERE " + SELECT_JOINS + " " + filter + orderBy;
BaseBusinessClass[] results = loadQuery (allPSets, sqlMgr, context, query, searchParams, maxRows, truncateExtra);
return results;
}
else else
{ {
......
...@@ -89,11 +89,6 @@ public class Job extends BaseJob ...@@ -89,11 +89,6 @@ public class Job extends BaseJob
@Override @Override
public FieldWriteability getWriteability_JobStatus() public FieldWriteability getWriteability_JobStatus()
{ {
if(getJobStatus() == JobStatus.COMPLETE && getApplyBy() != null && getApplyBy().before(DateDiff.getToday()))
{
return FieldWriteability.NOT_IN_GUI;
}
if(getJobStatus() == JobStatus.FILLED) if(getJobStatus() == JobStatus.FILLED)
{ {
return FieldWriteability.NOT_IN_GUI; return FieldWriteability.NOT_IN_GUI;
...@@ -305,16 +300,20 @@ public class Job extends BaseJob ...@@ -305,16 +300,20 @@ public class Job extends BaseJob
public AssessmentCriteriaTemplate[] getAssessmentTemplates() public AssessmentCriteriaTemplate[] getAssessmentTemplates()
{ {
return AssessmentCriteriaTemplate.SearchByAll() CompanyUser companyUser = SecUser.getTXUser(getTransaction()).getExtension(CompanyUser.REFERENCE_CompanyUser);
.andUser(new EqualsFilter<>(SecUser.getTXUser(getTransaction())))
return AssessmentCriteriaTemplate.SearchByCompany()
.byCompany(companyUser.getCompany())
.search(getTransaction()); .search(getTransaction());
} }
public CultureCriteriaTemplate[] getCultureTemplates() public CultureCriteriaTemplate[] getCultureTemplates()
{ {
return CultureCriteriaTemplate.SearchByAll() CompanyUser companyUser = SecUser.getTXUser(getTransaction()).getExtension(CompanyUser.REFERENCE_CompanyUser);
.andUser(new EqualsFilter<>(SecUser.getTXUser(getTransaction())))
return CultureCriteriaTemplate.SearchByCompany()
.byCompany(companyUser.getCompany())
.search(getTransaction()); .search(getTransaction());
} }
...@@ -342,7 +341,7 @@ public class Job extends BaseJob ...@@ -342,7 +341,7 @@ public class Job extends BaseJob
/* Create a copy of 'to' */ /* Create a copy of 'to' */
return BusinessCopyHelper.copyBusinessObject (to, copyType, newObjectRefs, this); return BusinessCopyHelper.copyBusinessObject (to, copyType, newObjectRefs, this);
} }
else if (to instanceof JobApplication) else if (to instanceof JobApplication || to instanceof AssessmentCriteriaAnswer)
{ {
/* Do not create a copy of 'to' */ /* Do not create a copy of 'to' */
return null; return null;
...@@ -467,7 +466,7 @@ public class Job extends BaseJob ...@@ -467,7 +466,7 @@ public class Job extends BaseJob
{ {
SecUser user = SecUser.searchNAME(getTransaction(), getEmail().toLowerCase()); SecUser user = SecUser.searchNAME(getTransaction(), getEmail().toLowerCase());
if(user!=null && user.getExtension(Candidate.REFERENCE_Candidate)!=null) if(user!=null && user.getExtension(Candidate.REFERENCE_Candidate)!=null && user.getExtension(Candidate.REFERENCE_Candidate).getIsAccountVerified())
{ {
return Boolean.TRUE; return Boolean.TRUE;
} }
......
...@@ -187,6 +187,14 @@ public class JobApplication extends BaseJobApplication ...@@ -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 public boolean selectionCompleted() //req
{ {
if(getJob()!=null && getJob().getIncludeAssessmentCriteria()!=Boolean.TRUE) if(getJob()!=null && getJob().getIncludeAssessmentCriteria()!=Boolean.TRUE)
...@@ -222,14 +230,18 @@ public class JobApplication extends BaseJobApplication ...@@ -222,14 +230,18 @@ public class JobApplication extends BaseJobApplication
public int getActualQuestionNumber() public int getActualQuestionNumber()
{ {
return getCandidate().pipelineCandidate().toProfileAssessmentAnswers().uniqueVals().size() + 1; Filter<Answer> filter = Answer.SearchByAll().andAnswerNo(new NotEqualsFilter<>(0));
return getCandidate().pipelineCandidate().toProfileAssessmentAnswers(filter).uniqueVals().size() + 1;
} }
public int getQuestionNumber() public int getQuestionNumber()
{ {
return getCandidate().pipelineCandidate().toProfileAssessmentAnswers().uniqueVals().size() Filter<Answer> filter = Answer.SearchByAll().andAnswerNo(new NotEqualsFilter<>(0));
- getCandidate().pipelineCandidate().toProfileAssessmentAnswers().toQuestion().toRightQuestion().uniqueVals().size();
return getCandidate().pipelineCandidate().toProfileAssessmentAnswers(filter).uniqueVals().size()
- getCandidate().pipelineCandidate().toProfileAssessmentAnswers(filter).toQuestion().toRightQuestion().uniqueVals().size();
} }
......
...@@ -333,11 +333,22 @@ public class Utils ...@@ -333,11 +333,22 @@ public class Utils
} }
public static Boolean emailExists(ObjectTransaction objTran, String email) public static Boolean emailExists(ObjectTransaction objTran, String email, boolean isCandidate)
{ {
if(email!= null) if(email!= null)
{ {
return SecUser.searchNAME(objTran, email.toLowerCase()) != null; SecUser secUser = SecUser.searchNAME(objTran, email.toLowerCase());
if(isCandidate && secUser != null)
{
Candidate candidate = secUser.getExtension(Candidate.REFERENCE_Candidate);
return candidate != null && candidate.getIsAccountVerified();
}
else
{
return secUser != null;
}
} }
return Boolean.FALSE; return Boolean.FALSE;
......
...@@ -52,7 +52,7 @@ public class WebUtils ...@@ -52,7 +52,7 @@ public class WebUtils
public static String getArticleLink(HttpServletRequest request, ObjectTransaction objTran, String articleShortcut, String renderMode) public static String getArticleLink(HttpServletRequest request, ObjectTransaction objTran, String articleShortcut, String renderMode)
{ {
return getArticleLink(request, getArticleByShortCut(objTran, articleShortcut), "Page"); return getArticleLink(request, getArticleByShortCut(objTran, articleShortcut), renderMode != null ? renderMode : "Page");
} }
......
...@@ -1926,10 +1926,11 @@ table.pos-table{ ...@@ -1926,10 +1926,11 @@ table.pos-table{
padding: 28px 70px; padding: 28px 70px;
display: inline-block; display: inline-block;
width: 100%; width: 100%;
transition: 0.3s all ease-in-out;
/*margin-bottom: 87px;*/ /*margin-bottom: 87px;*/
} }
.main-sc-section-bottom{ .main-sc-section-bottom{
padding: 35px 0px; padding: 20px 0px 0px;
display: inline-block; display: inline-block;
width: 100%; width: 100%;
/* margin-bottom: 87px;*/ /* margin-bottom: 87px;*/
...@@ -2024,13 +2025,14 @@ table.pos-table{ ...@@ -2024,13 +2025,14 @@ table.pos-table{
text-align: center; text-align: center;
} }
.section-btn .box-btn-gray { .section-btn .box-btn-gray {
margin-right: 26px; /*margin-right: 26px;*/
} }
.section-btn{ .section-btn{
margin: 20px 0 24px; /*margin: 20px 0 24px;*/
padding: 20px 0 40px;
} }
.main-wc-section { .main-wc-section {
padding: 17px 70px 62px; padding: 17px 70px 0px;
background-color: #fbfbfb; background-color: #fbfbfb;
} }
.full-width { .full-width {
...@@ -2064,7 +2066,13 @@ ul.security-level { ...@@ -2064,7 +2066,13 @@ ul.security-level {
font-family: "Usual-Light"; font-family: "Usual-Light";
} }
.main-rate-section{ .main-rate-section{
padding: 53px 70px 68px; padding: 53px 70px 0;
background-color: #fbfbfb;
}
.job-match-questions{
background-color: #fbfbfb;
}
.job-match-buttons{
background-color: #fbfbfb; background-color: #fbfbfb;
} }
.rateing-title { .rateing-title {
...@@ -2131,7 +2139,7 @@ ul.security-level { ...@@ -2131,7 +2139,7 @@ ul.security-level {
color: #4a4a4a; color: #4a4a4a;
font-size: 12px; font-size: 12px;
font-weight: 500; font-weight: 500;
padding: 53px 0 87px; padding: 30px 0 30px;
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
} }
...@@ -2762,7 +2770,6 @@ span.ex-management { ...@@ -2762,7 +2770,6 @@ span.ex-management {
background-color: #667281; background-color: #667281;
margin-left: 29px; margin-left: 29px;
} }
.edit-btn-dropdown a.rightbtn { .edit-btn-dropdown a.rightbtn {
border-radius:0 100px 100px 0; border-radius:0 100px 100px 0;
margin-left: 0px; margin-left: 0px;
...@@ -2771,6 +2778,10 @@ span.ex-management { ...@@ -2771,6 +2778,10 @@ span.ex-management {
border-radius: 100px 0 0 100px; border-radius: 100px 0 0 100px;
margin-left: 29px; margin-left: 29px;
} }
.edit-btn-dropdown a.leftbtn.disabled{
opacity: 0.5;
background-color: #667281;
}
.edit-btn-dropdown a:hover,.edit-btn-dropdown a:focus{ .edit-btn-dropdown a:hover,.edit-btn-dropdown a:focus{
background-color: #434c58; background-color: #434c58;
...@@ -4525,7 +4536,7 @@ img.alert-icon {float: left;} ...@@ -4525,7 +4536,7 @@ img.alert-icon {float: left;}
.main-menu li a {padding: 12px 0 12px 12px;} .main-menu li a {padding: 12px 0 12px 12px;}
.form-page-area {padding: 4.89% 8.5%;} .form-page-area {padding: 4.89% 8.5%;}
.main-content-area{padding: 3% 8.56% 0;} .main-content-area{padding: 3% 8.56% 0;}
.auto-save{padding: 45px 0 70px;} .auto-save{padding: 40px 0 20px;}
.ips-box {margin-bottom: 15px;} .ips-box {margin-bottom: 15px;}
} }
...@@ -4742,14 +4753,14 @@ img.alert-icon {float: left;} ...@@ -4742,14 +4753,14 @@ img.alert-icon {float: left;}
.main-sc-section p {font-size: 12px;margin-bottom: 0;text-align: center;} .main-sc-section p {font-size: 12px;margin-bottom: 0;text-align: center;}
.selection-form-title{font-size: 13px;margin-bottom: 12px;} .selection-form-title{font-size: 13px;margin-bottom: 12px;}
.question-y-n label.second-label{font-size: 12px; margin-bottom: 17px;} .question-y-n label.second-label{font-size: 12px; margin-bottom: 17px;}
.wc-question-y-n{border: 2px #d3d3d3;border-style: solid none;} .wc-question-y-n{border: 2px #d3d3d3;border-style: solid none none;}
.wc-question-y-n label.second-label{font-size: 12px; margin-bottom: 17px;} .wc-question-y-n label.second-label{font-size: 12px; margin-bottom: 17px;}
.textarea-box textarea{margin-bottom: 32px;font-size: 12px;} .textarea-box textarea{margin-bottom: 32px;font-size: 12px;}
.section-br-inside{margin: 25px 0 22px;} .section-br-inside{margin: 25px 0 22px;}
.section-btn .box-btn-gray.half-btn{margin-right: 0; border-radius: 100px 0 0 100px;font-size: 13px;margin-right: -2.5px;border-right: none;padding: 0 0;width: 128px;} .section-btn .box-btn-gray.half-btn{margin-right: 0; border-radius: 100px 0 0 100px;font-size: 13px;margin-right: -2.5px;border-right: none;padding: 0 0;width: 128px;}
.section-btn .box-btn{font-size: 13px;border-radius: 0 100px 100px 0;margin-left: -2.5px;border:1px solid #03a0e7;padding: 0 0;width: 128px;} .section-btn .box-btn{font-size: 13px;border-radius: 0 100px 100px 0;margin-left: -2.5px;border:1px solid #03a0e7;padding: 0 0;width: 128px;}
.second-radio-primary.radio label{font-size: 12px;} .second-radio-primary.radio label{font-size: 12px;}
.section-btn {margin: 1px 0 7px;} /*.section-btn {margin: 1px 0 7px;}*/
.main-wc-section{padding : 0 0 64px 0;} .main-wc-section{padding : 0 0 64px 0;}
.main-wc-section .selection-form-title{margin-bottom: 21px;} .main-wc-section .selection-form-title{margin-bottom: 21px;}
.main-wc-section .full-width{ margin-bottom: 24px;} .main-wc-section .full-width{ margin-bottom: 24px;}
......
...@@ -99,6 +99,10 @@ ...@@ -99,6 +99,10 @@
</FORM> </FORM>
</NODE> </NODE>
<NODE name="verification_sent_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
<NODE name="invite_user_add_jsp" factory="Participant"> <NODE name="invite_user_add_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/> <INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE> </NODE>
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<div>&nbsp;</div> <div>&nbsp;</div>
<div class="form-group text-left"> <div class="form-group text-left">
<label>Email Address</label> <label>Email Address</label>
<oneit:ormInput obj="<%= companyUser %>" type="text" attributeName="Email" cssClass="form-control" autocomplete="off"/> <oneit:ormInput obj="<%= companyUser %>" type="text" attributeName="Email" cssClass="form-control" autocomplete="off" spellcheck="false"/>
<oneit:recalcClass id="right-mark-div" htmlTag="div" classScript="companyUser.emailExists() ? 'show': 'hide'" companyUser="<%= companyUser %>" class="right-mark"> <oneit:recalcClass id="right-mark-div" htmlTag="div" classScript="companyUser.emailExists() ? 'show': 'hide'" companyUser="<%= companyUser %>" class="right-mark">
<span id="right-mark"><img src="<%= request.getContextPath() %>/images/right-mark.svg"/></span> <span id="right-mark"><img src="<%= request.getContextPath() %>/images/right-mark.svg"/></span>
</oneit:recalcClass> </oneit:recalcClass>
......
...@@ -34,11 +34,11 @@ ...@@ -34,11 +34,11 @@
<div class="row"> <div class="row">
<div class="form-group text-left col-sm-6 col-xs-12"> <div class="form-group text-left col-sm-6 col-xs-12">
<label><oneit:ormlabel obj="<%= secUser %>" field="FirstName" /></label> <label><oneit:ormlabel obj="<%= secUser %>" field="FirstName" /></label>
<oneit:ormInput obj="<%= secUser %>" type="text" attributeName="FirstName" cssClass="form-control second-style" required="true" /> <oneit:ormInput obj="<%= secUser %>" type="text" attributeName="FirstName" cssClass="form-control second-style" required="true" spellcheck="false" />
</div> </div>
<div class="form-group text-left col-sm-6 col-xs-12"> <div class="form-group text-left col-sm-6 col-xs-12">
<label><oneit:ormlabel obj="<%= secUser %>" field="LastName" /></label> <label><oneit:ormlabel obj="<%= secUser %>" field="LastName" /></label>
<oneit:ormInput obj="<%= secUser %>" type="text" attributeName="LastName" cssClass="form-control second-style" required="true"/> <oneit:ormInput obj="<%= secUser %>" type="text" attributeName="LastName" cssClass="form-control second-style" required="true" spellcheck="false" />
</div> </div>
</div> </div>
<div class="form-group text-left"> <div class="form-group text-left">
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
<oneit:ormInput obj="<%= companyUser %>" type="text" attributeName="Phone" cssClass="form-control" required="true"/> <oneit:ormInput obj="<%= companyUser %>" type="text" attributeName="Phone" cssClass="form-control" required="true"/>
</div> </div>
<div class="form-group text-left"> <div class="form-group text-left">
<label>Company</label> <label>Hiring Team</label>
<% <%
if(company.getIsVerified()==Boolean.TRUE || !CollectionUtils.equals(company.getAddedByUser(), companyUser)) if(company.getIsVerified()==Boolean.TRUE || !CollectionUtils.equals(company.getAddedByUser(), companyUser))
{ {
......
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
</span> </span>
<span class="edit-btn-dropdown"> <span class="edit-btn-dropdown">
<oneit:button value="Share" cssClass="leftbtn" name="gotoPage" skin="link" <oneit:button value="Share" cssClass="<%= job.getJobStatus() != JobStatus.OPEN ? "leftbtn disabled" : "leftbtn"%>" name="gotoPage" skin="link"
disabled="<%= job.getJobStatus() != JobStatus.OPEN ? "true" : "false" %>" disabled="<%= job.getJobStatus() != JobStatus.OPEN ? "true" : "false" %>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", sharePage + "&JobID=" + job.getObjectID()) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", sharePage + "&JobID=" + job.getObjectID())
.mapEntry("cancelProcess", true) .mapEntry("cancelProcess", true)
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<% <%
SecUser txUser = SecUser.getTXUser(process.getTransaction()); SecUser txUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = txUser.getExtension(CompanyUser.REFERENCE_CompanyUser); CompanyUser companyUser = txUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
Job[] jobs = Job.SearchByAll().andCompanyUser(new EqualsFilter<>(companyUser)).search(transaction); Job[] jobs = Job.SearchByCompany().byCompany(companyUser.getCompany()).search(transaction);
if(jobs.length > 0) if(jobs.length > 0)
{ {
......
...@@ -208,6 +208,7 @@ ...@@ -208,6 +208,7 @@
<div class="text-center"> <div class="text-center">
<oneit:button value="Save as Draft and go to your jobs" name="saveJob" cssClass="btn btn-primary btn-gray largeBtn" <oneit:button value="Save as Draft and go to your jobs" name="saveJob" cssClass="btn btn-primary btn-gray largeBtn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", jobsPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", jobsPage)
.mapEntry("JobStatus", JobStatus.DRAFT)
.mapEntry ("restartProcess", Boolean.TRUE) .mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry ("attribNamesToRestore", Collections.singleton("Job")) .mapEntry ("attribNamesToRestore", Collections.singleton("Job"))
.toMap() %>" /> .toMap() %>" />
...@@ -215,7 +216,7 @@ ...@@ -215,7 +216,7 @@
<oneit:button value="Open this job" name="saveJob" cssClass="btn btn-primary btn-green top-margin-25 largeBtn" <oneit:button value="Open this job" name="saveJob" cssClass="btn btn-primary btn-green top-margin-25 largeBtn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry ("fromPage", fifthPage) .mapEntry ("fromPage", fifthPage)
.mapEntry ("openJob", Boolean.TRUE) .mapEntry("JobStatus", JobStatus.OPEN)
.mapEntry ("restartProcess", Boolean.TRUE) .mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry ("attribNamesToRestore", Collections.singleton("Job")) .mapEntry ("attribNamesToRestore", Collections.singleton("Job"))
.toMap() %>" /> .toMap() %>" />
......
...@@ -79,11 +79,6 @@ ...@@ -79,11 +79,6 @@
<oneit:button value="Sign in" name="login" cssClass="box-btn login-btn" <oneit:button value="Sign in" name="login" cssClass="box-btn login-btn"
requestAttribs="<%= CollectionUtils.EMPTY_MAP%>"/> requestAttribs="<%= CollectionUtils.EMPTY_MAP%>"/>
</div> </div>
<div class="form-group">
<oneit:button value="Don&CloseCurlyQuote;t have an account? Sign up" name="gotoPage" cssClass="forgot-pass" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", "sign_up.jsp")
.toMap() %>"></oneit:button>
</div>
</oneit:form> </oneit:form>
<div class="box-br-line"><span></span></div> <div class="box-br-line"><span></span></div>
<div class="box-label">Sign in using your social network of choice</div> <div class="box-label">Sign in using your social network of choice</div>
......
...@@ -65,6 +65,24 @@ ...@@ -65,6 +65,24 @@
opacity: 0.6; opacity: 0.6;
background-color: #0582ba; background-color: #0582ba;
} }
#overlay {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0,0,0,0.5);
z-index: 2;
cursor: pointer;
}
.welcome-pop-top {
margin-top: 20%;
}
.main-welcome-popup h2 {
padding: 0 20px 0;
}
</style> </style>
<div class="hire-the-right-candi">Hire the right candidate</div> <div class="hire-the-right-candi">Hire the right candidate</div>
...@@ -77,11 +95,25 @@ ...@@ -77,11 +95,25 @@
<oneit:dynInclude page="/extensions/adminportal/inc/company_user_data.jsp" data="<%= CollectionUtils.EMPTY_MAP%>" CompanyUser="<%= companyUser %>"/> <oneit:dynInclude page="/extensions/adminportal/inc/company_user_data.jsp" data="<%= CollectionUtils.EMPTY_MAP%>" CompanyUser="<%= companyUser %>"/>
<oneit:button value="Sign up" name="send" cssClass="box-btn send-btn" <oneit:button value="Sign up" name="send" cssClass="box-btn send-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", "sign_in.jsp?sent=true") requestAttribs="<%= CollectionUtils.mapEntry("nextPage", "verification_sent.jsp")
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "emailSent") .mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "emailSent")
.mapEntry("Company", company) .mapEntry("Company", company)
.toMap() %>"/> .toMap() %>"/>
</div> </div>
</oneit:form> </oneit:form>
<div id="overlay">
<div class="modal-dialog welcome-pop-top">
<div class="modal-body main-welcome-popup">
<h2>Talentology will be available for sign up soon!</h2>
<p>In the meantime, if you have any questions or feedback, please <strong>contact us via our messenger</strong>.<br/>
Thanks :)</p>
<div class="create-y-f-job">
<a href="http://www.talentology.com/">
Contact Us
</a>
</div>
</div>
</div>
</div>
<%@ include file="inc/htmlfooter_nopriv.jsp" %> <%@ include file="inc/htmlfooter_nopriv.jsp" %>
\ No newline at end of file
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page extends="oneit.servlets.jsp.FormJSP" %>
<%@ include file="/setuprequest.jsp" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<%! protected String getName (ServletConfig config) { return "verification_sent_jsp"; } %>
<%@ include file="inc/htmlheader_nopriv.jsp" %>
<div class="main-box-layout main-verify-identity">
<div class="box-label">A verification email has been sent to you. Please check your email 😀</div>
</div>
<%@ include file="inc/htmlfooter_nopriv.jsp" %>
\ No newline at end of file
...@@ -94,7 +94,12 @@ ...@@ -94,7 +94,12 @@
} }
} }
}); });
if (!$('input[name$=Password]').val() || $('input[name$=Password]').val() !== $('input[name$=Password2]').val())
{
empty = true;
}
if (empty) { if (empty) {
$('.verify-btn').attr('disabled', 'disabled'); $('.verify-btn').attr('disabled', 'disabled');
} else { } else {
...@@ -125,7 +130,7 @@ ...@@ -125,7 +130,7 @@
if(companyUser.getCompany().getAddedByUser() == companyUser) if(companyUser.getCompany().getAddedByUser() == companyUser)
{ {
%> %>
<oneit:button value="Verify and login" name="gotoPage" cssClass="box-btn verify-btn" <oneit:button value="Verify and proceed" name="gotoPage" cssClass="box-btn verify-btn"
requestAttribs="<%= CollectionUtils.mapEntry("socialLogin", socialLogin) requestAttribs="<%= CollectionUtils.mapEntry("socialLogin", socialLogin)
.mapEntry("procParams", CollectionUtils.mapEntry("Company", companyUser.getCompany()).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("Company", companyUser.getCompany()).toMap())
.mapEntry("nextPage", nextPage).toMap() %>"/> .mapEntry("nextPage", nextPage).toMap() %>"/>
...@@ -134,7 +139,7 @@ ...@@ -134,7 +139,7 @@
else else
{ {
%> %>
<oneit:button value="Verify and login" name="sendCompanyUserInvites" cssClass="box-btn verify-btn" <oneit:button value="Verify and proceed" name="sendCompanyUserInvites" cssClass="box-btn verify-btn"
requestAttribs="<%= CollectionUtils.mapEntry("socialLogin", socialLogin) requestAttribs="<%= CollectionUtils.mapEntry("socialLogin", socialLogin)
.mapEntry("CompanyUser", companyUser) .mapEntry("CompanyUser", companyUser)
.mapEntry("nextPage", homePage) .mapEntry("nextPage", homePage)
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
<ApplicantAccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="ApplicantAccountCreatedMail"/> <ApplicantAccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="ApplicantAccountCreatedMail"/>
</FORM> </FORM>
<FORM name="*.completeApplication" factory="Participant" class="performa.form.CompleteApplicationFP"/> <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="*.saveAndExitExperienece" factory="Participant" class="performa.form.SaveAndExitExperienceFP"/>
<FORM name="*.saveAndExitCulture" factory="Participant" class="performa.form.SaveAndExitCultureFP"/> <FORM name="*.saveAndExitCulture" factory="Participant" class="performa.form.SaveAndExitCultureFP"/>
<FORM name="*.saveAndExitWorkStyle" factory="Participant" class="performa.form.SaveAndExitWorkStypeFP"/> <FORM name="*.saveAndExitWorkStyle" factory="Participant" class="performa.form.SaveAndExitWorkStypeFP"/>
...@@ -35,4 +36,16 @@ ...@@ -35,4 +36,16 @@
<NO_USER_URL factory="String" value="ApplicantPortal-ApplyJob.htm"/> <NO_USER_URL factory="String" value="ApplicantPortal-ApplyJob.htm"/>
</AUTHENTICATOR> </AUTHENTICATOR>
</NODE> </NODE>
<NODE name="job_match_questions_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
<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> </OBJECTS>
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<RenderMode name="Page" preIncludeJSP="extensions/applicantportal/job_overview.jsp"/> <RenderMode name="Page" preIncludeJSP="extensions/applicantportal/job_overview.jsp"/>
<RenderMode name="SignIn" preIncludeJSP="extensions/applicantportal/sign_in.jsp"/> <RenderMode name="SignIn" preIncludeJSP="extensions/applicantportal/sign_in.jsp"/>
<RenderMode name="VerificationSent" preIncludeJSP="extensions/applicantportal/verification_sent.jsp"/>
<RenderMode name="ForgotPassword" preIncludeJSP="extensions/applicantportal/forgot_password.jsp"/> <RenderMode name="ForgotPassword" preIncludeJSP="extensions/applicantportal/forgot_password.jsp"/>
<RenderMode name="ResetPassword" preIncludeJSP="extensions/applicantportal/reset_password.jsp"/> <RenderMode name="ResetPassword" preIncludeJSP="extensions/applicantportal/reset_password.jsp"/>
<RenderMode name="ResetPasswordSent" preIncludeJSP="extensions/applicantportal/reset_password_sent.jsp"/> <RenderMode name="ResetPasswordSent" preIncludeJSP="extensions/applicantportal/reset_password_sent.jsp"/>
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
} }
process.setAttribute("JobApplication", jobApplication); process.setAttribute("JobApplication", jobApplication);
process.setAttribute("JobApplicationID", jobApplication.getID().longID());
BinaryContent logo = job.getLogo(); BinaryContent logo = job.getLogo();
...@@ -201,7 +202,7 @@ ...@@ -201,7 +202,7 @@
if(!(isSelectionComplete && isCultureComplete && isAssesmentComplete)) if(!(isSelectionComplete && isCultureComplete && isAssesmentComplete))
{ {
%> %>
Total time to complete: Approximately <oneit:toString value="<%= jobApplication.getRemainingTime() %>" mode="EscapeHTML"/> minutes Total time to complete: Approximately <%= jobApplication.getRemainingTime() %> minutes
<% <%
} }
%> %>
...@@ -222,9 +223,11 @@ ...@@ -222,9 +223,11 @@
else 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) 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() %>"/> .toMap() %>"/>
<% <%
} }
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
<div>&nbsp;</div> <div>&nbsp;</div>
<div class="form-group text-left"> <div class="form-group text-left">
<label>Email Address</label> <label>Email Address</label>
<oneit:ormInput obj="<%= job %>" type="text" attributeName="Email" cssClass="form-control second-style" style="text-transform: lowercase" autocomplete="off"/> <oneit:ormInput obj="<%= job %>" type="text" attributeName="Email" cssClass="form-control second-style" style="text-transform: lowercase" autocomplete="off" spellcheck="false"/>
<oneit:recalcClass htmlTag="div" classScript="job.isEmailFound() ? 'show': 'hide'" job="<%= job %>" class="right-mark"> <oneit:recalcClass htmlTag="div" classScript="job.isEmailFound() ? 'show': 'hide'" job="<%= job %>" class="right-mark">
<span id="right-mark"><img src="images/right-mark.svg"/></span> <span id="right-mark"><img src="images/right-mark.svg"/></span>
</oneit:recalcClass> </oneit:recalcClass>
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
Boolean isSelectionComplete = jobApplication.selectionCompleted(); //REQ Boolean isSelectionComplete = jobApplication.selectionCompleted(); //REQ
Boolean isCultureComplete = jobApplication.cultureCompleted(); Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted(); Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
boolean fromRequirements = pageNumber == "1";
%> %>
<oneit:dynIncluded> <oneit:dynIncluded>
...@@ -40,19 +42,21 @@ ...@@ -40,19 +42,21 @@
} }
%> %>
<li class="<%= pageNumber == "2" ? "active" : isCultureComplete ? "complate" : ""%>"> <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) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("fromRequirements", fromRequirements)
.toMap() %>"> .toMap() %>">
<span><%= isCultureComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "2" : "1")%></span> <span><%= isCultureComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "2" : "1")%></span>
<div class="mobile-hide">Workplace Preferences</div> <div class="mobile-hide">Workplace Preferences</div>
</oneit:button> </oneit:button>
</li> </li>
<li class="<%= pageNumber == "3" ? "active" : isAssesmentComplete ? "complate" : ""%>"> <li class="<%= pageNumber == "3" ? "active" : isAssesmentComplete ? "complate" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link" disabled="<%= isAssesmentComplete ? "true" : "false"%>" <oneit:button value=" " name="validateApplication" skin="link" disabled="<%= isAssesmentComplete ? "true" : "false"%>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"> .mapEntry("fromRequirements", fromRequirements)
.toMap() %>">
<span><%= isAssesmentComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "3" : "2")%></span> <span><%= isAssesmentComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "3" : "2")%></span>
<div class="mobile-hide">Your Work Style</div> <div class="mobile-hide">Your Work Style</div>
</oneit:button> </oneit:button>
......
<%@ page extends="oneit.servlets.process.AJAXProcessJSP" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<%@ page import="oneit.utils.text.FormatUtils" %>
<%! protected String getName (ServletConfig config) { return "job_match_questions_jsp"; } %>
<%
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction ();
Long jobAppId = (Long) process.getAttribute("JobApplicationID");
JobApplication jobApplication = JobApplication.getJobApplicationByID(objTran, jobAppId);
Job job = jobApplication.getJob();
List<Question> totalQuestions = (List<Question>) process.getAttribute("TotalQuestions");
List<Question> allQuestions = (List<Question>) process.getAttribute("AllQuestions");
int actualNumber = request.getParameter ("actualNumber") != null ? Integer.valueOf(request.getParameter ("actualNumber")) : (int) getData(request, "actualNumber") ;
int questionNumber = request.getParameter ("questionNumber") != null ? Integer.valueOf(request.getParameter ("questionNumber")) : (int) getData(request, "questionNumber") ;
Question question = allQuestions.get(questionNumber);
question = (Question)question.getInTransaction (objTran);
QuestionType questionType = question.getQuestionType();
String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey();
String currentPage = WebUtils.getArticleLink(request, objTran, WebUtils.JOB_APPLICATION, "JobMatchAssessment");
String nextPage = WebUtils.getArticleLink(request, objTran, WebUtils.JOB_APPLICATION, "SubmitApplication");
String culturePage = WebUtils.getArticleLink(request, objTran, WebUtils.JOB_APPLICATION, "WorkplaceCulture");
%>
<oneit:form name="editApplication" method="POST">
<oneit:evalBody buffer="<%= getBuffer(request) %>">
<%
if(actualNumber == 1 )
{
int maxRating = 7;
int midRating = 4;
String otherRating = "2, 3, 5, 6";
%>
<div class="main-sc-section sj-1">
<p>Using the scale given, indicate how important to you are the following aspects in your work life. Use the following system:</p>
<ul class="security-level">
<li><span>1</span> means of very little importance to you</li>
<li><oneit:toString value="<%= midRating %>" mode="EscapeHTML"/> means about average in importance to you</li>
<li><oneit:toString value="<%= maxRating %>" mode="EscapeHTML"/> means of high importance to you</li>
</ul>
<p>Use the other numbers (<oneit:toString value="<%= otherRating %>" mode="EscapeHTML"/>) to indicate in-between levels of importance to you.</p>
</div>
<div class="selection-br-line"></div>
<%
}
else if(questionType == QuestionType.IPSATIVE && actualNumber == 31)
{
%>
<div class="main-sc-section sj-1">
<p>
For questions like these, indicate your preference by selecting the number closest to the term or idea that's most like you. We know that it can be challenging to make a choice sometimes, but try to avoid selecting the middle value.
</p>
</div>
<div class="selection-br-line"></div>
<%
}
%>
<div class="main-sc-section main-rate-section">
<%
int totNoOfQuestions = totalQuestions.size();
if(actualNumber <= totNoOfQuestions)
{
String numberText = actualNumber + "/" + totNoOfQuestions;
boolean completeApplication = questionNumber + 1 >= allQuestions.size();
if(questionType == QuestionType.SCALAR)
{
%>
<div class="rateing-title">
Rate the importance of each item below
<span><oneit:toString value="<%= numberText %>" mode="EscapeHTML"/></span>
</div>
<div class="rating-box-title">
<oneit:toString value="<%= question.getDescription() %>" mode="EscapeHTML"/>
</div>
<%
}
else
{
%>
<div class="rateing-title">
Select your preference on the scale below
<span><oneit:toString value="<%= numberText %>" mode="EscapeHTML"/></span>
</div>
<%
}
%>
<div class="ratting-box">
<%
if(questionType == QuestionType.SCALAR)
{
%>
<span>Very little importance</span>
<%
}
else
{
%>
<span class="left-s-label"><div><%= FormatUtils.stringify(question.getDescription(), "EscapeHTML") %></div></span> <!-- toString tag not used due to styling issue with additional span tag -->
<%
}
%>
<ul class="pagination ratting-number">
<%
for(int index=1; index <= (questionType == QuestionType.SCALAR ? 7 : 5); index++)
{
int actNumber = questionType == QuestionType.SCALAR ? actualNumber + 1 : actualNumber + 2;
%>
<li class="<%=((questionType == QuestionType.SCALAR) ? "scaler" : "ipsative")%>">
<a href="javascript:void(0);">
<input type="radio" name="answer" id="<%= index %>" onchange="gotoNextQuestion(<%= questionNumber + 1 %> , <%= actNumber %>, <%= completeApplication %>, <%= index %>);" class="answer_radio">
<label for="<%= index %>"><%= index %></label>
</a>
</li>
<%
}
%>
</ul>
<%
if(questionType == QuestionType.SCALAR)
{
%>
<span>High importance</span>
<%
}
else if(question.getRightQuestion() != null)
{
%>
<span class="right-s-label"><div><%= FormatUtils.stringify(question.getRightQuestion().getDescription(), "EscapeHTML") %></div></span>
<%
}
%>
</div>
<%
}
%>
</div>
<%
if(!jobApplication.cultureCompleted())
{
%>
<oneit:button value=" " name="gotoPage" id="gotoPageNext" cssClass="box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", culturePage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.toMap() %>"/>
<%
}
else
{
%>
<oneit:button value=" " name="completeApplication" id="gotoPageNext" cssClass="box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.toMap() %>"/>
<%
}
%>
</oneit:evalBody>
</oneit:form>
\ No newline at end of file
<%@ 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
<%@ 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_job_match_answers_jsp"; } %>
<oneit:form method="POST">
<%
ORMProcessState process = (ORMProcessState)ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = ObjectTransaction.getTransaction();
int questionNumber = Integer.valueOf(request.getParameter ("questionNumber")) - 1;
int actualNumber = Integer.valueOf(request.getParameter ("actualNumber"));
int answerNo = Integer.valueOf(request.getParameter ("answerNo"));
boolean complete = Boolean.valueOf(request.getParameter ("completeApplication"));
Long jobAppId = (Long) process.getAttribute("JobApplicationID");
JobApplication jobApplication = JobApplication.getJobApplicationByID(objTran, jobAppId);
List<Question> allQuestions = (List<Question>) process.getAttribute("AllQuestions");
jobApplication = (JobApplication) jobApplication.getInTransaction (objTran);
Debug.assertion (jobApplication.getObjectWriteability() == FieldWriteability.TRUE, "Must be able to edit");
Question question = (Question) allQuestions.get(questionNumber).getInTransaction (objTran);
Filter<Answer> filter = Answer.SearchByAll().andQuestion(new EqualsFilter<>(question));
Answer answer = jobApplication.pipelineJobApplication().toCandidate().toProfileAssessmentAnswers(filter).val();
if(answer == null)
{
answer = Answer.createAnswer(objTran);
jobApplication.getCandidate().addToProfileAssessmentAnswers(answer);
answer.setQuestion(question);
}
answer.setAnswerNo(answer.getFinalAnswerValue(answerNo));
%>
</oneit:form>
\ No newline at end of file
...@@ -6,16 +6,38 @@ ...@@ -6,16 +6,38 @@
<oneit:dynIncluded> <oneit:dynIncluded>
<% <%
String currentPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment"); String currentPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
String nextPage = WebUtils.getSamePageInRenderMode(request, "SubmitApplication"); String nextPage = WebUtils.getSamePageInRenderMode(request, "SubmitApplication");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication"); ObjectTransaction objTran = ObjectTransaction.getTransaction();
Job job = jobApplication.getJob(); Long jobAppId = process.getAttribute("JobApplicationID") != null ?
Candidate candidate = jobApplication.getCandidate(); (Long) process.getAttribute("JobApplicationID") :
int questionNumber = process.getAttribute("QuestionNumber")!= null ? (int) process.getAttribute("QuestionNumber") : jobApplication.getQuestionNumber(); ((JobApplication) process.getAttribute("JobApplication")).getID().longValue();
int actualNumber = process.getAttribute("ActualNumber")!= null ? (int) process.getAttribute("ActualNumber") : jobApplication.getActualQuestionNumber(); JobApplication jobApplication = null;
List<Question> totalQuestions = (List<Question>) process.getAttribute("TotalQuestions");
List<Question> allQuestions = (List<Question>) process.getAttribute("AllQuestions"); if(jobAppId != null)
String exitPage = WebUtils.getArticleLink(request, transaction, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey(); {
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 - job match assessment ");
if(process.getAttribute("JobApplicationID") == null)
{
process.setAttribute("JobApplicationID" , jobApplication.getID().longValue());
}
Job job = jobApplication.getJob();
Candidate candidate = jobApplication.getCandidate();
int questionNumber = jobApplication.getQuestionNumber();
int actualNumber = jobApplication.getActualQuestionNumber();
List<Question> totalQuestions = (List<Question>) process.getAttribute("TotalQuestions");
List<Question> allQuestions = (List<Question>) process.getAttribute("AllQuestions");
String exitPage = WebUtils.getArticleLink(request, transaction, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey();
if(totalQuestions == null) if(totalQuestions == null)
{ {
...@@ -31,43 +53,7 @@ ...@@ -31,43 +53,7 @@
process.setAttribute("AllQuestions", allQuestions); process.setAttribute("AllQuestions", allQuestions);
} }
//to store current question number in history Question question = (Question) allQuestions.get(questionNumber).getInTransaction (objTran);
if(process.getAttribute("QuestionNumber")==null || process.getAttribute("ActualNumber")==null)
{
request.getSession().setAttribute ("historyQstNo", null);
request.getSession().setAttribute ("historyActualNo", null);
}
if(request.getSession().getAttribute("historyQstNo")!=null && process.getAttribute("QuestionNumber")!= null)
{
if((int) process.getAttribute("QuestionNumber") <= (int) request.getSession().getAttribute("historyQstNo"))
{
questionNumber = (int) request.getSession().getAttribute("historyQstNo");
}
}
if(request.getSession().getAttribute("historyActualNo")!=null && process.getAttribute("ActualNumber")!= null)
{
if((int) process.getAttribute("ActualNumber") <= (int) request.getSession().getAttribute("historyActualNo"))
{
actualNumber = (int) request.getSession().getAttribute("historyActualNo");
}
}
request.getSession().setAttribute ("historyQstNo", questionNumber);
request.getSession().setAttribute ("historyActualNo", actualNumber);
boolean toRedirect = jobApplication.initAssessmentAnswers(allQuestions);
if(toRedirect)
{
process.setAttribute("QuestionNumber", questionNumber);
process.setAttribute("ActualNumber", actualNumber);
%><%@include file="/saferedirect.jsp" %><%
}
Question question = allQuestions.get(questionNumber);
QuestionType questionType = question.getQuestionType(); QuestionType questionType = question.getQuestionType();
%> %>
<script> <script>
...@@ -79,11 +65,57 @@ ...@@ -79,11 +65,57 @@
$(".ratting-number li.active").removeClass("active" ); $(".ratting-number li.active").removeClass("active" );
$(".ratting-number input[type='radio']:checked").closest('li').addClass("active" ); $(".ratting-number input[type='radio']:checked").closest('li').addClass("active" );
}); });
$('.timer').countimer({
displayMode: 1,
initMinutes: 0,
minuteIndicator: ' min ago',
leadingZeros: 0
});
}); });
function gotoNextQuestion() function gotoNextQuestion(questionNumber, actualNumber, completeApplication, answerNo)
{ {
$("#nextButton").click(); $('.answer_radio').prop('disabled', true);
$('.main-sc-section').css('opacity','0.6');
var radioid = "#" + answerNo;
$(radioid).closest('li').addClass(" active ");
setTimeout(
function() {
ajaxProcessAddJQ ("<%= request.getContextPath() %>/extensions/applicantportal/inc/save_job_match_answers.jsp", 'form' ,
{questionNumber : questionNumber, answerNo: answerNo, actualNumber: actualNumber, completeApplication: completeApplication},
function () {},
function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 0) {
log("Empty Response. Status : " + jqXHR.status);
} else {
window.alert("Error processing request:" + errorThrown);
}
},
"POST");
if(completeApplication)
{
$("#gotoPageNext").click();
return false;
}
ajaxProcessAddJQ ("<%= request.getContextPath() %>/extensions/applicantportal/inc/job_match_questions.jsp", '.job-match-questions' , {questionNumber : questionNumber, actualNumber: actualNumber},
function (theHTML_JQ) {
$( ".job-match-questions" ).after("<div class='job-match-questions'></div>"); //This will add a new element to the DOM
$('.job-match-questions:last').html(theHTML_JQ).hide(); // Add the new HTML to the newly created element and hide it
$(".job-match-questions:first").slideUp();
$(".job-match-questions:last").slideDown();
setTimeout(function(){
$(".job-match-questions:first").remove();
},800);
});
$('.timer').countimer('start');
},
500); // delay in order to visually reinforce selection before advancing
} }
</script> </script>
...@@ -91,7 +123,7 @@ ...@@ -91,7 +123,7 @@
<div class="selection-aust-logo"> <div class="selection-aust-logo">
<% <%
BinaryContent logo = job.getLogo(); BinaryContent logo = job.getLogo();
if(logo != null) if(logo != null)
{ {
int logoHeight = 45; int logoHeight = 45;
...@@ -124,159 +156,21 @@ ...@@ -124,159 +156,21 @@
<oneit:dynInclude page="/extensions/applicantportal/inc/application_main_tabs.jsp" PageNumber="3" data="<%= CollectionUtils.EMPTY_MAP%>"/> <oneit:dynInclude page="/extensions/applicantportal/inc/application_main_tabs.jsp" PageNumber="3" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="section-page-area section-job-match"> <div class="section-page-area section-job-match">
<% <div class="job-match-questions">
if(actualNumber == 1 ) <oneit:dynInclude page="/extensions/applicantportal/inc/job_match_questions.jsp"
{ actualNumber="<%= actualNumber %>"
int maxRating = 7; questionNumber ="<%= questionNumber %>"
int midRating = 4; data="<%= CollectionUtils.EMPTY_MAP%>"/>
String otherRating = "2, 3, 5, 6"; </div>
%> <div class="job-match-buttons">
<div class="main-sc-section sj-1">
<p>Using the scale given, indicate how important to you are the following aspects in your work life. Use the following system:</p>
<ul class="security-level">
<li><span>1</span> means of very little importance to you</li>
<li><oneit:toString value="<%= midRating %>" mode="EscapeHTML"/> means about average in importance to you</li>
<li><oneit:toString value="<%= maxRating %>" mode="EscapeHTML"/> means of high importance to you</li>
</ul>
<p>Use the other numbers (<oneit:toString value="<%= otherRating %>" mode="EscapeHTML"/>) to indicate in-between levels of importance to you.</p>
</div>
<div class="selection-br-line"></div>
<%
}
else if(questionType == QuestionType.IPSATIVE && actualNumber == 31)
{
%>
<div class="main-sc-section sj-1">
<p>
For questions like these, indicate your preference by selecting the number closest to the term or idea that's most like you. We know that it can be challenging to make a choice sometimes, but try to avoid selecting the middle value.
</p>
</div>
<div class="selection-br-line"></div>
<%
}
%>
<div class="main-sc-section main-rate-section">
<%
FormTag applicationForm = FormTag.getActiveFormTag(request);
FormBuilder formBuilder = applicationForm.getFormBuilder();
int totNoOfQuestions = totalQuestions.size();
if(actualNumber <= totNoOfQuestions)
{
Answer answer = jobApplication.getAnswerForQuestion(question);
String optionKey = WebUtils.getInputKey(request, answer, Answer.FIELD_AnswerNo);
String formValue = formBuilder.fieldValue (optionKey, answer.getAnswerNo() == null ? "" : String.valueOf(answer.getAnswerNo()));
String numberText = actualNumber + "/" + totNoOfQuestions;
if(questionType == QuestionType.SCALAR)
{
%>
<div class="rateing-title">
Rate the importance of each item below
<span><oneit:toString value="<%= numberText %>" mode="EscapeHTML"/></span>
</div>
<div class="rating-box-title">
<oneit:toString value="<%= question.getDescription() %>" mode="EscapeHTML"/>
</div>
<%
}
else
{
%>
<div class="rateing-title">
Select your preference on the scale below
<span><oneit:toString value="<%= numberText %>" mode="EscapeHTML"/></span>
</div>
<%
}
%>
<div class="ratting-box">
<%
if(questionType == QuestionType.SCALAR)
{
%>
<span>Very little importance</span>
<%
}
else
{
%>
<span class="left-s-label"><div><%= FormatUtils.stringify(question.getDescription(), "EscapeHTML") %></div></span> <!-- toString tag not used due to styling issue with additional span tag -->
<%
}
%>
<ul class="pagination ratting-number">
<%
for(int index=1; index <= (questionType == QuestionType.SCALAR ? 7 : 5); index++)
{
String activeStr = (CollectionUtils.equals(String.valueOf(index), formValue) ? "active " : "");
String selectedStr = (CollectionUtils.equals(String.valueOf(index), formValue) ? "checked" : "");
%>
<li class="<%= activeStr + ((questionType == QuestionType.SCALAR) ? "scaler" : "ipsative")%>">
<a href="javascript:void(0);">
<input type="radio" name="<%= optionKey %>" id="<%= index %>" onchange="gotoNextQuestion();" class="answer_radio" value="<%= answer.getFinalAnswerValue(index) %>" <%= selectedStr %>>
<label for="<%= index %>"><%= index %></label>
</a>
</li>
<%
}
%>
</ul>
<%
if(questionType == QuestionType.SCALAR)
{
%>
<span>High importance</span>
<%
}
else if(question.getRightQuestion() != null)
{
%>
<span class="right-s-label"><div><%= FormatUtils.stringify(question.getRightQuestion().getDescription(), "EscapeHTML") %></div></span>
<%
}
%>
</div>
<div class="section-btn text-center">
<oneit:button value="Save and exit" name="saveAndExitWorkStyle" cssClass="box-btn-gray"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", exitPage)
.mapEntry ("JobApplication", jobApplication)
.mapEntry(UpdateMappedObjFP.FAIL_VALIDATION_ERRORS, Boolean.FALSE)
.toMap() %>"/>
<%
if(questionNumber + 1 < allQuestions.size())
{
%>
<oneit:button value=" " name="gotoPage" id="nextButton" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry("procParams", CollectionUtils.mapEntry("QuestionNumber", (questionNumber + 1)).mapEntry("ActualNumber", questionType == QuestionType.SCALAR ? actualNumber + 1 : actualNumber + 2).toMap())
.toMap() %>"/>
<%
}
else
{
%>
<oneit:button value=" " name="completeApplication" id="nextButton" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.mapEntry("restartProcess", Boolean.TRUE)
.toMap() %>"/>
<%
}
%>
</div>
<%
}
%>
<div class="auto-save"> <div class="auto-save">
<%-- <div>Autosaved 1 min ago.</div> --%> Autosaved <span class="timer"></span>
</div>
<div class="section-btn text-center">
<a href="<%= exitPage%>" class="btn box-btn-gray">Save and exit</a>
</div> </div>
</div> </div>
</div> </div>
</oneit:form> </oneit:form>
</div> </div>
</div>
</oneit:dynIncluded> </oneit:dynIncluded>
\ 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. #emailExists = An account already exists with this email address.
#emailSent = A verification email has been sent to you. Please check your email :). #emailSent = A verification email has been sent to you. Please check your email :).
#alreadyApplied = You have already applied for this job. #alreadyApplied = You have already applied for this job.
...@@ -5,18 +5,35 @@ ...@@ -5,18 +5,35 @@
<oneit:dynIncluded> <oneit:dynIncluded>
<% <%
ObjectTransaction objTran = process.getTransaction (); ObjectTransaction objTran = ObjectTransaction.getTransaction();
String nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture"); 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(); Job job = jobApplication.getJob();
String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page"); String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page");
exitPage = exitPage + "&id=" + job.getID() + "&key=" + job.getRandomKey(); 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 isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted(); Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
boolean toRedirect = jobApplication.createAssessmentCriteriaObjects();
if(isCultureComplete && isAssesmentComplete) if(isCultureComplete && isAssesmentComplete)
{ {
...@@ -26,13 +43,6 @@ ...@@ -26,13 +43,6 @@
{ {
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment"); nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
} }
if (toRedirect)
{
%>
<%@ include file="/saferedirect.jsp" %>
<%
}
%> %>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() $(document).ready(function()
...@@ -40,8 +50,43 @@ ...@@ -40,8 +50,43 @@
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true}); recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$('.first-element-focus').focus(); $('.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'); $(document.body).addClass('bg-color');
</script> </script>
...@@ -86,57 +131,58 @@ ...@@ -86,57 +131,58 @@
</p> </p>
</div> </div>
<% <%
FormTag applicationForm = FormTag.getActiveFormTag(request);
FormBuilder formBuilder = applicationForm.getFormBuilder();
boolean first = true; boolean first = true;
for(CriteriaType ct: CriteriaType.getCriteriaTypeArray()) 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="selection-br-line"></div>
<div class="main-sc-section"> <div class="main-sc-section">
<div class="selection-form-title"><oneit:toString value="<%= ct %>" mode="EscapeHTML"/></div> <div class="selection-form-title"><oneit:toString value="<%= ct %>" mode="EscapeHTML"/></div>
<% <%
int total = answerList.size(); int total = criteriaList.size();
int answerNo = 1; int answerNo = 1;
for(AssessmentCriteriaAnswer answer: answerList) for(AssessmentCriteria criteria : criteriaList)
{ {
String optionKey = WebUtils.getInputKey(request, answer, AssessmentCriteriaAnswer.FIELD_Answer); String trueID = criteria.getObjectID() + "_Y";
String formValue = formBuilder.fieldValue (optionKey, answer.getAnswer() == null ? "" : String.valueOf(answer.getAnswer())); String falseID = criteria.getObjectID() + "_N";
String trueID = answer.getObjectID() + "_Y"; String trueSelected = "";
String falseID = answer.getObjectID() + "_N"; String falseSelected = "";
String trueSelected = CollectionUtils.equals("true", formValue) ? "checked" : ""; AssessmentCriteriaAnswer answer = jobApplication.getAssessmentCriteriaAnswer(criteria);
String falseSelected = CollectionUtils.equals("false", formValue) ? "checked" : "";
if(answer != null)
{
trueSelected = CollectionUtils.equals(answer.getAnswer(), Boolean.TRUE) ? "checked" : "";
falseSelected = CollectionUtils.equals(answer.getAnswer(), Boolean.FALSE) ? "checked" : "";
}
%> %>
<div class="form-group-new question-y-n"> <div class="form-group-new question-y-n">
<label class="second-label"> <label class="second-label">
<oneit:toString value="<%= answer.getAssessmentCriteria() %>" mode="EscapeHTML"/> <oneit:toString value="<%= criteria %>" mode="EscapeHTML"/>
</label> </label>
<div class="radio radio-primary second-radio-primary"> <div class="radio radio-primary second-radio-primary">
<input type="radio" name="<%= optionKey %>" value="true" id="<%= trueID%>" <%= trueSelected %> class="<%= first ? "first-element-focus" : ""%>"/> <input type="radio" name="<%= criteria.getObjectID() %>" value="true" id="<%= trueID%>" <%= trueSelected %> class="<%= first ? "first-element-focus" : ""%>" onchange="saveAnswer(<%= criteria.getObjectID() %>, true)"/>
<label for="<%= trueID%>"> <label for="<%= trueID %>">
Yes Yes
</label> </label>
</div> </div>
<div class="radio radio-primary second-radio-primary"> <div class="radio radio-primary second-radio-primary">
<input type="radio" name="<%= optionKey %>" value="false" id="<%= falseID%>" <%= falseSelected %>/> <input type="radio" name="<%= criteria.getObjectID() %>" value="false" id="<%= falseID%>" <%= falseSelected %> onchange="saveAnswer(<%= criteria.getObjectID() %>, false)"/>
<label for="<%= falseID%>"> <label for="<%= falseID %>">
No No
</label> </label>
</div> </div>
</div> </div>
<oneit:recalcClass htmlTag="div" classScript="answer.getAnswer() != null && answer.getAnswer() ? 'show': 'hide'" answer="<%= answer %>"> <div id="<%= criteria.getObjectID() %>" class="<%= (answer != null && answer.getAnswer() != null && answer.getAnswer() ? "show": "hide") + " textarea-box" %>">
<div class="textarea-box"> <textarea name="<%= criteria.getObjectID() + "_notes"%>" placeholder="Please add any notes to support your answer"
<oneit:ormtextarea obj="<%= answer %>" attributeName="Notes" cssClass="form-control second-style" class="form-control second-style" onblur="saveAnswer(<%= criteria.getObjectID() %>, true, this.value)"><%= answer != null && answer.getNotes() != null ? answer.getNotes() : ""%></textarea>
placeholder="Please add any notes to support your answer"/>
</div> </div>
</oneit:recalcClass>
<% <%
first = false; first = false;
...@@ -155,14 +201,14 @@ ...@@ -155,14 +201,14 @@
} }
} }
%> %>
<div class="auto-save">
Autosaved <span class="timer"></span>
</div>
<div class="selection-br-line"></div> <div class="selection-br-line"></div>
<div class="main-sc-section-bottom btn-remove-padd"> <div class="main-sc-section-bottom btn-remove-padd">
<div class="section-btn text-center"> <div class="section-btn text-center">
<oneit:button value="Save and exit" name="saveAndExitExperienece" cssClass="box-btn-gray half-btn" <a href="<%= exitPage%>" class="btn box-btn-gray">Save and exit</a>
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", exitPage)
.mapEntry ("JobApplication", jobApplication)
.mapEntry(UpdateMappedObjFP.FAIL_VALIDATION_ERRORS, Boolean.FALSE)
.toMap() %>"/>
<% <%
if(isCultureComplete && isAssesmentComplete) if(isCultureComplete && isAssesmentComplete)
{ {
...@@ -179,12 +225,14 @@ ...@@ -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) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromRequirements", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.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) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromRequirements", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/> .toMap() %>"/>
<% <%
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<oneit:dynIncluded> <oneit:dynIncluded>
<% <%
ObjectTransaction objTran = process.getTransaction (); ObjectTransaction objTran = process.getTransaction ();
String currentPage = WebUtils.getSamePageInRenderMode(request, "SignIn"); String successPage = WebUtils.getSamePageInRenderMode(request, "VerificationSent");
String nextPage = WebUtils.getArticleLink(request, objTran, WebUtils.JOB_APPLICATION, "Page"); String nextPage = WebUtils.getArticleLink(request, objTran, WebUtils.JOB_APPLICATION, "Page");
Job job = (Job) process.getAttribute("Job"); Job job = (Job) process.getAttribute("Job");
Candidate candidate = (Candidate) process.getAttribute("NewCandidate"); Candidate candidate = (Candidate) process.getAttribute("NewCandidate");
...@@ -158,10 +158,11 @@ ...@@ -158,10 +158,11 @@
</oneit:recalcClass> </oneit:recalcClass>
</div> </div>
<oneit:recalcClass htmlTag="div" classScript="job.isEmailFound() ? 'show': 'hide'" job="<%= job %>">
<oneit:recalcClass htmlTag="div" classScript="job.isEmailFound() ? 'show': 'hide'" job="<%= job %>" id="password-fileds">
<div class="form-group text-left"> <div class="form-group text-left">
<label>Password</label> <label>Password</label>
<oneit:ormInput obj="<%= job %>" type="password" attributeName="Password" cssClass="form-control second-style" /> <oneit:ormInput obj="<%= job %>" type="password" attributeName="Password" cssClass="form-control second-style" autofocus="true"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<oneit:button value="Forgot password?" name="gotoPage" cssClass="forgot-pass" skin="link" <oneit:button value="Forgot password?" name="gotoPage" cssClass="forgot-pass" skin="link"
...@@ -182,7 +183,7 @@ ...@@ -182,7 +183,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<oneit:button value="Send link" name="sendVerificationMail" cssClass="box-btn send-link-btn" <oneit:button value="Send link" name="sendVerificationMail" cssClass="box-btn send-link-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", successPage)
.mapEntry("Job",job) .mapEntry("Job",job)
.mapEntry("restartProcess", Boolean.TRUE) .mapEntry("restartProcess", Boolean.TRUE)
.mapEntry("attribNamesToRestore", Collections.singleton("Job")) .mapEntry("attribNamesToRestore", Collections.singleton("Job"))
......
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/inc/stdcms.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<oneit:dynIncluded>
<%
ObjectTransaction objTran = process.getTransaction ();
String currentPage = WebUtils.getSamePageInRenderMode(request, "SignIn");
String nextPage = WebUtils.getArticleLink(request, objTran, WebUtils.JOB_APPLICATION, "Page");
Job job = (Job) process.getAttribute("Job");
Candidate candidate = (Candidate) process.getAttribute("NewCandidate");
if(request.getParameter("JobID")!=null)
{
job = Job.getJobByID(transaction, Long.parseLong((String) request.getParameter("JobID")));
}
Debug.assertion(job != null, "Job is null in applicant portal");
String socialLoginNextPage = nextPage + "&JobID=" + job.getID().toString();
%>
<script type="text/javascript">
var interval;
$(document.body).addClass('bg-color');
</script>
<div class="main-verify-identity">
<%
BinaryContent logo = job.getLogo();
if(logo != null)
{
int logoHeight = 45;
%>
<div class="verify-aust-logo">
<tagfile:img src="<%= ThumbnailUtils.filterImage(DiskFileBinaryContent.getRelativeURL(logo), "KEEP", new ScaleWithin (0, logoHeight)) %>" />
</div>
<%
}
%>
<div class="pl-verify">Please verify your identity before applying to:</div>
<div class="verify-i-title">
<oneit:toString value="<%= job.getJobTitle() %>" mode="EscapeHTML"/>
</div>
<div class="main-box-layout verify-i-setpone">
<div class="box-label">Sign in using your social network of choice</div>
<oneit:form name="socialLogin" method="post">
<ul class="social-login">
<li>
<oneit:button value=" " name="linkedinOAuthLogin" skin="link" cssClass="social_login_btn"
disabled="<%= Utils.linkedInAvailable() ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry ("nextPage", socialLoginNextPage).toMap() %>">
<img src="<%= request.getContextPath() %>/images/login-linkedin-icon.svg" />
</oneit:button>
</li>
<li>
<oneit:button value=" " name="facebookOAuthLogin" skin="link" cssClass="social_login_btn"
disabled="<%= Utils.facebookAvailable() ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry ("nextPage", socialLoginNextPage).toMap() %>">
<img src="<%= request.getContextPath() %>/images/login-facebok-icon.svg" />
</oneit:button>
</li>
<li>
<oneit:button value=" " name="googleOAuthLogin" skin="link" cssClass="social_login_btn"
disabled="<%= Utils.googleAvailable() ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry ("nextPage", socialLoginNextPage).toMap() %>">
<img src="<%= request.getContextPath() %>/images/login-google.png" />
</oneit:button>
</li>
</ul>
</oneit:form>
<div class="box-br-line"><span></span></div>
<div class="box-label">Sent! Check your email now 😀</div>
</div>
</div>
</oneit:dynIncluded>
\ No newline at end of file
...@@ -60,13 +60,23 @@ ...@@ -60,13 +60,23 @@
<script> <script>
$(document.body).addClass('bg-color'); $(document.body).addClass('bg-color');
$(document).ready(function()
{
$('.timer').countimer({
displayMode: 1,
initMinutes: 0,
minuteIndicator: ' min ago',
leadingZeros: 0
});
});
function gotoNextQuestion() function gotoNextQuestion()
{ {
setTimeout( setTimeout(
function() { function() {
$("#nextButton").click(); $("#nextButton").click();
}, },
1000); // delay in order to visually reinforce selection before advancing 10); // delay in order to visually reinforce selection before advancing
} }
</script> </script>
...@@ -152,6 +162,10 @@ ...@@ -152,6 +162,10 @@
} }
%> %>
</div> </div>
<div class="auto-save">
Autosaved <span class="timer"></span>
</div>
</div> </div>
<div class="selection-br-line"></div> <div class="selection-br-line"></div>
<div class="main-sc-section-bottom btn-remove-padd"> <div class="main-sc-section-bottom btn-remove-padd">
...@@ -159,10 +173,20 @@ ...@@ -159,10 +173,20 @@
<% <%
if(cultureQuestionNo < total) if(cultureQuestionNo < total)
{ {
Set<String> attribsToRestore = new HashSet<String> ();
attribsToRestore.add ("CultureQuestionNo");
attribsToRestore.add ("JobApplication");
process.setAttribute("CultureQuestionNo", (cultureQuestionNo + 1));
%> %>
<oneit:button value=" " name="gotoPage" id="nextButton" skin="link" <oneit:button value=" " name="saveAndExitCulture" id="nextButton" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry("procParams", CollectionUtils.mapEntry("CultureQuestionNo", (cultureQuestionNo + 1)).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("CultureQuestionNo", (cultureQuestionNo + 1))
.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("attribNamesToRestore", attribsToRestore)
.mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.mapEntry ("restartProcess", Boolean.TRUE)
.toMap() %>"/> .toMap() %>"/>
<% <%
} }
...@@ -173,29 +197,34 @@ ...@@ -173,29 +197,34 @@
.mapEntry(UpdateMappedObjFP.FAIL_VALIDATION_ERRORS, Boolean.FALSE) .mapEntry(UpdateMappedObjFP.FAIL_VALIDATION_ERRORS, Boolean.FALSE)
.toMap() %>"/> .toMap() %>"/>
<% <%
if(isAssesmentComplete) if(isLast && isAssesmentComplete)
{ {
%> %>
<oneit:button value="Complete" name="completeApplication" id="nextButton" cssClass="box-btn" <oneit:button value="Complete" name="completeApplication" id="nextButton" cssClass="box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication")) .mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.mapEntry("restartProcess", Boolean.TRUE)
.toMap() %>"/> .toMap() %>"/>
<% <%
} }
else if(isLast) else if(isLast)
{ {
%> %>
<oneit:button value="Proceed to next step" name="saveAndExitCulture" cssClass="box-btn m-hide" id="gotoPage"
<oneit:button value="Proceed to next step" name="gotoPage" cssClass="box-btn m-hide"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/> .mapEntry ("restartProcess", Boolean.TRUE)
<oneit:button value="Proceed" name="gotoPage" cssClass="box-btn show-mobile" .mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.toMap() %>"/>
<oneit:button value="Proceed" name="saveAndExitCulture" cssClass="box-btn show-mobile"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/> .mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.toMap() %>"/>
<% <%
} }
%> %>
......
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
<oneit:script src="/scripts/utils.js" /> <oneit:script src="/scripts/utils.js" />
<oneit:script src="/scripts/recalc.js" /> <oneit:script src="/scripts/recalc.js" />
<oneit:script src="/scripts/jquery.circleProgressBar.min.js"/> <oneit:script src="/scripts/jquery.circleProgressBar.min.js"/>
<oneit:script src="/scripts/moment.js"/>
<oneit:script src="/scripts/countimer.js"/>
<oneit:script src="/scripts/slick.min.js"/> <oneit:script src="/scripts/slick.min.js"/>
<oneit:script src="/scripts/raphael-min.js"/> <oneit:script src="/scripts/raphael-min.js"/>
</oneit:script> </oneit:script>
......
/**!
* @preserve
*
* Simple jQuery plugin to start a basic count up timer on any HTML element.
*
* I wrote this plugin for using into a personal project but could be useful
* for everyone who needs a simple counter.
*
* Licensed under the MIT license.
*/
;(function ($, window, document, undefined) {
'use strict';
var prefix = 'plugin_';
var pluginName = 'countimer';
var Plugin = function(element, options) {
// Main instance
var plugin = this;
plugin.options = {};
plugin.duration = {};
// Private attributes
const displayMode = {
IN_SECONDS : 0,
IN_MINUTES : 1,
IN_HOURS : 2,
FULL: 3,
MAX_INDEX: 3
};
const eventNames = [
'second',
'minute',
'hour'
];
var defaultSettings = {
displayMode : displayMode.FULL,
enableEvents: false,
autoStart : true,
useHours : true,
minuteIndicator: '',
secondIndicator: '',
separator : ':',
leadingZeros: 2,
initHours : 0,
initMinutes : 0,
initSeconds: 0
};
var elm;
var $elm;
var timer;
var isStopped;
var hasValueAttr;
var refreshMode;
var displayResults;
// Private functions
var leadingZeros = function(num, width) {
var z = '0';
var n = ''.concat(num);
// If the number has the same width only return it again.
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
};
var format = function(time, withSeparator, overrideZeros){
var finalZeros = overrideZeros? overrideZeros : plugin.options.leadingZeros;
var pre = leadingZeros(time, finalZeros);
return withSeparator? pre.concat(plugin.options.separator) : pre;
};
var fixModeValue = function(value, maxIndex){
var band = (value === '' || value > maxIndex);
return band? maxIndex : value;
};
var getDefaultDuration = function(){
return moment.duration({
seconds : plugin.options.initSeconds,
minutes : plugin.options.initMinutes,
hour : plugin.options.initHours
});
};
var getResponseTimer = function(){
return {
displayedMode: displayResults[plugin.options.displayMode](),
original: $.extend({}, timer)
};
};
var eventHandler = function(refreshConditions){
if(plugin.options.enableEvents){
// Find events to fire up
$.each(refreshConditions, function (index) {
// Trigger events
if(refreshConditions[index]){
$elm.trigger(eventNames[index], getResponseTimer());
}
});
}
};
var mainTimer = function (omitRefresh) {
// Global timer values
timer = {
hours: plugin.duration.hours(),
minutes: plugin.duration.minutes(),
seconds: plugin.duration.seconds()
};
var getObjExpression = function(nf, f){
return {
unformatted: nf,
formatted: f
};
};
// Possible expressions to print
var expressions = {
toSeconds : function(){
var withoutFormat = Math.trunc(plugin.duration.asSeconds());
var formatted = format(withoutFormat).concat(plugin.options.secondIndicator);
return getObjExpression({seconds: withoutFormat}, formatted);
},
toMinutes : function(){
var withoutFormat = Math.trunc(plugin.duration.asMinutes());
var formatted = format(withoutFormat).concat(plugin.options.minuteIndicator);
return getObjExpression({minutes: withoutFormat}, formatted);
},
toHours : function() {
var withoutFormat = Math.trunc(plugin.duration.asHours());
return getObjExpression({hours: withoutFormat}, format(withoutFormat));
},
full : function() {
// Normal display
var normalNf = $.extend({}, timer);
var normal = format(timer.hours, true, 2)
.concat(format(timer.minutes, true, 2))
.concat(format(timer.seconds, false, 2));
normal = normal.concat(plugin.options.secondIndicator);
// Minutes display
var minutesObj = expressions.toMinutes();
var minutesNf = {
minutes: minutesObj.unformatted.minutes,
seconds: timer.seconds
};
var minutes = format(minutesNf.minutes, true).concat(format(minutesNf.seconds, false, 2));
minutes = minutes.concat(plugin.options.secondIndicator);
return (plugin.options.useHours)? getObjExpression(normalNf, normal) : getObjExpression(minutesNf, minutes);
}
};
// Array with refresh conditions
var refreshConditions = [
true, // every second
0 === timer.seconds, // every minute
0 === timer.minutes && 0 === timer.seconds // every hour
];
// Array with each function expression
displayResults = [
expressions.toSeconds,
expressions.toMinutes,
expressions.toHours,
expressions.full
];
// Set final value into element
if(omitRefresh || refreshConditions[refreshMode]){
// Call the method depending of displayMode
var finalValue = displayResults[plugin.options.displayMode]();
hasValueAttr? $elm.val(finalValue.formatted) : $elm.text(finalValue.formatted);
}
// Find events to fire up
eventHandler(refreshConditions);
// Update moment duration
plugin.duration = moment.duration(plugin.duration.asSeconds() + 1, 'seconds');
};
var startTimer = function(){
// Only if the timer is already stopped
if(isStopped){
// First call
mainTimer(true);
// Init interval
plugin.intervalFunction = setInterval(mainTimer, 1000);
isStopped = false;
// In order to allow chaining calls
return plugin;
}
};
// Init function to initialize some awesome stuffs
var init = function() {
// Initialize public variables
plugin.options = $.extend({}, defaultSettings, options);
// Validate the max index
plugin.options.displayMode = fixModeValue(plugin.options.displayMode, displayMode.MAX_INDEX);
// Configure moment duration
plugin.duration = getDefaultDuration();
// Initialize private variables
elm = element;
$elm = $(elm);
isStopped = true;
hasValueAttr = undefined !== $elm.attr('value');
refreshMode = plugin.options.displayMode <= displayMode.IN_HOURS? plugin.options.displayMode : displayMode.IN_SECONDS;
// Start?
if(plugin.options.autoStart){
plugin.start();
}else{
mainTimer(true);
}
};
// Start count timer from initial values
plugin.start = function(){
plugin.duration = getDefaultDuration();
return startTimer();
};
// Resume the counter
plugin.resume = function(){
return startTimer();
};
// Stop the counter
plugin.stop = function(){
if(plugin.intervalFunction){
clearInterval(plugin.intervalFunction);
isStopped = true;
}
// In order to allow chaining calls
return plugin;
};
// Band to know if the counter has been stopped or not
plugin.stopped = function(){
return isStopped;
};
// Return the current time
plugin.current = function(){
return getResponseTimer();
};
// Fire up the plugin calling its "constructor" method
init();
};
// Init jQuery plugin
$.fn[ pluginName ] = function(methodOrOptions) {
var method = ('string' === typeof methodOrOptions) ? methodOrOptions : undefined;
if (method) {
var plugins = [];
// Each HTML elements and get the current plugin instance
this.each(function() {
plugins.push( $(this).data(prefix.concat(pluginName)) );
});
// Retrieve arguments from params
var args = (arguments.length > 1) ? Array.prototype.slice.call(arguments, 1) : undefined;
var results = [];
var applyMethod = function(index) {
var plugin = plugins[index];
// Is plugin already instanced ?
if (!plugin) {
throw new Error(pluginName.concat(' is not instantiated yet'));
}
// Does the method exist?
if ('function' !== typeof plugin[method]) {
throw new Error('Method '.concat(method).concat(' is not defined on ').concat(pluginName));
}
// Call function and preserve result
results.push(plugin[method].apply(plugin, args));
};
// Call the method in each instance
this.each(applyMethod);
// Return one or more results depending of the number of HTML elements
return (results.length > 1) ? results : results[0];
}
// It's not a method
var options = ('object' === typeof methodOrOptions) ? methodOrOptions : undefined;
return this.each( function() {
// If the instance doesn't exist, then initialize it
if ( !$(this).data(prefix.concat(pluginName)) ) {
$(this).data(prefix.concat(pluginName), new Plugin(this, options));
}
});
};
}(jQuery, window, document));
This source diff could not be displayed because it is too large. You can view the blob instead.
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