Commit f65a96d5 by Nilu Committed by Harsh Shah

HT003 HT005

Bulk Update - Enable drop only when one or more rows is checked/selected

Bulk Update - "remove from Shortlist" (which of course would only apply that update to those applicants who have been shortlisted)
parent 291b4add
package performa.form;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.objstore.StorageException;
import oneit.objstore.utils.ObjstoreUtils;
import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import performa.orm.Job;
import performa.orm.JobApplication;
import performa.orm.types.AppProcessOption;
import performa.orm.types.ApplicationStatus;
public class BulkUpdateFP extends SaveFP
{
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{
HttpServletRequest request = submission.getRequest();
List<JobApplication> applications = ObjstoreUtils.getActioned(request, "IsSelected", process.getTransaction(), JobApplication.REFERENCE_JobApplication);
Job job = (Job) request.getAttribute("Job");
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP selected application count : ", applications != null ? applications.size() : 0 , " of job ", job);
for(JobApplication application : applications)
{
if(job.getAppProcessOption() == AppProcessOption.TO_SHORTLIST)
{
application.setApplicationStatus(ApplicationStatus.SHORTLISTED);
}
else if(job.getAppProcessOption() == AppProcessOption.REMOVE_FROM_SHORTLIST)
{
application.setApplicationStatus(ApplicationStatus.SUBMITTED);
}
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP Job Application Status successfully changed : ", application );
}
return super.processForm(process, submission, params);
}
}
...@@ -327,4 +327,18 @@ public class Job extends BaseJob ...@@ -327,4 +327,18 @@ public class Job extends BaseJob
{ {
return getApplyBy() != null && DateDiff.endOfDay(getApplyBy()).before(DateDiff.getToday()); return getApplyBy() != null && DateDiff.endOfDay(getApplyBy()).before(DateDiff.getToday());
} }
public List<AppProcessOption> getValidProcessOptions(String tabNumber)
{
List<AppProcessOption> options = new ArrayList<>();
if(tabNumber == null)
{
options.add(AppProcessOption.TO_SHORTLIST);
}
options.add(AppProcessOption.REMOVE_FROM_SHORTLIST);
return options;
}
} }
\ No newline at end of file
...@@ -10,15 +10,16 @@ ...@@ -10,15 +10,16 @@
<MULTIPLEREFERENCE name="AssessmentCriterias" type="AssessmentCriteria" backreferenceName="Job" /> <MULTIPLEREFERENCE name="AssessmentCriterias" type="AssessmentCriteria" backreferenceName="Job" />
<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="CompletedDetails" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedRequirements" type="Boolean" defaultValue="Boolean.FALSE"/> <TRANSIENT name="CompletedRequirements" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedCulture" type="Boolean" defaultValue="Boolean.FALSE"/> <TRANSIENT name="CompletedCulture" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedAssessmentType" type="Boolean" defaultValue="Boolean.FALSE"/> <TRANSIENT name="CompletedAssessmentType" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="SaveAssessmentTemplate" type="Boolean" defaultValue="Boolean.FALSE"/> <TRANSIENT name="SaveAssessmentTemplate" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="SaveCultureTemplate" type="Boolean" defaultValue="Boolean.FALSE"/> <TRANSIENT name="SaveCultureTemplate" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="AssessmentTemplateName" type="String"/> <TRANSIENT name="AssessmentTemplateName" type="String"/>
<TRANSIENT name="CultureTemplateName" type="String"/> <TRANSIENT name="CultureTemplateName" type="String"/>
<TRANSIENT name="AppProcessOption" type="AppProcessOption" attribHelper="EnumeratedAttributeHelper"/>
<TRANSIENTSINGLE name="AssessmentTemplate" type="AssessmentCriteriaTemplate" /> <TRANSIENTSINGLE name="AssessmentTemplate" type="AssessmentCriteriaTemplate" />
<TRANSIENTSINGLE name="CultureTemplate" type="CultureCriteriaTemplate" /> <TRANSIENTSINGLE name="CultureTemplate" type="CultureCriteriaTemplate" />
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
<MULTIPLEREFERENCE name="CultureCriteriaAnswers" type="CultureCriteriaAnswer" backreferenceName="JobApplication" /> <MULTIPLEREFERENCE name="CultureCriteriaAnswers" type="CultureCriteriaAnswer" backreferenceName="JobApplication" />
<MULTIPLEREFERENCE name="ProfileAssessmentAnswers" type="Answer" backreferenceName="JobApplication" /> <MULTIPLEREFERENCE name="ProfileAssessmentAnswers" type="Answer" backreferenceName="JobApplication" />
<TRANSIENT name="IsSelected" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="AppProcessOption" type="AppProcessOption" attribHelper="EnumeratedAttributeHelper"/> <TRANSIENT name="AppProcessOption" type="AppProcessOption" attribHelper="EnumeratedAttributeHelper"/>
<TRANSIENT name="OverallSuitability" type="Integer"/> <TRANSIENT name="OverallSuitability" type="Integer"/>
......
...@@ -3419,7 +3419,7 @@ input.add-note-btn:hover{ ...@@ -3419,7 +3419,7 @@ input.add-note-btn:hover{
} }
.appli-shorting-dropdown{ .appli-shorting-dropdown{
float: right; float: right;
width: 120px; width: 200px;
margin-left: 50px; margin-left: 50px;
position: relative; position: relative;
z-index: 10; z-index: 10;
...@@ -3469,7 +3469,7 @@ input.add-note-btn:hover{ ...@@ -3469,7 +3469,7 @@ input.add-note-btn:hover{
.appli-checkbox { .appli-checkbox {
text-align: center; text-align: center;
width: 44px; width: 44px;
padding: 26px 0 5px; padding: 15px 5px;
} }
.appli-list-name { .appli-list-name {
color: #4a4a4a; color: #4a4a4a;
...@@ -3516,7 +3516,7 @@ input.add-note-btn:hover{ ...@@ -3516,7 +3516,7 @@ input.add-note-btn:hover{
} }
.appli-list-drop{ .appli-list-drop{
float: left; float: left;
width: 160px; width: 200px;
} }
.person-status { .person-status {
float: left; float: left;
...@@ -3617,7 +3617,7 @@ span.right-img { ...@@ -3617,7 +3617,7 @@ span.right-img {
left: 0; left: 0;
top: 0; top: 0;
padding-top: 2px; padding-top: 2px;
padding-left: 7px; padding-left: 8px;
font-size: 11px; font-size: 11px;
color: #555555; color: #555555;
} }
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
<FORM name="*.loadRequirementsFromTemplate" factory="Participant" class="performa.form.LoadRequirementsFromTemplateFP"/> <FORM name="*.loadRequirementsFromTemplate" factory="Participant" class="performa.form.LoadRequirementsFromTemplateFP"/>
<FORM name="*.loadCultureFromTemplate" factory="Participant" class="performa.form.LoadCultureFromTemplateFP"/> <FORM name="*.loadCultureFromTemplate" factory="Participant" class="performa.form.LoadCultureFromTemplateFP"/>
<FORM name="*.changeApplicationStatus" factory="Participant" class="performa.form.ChangeApplicationStatusFP"/> <FORM name="*.changeApplicationStatus" factory="Participant" class="performa.form.ChangeApplicationStatusFP"/>
<FORM name="*.bulkupdate" factory="Participant" class="performa.form.BulkUpdateFP"/>
</NODE> </NODE>
<NODE name="job_assessment_criteria_add_jsp" factory="Participant"> <NODE name="job_assessment_criteria_add_jsp" factory="Participant">
......
...@@ -31,14 +31,13 @@ ...@@ -31,14 +31,13 @@
String jobMatch = FormatUtils.stringify(jobApplication.getJobMatchPercentage(), "PercentageWholeNumber", "0"); String jobMatch = FormatUtils.stringify(jobApplication.getJobMatchPercentage(), "PercentageWholeNumber", "0");
String culture = FormatUtils.stringify(jobApplication.getCulturePercentage(), "PercentageWholeNumber", "0"); String culture = FormatUtils.stringify(jobApplication.getCulturePercentage(), "PercentageWholeNumber", "0");
String criteria = FormatUtils.stringify(jobApplication.getCriteriaPercentage(), "PercentageWholeNumber", "0"); String criteria = FormatUtils.stringify(jobApplication.getCriteriaPercentage(), "PercentageWholeNumber", "0");
String appID = "app-id-" + jobApplication.getID().toString();
%> %>
<div class="appli-row" id="<%= jobApplication.getID() %>"> <div class="appli-row" id="<%= jobApplication.getID() %>">
<div class="appli-checkbox appli-l eq-second-height"> <div class="appli-checkbox appli-l eq-second-height">
<div class="checkbox-list"> <div class="checkbox-list">
<oneit:ormInput obj="<%= jobApplication %>" id="<%= jobApplication.getID().toString()%>" attributeName="IsSelected" type="checkbox"/> <input type="checkbox" name="IsSelected" value="<%= jobApplication.getObjectID().toString() %>" id="<%= appID %>" class="applicant" >
<oneit:recalcClass htmlTag="span" classScript="jobApplication.getIsSelected() != null && jobApplication.getIsSelected() ? 'checked': 'unchecked'" jobApplication="<%= jobApplication %>"> <label for="<%= appID %>"></label>
<label for="<%= jobApplication.getID().toString()%>"/>
</oneit:recalcClass>
</div> </div>
</div> </div>
<div class="appli-list-name appli-l eq-second-height"> <div class="appli-list-name appli-l eq-second-height">
......
...@@ -11,18 +11,41 @@ ...@@ -11,18 +11,41 @@
AppSortOption appSortOpt = (AppSortOption) getData(request, "sortOption"); AppSortOption appSortOpt = (AppSortOption) getData(request, "sortOption");
String tabNumber = (String) getData(request, "tabNumber"); String tabNumber = (String) getData(request, "tabNumber");
Boolean expand = getData(request, "expand")!=null ? (Boolean) getData(request, "expand") : Boolean.FALSE; Boolean expand = getData(request, "expand")!=null ? (Boolean) getData(request, "expand") : Boolean.FALSE;
%> %>
<oneit:dynIncluded> <oneit:dynIncluded>
<script type="text/javascript">
$(document).ready(function()
{
$(".bullk-app-process").change(function()
{
$('.bulk-update').click();
});
enableBulkEdit();
$(".applicant").change(function() {
enableBulkEdit();
});
});
function enableBulkEdit() {
$(".bullk-app-process").prop("disabled",$('input[class=applicant]:checked').length===0);
}
</script>
<div class="main-applicants-filter"> <div class="main-applicants-filter">
<div class="appli-list-shorting"> <div class="appli-list-shorting">
<div class="appli-shorting-dropdown appli-left"> <div class="appli-shorting-dropdown appli-left">
<span class="appli-order-label">Bulk Update</span> <span class="appli-order-label">Bulk Update</span>
<select class="form-control"> <oneit:ormEnum obj="<%= job %>" attributeName="AppProcessOption" cssClass="form-control bullk-app-process"
<option>To Shortlist</option> enums="<%= job.getValidProcessOptions(tabNumber) %>"/>
</select>
<oneit:button name="bulkupdate" value=" " cssClass="bulk-update" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry ("attribNamesToRestore", Collections.singleton("Job"))
.mapEntry("Job", job)
.toMap() %>" />
</div> </div>
<% <%
if(tabNumber != null) if(tabNumber != null)
...@@ -52,7 +75,6 @@ ...@@ -52,7 +75,6 @@
<select class="form-control"> <select class="form-control">
<option>PDF</option> <option>PDF</option>
<option>CSV</option> <option>CSV</option>
<option>XML</option>
</select> </select>
</div> </div>
<% <%
......
...@@ -54,10 +54,6 @@ ...@@ -54,10 +54,6 @@
{ {
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true}); recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
}); });
function gotoEditApplication (id) {
$('.' + id).click();
}
</script> </script>
<oneit:form name="viewApplicants" method="post" enctype="multipart/form-data"> <oneit:form name="viewApplicants" method="post" enctype="multipart/form-data">
......
...@@ -102,6 +102,9 @@ ...@@ -102,6 +102,9 @@
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true}); recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
}); });
function gotoEditApplication (id) {
$('.' + id).click();
}
</script> </script>
<oneit:form name="viewApplicants" method="post" enctype="multipart/form-data"> <oneit:form name="viewApplicants" method="post" enctype="multipart/form-data">
...@@ -131,7 +134,7 @@ ...@@ -131,7 +134,7 @@
{ {
%> %>
<div class="appl-c-box application-row" onClick='gotoEditApplication("<%= jobApplication.getID() %>")'> <div class="appl-c-box application-row" onClick='gotoEditApplication("<%= jobApplication.getID() %>")'>
<oneit:button value="EDIT" name="gotoPage" cssClass="<%= jobApplication.getID() + " hidden"%>" skin="link" <oneit:button value=" " name="gotoPage" cssClass="<%= jobApplication.getID() + " hidden"%>" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap()) .mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/> .toMap() %>"/>
...@@ -206,17 +209,18 @@ ...@@ -206,17 +209,18 @@
for(JobApplication jobApplication : sortedApplications) for(JobApplication jobApplication : sortedApplications)
{ {
String appID = "app-id-" + jobApplication.getID().toString();
%> %>
<div class="<%= "appl-c-box " + (i == 0 ? " cb-one" : "")%> "> <div class="<%= "appl-c-box " + (i == 0 ? " cb-one" : "")%> " onClick='gotoEditApplication("<%= jobApplication.getID() %>")'>
<!--TODO: need to work on the logic. just added to demonstrate that there are 3 different colors for this--> <!--TODO: need to work on the logic. just added to demonstrate that there are 3 different colors for this-->
<div class="<%= "cb-title " + (i == 0 ? "green-back" : (i < 3 ? "blue-back" : "dark-back" ))%> "> <div class="<%= "cb-title " + (i == 0 ? "green-back" : (i < 3 ? "blue-back" : "dark-back" ))%> ">
<div class="checkbox-list grid-checkbox"> <div class="checkbox-list grid-checkbox">
<oneit:ormInput obj="<%= jobApplication %>" id="<%= jobApplication.getID().toString()%>" attributeName="IsSelected" type="checkbox"/> <div class="checkbox-list">
<oneit:recalcClass htmlTag="span" classScript="jobApplication.getIsSelected() != null && jobApplication.getIsSelected() ? 'checked': 'unchecked'" jobApplication="<%= jobApplication %>"> <input type="checkbox" name="IsSelected" value="<%= jobApplication.getObjectID().toString() %>" id="<%= appID %>" class="applicant" >
<label for="<%= jobApplication.getID().toString()%>"> <label for="<%= appID %>">
<oneit:toString value="<%= jobApplication.getCandidate() %>" mode="EscapeHTML" /> <oneit:toString value="<%= jobApplication.getCandidate() %>" mode="EscapeHTML" />
</label> </label>
</oneit:recalcClass> </div>
</div> </div>
</div> </div>
<div class="overall-suitablity grid-suitability"> <div class="overall-suitablity grid-suitability">
......
...@@ -54,10 +54,6 @@ ...@@ -54,10 +54,6 @@
{ {
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true}); recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
}); });
function gotoEditApplication (id) {
$('.' + id).click();
}
</script> </script>
<oneit:form name="viewApplicants" method="post" enctype="multipart/form-data"> <oneit:form name="viewApplicants" method="post" enctype="multipart/form-data">
......
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