Commit 76f004ae by Nilu

added cv and cover letter to applicant portal

parent 0aac5f21
......@@ -9,6 +9,7 @@
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="cv" type="BLOB" nullable="true"/>
<column name="cover_letter" type="BLOB" nullable="true"/>
<column name="application_status" type="String" nullable="false" length="200"/>
<column name="submitted_date" type="Date" nullable="true"/>
<column name="candidate_id" type="Long" length="11" nullable="false"/>
......
......@@ -9,6 +9,7 @@ CREATE TABLE tl_job_application (
object_created_date datetime DEFAULT getdate() NOT NULL
,
cv image NULL,
cover_letter image NULL,
application_status varchar(200) NOT NULL,
submitted_date datetime NULL,
candidate_id numeric(12) NOT NULL,
......
......@@ -10,6 +10,7 @@ CREATE TABLE tl_job_application (
object_created_date date DEFAULT SYSDATE NOT NULL
,
cv blob NULL,
cover_letter blob NULL,
application_status varchar2(200) NOT NULL,
submitted_date date NULL,
candidate_id number(12) NOT NULL,
......
......@@ -10,6 +10,7 @@ CREATE TABLE tl_job_application (
object_created_date timestamp DEFAULT NOW() NOT NULL
,
cv bytea NULL,
cover_letter bytea NULL,
application_status varchar(200) NOT NULL,
submitted_date timestamp NULL,
candidate_id numeric(12) NOT NULL,
......
......@@ -35,6 +35,7 @@ public class ValidateApplicationFP extends SaveFP
ObjectTransaction objTran = ObjectTransaction.getTransaction();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
boolean fromRequirements = request.getAttribute("fromRequirements") != null ? (boolean) request.getAttribute("fromRequirements"): false;
boolean fromCoverLetter = request.getAttribute("fromCoverLetter") != null ? (boolean) request.getAttribute("fromCoverLetter"): false;
Debug.assertion(jobApplication != null, "No jobApplication found . Call from " + getClass().getName());
......@@ -44,5 +45,11 @@ public class ValidateApplicationFP extends SaveFP
BusinessObjectParser.assertFieldCondition(jobApplication.getJob().getAssessmentCriteriasCount() == application.getAssessmentCriteriaAnswersCount(), jobApplication, JobApplication.FIELD_ObjectID, "completeAssessment", exceptions, true, request);
}
if(fromCoverLetter)
{
BusinessObjectParser.assertFieldCondition(jobApplication.getCV() != null , jobApplication, JobApplication.FIELD_CV, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(jobApplication.getCoverLetter() != null , jobApplication, JobApplication.FIELD_CoverLetter, "mandatory", exceptions, true, request);
}
}
}
\ No newline at end of file
......@@ -41,6 +41,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
// Static constants corresponding to field names
public static final String FIELD_CV = "CV";
public static final String FIELD_CoverLetter = "CoverLetter";
public static final String FIELD_ApplicationStatus = "ApplicationStatus";
public static final String FIELD_SubmittedDate = "SubmittedDate";
public static final String FIELD_AppProcessOption = "AppProcessOption";
......@@ -65,6 +66,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
// Static constants corresponding to attribute helpers
private static final BLOBAttributeHelper HELPER_CV = BLOBAttributeHelper.INSTANCE;
private static final BLOBAttributeHelper HELPER_CoverLetter = BLOBAttributeHelper.INSTANCE;
private static final EnumeratedAttributeHelper<JobApplication, ApplicationStatus> HELPER_ApplicationStatus = new EnumeratedAttributeHelper<JobApplication, ApplicationStatus> (ApplicationStatus.FACTORY_ApplicationStatus);
private static final DefaultAttributeHelper<JobApplication> HELPER_SubmittedDate = DefaultAttributeHelper.INSTANCE;
private static final EnumeratedAttributeHelper<JobApplication, AppProcessOption> HELPER_AppProcessOption = new EnumeratedAttributeHelper<JobApplication, AppProcessOption> (AppProcessOption.FACTORY_AppProcessOption);
......@@ -77,6 +79,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
// Private attributes corresponding to business object data
private BinaryContent _CV;
private BinaryContent _CoverLetter;
private ApplicationStatus _ApplicationStatus;
private Date _SubmittedDate;
private AppProcessOption _AppProcessOption;
......@@ -108,6 +111,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
private static final AttributeValidator[] FIELD_CultureFit_Validators;
private static final AttributeValidator[] FIELD_FactorScoreDetails_Validators;
private static final AttributeValidator[] FIELD_CV_Validators;
private static final AttributeValidator[] FIELD_CoverLetter_Validators;
private static final AttributeValidator[] FIELD_ApplicationStatus_Validators;
private static final AttributeValidator[] FIELD_SubmittedDate_Validators;
......@@ -137,6 +141,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
FIELD_CultureFit_Validators = (AttributeValidator[])setupAttribMetaData_CultureFit(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_FactorScoreDetails_Validators = (AttributeValidator[])setupAttribMetaData_FactorScoreDetails(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CV_Validators = (AttributeValidator[])setupAttribMetaData_CV(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CoverLetter_Validators = (AttributeValidator[])setupAttribMetaData_CoverLetter(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_ApplicationStatus_Validators = (AttributeValidator[])setupAttribMetaData_ApplicationStatus(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_SubmittedDate_Validators = (AttributeValidator[])setupAttribMetaData_SubmittedDate(validatorMapping).toArray (new AttributeValidator[0]);
......@@ -346,6 +351,28 @@ public abstract class BaseJobApplication extends BaseBusinessClass
}
// Meta Info setup
private static List setupAttribMetaData_CoverLetter(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("attribHelper", "BLOBAttributeHelper");
metaInfo.put ("attribHelperInstance", "BLOBAttributeHelper.INSTANCE");
metaInfo.put ("binaryHandler", "loggedin");
metaInfo.put ("dbcol", "cover_letter");
metaInfo.put ("mandatory", "false");
metaInfo.put ("name", "CoverLetter");
metaInfo.put ("type", "BinaryContent");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for JobApplication.CoverLetter:", metaInfo);
ATTRIBUTES_METADATA_JobApplication.put (FIELD_CoverLetter, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(JobApplication.class, "CoverLetter", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for JobApplication.CoverLetter:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_ApplicationStatus(Map validatorMapping)
{
Map metaInfo = new HashMap ();
......@@ -412,6 +439,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
_CV = (BinaryContent)(HELPER_CV.initialise (_CV));
_CoverLetter = (BinaryContent)(HELPER_CoverLetter.initialise (_CoverLetter));
_ApplicationStatus = (ApplicationStatus)(ApplicationStatus.DRAFT);
_SubmittedDate = (Date)(HELPER_SubmittedDate.initialise (_SubmittedDate));
_AppProcessOption = (AppProcessOption)(HELPER_AppProcessOption.initialise (_AppProcessOption));
......@@ -551,6 +579,104 @@ public abstract class BaseJobApplication extends BaseBusinessClass
}
/**
* Get the attribute CoverLetter
*/
public BinaryContent getCoverLetter ()
{
assertValid();
BinaryContent valToReturn = _CoverLetter;
for (JobApplicationBehaviourDecorator bhd : JobApplication_BehaviourDecorators)
{
valToReturn = bhd.getCoverLetter ((JobApplication)this, valToReturn);
}
return valToReturn;
}
/**
* Called prior to the attribute changing. Subclasses need not call super. If a field exception
* is thrown, the attribute change will fail. The new value is different to the old value.
*/
protected void preCoverLetterChange (BinaryContent newCoverLetter) throws FieldException
{
}
/**
* Called after the attribute changes.
* If a field exception is thrown, the value is still changed, however it
* may lead to the TX being rolled back
*/
protected void postCoverLetterChange () throws FieldException
{
}
public FieldWriteability getWriteability_CoverLetter ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute CoverLetter. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setCoverLetter (BinaryContent newCoverLetter) throws FieldException
{
boolean oldAndNewIdentical = HELPER_CoverLetter.compare (_CoverLetter, newCoverLetter);
try
{
for (JobApplicationBehaviourDecorator bhd : JobApplication_BehaviourDecorators)
{
newCoverLetter = bhd.setCoverLetter ((JobApplication)this, newCoverLetter);
oldAndNewIdentical = HELPER_CoverLetter.compare (_CoverLetter, newCoverLetter);
}
if (FIELD_CoverLetter_Validators.length > 0)
{
Object newCoverLetterObj = HELPER_CoverLetter.toObject (newCoverLetter);
if (newCoverLetterObj != null)
{
int loopMax = FIELD_CoverLetter_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_JobApplication.get (FIELD_CoverLetter);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_CoverLetter_Validators[v].checkAttribute (this, FIELD_CoverLetter, metadata, newCoverLetterObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_CoverLetter () != FieldWriteability.FALSE, "Field CoverLetter is not writeable");
preCoverLetterChange (newCoverLetter);
markFieldChange (FIELD_CoverLetter);
_CoverLetter = newCoverLetter;
postFieldChange (FIELD_CoverLetter);
postCoverLetterChange ();
}
}
/**
* Get the attribute ApplicationStatus
*/
public ApplicationStatus getApplicationStatus ()
......@@ -2111,6 +2237,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
tl_job_applicationPSet.setAttrib (FIELD_ObjectID, myID);
tl_job_applicationPSet.setAttrib (FIELD_CV, HELPER_CV.toObject (_CV)); //
tl_job_applicationPSet.setAttrib (FIELD_CoverLetter, HELPER_CoverLetter.toObject (_CoverLetter)); //
tl_job_applicationPSet.setAttrib (FIELD_ApplicationStatus, HELPER_ApplicationStatus.toObject (_ApplicationStatus)); //
tl_job_applicationPSet.setAttrib (FIELD_SubmittedDate, HELPER_SubmittedDate.toObject (_SubmittedDate)); //
_Candidate.getPersistentSets (allSets);
......@@ -2130,6 +2257,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
PersistentSet tl_job_applicationPSet = allSets.getPersistentSet (objectID, "tl_job_application");
_CV = (BinaryContent)(HELPER_CV.fromObject (_CV, tl_job_applicationPSet.getAttrib (FIELD_CV))); //
_CoverLetter = (BinaryContent)(HELPER_CoverLetter.fromObject (_CoverLetter, tl_job_applicationPSet.getAttrib (FIELD_CoverLetter))); //
_ApplicationStatus = (ApplicationStatus)(HELPER_ApplicationStatus.fromObject (_ApplicationStatus, tl_job_applicationPSet.getAttrib (FIELD_ApplicationStatus))); //
_SubmittedDate = (Date)(HELPER_SubmittedDate.fromObject (_SubmittedDate, tl_job_applicationPSet.getAttrib (FIELD_SubmittedDate))); //
_Candidate.setFromPersistentSets (objectID, allSets);
......@@ -2160,6 +2288,15 @@ public abstract class BaseJobApplication extends BaseBusinessClass
try
{
setCoverLetter (otherJobApplication.getCoverLetter ());
}
catch (FieldException ex)
{
e.addException (ex);
}
try
{
setApplicationStatus (otherJobApplication.getApplicationStatus ());
}
catch (FieldException ex)
......@@ -2192,6 +2329,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
BaseJobApplication sourceJobApplication = (BaseJobApplication)(source);
_CV = sourceJobApplication._CV;
_CoverLetter = sourceJobApplication._CoverLetter;
_ApplicationStatus = sourceJobApplication._ApplicationStatus;
_SubmittedDate = sourceJobApplication._SubmittedDate;
_AppProcessOption = sourceJobApplication._AppProcessOption;
......@@ -2261,6 +2399,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
super.readExternalData(vals);
_CV = (BinaryContent)(HELPER_CV.readExternal (_CV, vals.get(FIELD_CV))); //
_CoverLetter = (BinaryContent)(HELPER_CoverLetter.readExternal (_CoverLetter, vals.get(FIELD_CoverLetter))); //
_ApplicationStatus = (ApplicationStatus)(HELPER_ApplicationStatus.readExternal (_ApplicationStatus, vals.get(FIELD_ApplicationStatus))); //
_SubmittedDate = (Date)(HELPER_SubmittedDate.readExternal (_SubmittedDate, vals.get(FIELD_SubmittedDate))); //
_AppProcessOption = (AppProcessOption)(HELPER_AppProcessOption.readExternal (_AppProcessOption, vals.get(FIELD_AppProcessOption))); //
......@@ -2285,6 +2424,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
super.writeExternalData(vals);
vals.put (FIELD_CV, HELPER_CV.writeExternal (_CV));
vals.put (FIELD_CoverLetter, HELPER_CoverLetter.writeExternal (_CoverLetter));
vals.put (FIELD_ApplicationStatus, HELPER_ApplicationStatus.writeExternal (_ApplicationStatus));
vals.put (FIELD_SubmittedDate, HELPER_SubmittedDate.writeExternal (_SubmittedDate));
vals.put (FIELD_AppProcessOption, HELPER_AppProcessOption.writeExternal (_AppProcessOption));
......@@ -2314,6 +2454,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
listener.notifyFieldChange(this, other, FIELD_CV, HELPER_CV.toObject(this._CV), HELPER_CV.toObject(otherJobApplication._CV));
}
if (!HELPER_CoverLetter.compare(this._CoverLetter, otherJobApplication._CoverLetter))
{
listener.notifyFieldChange(this, other, FIELD_CoverLetter, HELPER_CoverLetter.toObject(this._CoverLetter), HELPER_CoverLetter.toObject(otherJobApplication._CoverLetter));
}
if (!HELPER_ApplicationStatus.compare(this._ApplicationStatus, otherJobApplication._ApplicationStatus))
{
listener.notifyFieldChange(this, other, FIELD_ApplicationStatus, HELPER_ApplicationStatus.toObject(this._ApplicationStatus), HELPER_ApplicationStatus.toObject(otherJobApplication._ApplicationStatus));
......@@ -2355,6 +2499,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
super.visitAttributes (visitor);
visitor.visitField(this, FIELD_CV, HELPER_CV.toObject(getCV()));
visitor.visitField(this, FIELD_CoverLetter, HELPER_CoverLetter.toObject(getCoverLetter()));
visitor.visitField(this, FIELD_ApplicationStatus, HELPER_ApplicationStatus.toObject(getApplicationStatus()));
visitor.visitField(this, FIELD_SubmittedDate, HELPER_SubmittedDate.toObject(getSubmittedDate()));
visitor.visitAssociation (_WorkFlow);
......@@ -2414,6 +2559,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
return filter.matches (getCV ());
}
else if (attribName.equals (FIELD_CoverLetter))
{
return filter.matches (getCoverLetter ());
}
else if (attribName.equals (FIELD_ApplicationStatus))
{
return filter.matches (getApplicationStatus ());
......@@ -2467,6 +2616,12 @@ public abstract class BaseJobApplication extends BaseBusinessClass
return this;
}
public SearchAll andCoverLetter (QueryFilter<BinaryContent> filter)
{
filter.addFilter (context, "tl_job_application.cover_letter", "CoverLetter");
return this;
}
public SearchAll andApplicationStatus (QueryFilter<ApplicationStatus> filter)
{
filter.addFilter (context, "tl_job_application.application_status", "ApplicationStatus");
......@@ -2562,6 +2717,12 @@ public abstract class BaseJobApplication extends BaseBusinessClass
return this;
}
public SearchCandidateJob andCoverLetter (QueryFilter<BinaryContent> filter)
{
filter.addFilter (context, "tl_job_application.cover_letter", "CoverLetter");
return this;
}
public SearchCandidateJob andApplicationStatus (QueryFilter<ApplicationStatus> filter)
{
filter.addFilter (context, "tl_job_application.application_status", "ApplicationStatus");
......@@ -2673,6 +2834,12 @@ public abstract class BaseJobApplication extends BaseBusinessClass
return this;
}
public SearchDetails andCoverLetter (QueryFilter<BinaryContent> filter)
{
filter.addFilter (context, "tl_job_application.cover_letter", "CoverLetter");
return this;
}
public SearchDetails andApplicationStatus (QueryFilter<ApplicationStatus> filter)
{
filter.addFilter (context, "tl_job_application.application_status", "ApplicationStatus");
......@@ -2737,6 +2904,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
return HELPER_CV.toObject (getCV ());
}
else if (attribName.equals (FIELD_CoverLetter))
{
return HELPER_CoverLetter.toObject (getCoverLetter ());
}
else if (attribName.equals (FIELD_ApplicationStatus))
{
return HELPER_ApplicationStatus.toObject (getApplicationStatus ());
......@@ -2786,6 +2957,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
return HELPER_CV;
}
else if (attribName.equals (FIELD_CoverLetter))
{
return HELPER_CoverLetter;
}
else if (attribName.equals (FIELD_ApplicationStatus))
{
return HELPER_ApplicationStatus;
......@@ -2835,6 +3010,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
setCV ((BinaryContent)(HELPER_CV.fromObject (_CV, attribValue)));
}
else if (attribName.equals (FIELD_CoverLetter))
{
setCoverLetter ((BinaryContent)(HELPER_CoverLetter.fromObject (_CoverLetter, attribValue)));
}
else if (attribName.equals (FIELD_ApplicationStatus))
{
setApplicationStatus ((ApplicationStatus)(HELPER_ApplicationStatus.fromObject (_ApplicationStatus, attribValue)));
......@@ -2891,6 +3070,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
return getWriteability_CV ();
}
else if (fieldName.equals (FIELD_CoverLetter))
{
return getWriteability_CoverLetter ();
}
else if (fieldName.equals (FIELD_ApplicationStatus))
{
return getWriteability_ApplicationStatus ();
......@@ -2954,6 +3137,11 @@ public abstract class BaseJobApplication extends BaseBusinessClass
fields.add (FIELD_CV);
}
if (getWriteability_CoverLetter () != FieldWriteability.TRUE)
{
fields.add (FIELD_CoverLetter);
}
if (getWriteability_ApplicationStatus () != FieldWriteability.TRUE)
{
fields.add (FIELD_ApplicationStatus);
......@@ -3004,6 +3192,7 @@ public abstract class BaseJobApplication extends BaseBusinessClass
result.add(HELPER_CV.getAttribObject (getClass (), _CV, false, FIELD_CV));
result.add(HELPER_CoverLetter.getAttribObject (getClass (), _CoverLetter, false, FIELD_CoverLetter));
result.add(HELPER_ApplicationStatus.getAttribObject (getClass (), _ApplicationStatus, true, FIELD_ApplicationStatus));
result.add(HELPER_SubmittedDate.getAttribObject (getClass (), _SubmittedDate, false, FIELD_SubmittedDate));
result.add(HELPER_AppProcessOption.getAttribObject (getClass (), _AppProcessOption, false, FIELD_AppProcessOption));
......@@ -3062,6 +3251,19 @@ public abstract class BaseJobApplication extends BaseBusinessClass
}
}
{
oneit.servlets.objstore.binary.BinaryContentHandler bchandler = oneit.servlets.objstore.binary.BinaryContentServlet.getHandler("loggedin");
if(bchandler != null)
{
bchandler.preCommit(willBeStored, this, "CoverLetter");
}
else
{
LogMgr.log(BUSINESS_OBJECTS, LogLevel.SYSTEMWARNING, "Unknown BinaryContentHandler loggedin on attribute CoverLetter");
}
}
}
}
......@@ -3073,6 +3275,11 @@ public abstract class BaseJobApplication extends BaseBusinessClass
return oneit.servlets.objstore.binary.BinaryContentServlet.getHandler("loggedin");
}
if(CollectionUtils.equals(attribName, "CoverLetter"))
{
return oneit.servlets.objstore.binary.BinaryContentServlet.getHandler("loggedin");
}
return super.getBinaryContentHandler(attribName);
}
......@@ -3099,6 +3306,24 @@ public abstract class BaseJobApplication extends BaseBusinessClass
}
/**
* Get the attribute CoverLetter
*/
public BinaryContent getCoverLetter (JobApplication obj, BinaryContent original)
{
return original;
}
/**
* Change the value set for attribute CoverLetter.
* May modify the field beforehand
* Occurs before validation.
*/
public BinaryContent setCoverLetter (JobApplication obj, BinaryContent newCoverLetter) throws FieldException
{
return newCoverLetter;
}
/**
* Get the attribute ApplicationStatus
*/
public ApplicationStatus getApplicationStatus (JobApplication obj, ApplicationStatus original)
......@@ -3330,6 +3555,10 @@ public abstract class BaseJobApplication extends BaseBusinessClass
{
return toCV ();
}
if (name.equals ("CoverLetter"))
{
return toCoverLetter ();
}
if (name.equals ("ApplicationStatus"))
{
return toApplicationStatus ();
......@@ -3366,6 +3595,8 @@ public abstract class BaseJobApplication extends BaseBusinessClass
public PipeLine<From, BinaryContent> toCV () { return pipe(new ORMAttributePipe<Me, BinaryContent>(FIELD_CV)); }
public PipeLine<From, BinaryContent> toCoverLetter () { return pipe(new ORMAttributePipe<Me, BinaryContent>(FIELD_CoverLetter)); }
public PipeLine<From, ApplicationStatus> toApplicationStatus () { return pipe(new ORMAttributePipe<Me, ApplicationStatus>(FIELD_ApplicationStatus)); }
public PipeLine<From, Date> toSubmittedDate () { return pipe(new ORMAttributePipe<Me, Date>(FIELD_SubmittedDate)); }
......
......@@ -156,7 +156,7 @@ public class JobApplication extends BaseJobApplication
public boolean selectionCompleted() //req
{
if(getJob()!=null && getJob().getIncludeAssessmentCriteria()!=Boolean.TRUE)
if(getJob()!= null && getJob().getIncludeAssessmentCriteria() != Boolean.TRUE)
{
return Boolean.TRUE;
}
......
......@@ -19,6 +19,7 @@
<TABLE name="tl_job_application" tablePrefix="object" polymorphic="FALSE">
<ATTRIB name="CV" type="BinaryContent" dbcol="cv" binaryHandler="loggedin" attribHelper="BLOBAttributeHelper" attribHelperInstance="BLOBAttributeHelper.INSTANCE" mandatory="false"/>
<ATTRIB name="CoverLetter" type="BinaryContent" dbcol="cover_letter" binaryHandler="loggedin" attribHelper="BLOBAttributeHelper" attribHelperInstance="BLOBAttributeHelper.INSTANCE" mandatory="false"/>
<ATTRIB name="ApplicationStatus" type="ApplicationStatus" dbcol="application_status" attribHelper="EnumeratedAttributeHelper" defaultValue="ApplicationStatus.DRAFT" mandatory="true"/>
<ATTRIB name="SubmittedDate" type="Date" dbcol="submitted_date"/>
......
......@@ -28,12 +28,14 @@ public class JobApplicationPersistenceMgr extends ObjectPersistenceMgr
// Private attributes corresponding to business object data
private BinaryContent dummyCV;
private BinaryContent dummyCoverLetter;
private ApplicationStatus dummyApplicationStatus;
private Date dummySubmittedDate;
// Static constants corresponding to attribute helpers
private static final BLOBAttributeHelper HELPER_CV = BLOBAttributeHelper.INSTANCE;
private static final BLOBAttributeHelper HELPER_CoverLetter = BLOBAttributeHelper.INSTANCE;
private static final EnumeratedAttributeHelper HELPER_ApplicationStatus = new EnumeratedAttributeHelper (ApplicationStatus.FACTORY_ApplicationStatus);
private static final DefaultAttributeHelper HELPER_SubmittedDate = DefaultAttributeHelper.INSTANCE;
......@@ -43,12 +45,13 @@ public class JobApplicationPersistenceMgr extends ObjectPersistenceMgr
public JobApplicationPersistenceMgr ()
{
dummyCV = (BinaryContent)(HELPER_CV.initialise (dummyCV));
dummyCoverLetter = (BinaryContent)(HELPER_CoverLetter.initialise (dummyCoverLetter));
dummyApplicationStatus = (ApplicationStatus)(HELPER_ApplicationStatus.initialise (dummyApplicationStatus));
dummySubmittedDate = (Date)(HELPER_SubmittedDate.initialise (dummySubmittedDate));
}
private String SELECT_COLUMNS = "{PREFIX}tl_job_application.object_id as id, {PREFIX}tl_job_application.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_job_application.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_job_application.cv, {PREFIX}tl_job_application.application_status, {PREFIX}tl_job_application.submitted_date, {PREFIX}tl_job_application.candidate_id, {PREFIX}tl_job_application.job_id, 1 AS commasafe ";
private String SELECT_COLUMNS = "{PREFIX}tl_job_application.object_id as id, {PREFIX}tl_job_application.object_LAST_UPDATED_DATE as LAST_UPDATED_DATE, {PREFIX}tl_job_application.object_CREATED_DATE as CREATED_DATE, {PREFIX}tl_job_application.cv, {PREFIX}tl_job_application.cover_letter, {PREFIX}tl_job_application.application_status, {PREFIX}tl_job_application.submitted_date, {PREFIX}tl_job_application.candidate_id, {PREFIX}tl_job_application.job_id, 1 AS commasafe ";
private String SELECT_JOINS = "";
public BaseBusinessClass fetchByID(ObjectID id, PersistentSetCollection allPSets, RDBMSPersistenceContext context, SQLManager sqlMgr) throws SQLException, StorageException
......@@ -100,6 +103,7 @@ public class JobApplicationPersistenceMgr extends ObjectPersistenceMgr
// Check for persistent sets already prefetched
if (false || !tl_job_applicationPSet.containsAttrib(BaseBusinessClass.FIELD_ObjectLastModified) ||
!tl_job_applicationPSet.containsAttrib(JobApplication.FIELD_CV)||
!tl_job_applicationPSet.containsAttrib(JobApplication.FIELD_CoverLetter)||
!tl_job_applicationPSet.containsAttrib(JobApplication.FIELD_ApplicationStatus)||
!tl_job_applicationPSet.containsAttrib(JobApplication.FIELD_SubmittedDate)||
!tl_job_applicationPSet.containsAttrib(JobApplication.SINGLEREFERENCE_Candidate)||
......@@ -193,10 +197,10 @@ public class JobApplicationPersistenceMgr extends ObjectPersistenceMgr
{
int rowsUpdated = executeStatement (sqlMgr,
"UPDATE {PREFIX}tl_job_application " +
"SET cv = ?, application_status = ?, submitted_date = ?, candidate_id = ? , job_id = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"SET cv = ?, cover_letter = ?, application_status = ?, submitted_date = ?, candidate_id = ? , job_id = ? , object_LAST_UPDATED_DATE = " + sqlMgr.getPortabilityServices ().getTimestampExpression () + " " +
"WHERE tl_job_application.object_id = ? AND " + getConcurrencyCheck (sqlMgr, "object_LAST_UPDATED_DATE", obj.getObjectLastModified ()) + " ",
CollectionUtils.listEntry (HELPER_CV.getForSQL(dummyCV, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_CV))).listEntry (HELPER_ApplicationStatus.getForSQL(dummyApplicationStatus, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_ApplicationStatus))).listEntry (HELPER_SubmittedDate.getForSQL(dummySubmittedDate, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_SubmittedDate))).listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Candidate)))).listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Job)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
CollectionUtils.listEntry (HELPER_CV.getForSQL(dummyCV, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_CV))).listEntry (HELPER_CoverLetter.getForSQL(dummyCoverLetter, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_CoverLetter))).listEntry (HELPER_ApplicationStatus.getForSQL(dummyApplicationStatus, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_ApplicationStatus))).listEntry (HELPER_SubmittedDate.getForSQL(dummySubmittedDate, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_SubmittedDate))).listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Candidate)))).listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Job)))).listEntry (objectID.longID ()).listEntry (obj.getObjectLastModified ()).toList().toArray());
if (rowsUpdated != 1)
{
......@@ -573,6 +577,7 @@ public class JobApplicationPersistenceMgr extends ObjectPersistenceMgr
tl_job_applicationPSet.setAttrib(BaseBusinessClass.FIELD_ObjectCreated, r.getTimestamp ("CREATED_DATE"));
tl_job_applicationPSet.setAttrib(JobApplication.FIELD_CV, HELPER_CV.getFromRS(dummyCV, r, "cv"));
tl_job_applicationPSet.setAttrib(JobApplication.FIELD_CoverLetter, HELPER_CoverLetter.getFromRS(dummyCoverLetter, r, "cover_letter"));
tl_job_applicationPSet.setAttrib(JobApplication.FIELD_ApplicationStatus, HELPER_ApplicationStatus.getFromRS(dummyApplicationStatus, r, "application_status"));
tl_job_applicationPSet.setAttrib(JobApplication.FIELD_SubmittedDate, HELPER_SubmittedDate.getFromRS(dummySubmittedDate, r, "submitted_date"));
......@@ -594,10 +599,10 @@ public class JobApplicationPersistenceMgr extends ObjectPersistenceMgr
{
executeStatement (sqlMgr,
"INSERT INTO {PREFIX}tl_job_application " +
" (cv, application_status, submitted_date, candidate_id, job_id, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
" (cv, cover_letter, application_status, submitted_date, candidate_id, job_id, object_id, object_LAST_UPDATED_DATE, object_CREATED_DATE) " +
"VALUES " +
" (?, ?, ?, ?, ?, ?, " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ", " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ")",
CollectionUtils.listEntry (HELPER_CV.getForSQL(dummyCV, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_CV))).listEntry (HELPER_ApplicationStatus.getForSQL(dummyApplicationStatus, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_ApplicationStatus))).listEntry (HELPER_SubmittedDate.getForSQL(dummySubmittedDate, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_SubmittedDate))) .listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Candidate)))).listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Job)))) .listEntry (objectID.longID ()).toList().toArray());
" (?, ?, ?, ?, ?, ?, ?, " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ", " + sqlMgr.getPortabilityServices ().getTimestampExpression () + ")",
CollectionUtils.listEntry (HELPER_CV.getForSQL(dummyCV, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_CV))).listEntry (HELPER_CoverLetter.getForSQL(dummyCoverLetter, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_CoverLetter))).listEntry (HELPER_ApplicationStatus.getForSQL(dummyApplicationStatus, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_ApplicationStatus))).listEntry (HELPER_SubmittedDate.getForSQL(dummySubmittedDate, tl_job_applicationPSet.getAttrib (JobApplication.FIELD_SubmittedDate))) .listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Candidate)))).listEntry (SQLManager.CheckNull((Long)(tl_job_applicationPSet.getAttrib (JobApplication.SINGLEREFERENCE_Job)))) .listEntry (objectID.longID ()).toList().toArray());
tl_job_applicationPSet.setStatus (PersistentSetStatus.PROCESSED);
}
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au">
<NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.RedefineTableOperation">
<tableName factory="String">tl_job_application</tableName>
<column name="cover_letter" type="BLOB" nullable="true"/>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
......@@ -52,6 +52,7 @@
<INHERITS nodename="StandardJSP"/>
<RenderMode name="Page" preIncludeJSP="extensions/applicantportal/application_outline.jsp"/>
<RenderMode name="CoverLetter" preIncludeJSP="extensions/applicantportal/cv_cover_letter.jsp"/>
<RenderMode name="SelectionCriteria" preIncludeJSP="extensions/applicantportal/selection_criteria.jsp"/>
<RenderMode name="WorkplaceCulture" preIncludeJSP="extensions/applicantportal/workplace_culture.jsp"/>
<RenderMode name="JobMatchAssessment" preIncludeJSP="extensions/applicantportal/job_match_assessment.jsp"/>
......
......@@ -42,37 +42,27 @@
// alreadyCompletedRole = jobApplication.getAlreadyCompletedApplicationForRole()!=null;
// process.setAttribute("AlreadyCompletedRole", alreadyCompletedRole);
// }
Boolean cvCompleted = jobApplication.getCV() != null && jobApplication.getCoverLetter() != null;
Boolean isSelectionComplete = jobApplication.selectionCompleted();
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
if(!jobApplication.isIncludeAssessmentCriteria())
if(!cvCompleted)
{
if(!isCultureComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
}
else if(!isAssesmentComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
}
nextPage = WebUtils.getSamePageInRenderMode(request, "CoverLetter");
}
else
else if(!isSelectionComplete)
{
if(!isSelectionComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "SelectionCriteria");
}
else if(!isCultureComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
}
else if(!isAssesmentComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
}
nextPage = WebUtils.getSamePageInRenderMode(request, "SelectionCriteria");
}
else if(!isCultureComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
}
else if(!isAssesmentComplete)
{
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
}
process.setAttribute("JobApplication", jobApplication);
......
<%@ 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>
<%
String currentPage = WebUtils.getSamePageInRenderMode(request, "CoverLetter");
String nextPage = WebUtils.getSamePageInRenderMode(request, "SubmitApplication");
ObjectTransaction objTran = ObjectTransaction.getTransaction();
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 - cv and cover letter ");
Job job = jobApplication.getJob();
if(process.getAttribute("JobApplicationID") == null)
{
process.setAttribute("JobApplicationID" , jobApplication.getID().longValue());
}
if(!jobApplication.selectionCompleted())
{
nextPage = WebUtils.getSamePageInRenderMode(request, "SelectionCriteria");
}
else if(!jobApplication.cultureCompleted())
{
nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
}
else if(!jobApplication.assessmentCompleted())
{
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
}
%>
<div class="apply-job-logo-header signinpage">
<div>
<div class="logo-img">
<%
BinaryContent logo = job.getLogo();
if(logo != null)
{
int logoHeight = 45;
%>
<tagfile:img src="<%= ThumbnailUtils.filterImage(DiskFileBinaryContent.getRelativeURL(logo), "KEEP", new ScaleWithin (0, logoHeight)) %>" />
<%
}
%>
</div>
<div class="header-title">
<%= job.getTeamName() %>
</div>
</div>
</div>
<oneit:form name="editApplication" method="post" enctype="multipart/form-data">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="main-verify-identity">
<div class="pl-confirm text-center">Great! Now let's attach your CV and Cover Letter</div>
<div class="main-box-layout main-verify-step-2">
<div class="form-group text-left">
<label>Upload your CV</label>
<oneit:ormInput obj="<%= jobApplication %>" type="file" attributeName="CV" cssClass="form-control second-style"/>
</div>
<div class="form-group text-left">
<label>Upload your Cover Letter</label>
<oneit:ormInput obj="<%= jobApplication %>" type="file" attributeName="CoverLetter" cssClass="form-control second-style"/>
</div>
<div class="text-center">
<oneit:button value="Attach and proceed" name="validateApplication" cssClass="box-btn show-mobile"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromCoverLetter", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/>
</div>
</div>
</div>
</oneit:form>
</oneit:dynIncluded>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment