Commit d3c9a37b by Nilu

applicant grid and list pdf

parent 3c3fd670
package performa.form;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
......@@ -10,7 +11,9 @@ import oneit.servlets.portability.FileDownloader;
import oneit.servlets.process.ORMProcessFormProcessor;
import oneit.servlets.process.ORMProcessState;
import oneit.utils.BusinessException;
import oneit.utils.CollectionUtils;
import oneit.utils.RandomStringGen;
import performa.orm.JobApplication;
import performa.utils.PDFUtils;
......@@ -22,9 +25,32 @@ public class ApplicantReportFP extends ORMProcessFormProcessor
throws BusinessException,
StorageException
{
RandomStringGen rand = new RandomStringGen();
final String randFileName = rand.generateAlphaNum(16) + ".pdf";
final byte[] pdfBytes = PDFUtils.generateApplicantReportSummaryPDF(submission);
HttpServletRequest request = submission.getRequest();
RandomStringGen rand = new RandomStringGen();
final String randFileName = rand.generateAlphaNum(16) + ".pdf";
boolean showList = (boolean) request.getAttribute("ShowList");
boolean applicantPage = (boolean) request.getAttribute("ApplicantPage");
List<JobApplication> applications = (List<JobApplication>) request.getAttribute("Applications");
final byte[] pdfBytes;
if(CollectionUtils.equals(applicantPage, true))
{
pdfBytes = PDFUtils.generateApplicantReportSummaryPDF(submission);
}
else
{
Map data = CollectionUtils.mapEntry("Applications", applications).toMap();
if(CollectionUtils.equals(showList, true))
{
pdfBytes = PDFUtils.generateApplicantsListPDF(submission, data);
}
else
{
pdfBytes = PDFUtils.generateApplicantsGridPDF(submission, data);
}
}
return new SuccessfulResult()
{
......
......@@ -69,8 +69,13 @@ public class PDFUtils
return generatePDF(submission, "/extensions/adminportal/inc/applicant_report.jsp", "/extensions/adminportal/inc/applicant_report_header.jsp", null);
}
// public static byte[] generateApplicantsListPDF(SubmissionDetails submission, Map otherData) throws BusinessException
// {
// return generatePDF(submission, "/extensions/adminportal/inc/applicants_list_report.jsp", "/extensions/adminportal/inc/applicants_list_report_header.jsp", null, otherData);
// }
public static byte[] generateApplicantsListPDF(SubmissionDetails submission, Map otherData) throws BusinessException
{
return generatePDF(submission, "/extensions/adminportal/inc/applicants_list_report.jsp", "/extensions/adminportal/inc/applicants_list_report_header.jsp", null, otherData);
}
public static byte[] generateApplicantsGridPDF(SubmissionDetails submission, Map otherData) throws BusinessException
{
return generatePDF(submission, "/extensions/adminportal/inc/applicants_grid_report.jsp", "/extensions/adminportal/inc/applicants_grid_report_header.jsp", null, otherData);
}
}
\ No newline at end of file
......@@ -5,11 +5,12 @@
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<%
Job job = (Job) process.getAttribute("Job");
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);
Job job = (Job) process.getAttribute("Job");
ApplicationStatus appStatus = (ApplicationStatus) getData(request, "WorkFlowStatus");
boolean showList = (boolean) getData(request, "ShowList");
String applicantsPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICANTS);
List<JobApplication> applications = (List<JobApplication>) getData(request, "applications");
int noOfIncomplete = job.getNoOfCandidatesFor(ApplicationStatus.DRAFT);
int noOfUnsuitable = job.getNoOfCandidatesFor(ApplicationStatus.UNSUITABLE);
%>
......@@ -20,7 +21,9 @@
<div class="first-part">
<oneit:dynInclude page="/extensions/adminportal/inc/job_title_bar.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"
applicantPage="<%= false %>"/>
applicantPage="<%= false %>"
applications="<%= applications %>"
ShowList="<%= showList %>"/>
<div class="int-timeline">
<ul>
<li class="<%= "incomplete " + (noOfIncomplete > 0 ? "has-applicant" : "no-applicant") %> <%= appStatus == ApplicationStatus.DRAFT ? "active" : "inactive" %>">
......
<%@ page extends="oneit.servlets.jsp.JSPInclude"%>
<%@ taglib prefix="tagfile" tagdir="/WEB-INF/tags"%>
<%@ include file="/setuprequest.jsp"%>
<%@ page import="oneit.servlets.process.*"%>
<%@ page import="oneit.objstore.*, oneit.utils.*, oneit.utils.text.*"%>
<%@ page import="java.util.*"%>
<%@ page import="performa.orm.*, performa.orm.types.*, performa.chart.*, performa.utils.*"%>
<%
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction();
Job job = (Job) process.getAttribute("Job");
List<JobApplication> applications = (List<JobApplication>) getData(request, "Applications");
%>
<oneit:dynIncluded>
<div class="wrap">
<div class="header">
<div class="chief-officer">
<oneit:toString value="<%= job.getJobTitle() %>" mode="EscapeHTML" />
<%
if(job.getReferenceNumber() != null)
{
%>
&nbsp;(<oneit:toString value="<%= job.getReferenceNumber() %>" mode="EscapeHTML" />)
<%
}
%>
</div>
<div class="by-name">
<span>
<%
if(job.isClientAvailable())
{
%>
<oneit:toString value="<%= job.getClient() %>" mode="EscapeHTML" />
<%
}
%>
</span> by <oneit:toString value="<%= job.getCreatedBy() %>" mode="EscapeHTML" nullValue=""/>
<oneit:toString value="<%= job.getLevel() %>" mode="EscapeHTML" />
</div>
</div>
<div class="white-header">
All Applicants
<span><%= applications.size() %> Applicants</span>
</div>
<%
for (JobApplication jobApplication : applications)
{
String roleFit = FormatUtils.stringify(jobApplication.getRoleFitPercentage(), "PercentageWholeNumber", "0");
String culture = FormatUtils.stringify(jobApplication.getCultureFitScore(), "PercentageWholeNumber", "0");
Integer overallRank = jobApplication.getOverallRank();
boolean missingReq = jobApplication.hasFailedEssentialRequirements();
%>
<div class="appl-c-box">
<div class="gridbox">
<div class="gridbox-applicant">
<oneit:toString value="<%= jobApplication.getCandidate() %>" mode="EscapeHTML" />
</div>
</div>
<div class="overall-suitablity">
<div class="overall">overall rank</div>
<div class="over-all-rank">
<oneit:toString value="<%= overallRank %>" mode="Integer" />
</div>
</div>
<div class="jcc-box">
<div class="job-match jcc">
<img src="images/app-job-match-icon.png"> role fit
<span>
<oneit:toString value="<%= jobApplication.getRoleFitPercentage() %>" mode="PercentageWholeNumber" />
</span>
</div>
<div class="culture jcc">
<img src="images/culture-icon.png"> culture fit
<span>
<oneit:toString value="<%= jobApplication.getCultureFitScore() %>" mode="PercentageWholeNumber" />
</span>
</div>
<%
if(job.getIncludeAssessmentCriteria()==Boolean.TRUE)
{
%>
<div class="criteria jcc <%=(missingReq ? "red-bg" : "green-bg")%> ">
<img src="images/<%=(missingReq ? "icon-requirements_small.png" : "critarea_white.png")%>"> requirements
<span>
<oneit:toString value="<%= jobApplication.getRequirementFitScore() %>" mode="PercentageWholeNumber" />
</span>
</div>
<%
}
%>
</div>
</div>
<%
}
%>
</div>
</oneit:dynIncluded>
\ No newline at end of file
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@include file="../../../setuprequest.jsp" %>
<oneit:dynIncluded>
<style type="text/css" media="print,screen" >
/*@import url("//hello.myfonts.net/count/343a83");*/
@font-face {font-family: 'Usual-Bold';src: url('../../../fonts/343A83_0_0.eot');src: url('../../../fonts/343A83_0_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_0_0.woff2') format('woff2'),url('../../../fonts/343A83_0_0.woff') format('woff'),url('../../../fonts/343A83_0_0.ttf') format('truetype');}
@font-face {font-family: 'Usual-Light';src: url('../../../fonts/343A83_1_0.eot');src: url('../../../fonts/343A83_1_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_1_0.woff2') format('woff2'),url('../../../fonts/343A83_1_0.woff') format('woff'),url('../../../fonts/343A83_1_0.ttf') format('truetype');}
@font-face {font-family: 'Usual-Medium';src: url('../../../fonts/343A83_2_0.eot');src: url('../../../fonts/343A83_2_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_2_0.woff2') format('woff2'),url('../../../fonts/343A83_2_0.woff') format('woff'),url('../../../fonts/343A83_2_0.ttf') format('truetype');}
@font-face {font-family: 'Usual-Regular';src: url('../../../fonts/343A83_3_0.eot');src: url('../../../fonts/343A83_3_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_3_0.woff2') format('woff2'),url('../../../fonts/343A83_3_0.woff') format('woff'),url('../../../fonts/343A83_3_0.ttf') format('truetype');}
div.header{background-color: #1a2531; height: 80px; line-height: 80px; padding: 0 30px ;}
div.white-header {background-color: #fff; height:170px;box-shadow: 0 3px 5px 0 rgba(0,0,0,0.02); padding: 0 30px ;}
.chief-officer {color: #ffffff; text-align: left; font-size: 26px; font-weight: 300; margin-bottom: 15px; float:left; width:60%}
.chief-officer .ref-no {color: #8E97A0;}
.by-name {color: #ffffff; float: right; width:30%;text-align: right;}
.appl-c-box{display: inline-block;width: 19%;text-align: left;background: #ffffff none repeat scroll 0 0;margin: 0.4% 0.4%;width: 19.05%;}
.cb-title{color: #ffffff;font-size: 16px;padding: 13.5px 16px;float: left;width: 100%;}
.gridbox{background-color: #4A4A4A; padding: 10px;}
.gridbox-applicant{color: #FFFFFF;font-size: 16px;}
.jcc-box .red-bg {background-color: #F9623D; color : #fff;}
.jcc-box .red-bg span , .jcc-box .green-bg span{color : #fff;}
.jcc-box .green-bg {background-color: #67B413;color : #fff;}
@page
{
size: A4 portrait;
margin : 0;
background: #e9ecef;
@top-left { content: element(header);}
}
</style>
</oneit:dynIncluded>
<%@ page extends="oneit.servlets.jsp.JSPInclude"%>
<%@ taglib prefix="tagfile" tagdir="/WEB-INF/tags"%>
<%@ include file="/setuprequest.jsp"%>
<%@ page import="oneit.servlets.process.*"%>
<%@ page import="oneit.objstore.*, oneit.utils.*, oneit.utils.text.*"%>
<%@ page import="java.util.*"%>
<%@ page import="performa.orm.*, performa.orm.types.*, performa.chart.*, performa.utils.*"%>
<%
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction();
Job job = (Job) process.getAttribute("Job");
List<JobApplication> applications = (List<JobApplication>) getData(request, "Applications");
%>
<oneit:dynIncluded>
<div class="wrap">
<div class="header">
<div class="chief-officer">
<oneit:toString value="<%= job.getJobTitle() %>" mode="EscapeHTML" />
<%
if(job.getReferenceNumber() != null)
{
%>
&nbsp;(<oneit:toString value="<%= job.getReferenceNumber() %>" mode="EscapeHTML" />)
<%
}
%>
</div>
<div class="by-name">
<span>
<%
if(job.isClientAvailable())
{
%>
<oneit:toString value="<%= job.getClient() %>" mode="EscapeHTML" />
<%
}
%>
</span> by <oneit:toString value="<%= job.getCreatedBy() %>" mode="EscapeHTML" nullValue=""/>
<oneit:toString value="<%= job.getLevel() %>" mode="EscapeHTML" />
</div>
</div>
<div class="white-header">
All Applicants
<span><%= applications.size() %> Applicants</span>
</div>
<%
for (JobApplication jobApplication : applications)
{
String roleFit = FormatUtils.stringify(jobApplication.getRoleFitPercentage(), "PercentageWholeNumber", "0");
String culture = FormatUtils.stringify(jobApplication.getCultureFitScore(), "PercentageWholeNumber", "0");
%>
<div class="appli-row">
<div class="appli-list-name">
<oneit:toString value="<%= jobApplication.getCandidate() %>" mode="EscapeHTML" />
<div class="appli-status">
<oneit:toString value="<%= jobApplication.getApplicantStatusStr() %>" mode="EscapeHTML" />
</div>
</div>
<div class="appli-overall">
Overall rank
<oneit:toString value="<%= jobApplication.getOverallRank() %>" mode="Integer" />
</div>
<div class="appli-l eq-second-height">
<span class="appli-view-bar">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<%= roleFit %>" aria-valuemin="0" aria-valuemax="100"
style="<%= "width: " + roleFit %>">
<span class="show-precentage"><%= roleFit %></span>
</div>
</div>
</span>
role fit
</div>
<div class="appli-l eq-second-height">
<span class="appli-view-bar">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<%= culture %>" aria-valuemin="0" aria-valuemax="100"
style="<%= "width: " + culture %>">
<span class="show-precentage"><%= culture %></span>
</div>
</div>
</span>
culture fit
</div>
<%
if(job.getIncludeAssessmentCriteria() == Boolean.TRUE)
{
long criteriaVal = jobApplication.getRequirementFitScore();
String criteria = FormatUtils.stringify(criteriaVal, "PercentageWholeNumber", "0");
boolean missingReq = jobApplication.hasFailedEssentialRequirements();
%>
<div class="appli-l eq-second-height">
<span class="appli-view-bar">
<div class="progress">
<div class="progress-bar <%= (criteriaVal == 100 && !missingReq ? " green" : "")%>" role="progressbar" aria-valuenow="<%= criteria %>" aria-valuemin="0" aria-valuemax="100"
style="<%= "width: " + criteria %>">
<span class="show-precentage"><%= criteria %></span>
</div>
</div>
<span class="missing-requirements-icon" style="<%= missingReq ? "display:inline-block" : "display:none" %>"></span>
</span>
<span class="<%= missingReq ? "red-requirements" : "" %>">
requirements
</span>
</div>
<%
}
%>
</div>
<%
}
%>
</div>
</oneit:dynIncluded>
\ No newline at end of file
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@include file="../../../setuprequest.jsp" %>
<oneit:dynIncluded>
<style type="text/css" media="print,screen" >
/*@import url("//hello.myfonts.net/count/343a83");*/
@font-face {font-family: 'Usual-Bold';src: url('../../../fonts/343A83_0_0.eot');src: url('../../../fonts/343A83_0_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_0_0.woff2') format('woff2'),url('../../../fonts/343A83_0_0.woff') format('woff'),url('../../../fonts/343A83_0_0.ttf') format('truetype');}
@font-face {font-family: 'Usual-Light';src: url('../../../fonts/343A83_1_0.eot');src: url('../../../fonts/343A83_1_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_1_0.woff2') format('woff2'),url('../../../fonts/343A83_1_0.woff') format('woff'),url('../../../fonts/343A83_1_0.ttf') format('truetype');}
@font-face {font-family: 'Usual-Medium';src: url('../../../fonts/343A83_2_0.eot');src: url('../../../fonts/343A83_2_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_2_0.woff2') format('woff2'),url('../../../fonts/343A83_2_0.woff') format('woff'),url('../../../fonts/343A83_2_0.ttf') format('truetype');}
@font-face {font-family: 'Usual-Regular';src: url('../../../fonts/343A83_3_0.eot');src: url('../../../fonts/343A83_3_0.eot?#iefix') format('embedded-opentype'),url('../../../fonts/343A83_3_0.woff2') format('woff2'),url('../../../fonts/343A83_3_0.woff') format('woff'),url('../../../fonts/343A83_3_0.ttf') format('truetype');}
div.header{background-color: #1a2531; height: 80px; line-height: 80px; padding: 0 30px ;}
div.white-header {background-color: #fff; height:170px;box-shadow: 0 3px 5px 0 rgba(0,0,0,0.02); padding: 0 30px ;}
.chief-officer {color: #ffffff; text-align: left; font-size: 26px; font-weight: 300; margin-bottom: 15px; float:left; width:60%}
.chief-officer .ref-no {color: #8E97A0;}
.by-name {color: #ffffff; float: right; width:30%;text-align: right;}
.appli-row{ width: 100%; background-color: #ffffff; }
.appli-list-name {color: #4a4a4a;font-size: 20px;padding: 14px 0 17px 21px;width: 22%;}
.appli-status { color: #767577; font-size: 11px;}
@page
{
size: A4 portrait;
margin : 0;
background: #e9ecef;
@top-left { content: element(header);}
}
</style>
</oneit:dynIncluded>
......@@ -7,6 +7,7 @@
<%
Job job = (Job) process.getAttribute("Job");
boolean applicantPage = (boolean) getData(request, "applicantPage");
boolean showList = (boolean) getData(request, "ShowList");
String editJobPage = WebUtils.getSamePageInRenderMode(request, WebUtils.EDIT_JOB);
String sharePage = WebUtils.getSamePageInRenderMode(request, WebUtils.CREATED_JOB);
String jobPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICANTS);
......@@ -30,6 +31,8 @@
editJobPage = WebUtils.getSamePageInRenderMode(request, WebUtils.WORKPLACE_CULTURE);
}
}
List<JobApplication> applications = (List<JobApplication>) getData(request, "applications");
%>
<oneit:dynIncluded>
......@@ -140,7 +143,10 @@
EDIT JOB
</oneit:button>
<oneit:button value=" " cssClass="job-edit-menu-item" name="downloadApplicantReport" skin="link"
requestAttribs="<%= CollectionUtils.EMPTY_MAP %>">
requestAttribs="<%= CollectionUtils.mapEntry("ShowList", showList)
.mapEntry("ApplicantPage", applicantPage)
.mapEntry("Applications", applications)
.toMap() %>">
EXPORT APPLICANT REPORT
</oneit:button>
</div>
......
......@@ -93,6 +93,8 @@
<div class="dashboard-content-area">
<oneit:dynInclude page="/extensions/adminportal/inc/applicant_view_tabs.jsp"
ShowList="<%= showList %>"
applications="<%= sortedApplications %>"
WorkFlowStatus="<%= workflowStatus %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
......
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