Commit 2e8441b7 by Nilu

bulk update functionality update in HT003

parent bea59561
......@@ -16,13 +16,13 @@ import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import oneit.utils.Debug;
import oneit.utils.filter.CollectionFilter;
import oneit.utils.filter.Filter;
import performa.intercom.utils.IntercomUtils;
import performa.orm.CompanyUser;
import performa.orm.Job;
import performa.orm.JobApplication;
import performa.orm.types.AppProcessOption;
import performa.orm.types.ApplicationStatus;
......@@ -35,9 +35,12 @@ public class BulkUpdateFP extends SaveFP
List<JobApplication> applications = ObjstoreUtils.getActioned(request, "IsSelected", process.getTransaction(), JobApplication.REFERENCE_JobApplication);
Job job = (Job) request.getAttribute("Job");
Debug.assertion(job != null, "No job found . Call from " + getClass().getName());
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP selected application count : ", applications != null ? applications.size() : 0 , " of job ", job);
if(job.getAppProcessOption() == AppProcessOption.TO_SHORTLIST && job.getNoOfCandidatesApplied() > job.getMaxShortlistApplicants() && applications != null)
if(job.getAppStatusWorkFlow() != null && job.getAppStatusWorkFlow().getApplicationStatus() == ApplicationStatus.SHORTLISTED
&& job.getNoOfCandidatesApplied() > job.getMaxShortlistApplicants() && applications != null)
{
Filter<JobApplication> filter = JobApplication.SearchByAll().andApplicationStatus(new EqualsFilter<>(ApplicationStatus.SHORTLISTED));
Collection alreadyShortlisted = CollectionFilter.filter(applications, filter);
......@@ -46,28 +49,15 @@ public class BulkUpdateFP extends SaveFP
BusinessObjectParser.assertFieldCondition(totalShortlisted <= job.getMaxShortlistApplicants() , job , Job.MULTIPLEREFERENCE_JobApplications, "exceedMaxShortlisted");
}
for(JobApplication application : applications)
if(job.getAppStatusWorkFlow() != null)
{
if(job.getAppProcessOption() == AppProcessOption.TO_SHORTLIST)
{
application.setApplicationStatus(ApplicationStatus.SHORTLISTED);
}
else if(job.getAppProcessOption() == AppProcessOption.REMOVE_FROM_SHORTLIST)
{
application.setApplicationStatus(ApplicationStatus.SUBMITTED);
}
else if(job.getAppProcessOption() == AppProcessOption.TO_UNSUITABLE)
for(JobApplication application : applications)
{
application.setApplicationStatus(ApplicationStatus.UNSUITABLE);
}
else if(job.getAppProcessOption() == AppProcessOption.REMOVE_FROM_UNSUITABLE)
{
application.setApplicationStatus(ApplicationStatus.SUBMITTED);
application.setApplicationStatus(job.getAppStatusWorkFlow().getApplicationStatus());
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP Job Application Status successfully changed : ", application );
}
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP Job Application Status successfully changed : ", application );
}
}
// restarting process as custom attributes needs to be updated to intercom
completeProcessRestartAndRestoreAttribs(process, request);
......
......@@ -24,12 +24,13 @@
<TRANSIENT name="FromTemplate" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="AssessmentTemplateName" type="String"/>
<TRANSIENT name="CultureTemplateName" type="String"/>
<TRANSIENT name="AppProcessOption" type="AppProcessOption" attribHelper="EnumeratedAttributeHelper"/>
<TRANSIENT name="AppProcessOption" type="AppProcessOption" attribHelper="EnumeratedAttributeHelper"/>
<TRANSIENT name="RankingCompleted" type="Boolean" />
<TRANSIENTSINGLE name="AssessmentTemplate" type="AssessmentCriteriaTemplate" />
<TRANSIENTSINGLE name="CultureTemplate" type="CultureCriteriaTemplate" />
<TRANSIENTSINGLE name="JobTemplate" type="Job" />
<TRANSIENTSINGLE name="AppStatusWorkFlow" type="WorkFlow" />
<TABLE name="tl_job" tablePrefix="object" polymorphic="FALSE">
......
......@@ -3801,7 +3801,7 @@ no-applicant.inactive a:hover,no-applicant.inactive a:hover span{
.main-applicants-filter{
float: left;
width: 100%;
margin-bottom: 50px;
/*margin-bottom: 50px;*/
}
.appli-list-shorting{
display: inline-block;
......
......@@ -6,7 +6,7 @@
<%
Job job = (Job) process.getAttribute("Job");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "ApplicationStatus");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "WorkFlowStatus");
String applicantsPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICANTS);
// String secondTab = WebUtils.getSamePageInRenderMode(request, WebUtils.APPLICANTS_SHORTLIST);
// String thirdTab = WebUtils.getSamePageInRenderMode(request, WebUtils.UNSUITABLE_APPS);
......@@ -25,7 +25,7 @@
<li class="<%= "incomplete " + (noOfIncomplete > 0 ? "has-applicant" : "no-applicant") %> <%= appStatus == ApplicationStatus.DRAFT ? "active" : "inactive" %>">
<oneit:button id="unsuitableBtn" value=" " name="gotoPage" skin="link" disabled="<%= noOfIncomplete > 0 ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicantsPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).mapEntry("TabNumber", 1).toMap())
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).mapEntry("WorkFlowStatus", ApplicationStatus.DRAFT).toMap())
.toMap() %>">
<span>
<oneit:toString value="<%= noOfIncomplete %>" mode="Integer" />
......@@ -41,7 +41,7 @@
<li class="<%= noOfCandidates > 0 ? "has-applicant" : "" %> <%= (appStatus == workflow.getApplicationStatus()) ? "active" : "inactive" %>">
<oneit:button value=" " name="gotoPage" skin="link" disabled="<%= noOfCandidates > 0 ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicantsPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).mapEntry("TabNumber", workflow.getSortOrder()).toMap())
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).mapEntry("WorkFlowStatus", workflow.getApplicationStatus()).toMap())
.toMap() %>">
<span>
<oneit:toString value="<%= noOfCandidates %>" mode="Integer" />
......@@ -57,7 +57,7 @@
<div class="unsutable <%= noOfUnsuitable > 0 ? "has-applicant" : "no-applicant" %> <%= appStatus == ApplicationStatus.UNSUITABLE ? "active" : "inactive" %>">
<oneit:button id="unsuitableBtn" value=" " name="gotoPage" skin="link" disabled="<%= noOfUnsuitable > 0 ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicantsPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).mapEntry("TabNumber", 9).toMap())
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).mapEntry("WorkFlowStatus", ApplicationStatus.UNSUITABLE).toMap())
.toMap() %>">
<span>
<oneit:toString value="<%= noOfUnsuitable %>" mode="Integer" />
......
......@@ -7,10 +7,10 @@
<%
Job job = (Job) process.getAttribute("Job");
AppSortOption appSortOpt = (AppSortOption) getData(request, "sortOption");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "appStatus");
ApplicationStatus workflowStatus = (ApplicationStatus) getData(request, "workflowStatus");
Boolean showOrderBy = getData(request, "showOrderBy")!= null ? (Boolean) getData(request, "showOrderBy") : Boolean.FALSE;
AppSortOption appSortOpt = (AppSortOption) getData(request, "SortOption");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "AppStatus");
ApplicationStatus workflowStatus = (ApplicationStatus) getData(request, "WorkFlowStatus");
Boolean showOrderBy = getData(request, "ShowOrderBy")!= null ? (Boolean) getData(request, "ShowOrderBy") : Boolean.FALSE;
boolean showList = (boolean) getData(request, "ShowList");
SearchApplicant searchApplicant = (SearchApplicant) getData(request, "SearchApplicant");
String applicantsPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICANTS) + "&JobID=" + job.getID();
......@@ -19,8 +19,8 @@
<oneit:dynIncluded>
<script type="text/javascript">
$(document).ready(function()
{
$(".bullk-app-process").change(function()
{
$("[name$='AppStatusWorkFlow']").change(function()
{
$('.bulk-update').click();
});
......@@ -30,15 +30,10 @@
$(".applicant").change(function() {
enableBulkEdit();
});
$('#AppProcessOption option:selected').removeAttr('selected');
$('#AppProcessOption option:nth-child(1)').attr('selected','selected');
$('#select2-AppProcessOption-container').empty();
$('#select2-AppProcessOption-container').data("title", $('#select2-AppProcessOption-container').attr("title")).removeAttr("title");
});
function enableBulkEdit() {
$(".bullk-app-process").prop("disabled",$('input[class=applicant]:checked').length===0);
$("[name$='AppStatusWorkFlow']").prop("disabled",$('input[class=applicant]:checked').length===0);
}
$('#searchText').keypress(function (e) {
......@@ -52,17 +47,18 @@
<div class="appli-list-shorting">
<div class="appli-shorting-dropdown appli-left">
<span class="appli-order-label">Bulk Update</span>
<oneit:ormEnum obj="<%= job %>" attributeName="AppProcessOption" cssClass="form-control bullk-app-process" id="AppProcessOption"
enums="<%= job.getValidProcessOptions(appStatus) %>"/>
<div class="wider-select bullk-app-process">
<tagfile:ormsingleasso_select obj="<%= job %>" assocName="AppStatusWorkFlow" cssClass="form-control app-process" id="AppProcessOption"
options="<%= job.getWorkFlowsSet().toArray(new WorkFlow[0]) %>"/>
</div>
<oneit:button name="bulkupdate" value=" " cssClass="bulk-update" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicantsPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry ("attribNamesToRestore", Collections.singleton("Job"))
.mapEntry("procParams", CollectionUtils.mapEntry("WorkFlowStatus", appStatus).mapEntry("Job", job).toMap())
.mapEntry ("attribNamesToRestore", new HashSet<String> (Arrays.asList(new String[] {"Job", "WorkFlowStatus"})))
.mapEntry("Job", job)
.toMap() %>" />
</div>
<div class="appli-filter">
<ul class="">
<li class="lable-appli-shorting">View</li>
......@@ -136,6 +132,10 @@
}
%>
</div>
<div class="checkbox-list">
<input type='checkbox' id='select_all' value='select_all' class='norecalc'>
<label>&nbsp;&nbsp;Select all applicants</label>
</div>
</div>
</oneit:dynIncluded>
......@@ -9,7 +9,7 @@
Job job = (Job) process.getAttribute("Job");
List<JobApplication> applications = (List<JobApplication>) getData(request, "applications");
String currentPage = (String) getData(request, "currentPage");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "ApplicationStatus");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "WorkFlowStatus");
String applicationPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICATION);
%>
......@@ -126,8 +126,8 @@
<oneit:button name="changeApplicationStatus" value=" " cssClass="<%= "save-application" + jobApplication.getID().toString() + " hidden"%>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry("procParams", CollectionUtils.mapEntry("ApplicationStatus", appStatus).mapEntry("Job", job).toMap())
.mapEntry ("attribNamesToRestore", new HashSet<String> (Arrays.asList(new String[] {"Job", "ApplicationStatus"})))
.mapEntry("procParams", CollectionUtils.mapEntry("WorkFlowStatus", appStatus).mapEntry("Job", job).toMap())
.mapEntry ("attribNamesToRestore", new HashSet<String> (Arrays.asList(new String[] {"Job", "WorkFlowStatus"})))
.mapEntry("JobApplication", jobApplication)
.toMap() %>" />
</div>
......
......@@ -23,12 +23,12 @@
String applicationPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICATION);
AppSortOption appSortOpt = null;
ApplicationStatus appStatus = null;
int tabNumber = process.getAttribute("TabNumber") != null ? (int) process.getAttribute("TabNumber") : 2;
ApplicationStatus workflowStatus = process.getAttribute("WorkFlowStatus") != null ? (ApplicationStatus) process.getAttribute("WorkFlowStatus") : ApplicationStatus.SUBMITTED;
boolean showList = process.getAttribute("ShowList") != null ? (boolean) process.getAttribute("ShowList") : true;
SearchApplicant searchApplicant = (SearchApplicant) RunSearchExecutorFP.setupExecutor(request, SearchApplicant.REFERENCE_SearchApplicant, true);
JobApplication[] applications = null;
Map<String, String[]> parameterMap = request.getParameterMap();
boolean isApplicantPage = tabNumber == 2;
boolean isApplicantPage = workflowStatus == ApplicationStatus.SUBMITTED;
searchApplicant.setJob(job);
......@@ -72,10 +72,10 @@
}
List<JobApplication> applicantList = Arrays.asList(applications);
WorkFlow workflow = job.getWorkFlowBySortOrder(tabNumber);
// WorkFlow workflow = job.getWorkFlowByStatus(workflowStatus);
// filter applicants by status
oneit.utils.filter.Filter<JobApplication> filter = JobApplication.SearchByAll().andApplicationStatus(new EqualsFilter<>(isApplicantPage ? appStatus : workflow.getApplicationStatus()));
oneit.utils.filter.Filter<JobApplication> filter = JobApplication.SearchByAll().andApplicationStatus(new EqualsFilter<>(isApplicantPage ? appStatus : workflowStatus));
oneit.utils.filter.Filter<JobApplication> applicantFilter = JobApplication.SearchByAll().andApplicationStatus(new NotEqualsFilter<>(ApplicationStatus.DRAFT));
// if Applicant Status, then show all application completed applicants
......@@ -85,7 +85,7 @@
process.setAttribute("AppSortOption", appSortOpt);
process.setAttribute("ApplicationStatus", appStatus);
process.setAttribute("TabNumber", tabNumber);
process.setAttribute("WorkFlowStatus", workflowStatus);
process.setAttribute("ShowList", showList);
%>
......@@ -93,7 +93,7 @@
<div class="dashboard-content-area">
<oneit:dynInclude page="/extensions/adminportal/inc/applicant_view_tabs.jsp"
ApplicationStatus="<%= workflow.getApplicationStatus() %>"
WorkFlowStatus="<%= workflowStatus %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
......@@ -101,10 +101,10 @@
<oneit:dynInclude page="/extensions/adminportal/inc/application_sorting_bar.jsp"
ShowList="<%= showList %>"
SearchApplicant="<%= searchApplicant %>"
showOrderBy="<%= sortedApplications.size() > 1 %>"
appStatus="<%= appStatus %>"
workflowStatus="<%= workflow.getApplicationStatus() %>"
sortOption="<%= appSortOpt %>"
ShowOrderBy="<%= sortedApplications.size() > 1 %>"
AppStatus="<%= appStatus %>"
WorkFlowStatus="<%= workflowStatus %>"
SortOption="<%= appSortOpt %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
<%
......@@ -114,13 +114,13 @@
<oneit:dynInclude page="/extensions/adminportal/inc/view_applicants_list.jsp"
applications="<%= sortedApplications %>"
currentPage="<%= currentPage %>"
ApplicationStatus="<%= workflow.getApplicationStatus() %>"
WorkFlowStatus="<%= workflowStatus %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
<%
}
else
{
if(workflow.getApplicationStatus() == ApplicationStatus.SHORTLISTED)
if(workflowStatus == ApplicationStatus.SHORTLISTED)
{
%>
<oneit:dynInclude page="/extensions/adminportal/inc/view_applicants_shortlist_grid.jsp"
......
<%@ 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" %>
<%@page import="oneit.utils.text.FormatUtils"%>
<oneit:dynIncluded>
<%
Job job = (Job) process.getAttribute("Job");
if(job==null && request.getParameter("JobID")!=null)
{
job = Job.getJobByID(transaction, Long.parseLong(request.getParameter("JobID")));
process.setAttribute("Job", job);
}
Debug.assertion(job != null, "Job is null in admin portal view applicants");
String currentPage = WebUtils.getSamePageInRenderMode(request, WebUtils.APPLICANTS_SHORTLIST);
AppSortOption appSortOpt = (AppSortOption) process.getAttribute("AppSortOption");
if(request.getParameter("AppSortOption") != null)
{
appSortOpt = AppSortOption.forName((String) request.getParameter("AppSortOption"));
}
if(appSortOpt == null)
{
appSortOpt = AppSortOption.RANK;
}
JobApplication[] applications = (JobApplication[]) process.getAttribute("ShortListedApplications");
if(applications==null)
{
applications = job.getShortlistedApplications() != null ? job.getShortlistedApplications().toArray(new JobApplication[0]) : null;
process.setAttribute("ShortListedApplications", applications);
}
List<JobApplication> sortedApplications = applications!=null ? Utils.getApplicationsSorted(applications, appSortOpt) : new ArrayList<JobApplication>();
process.setAttribute("AppSortOption", appSortOpt);
%>
<script type="text/javascript">
$(document).ready(function()
{
recalcFunction = setupRecalc ($("form#viewApplicants"), {'recalcOnError':true});
});
</script>
<oneit:form name="viewApplicants" method="post" enctype="multipart/form-data">
<div class="dashboard-content-area">
<oneit:dynInclude page="/extensions/adminportal/inc/applicant_view_tabs.jsp" TabNumber="2" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="second-part view-app-area">
<oneit:dynInclude page="/extensions/adminportal/inc/application_sorting_bar.jsp"
sortOption="<%= appSortOpt %>"
currentPage="<%= currentPage %>"
tabNumber="1"
appStatus="<%= ApplicationStatus.SHORTLISTED %>"
showOrderBy="<%= sortedApplications.size() > 1 %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
<oneit:dynInclude page="/extensions/adminportal/inc/application_list_data.jsp"
applications="<%= sortedApplications %>"
currentPage="<%= currentPage %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
</div>
</div>
</oneit:form>
</oneit:dynIncluded>
\ No newline at end of file
<%@ 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>
<%
Job job = (Job) process.getAttribute("Job");
if(job==null && request.getParameter("JobID")!=null)
{
job = Job.getJobByID(transaction, Long.parseLong(request.getParameter("JobID")));
process.setAttribute("Job", job);
}
Debug.assertion(job != null, "Job is null in admin portal view applicants");
String currentPage = WebUtils.getSamePageInRenderMode(request, WebUtils.UNSUITABLE_APPS);
String applicationPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICATION);
AppSortOption appSortOpt = (AppSortOption) process.getAttribute("AppSortOption");
if(request.getParameter("AppSortOption") != null)
{
appSortOpt = AppSortOption.forName((String) request.getParameter("AppSortOption"));
}
if(appSortOpt == null)
{
appSortOpt = AppSortOption.RANK;
}
JobApplication[] applications = (JobApplication[]) process.getAttribute("UnsuitableApplications");
if(applications==null)
{
applications = JobApplication.SearchByAll()
.andJob(new EqualsFilter<>(job))
.andApplicationStatus(new EqualsFilter<>(ApplicationStatus.UNSUITABLE))
.search(transaction);
process.setAttribute("UnsuitableApplications", applications);
}
List<JobApplication> sortedApplications = applications!=null ? Utils.getApplicationsSorted(applications, appSortOpt) : new ArrayList<JobApplication>();
process.setAttribute("AppSortOption", appSortOpt);
%>
<script type="text/javascript">
$(document).ready(function()
{
recalcFunction = setupRecalc ($("form#viewApplicants"), {'recalcOnError':true});
});
</script>
<oneit:form name="viewApplicants" method="post" enctype="multipart/form-data">
<div class="dashboard-content-area">
<oneit:dynInclude page="/extensions/adminportal/inc/applicant_view_tabs.jsp"
TabNumber="3"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="second-part view-app-area">
<oneit:dynInclude page="/extensions/adminportal/inc/application_sorting_bar.jsp"
sortOption="<%= appSortOpt %>"
currentPage="<%= currentPage %>"
appStatus="<%= ApplicationStatus.UNSUITABLE %>"
showOrderBy="<%= sortedApplications.size() > 1 %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
<oneit:dynInclude page="/extensions/adminportal/inc/application_list_data.jsp"
applications="<%= sortedApplications %>"
currentPage="<%= currentPage %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
</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