Commit dace822b by Nilu Committed by Harsh Shah

Job creation screens completed logic. adding a validation to job to at least…

Job creation screens completed logic. adding a validation to job to at least have one requirement, when include assessment criteria is selected.
parent c8ebe4a6
...@@ -50,6 +50,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -50,6 +50,10 @@ public abstract class BaseJob extends BaseBusinessClass
public static final String FIELD_AssessmentType = "AssessmentType"; public static final String FIELD_AssessmentType = "AssessmentType";
public static final String FIELD_RandomKey = "RandomKey"; public static final String FIELD_RandomKey = "RandomKey";
public static final String FIELD_Email = "Email"; public static final String FIELD_Email = "Email";
public static final String FIELD_CompletedDetails = "CompletedDetails";
public static final String FIELD_CompletedRequirements = "CompletedRequirements";
public static final String FIELD_CompletedCulture = "CompletedCulture";
public static final String FIELD_CompletedAssessmentType = "CompletedAssessmentType";
public static final String SINGLEREFERENCE_Level = "Level"; public static final String SINGLEREFERENCE_Level = "Level";
public static final String SINGLEREFERENCE_SecUser = "SecUser"; public static final String SINGLEREFERENCE_SecUser = "SecUser";
public static final String MULTIPLEREFERENCE_JobApplications = "JobApplications"; public static final String MULTIPLEREFERENCE_JobApplications = "JobApplications";
...@@ -73,6 +77,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -73,6 +77,10 @@ public abstract class BaseJob extends BaseBusinessClass
private static final EnumeratedAttributeHelper<Job, AssessmentType> HELPER_AssessmentType = new EnumeratedAttributeHelper<Job, AssessmentType> (AssessmentType.FACTORY_AssessmentType); private static final EnumeratedAttributeHelper<Job, AssessmentType> HELPER_AssessmentType = new EnumeratedAttributeHelper<Job, AssessmentType> (AssessmentType.FACTORY_AssessmentType);
private static final DefaultAttributeHelper<Job> HELPER_RandomKey = DefaultAttributeHelper.INSTANCE; private static final DefaultAttributeHelper<Job> HELPER_RandomKey = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Job> HELPER_Email = DefaultAttributeHelper.INSTANCE; private static final DefaultAttributeHelper<Job> HELPER_Email = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Job> HELPER_CompletedDetails = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Job> HELPER_CompletedRequirements = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Job> HELPER_CompletedCulture = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Job> HELPER_CompletedAssessmentType = DefaultAttributeHelper.INSTANCE;
// Private attributes corresponding to business object data // Private attributes corresponding to business object data
...@@ -84,6 +92,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -84,6 +92,10 @@ public abstract class BaseJob extends BaseBusinessClass
private AssessmentType _AssessmentType; private AssessmentType _AssessmentType;
private String _RandomKey; private String _RandomKey;
private String _Email; private String _Email;
private Boolean _CompletedDetails;
private Boolean _CompletedRequirements;
private Boolean _CompletedCulture;
private Boolean _CompletedAssessmentType;
// Private attributes corresponding to single references // Private attributes corresponding to single references
...@@ -102,6 +114,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -102,6 +114,10 @@ public abstract class BaseJob extends BaseBusinessClass
// Arrays of validators for each attribute // Arrays of validators for each attribute
private static final AttributeValidator[] FIELD_Email_Validators; private static final AttributeValidator[] FIELD_Email_Validators;
private static final AttributeValidator[] FIELD_CompletedDetails_Validators;
private static final AttributeValidator[] FIELD_CompletedRequirements_Validators;
private static final AttributeValidator[] FIELD_CompletedCulture_Validators;
private static final AttributeValidator[] FIELD_CompletedAssessmentType_Validators;
private static final AttributeValidator[] FIELD_JobTitle_Validators; private static final AttributeValidator[] FIELD_JobTitle_Validators;
private static final AttributeValidator[] FIELD_JobDescription_Validators; private static final AttributeValidator[] FIELD_JobDescription_Validators;
private static final AttributeValidator[] FIELD_JobStatus_Validators; private static final AttributeValidator[] FIELD_JobStatus_Validators;
...@@ -131,6 +147,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -131,6 +147,10 @@ public abstract class BaseJob extends BaseBusinessClass
setupAssocMetaData_Level(); setupAssocMetaData_Level();
setupAssocMetaData_SecUser(); setupAssocMetaData_SecUser();
FIELD_Email_Validators = (AttributeValidator[])setupAttribMetaData_Email(validatorMapping).toArray (new AttributeValidator[0]); FIELD_Email_Validators = (AttributeValidator[])setupAttribMetaData_Email(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CompletedDetails_Validators = (AttributeValidator[])setupAttribMetaData_CompletedDetails(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CompletedRequirements_Validators = (AttributeValidator[])setupAttribMetaData_CompletedRequirements(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CompletedCulture_Validators = (AttributeValidator[])setupAttribMetaData_CompletedCulture(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CompletedAssessmentType_Validators = (AttributeValidator[])setupAttribMetaData_CompletedAssessmentType(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_JobTitle_Validators = (AttributeValidator[])setupAttribMetaData_JobTitle(validatorMapping).toArray (new AttributeValidator[0]); FIELD_JobTitle_Validators = (AttributeValidator[])setupAttribMetaData_JobTitle(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_JobDescription_Validators = (AttributeValidator[])setupAttribMetaData_JobDescription(validatorMapping).toArray (new AttributeValidator[0]); FIELD_JobDescription_Validators = (AttributeValidator[])setupAttribMetaData_JobDescription(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_JobStatus_Validators = (AttributeValidator[])setupAttribMetaData_JobStatus(validatorMapping).toArray (new AttributeValidator[0]); FIELD_JobStatus_Validators = (AttributeValidator[])setupAttribMetaData_JobStatus(validatorMapping).toArray (new AttributeValidator[0]);
...@@ -242,6 +262,78 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -242,6 +262,78 @@ public abstract class BaseJob extends BaseBusinessClass
} }
// Meta Info setup // Meta Info setup
private static List setupAttribMetaData_CompletedDetails(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("defaultValue", "Boolean.FALSE");
metaInfo.put ("name", "CompletedDetails");
metaInfo.put ("type", "Boolean");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedDetails:", metaInfo);
ATTRIBUTES_METADATA_Job.put (FIELD_CompletedDetails, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Job.class, "CompletedDetails", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.CompletedDetails:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_CompletedRequirements(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("defaultValue", "Boolean.FALSE");
metaInfo.put ("name", "CompletedRequirements");
metaInfo.put ("type", "Boolean");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedRequirements:", metaInfo);
ATTRIBUTES_METADATA_Job.put (FIELD_CompletedRequirements, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Job.class, "CompletedRequirements", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.CompletedRequirements:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_CompletedCulture(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("defaultValue", "Boolean.FALSE");
metaInfo.put ("name", "CompletedCulture");
metaInfo.put ("type", "Boolean");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedCulture:", metaInfo);
ATTRIBUTES_METADATA_Job.put (FIELD_CompletedCulture, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Job.class, "CompletedCulture", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.CompletedCulture:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_CompletedAssessmentType(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("defaultValue", "Boolean.FALSE");
metaInfo.put ("name", "CompletedAssessmentType");
metaInfo.put ("type", "Boolean");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Job.CompletedAssessmentType:", metaInfo);
ATTRIBUTES_METADATA_Job.put (FIELD_CompletedAssessmentType, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Job.class, "CompletedAssessmentType", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Job.CompletedAssessmentType:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_JobTitle(Map validatorMapping) private static List setupAttribMetaData_JobTitle(Map validatorMapping)
{ {
Map metaInfo = new HashMap (); Map metaInfo = new HashMap ();
...@@ -414,6 +506,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -414,6 +506,10 @@ public abstract class BaseJob extends BaseBusinessClass
_AssessmentType = (AssessmentType)(AssessmentType.COMPREHENSIVE); _AssessmentType = (AssessmentType)(AssessmentType.COMPREHENSIVE);
_RandomKey = (String)(HELPER_RandomKey.initialise (_RandomKey)); _RandomKey = (String)(HELPER_RandomKey.initialise (_RandomKey));
_Email = (String)(HELPER_Email.initialise (_Email)); _Email = (String)(HELPER_Email.initialise (_Email));
_CompletedDetails = (Boolean)(Boolean.FALSE);
_CompletedRequirements = (Boolean)(Boolean.FALSE);
_CompletedCulture = (Boolean)(Boolean.FALSE);
_CompletedAssessmentType = (Boolean)(Boolean.FALSE);
} }
...@@ -1237,6 +1333,398 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -1237,6 +1333,398 @@ public abstract class BaseJob extends BaseBusinessClass
} }
} }
/**
* Get the attribute CompletedDetails
*/
public Boolean getCompletedDetails ()
{
assertValid();
Boolean valToReturn = _CompletedDetails;
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
valToReturn = bhd.getCompletedDetails ((Job)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 preCompletedDetailsChange (Boolean newCompletedDetails) 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 postCompletedDetailsChange () throws FieldException
{
}
public FieldWriteability getWriteability_CompletedDetails ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute CompletedDetails. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setCompletedDetails (Boolean newCompletedDetails) throws FieldException
{
boolean oldAndNewIdentical = HELPER_CompletedDetails.compare (_CompletedDetails, newCompletedDetails);
try
{
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
newCompletedDetails = bhd.setCompletedDetails ((Job)this, newCompletedDetails);
oldAndNewIdentical = HELPER_CompletedDetails.compare (_CompletedDetails, newCompletedDetails);
}
if (FIELD_CompletedDetails_Validators.length > 0)
{
Object newCompletedDetailsObj = HELPER_CompletedDetails.toObject (newCompletedDetails);
if (newCompletedDetailsObj != null)
{
int loopMax = FIELD_CompletedDetails_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedDetails);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_CompletedDetails_Validators[v].checkAttribute (this, FIELD_CompletedDetails, metadata, newCompletedDetailsObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_CompletedDetails () != FieldWriteability.FALSE, "Field CompletedDetails is not writeable");
preCompletedDetailsChange (newCompletedDetails);
markFieldChange (FIELD_CompletedDetails);
_CompletedDetails = newCompletedDetails;
postFieldChange (FIELD_CompletedDetails);
postCompletedDetailsChange ();
}
}
/**
* Get the attribute CompletedRequirements
*/
public Boolean getCompletedRequirements ()
{
assertValid();
Boolean valToReturn = _CompletedRequirements;
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
valToReturn = bhd.getCompletedRequirements ((Job)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 preCompletedRequirementsChange (Boolean newCompletedRequirements) 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 postCompletedRequirementsChange () throws FieldException
{
}
public FieldWriteability getWriteability_CompletedRequirements ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute CompletedRequirements. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setCompletedRequirements (Boolean newCompletedRequirements) throws FieldException
{
boolean oldAndNewIdentical = HELPER_CompletedRequirements.compare (_CompletedRequirements, newCompletedRequirements);
try
{
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
newCompletedRequirements = bhd.setCompletedRequirements ((Job)this, newCompletedRequirements);
oldAndNewIdentical = HELPER_CompletedRequirements.compare (_CompletedRequirements, newCompletedRequirements);
}
if (FIELD_CompletedRequirements_Validators.length > 0)
{
Object newCompletedRequirementsObj = HELPER_CompletedRequirements.toObject (newCompletedRequirements);
if (newCompletedRequirementsObj != null)
{
int loopMax = FIELD_CompletedRequirements_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedRequirements);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_CompletedRequirements_Validators[v].checkAttribute (this, FIELD_CompletedRequirements, metadata, newCompletedRequirementsObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_CompletedRequirements () != FieldWriteability.FALSE, "Field CompletedRequirements is not writeable");
preCompletedRequirementsChange (newCompletedRequirements);
markFieldChange (FIELD_CompletedRequirements);
_CompletedRequirements = newCompletedRequirements;
postFieldChange (FIELD_CompletedRequirements);
postCompletedRequirementsChange ();
}
}
/**
* Get the attribute CompletedCulture
*/
public Boolean getCompletedCulture ()
{
assertValid();
Boolean valToReturn = _CompletedCulture;
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
valToReturn = bhd.getCompletedCulture ((Job)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 preCompletedCultureChange (Boolean newCompletedCulture) 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 postCompletedCultureChange () throws FieldException
{
}
public FieldWriteability getWriteability_CompletedCulture ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute CompletedCulture. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setCompletedCulture (Boolean newCompletedCulture) throws FieldException
{
boolean oldAndNewIdentical = HELPER_CompletedCulture.compare (_CompletedCulture, newCompletedCulture);
try
{
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
newCompletedCulture = bhd.setCompletedCulture ((Job)this, newCompletedCulture);
oldAndNewIdentical = HELPER_CompletedCulture.compare (_CompletedCulture, newCompletedCulture);
}
if (FIELD_CompletedCulture_Validators.length > 0)
{
Object newCompletedCultureObj = HELPER_CompletedCulture.toObject (newCompletedCulture);
if (newCompletedCultureObj != null)
{
int loopMax = FIELD_CompletedCulture_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedCulture);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_CompletedCulture_Validators[v].checkAttribute (this, FIELD_CompletedCulture, metadata, newCompletedCultureObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_CompletedCulture () != FieldWriteability.FALSE, "Field CompletedCulture is not writeable");
preCompletedCultureChange (newCompletedCulture);
markFieldChange (FIELD_CompletedCulture);
_CompletedCulture = newCompletedCulture;
postFieldChange (FIELD_CompletedCulture);
postCompletedCultureChange ();
}
}
/**
* Get the attribute CompletedAssessmentType
*/
public Boolean getCompletedAssessmentType ()
{
assertValid();
Boolean valToReturn = _CompletedAssessmentType;
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
valToReturn = bhd.getCompletedAssessmentType ((Job)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 preCompletedAssessmentTypeChange (Boolean newCompletedAssessmentType) 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 postCompletedAssessmentTypeChange () throws FieldException
{
}
public FieldWriteability getWriteability_CompletedAssessmentType ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute CompletedAssessmentType. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setCompletedAssessmentType (Boolean newCompletedAssessmentType) throws FieldException
{
boolean oldAndNewIdentical = HELPER_CompletedAssessmentType.compare (_CompletedAssessmentType, newCompletedAssessmentType);
try
{
for (JobBehaviourDecorator bhd : Job_BehaviourDecorators)
{
newCompletedAssessmentType = bhd.setCompletedAssessmentType ((Job)this, newCompletedAssessmentType);
oldAndNewIdentical = HELPER_CompletedAssessmentType.compare (_CompletedAssessmentType, newCompletedAssessmentType);
}
if (FIELD_CompletedAssessmentType_Validators.length > 0)
{
Object newCompletedAssessmentTypeObj = HELPER_CompletedAssessmentType.toObject (newCompletedAssessmentType);
if (newCompletedAssessmentTypeObj != null)
{
int loopMax = FIELD_CompletedAssessmentType_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Job.get (FIELD_CompletedAssessmentType);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_CompletedAssessmentType_Validators[v].checkAttribute (this, FIELD_CompletedAssessmentType, metadata, newCompletedAssessmentTypeObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_CompletedAssessmentType () != FieldWriteability.FALSE, "Field CompletedAssessmentType is not writeable");
preCompletedAssessmentTypeChange (newCompletedAssessmentType);
markFieldChange (FIELD_CompletedAssessmentType);
_CompletedAssessmentType = newCompletedAssessmentType;
postFieldChange (FIELD_CompletedAssessmentType);
postCompletedAssessmentTypeChange ();
}
}
/** /**
...@@ -2223,6 +2711,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2223,6 +2711,10 @@ public abstract class BaseJob extends BaseBusinessClass
_AssessmentType = sourceJob._AssessmentType; _AssessmentType = sourceJob._AssessmentType;
_RandomKey = sourceJob._RandomKey; _RandomKey = sourceJob._RandomKey;
_Email = sourceJob._Email; _Email = sourceJob._Email;
_CompletedDetails = sourceJob._CompletedDetails;
_CompletedRequirements = sourceJob._CompletedRequirements;
_CompletedCulture = sourceJob._CompletedCulture;
_CompletedAssessmentType = sourceJob._CompletedAssessmentType;
} }
} }
...@@ -2290,6 +2782,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2290,6 +2782,10 @@ public abstract class BaseJob extends BaseBusinessClass
_AssessmentType = (AssessmentType)(HELPER_AssessmentType.readExternal (_AssessmentType, vals.get(FIELD_AssessmentType))); // _AssessmentType = (AssessmentType)(HELPER_AssessmentType.readExternal (_AssessmentType, vals.get(FIELD_AssessmentType))); //
_RandomKey = (String)(HELPER_RandomKey.readExternal (_RandomKey, vals.get(FIELD_RandomKey))); // _RandomKey = (String)(HELPER_RandomKey.readExternal (_RandomKey, vals.get(FIELD_RandomKey))); //
_Email = (String)(HELPER_Email.readExternal (_Email, vals.get(FIELD_Email))); // _Email = (String)(HELPER_Email.readExternal (_Email, vals.get(FIELD_Email))); //
_CompletedDetails = (Boolean)(HELPER_CompletedDetails.readExternal (_CompletedDetails, vals.get(FIELD_CompletedDetails))); //
_CompletedRequirements = (Boolean)(HELPER_CompletedRequirements.readExternal (_CompletedRequirements, vals.get(FIELD_CompletedRequirements))); //
_CompletedCulture = (Boolean)(HELPER_CompletedCulture.readExternal (_CompletedCulture, vals.get(FIELD_CompletedCulture))); //
_CompletedAssessmentType = (Boolean)(HELPER_CompletedAssessmentType.readExternal (_CompletedAssessmentType, vals.get(FIELD_CompletedAssessmentType))); //
_Level.readExternalData(vals.get(SINGLEREFERENCE_Level)); _Level.readExternalData(vals.get(SINGLEREFERENCE_Level));
_SecUser.readExternalData(vals.get(SINGLEREFERENCE_SecUser)); _SecUser.readExternalData(vals.get(SINGLEREFERENCE_SecUser));
_JobApplications.readExternalData(vals.get(MULTIPLEREFERENCE_JobApplications)); _JobApplications.readExternalData(vals.get(MULTIPLEREFERENCE_JobApplications));
...@@ -2314,6 +2810,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2314,6 +2810,10 @@ public abstract class BaseJob extends BaseBusinessClass
vals.put (FIELD_AssessmentType, HELPER_AssessmentType.writeExternal (_AssessmentType)); vals.put (FIELD_AssessmentType, HELPER_AssessmentType.writeExternal (_AssessmentType));
vals.put (FIELD_RandomKey, HELPER_RandomKey.writeExternal (_RandomKey)); vals.put (FIELD_RandomKey, HELPER_RandomKey.writeExternal (_RandomKey));
vals.put (FIELD_Email, HELPER_Email.writeExternal (_Email)); vals.put (FIELD_Email, HELPER_Email.writeExternal (_Email));
vals.put (FIELD_CompletedDetails, HELPER_CompletedDetails.writeExternal (_CompletedDetails));
vals.put (FIELD_CompletedRequirements, HELPER_CompletedRequirements.writeExternal (_CompletedRequirements));
vals.put (FIELD_CompletedCulture, HELPER_CompletedCulture.writeExternal (_CompletedCulture));
vals.put (FIELD_CompletedAssessmentType, HELPER_CompletedAssessmentType.writeExternal (_CompletedAssessmentType));
vals.put (SINGLEREFERENCE_Level, _Level.writeExternalData()); vals.put (SINGLEREFERENCE_Level, _Level.writeExternalData());
vals.put (SINGLEREFERENCE_SecUser, _SecUser.writeExternalData()); vals.put (SINGLEREFERENCE_SecUser, _SecUser.writeExternalData());
vals.put (MULTIPLEREFERENCE_JobApplications, _JobApplications.writeExternalData()); vals.put (MULTIPLEREFERENCE_JobApplications, _JobApplications.writeExternalData());
...@@ -2380,6 +2880,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2380,6 +2880,10 @@ public abstract class BaseJob extends BaseBusinessClass
super.visitAttributes (visitor); super.visitAttributes (visitor);
visitor.visitField(this, FIELD_Email, HELPER_Email.toObject(getEmail())); visitor.visitField(this, FIELD_Email, HELPER_Email.toObject(getEmail()));
visitor.visitField(this, FIELD_CompletedDetails, HELPER_CompletedDetails.toObject(getCompletedDetails()));
visitor.visitField(this, FIELD_CompletedRequirements, HELPER_CompletedRequirements.toObject(getCompletedRequirements()));
visitor.visitField(this, FIELD_CompletedCulture, HELPER_CompletedCulture.toObject(getCompletedCulture()));
visitor.visitField(this, FIELD_CompletedAssessmentType, HELPER_CompletedAssessmentType.toObject(getCompletedAssessmentType()));
} }
...@@ -2758,6 +3262,22 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2758,6 +3262,22 @@ public abstract class BaseJob extends BaseBusinessClass
{ {
return HELPER_Email.toObject (getEmail ()); return HELPER_Email.toObject (getEmail ());
} }
else if (attribName.equals (FIELD_CompletedDetails))
{
return HELPER_CompletedDetails.toObject (getCompletedDetails ());
}
else if (attribName.equals (FIELD_CompletedRequirements))
{
return HELPER_CompletedRequirements.toObject (getCompletedRequirements ());
}
else if (attribName.equals (FIELD_CompletedCulture))
{
return HELPER_CompletedCulture.toObject (getCompletedCulture ());
}
else if (attribName.equals (FIELD_CompletedAssessmentType))
{
return HELPER_CompletedAssessmentType.toObject (getCompletedAssessmentType ());
}
else else
{ {
return super.getAttribute (attribName); return super.getAttribute (attribName);
...@@ -2803,6 +3323,22 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2803,6 +3323,22 @@ public abstract class BaseJob extends BaseBusinessClass
{ {
return HELPER_Email; return HELPER_Email;
} }
else if (attribName.equals (FIELD_CompletedDetails))
{
return HELPER_CompletedDetails;
}
else if (attribName.equals (FIELD_CompletedRequirements))
{
return HELPER_CompletedRequirements;
}
else if (attribName.equals (FIELD_CompletedCulture))
{
return HELPER_CompletedCulture;
}
else if (attribName.equals (FIELD_CompletedAssessmentType))
{
return HELPER_CompletedAssessmentType;
}
else else
{ {
return super.getAttributeHelper (attribName); return super.getAttributeHelper (attribName);
...@@ -2848,6 +3384,22 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2848,6 +3384,22 @@ public abstract class BaseJob extends BaseBusinessClass
{ {
setEmail ((String)(HELPER_Email.fromObject (_Email, attribValue))); setEmail ((String)(HELPER_Email.fromObject (_Email, attribValue)));
} }
else if (attribName.equals (FIELD_CompletedDetails))
{
setCompletedDetails ((Boolean)(HELPER_CompletedDetails.fromObject (_CompletedDetails, attribValue)));
}
else if (attribName.equals (FIELD_CompletedRequirements))
{
setCompletedRequirements ((Boolean)(HELPER_CompletedRequirements.fromObject (_CompletedRequirements, attribValue)));
}
else if (attribName.equals (FIELD_CompletedCulture))
{
setCompletedCulture ((Boolean)(HELPER_CompletedCulture.fromObject (_CompletedCulture, attribValue)));
}
else if (attribName.equals (FIELD_CompletedAssessmentType))
{
setCompletedAssessmentType ((Boolean)(HELPER_CompletedAssessmentType.fromObject (_CompletedAssessmentType, attribValue)));
}
else else
{ {
super.setAttribute (attribName, attribValue); super.setAttribute (attribName, attribValue);
...@@ -2920,6 +3472,22 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2920,6 +3472,22 @@ public abstract class BaseJob extends BaseBusinessClass
{ {
return getWriteability_Email (); return getWriteability_Email ();
} }
else if (fieldName.equals (FIELD_CompletedDetails))
{
return getWriteability_CompletedDetails ();
}
else if (fieldName.equals (FIELD_CompletedRequirements))
{
return getWriteability_CompletedRequirements ();
}
else if (fieldName.equals (FIELD_CompletedCulture))
{
return getWriteability_CompletedCulture ();
}
else if (fieldName.equals (FIELD_CompletedAssessmentType))
{
return getWriteability_CompletedAssessmentType ();
}
else else
{ {
return super.getWriteable (fieldName); return super.getWriteable (fieldName);
...@@ -2970,6 +3538,26 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2970,6 +3538,26 @@ public abstract class BaseJob extends BaseBusinessClass
fields.add (FIELD_Email); fields.add (FIELD_Email);
} }
if (getWriteability_CompletedDetails () != FieldWriteability.TRUE)
{
fields.add (FIELD_CompletedDetails);
}
if (getWriteability_CompletedRequirements () != FieldWriteability.TRUE)
{
fields.add (FIELD_CompletedRequirements);
}
if (getWriteability_CompletedCulture () != FieldWriteability.TRUE)
{
fields.add (FIELD_CompletedCulture);
}
if (getWriteability_CompletedAssessmentType () != FieldWriteability.TRUE)
{
fields.add (FIELD_CompletedAssessmentType);
}
super.putUnwriteable (fields); super.putUnwriteable (fields);
} }
...@@ -2987,6 +3575,10 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -2987,6 +3575,10 @@ public abstract class BaseJob extends BaseBusinessClass
result.add(HELPER_AssessmentType.getAttribObject (getClass (), _AssessmentType, true, FIELD_AssessmentType)); result.add(HELPER_AssessmentType.getAttribObject (getClass (), _AssessmentType, true, FIELD_AssessmentType));
result.add(HELPER_RandomKey.getAttribObject (getClass (), _RandomKey, false, FIELD_RandomKey)); result.add(HELPER_RandomKey.getAttribObject (getClass (), _RandomKey, false, FIELD_RandomKey));
result.add(HELPER_Email.getAttribObject (getClass (), _Email, false, FIELD_Email)); result.add(HELPER_Email.getAttribObject (getClass (), _Email, false, FIELD_Email));
result.add(HELPER_CompletedDetails.getAttribObject (getClass (), _CompletedDetails, false, FIELD_CompletedDetails));
result.add(HELPER_CompletedRequirements.getAttribObject (getClass (), _CompletedRequirements, false, FIELD_CompletedRequirements));
result.add(HELPER_CompletedCulture.getAttribObject (getClass (), _CompletedCulture, false, FIELD_CompletedCulture));
result.add(HELPER_CompletedAssessmentType.getAttribObject (getClass (), _CompletedAssessmentType, false, FIELD_CompletedAssessmentType));
return result; return result;
} }
...@@ -3181,6 +3773,78 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -3181,6 +3773,78 @@ public abstract class BaseJob extends BaseBusinessClass
return newEmail; return newEmail;
} }
/**
* Get the attribute CompletedDetails
*/
public Boolean getCompletedDetails (Job obj, Boolean original)
{
return original;
}
/**
* Change the value set for attribute CompletedDetails.
* May modify the field beforehand
* Occurs before validation.
*/
public Boolean setCompletedDetails (Job obj, Boolean newCompletedDetails) throws FieldException
{
return newCompletedDetails;
}
/**
* Get the attribute CompletedRequirements
*/
public Boolean getCompletedRequirements (Job obj, Boolean original)
{
return original;
}
/**
* Change the value set for attribute CompletedRequirements.
* May modify the field beforehand
* Occurs before validation.
*/
public Boolean setCompletedRequirements (Job obj, Boolean newCompletedRequirements) throws FieldException
{
return newCompletedRequirements;
}
/**
* Get the attribute CompletedCulture
*/
public Boolean getCompletedCulture (Job obj, Boolean original)
{
return original;
}
/**
* Change the value set for attribute CompletedCulture.
* May modify the field beforehand
* Occurs before validation.
*/
public Boolean setCompletedCulture (Job obj, Boolean newCompletedCulture) throws FieldException
{
return newCompletedCulture;
}
/**
* Get the attribute CompletedAssessmentType
*/
public Boolean getCompletedAssessmentType (Job obj, Boolean original)
{
return original;
}
/**
* Change the value set for attribute CompletedAssessmentType.
* May modify the field beforehand
* Occurs before validation.
*/
public Boolean setCompletedAssessmentType (Job obj, Boolean newCompletedAssessmentType) throws FieldException
{
return newCompletedAssessmentType;
}
} }
...@@ -3249,6 +3913,22 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -3249,6 +3913,22 @@ public abstract class BaseJob extends BaseBusinessClass
{ {
return toEmail (); return toEmail ();
} }
if (name.equals ("CompletedDetails"))
{
return toCompletedDetails ();
}
if (name.equals ("CompletedRequirements"))
{
return toCompletedRequirements ();
}
if (name.equals ("CompletedCulture"))
{
return toCompletedCulture ();
}
if (name.equals ("CompletedAssessmentType"))
{
return toCompletedAssessmentType ();
}
if (name.equals ("JobTitle")) if (name.equals ("JobTitle"))
{ {
return toJobTitle (); return toJobTitle ();
...@@ -3293,6 +3973,14 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -3293,6 +3973,14 @@ public abstract class BaseJob extends BaseBusinessClass
public PipeLine<From, String> toEmail () { return pipe(new ORMAttributePipe<Me, String>(FIELD_Email)); } public PipeLine<From, String> toEmail () { return pipe(new ORMAttributePipe<Me, String>(FIELD_Email)); }
public PipeLine<From, Boolean> toCompletedDetails () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedDetails)); }
public PipeLine<From, Boolean> toCompletedRequirements () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedRequirements)); }
public PipeLine<From, Boolean> toCompletedCulture () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedCulture)); }
public PipeLine<From, Boolean> toCompletedAssessmentType () { return pipe(new ORMAttributePipe<Me, Boolean>(FIELD_CompletedAssessmentType)); }
public PipeLine<From, String> toJobTitle () { return pipe(new ORMAttributePipe<Me, String>(FIELD_JobTitle)); } public PipeLine<From, String> toJobTitle () { return pipe(new ORMAttributePipe<Me, String>(FIELD_JobTitle)); }
public PipeLine<From, String> toJobDescription () { return pipe(new ORMAttributePipe<Me, String>(FIELD_JobDescription)); } public PipeLine<From, String> toJobDescription () { return pipe(new ORMAttributePipe<Me, String>(FIELD_JobDescription)); }
...@@ -3347,6 +4035,26 @@ public abstract class BaseJob extends BaseBusinessClass ...@@ -3347,6 +4035,26 @@ public abstract class BaseJob extends BaseBusinessClass
return true; return true;
} }
if(CollectionUtils.equals(attribName, "CompletedDetails"))
{
return true;
}
if(CollectionUtils.equals(attribName, "CompletedRequirements"))
{
return true;
}
if(CollectionUtils.equals(attribName, "CompletedCulture"))
{
return true;
}
if(CollectionUtils.equals(attribName, "CompletedAssessmentType"))
{
return true;
}
return super.isTransientAttrib(attribName); return super.isTransientAttrib(attribName);
} }
......
...@@ -2,6 +2,8 @@ package performa.orm; ...@@ -2,6 +2,8 @@ package performa.orm;
import java.util.*; import java.util.*;
import oneit.logging.LoggingArea; import oneit.logging.LoggingArea;
import oneit.objstore.ObjectStatus;
import oneit.objstore.ValidationContext;
import oneit.objstore.rdbms.filters.*; import oneit.objstore.rdbms.filters.*;
import oneit.objstore.utils.ObjstoreUtils; import oneit.objstore.utils.ObjstoreUtils;
import oneit.security.*; import oneit.security.*;
...@@ -123,4 +125,16 @@ public class Job extends BaseJob ...@@ -123,4 +125,16 @@ public class Job extends BaseJob
return levels; return levels;
} }
@Override
public void validate(ValidationContext context)
{
super.validate(context);
if (getIncludeAssessmentCriteria())
{
context.check(getAssessmentCriteriasCount() > 0 , this, MULTIPLEREFERENCE_AssessmentCriterias, "atleastOneRequirement");
}
}
} }
\ No newline at end of file
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
<MULTIPLEREFERENCE name="CultureCriterias" type="CultureCriteria" backreferenceName="Job" /> <MULTIPLEREFERENCE name="CultureCriterias" type="CultureCriteria" backreferenceName="Job" />
<TRANSIENT name="Email" type="String" validators="Email" /> <TRANSIENT name="Email" type="String" validators="Email" />
<TRANSIENT name="CompletedDetails" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedRequirements" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedCulture" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedAssessmentType" type="Boolean" defaultValue="Boolean.FALSE"/>
<TABLE name="tl_job" tablePrefix="object" polymorphic="FALSE"> <TABLE name="tl_job" tablePrefix="object" polymorphic="FALSE">
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
Debug.assertion(job != null, "Job is null in admin portal create job"); Debug.assertion(job != null, "Job is null in admin portal create job");
job.setCompletedRequirements(Boolean.TRUE);
String secondPage = WebUtils.getSamePageInRenderMode(request, WebUtils.ASSESSMENT_CRITERIA); String secondPage = WebUtils.getSamePageInRenderMode(request, WebUtils.ASSESSMENT_CRITERIA);
String thirdPage = WebUtils.getSamePageInRenderMode(request, WebUtils.WORKPLACE_CULTURE); String thirdPage = WebUtils.getSamePageInRenderMode(request, WebUtils.WORKPLACE_CULTURE);
%> %>
......
...@@ -12,45 +12,46 @@ ...@@ -12,45 +12,46 @@
String thirdPage = WebUtils.getSamePageInRenderMode(request, WebUtils.WORKPLACE_CULTURE); String thirdPage = WebUtils.getSamePageInRenderMode(request, WebUtils.WORKPLACE_CULTURE);
String fourthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_MATCH); String fourthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_MATCH);
String fifthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_REVIEW); String fifthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_REVIEW);
boolean savedJob = job.getStatus() != ObjectStatus.NEW;
%> %>
<oneit:dynIncluded> <oneit:dynIncluded>
<div class="main-tab-form"> <div class="main-tab-form">
<ul class="nav nav-pills nav-justified"> <ul class="nav nav-pills nav-justified">
<li class="<%= pageNumber == "1" ? "active" : job.assessmentCompleted() ? "complate" : ""%>"> <li class="<%= pageNumber == "1" ? "active" : job.getCompletedDetails() || savedJob ? "complate" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link" <oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", firstPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", firstPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>"> .toMap() %>">
<span><%= job.jobDetailsCompleted() ? "<img src=\"images/right-mark.png\" />" : "1"%></span> <span><%= job.getCompletedDetails() || savedJob ? "<img src=\"images/right-mark.png\" />" : "1"%></span>
Job Detail Job Detail
</oneit:button> </oneit:button>
</li> </li>
<li class="<%= pageNumber == "2" ? "active" : job.assessmentCompleted() ? "complate" : ""%>"> <li class="<%= pageNumber == "2" ? "active" : job.getCompletedRequirements() || savedJob ? "complate" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link" <oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>"> .toMap() %>">
<span><%= job.assessmentCompleted() ? "<img src=\"images/right-mark.png\" />" : "2"%></span> <span><%= job.getCompletedRequirements() || savedJob ? "<img src=\"images/right-mark.png\" />" : "2"%></span>
Requirements Requirements
</oneit:button> </oneit:button>
</li> </li>
<li class="<%= pageNumber == "3" ? "active" : job.cultureCompleted() ? "complate" : ""%>"> <li class="<%= pageNumber == "3" ? "active" : job.getCompletedCulture() || savedJob ? "complate" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link" <oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>"> .toMap() %>">
<span><%= job.cultureCompleted() ? "<img src=\"images/right-mark.png\" />" : "3"%></span> <span><%= job.getCompletedCulture() || savedJob ? "<img src=\"images/right-mark.png\" />" : "3"%></span>
Culture Culture
</oneit:button> </oneit:button>
</li> </li>
<li class="<%= pageNumber == "4" ? "active" : job.jobMatchCompleted() ? "complate" : ""%>"> <li class="<%= pageNumber == "4" ? "active" : job.getCompletedAssessmentType() || savedJob ? "complate" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link" <oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", fourthPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", fourthPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>"> .toMap() %>">
<span><%= job.jobMatchCompleted() ? "<img src=\"images/right-mark.png\" />" : "4"%></span> <span><%= job.getCompletedAssessmentType() || savedJob ? "<img src=\"images/right-mark.png\" />" : "4"%></span>
Profile Assessment Profile Assessment
</oneit:button> </oneit:button>
</li> </li>
......
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
{ {
%><%@include file="/saferedirect.jsp" %><% %><%@include file="/saferedirect.jsp" %><%
} }
job.setCompletedDetails(Boolean.TRUE);
String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.ASSESSMENT_CRITERIA); String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.ASSESSMENT_CRITERIA);
%> %>
<oneit:form name="editJob" method="post" enctype="multipart/form-data"> <oneit:form name="editJob" method="post" enctype="multipart/form-data">
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
String fifthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_REVIEW); String fifthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_REVIEW);
Debug.assertion(job != null, "Job is null in admin portal create job"); Debug.assertion(job != null, "Job is null in admin portal create job");
job.setCompletedAssessmentType(Boolean.TRUE);
%> %>
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
......
#atleastOneRequirement = Please add at least one Requirement.
\ No newline at end of file
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
String fourthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_MATCH); String fourthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_MATCH);
Debug.assertion(job != null, "Job is null in admin portal create job"); Debug.assertion(job != null, "Job is null in admin portal create job");
job.setCompletedCulture(Boolean.TRUE);
%> %>
<script type="text/javascript"> <script type="text/javascript">
......
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