Commit 2a845e44 by Nilu

applicant detailed report layout

parent 9df632d3
......@@ -29,6 +29,7 @@ public class ApplicantReportFP extends ORMProcessFormProcessor
RandomStringGen rand = new RandomStringGen();
final String randFileName = rand.generateAlphaNum(16) + ".pdf";
boolean showList = (boolean) request.getAttribute("ShowList");
boolean detailed = (boolean) request.getAttribute("Detailed");
boolean applicantPage = (boolean) request.getAttribute("ApplicantPage");
List<JobApplication> applications = (List<JobApplication>) request.getAttribute("Applications");
......@@ -36,7 +37,8 @@ public class ApplicantReportFP extends ORMProcessFormProcessor
if(CollectionUtils.equals(applicantPage, true))
{
pdfBytes = PDFUtils.generateApplicantReportSummaryPDF(submission);
Map data = CollectionUtils.mapEntry("Detailed", detailed).toMap();
pdfBytes = PDFUtils.generateApplicantReportSummaryPDF(submission, data);
}
else
{
......
......@@ -64,9 +64,9 @@ public class PDFUtils
return out.toByteArray();
}
public static byte[] generateApplicantReportSummaryPDF(SubmissionDetails submission) throws BusinessException
public static byte[] generateApplicantReportSummaryPDF(SubmissionDetails submission, Map otherData) throws BusinessException
{
return generatePDF(submission, "/extensions/adminportal/inc/applicant_report.jsp", "/extensions/adminportal/inc/applicant_report_header.jsp", null);
return generatePDF(submission, "/extensions/adminportal/inc/applicant_report.jsp", "/extensions/adminportal/inc/applicant_report_header.jsp", null, otherData);
}
public static byte[] generateApplicantsListPDF(SubmissionDetails submission, Map otherData) throws BusinessException
......
......@@ -13,7 +13,8 @@
Job job = (Job) process.getAttribute("Job");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
Candidate candidate = jobApplication.getCandidate();
boolean detailed = (boolean) getData(request, "Detailed");
boolean missingReq = jobApplication.hasFailedEssentialRequirements();
%>
<oneit:dynIncluded>
<div class="wrap">
......@@ -42,8 +43,6 @@
</span> by <oneit:toString value="<%= job.getCreatedBy() %>" mode="EscapeHTML" nullValue=""/>
<oneit:toString value="<%= job.getLevel() %>" mode="EscapeHTML" />
</div>
</div>
<div class="white-header">
<div style="clear:both"></div>
......@@ -60,9 +59,8 @@
<oneit:toString value="<%= jobApplication.getOverallRank() %>" mode="Integer" />
</div>
<div class="shortlised" style="background-image: url('file:///<%= PDFUtils.FILE_BASE_PATH %>/images/shortlist.png')">
Shortlisted
Shortlisted
</div>
</div>
</div>
<div class="contact-row">
......@@ -73,54 +71,130 @@
<span class="contact-label">P </span>
<oneit:toString value="<%= candidate.getPhone() %>" mode="EscapeHTML" />
<span class="contact-label"><img src="file:///<%= PDFUtils.FILE_BASE_PATH %>/images/icon-location.png" /></span>
<span>Melbourne,Victoria Austrilia 3000 <div class="orange-text">Dose not want to reclocated</div></span>
<span>Melbourne,Victoria Austrilia 3000 <div class="orange-text">Does not want to relocate</div></span>
<span class="contact-label"><img src="file:///<%= PDFUtils.FILE_BASE_PATH %>/images/icon-remote.png" /></span>
<span class="green-text">Prefers to remote</span>
<span class="green-text">Prefers to work remote</span>
</div>
</div>
<div class="">
<!--Requirements-->
<%
if(job.getIncludeAssessmentCriteria() == Boolean.TRUE)
{
%>
<table width="100%" cellspacing="0" cellpadding="0" class="charts-table">
<table width="100%" cellspacing="0" cellpadding="0" class="charts-table">
<tr>
<td class="chart-cell">
<div class="cell-title">Requirements</div>
<div>
<img src="file:///<%= jobApplication.getRequirementRingChart() %>" alt="Ring Chart"/>
</div>
<div class="row four-label">
<%
if(detailed)
{
for(CriteriaType ct: CriteriaType.getCriteriaTypeArray())
{
MultiHashtable<Importance, AssessmentCriteriaAnswer> negativeAnswers = jobApplication.getNegativeACByImportance(ct);
int essentialNo = negativeAnswers.getValuesForKeyNN(Importance.ESSENTIAL).size();
int hDesirableNo = negativeAnswers.getValuesForKeyNN(Importance.HIGHLY_DESIRABLE).size();
if(essentialNo == 0 && hDesirableNo == 0)
{
continue;
}
%>
<div class="col-md-6 col-sm-6 col-xs-6 text-left">
<div class="a-label-row">
<span class="r-y-label pre-dot"><%= ct.getDescription() %></span>
<%
if(hDesirableNo > 0)
{
%>
<span class="common-dot yellow-dot"></span>
<span class="r-y-label pre-dot" onclick="focusReqDiv('.<%= Importance.HIGHLY_DESIRABLE %>')">(<%=hDesirableNo%>)</span>
<%
}
if(essentialNo > 0)
{
%>
<span class="common-dot red-dot"></span>
<span class="r-y-label pre-dot" onclick="focusReqDiv('.<%= Importance.ESSENTIAL %>')">(<%=essentialNo%>)</span>
<%
}
%>
</div>
</div>
<%
}
}
%>
</div>
</td>
<td class="chart-info-cell">
<%
Map<Importance, Long> requirementFitData = (Map<Importance, Long>)jobApplication.getRequirementFit();
<%
MultiHashtable<Importance, AssessmentCriteriaAnswer> reqAnswersByImportance = jobApplication.getRequirementAnswersByImportance();
Map<Importance, Long> requirementFitData = (Map<Importance, Long>)jobApplication.getRequirementFit();
for(Importance importance: Utils.getImportancesForAssessment())
{
Long rating = requirementFitData.get(importance);
%>
for(Importance importance: Utils.getImportancesForAssessment())
{
Long rating = requirementFitData.get(importance);
%>
<div class="appli-row">
<span class="appli-label"><oneit:toString value="<%= importance %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="PercentageWholeNumber" /></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar" style="width:<%= rating %>%;" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</span>
</div>
<%
<span class="appli-label"><oneit:toString value="<%= importance %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="PercentageWholeNumber" /></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar" style="width:<%= rating %>%;" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</span>
</div>
<%
if(detailed && reqAnswersByImportance.getValuesForKey(importance)!=null)
{
for(AssessmentCriteriaAnswer answer: reqAnswersByImportance.getValuesForKey(importance))
{
String dotClass = answer.getAnswer() ? "" : (importance == Importance.ESSENTIAL ? "red-dot" : (importance == Importance.HIGHLY_DESIRABLE ? "yellow-dot" : ""));
%>
<div class="tab-row">
<div class="detail-tab-row-title col-md-4 col-sm-4 col-xs-4 <%= (importance == Importance.ESSENTIAL ? (missingReq ? "red-requirements" : "green-requirements") : "") %>" style="width: 30%">
<span class="dot-icon"></span> &nbsp;
<oneit:toString value="<%= answer.getAssessmentCriteria().getCriteriaType() %>" mode="EscapeHTML"/>
</div>
<div class="detail-tab-row-text col-md-7 col-sm-7 col-xs-7" style="width: 55%">
<oneit:toString value="<%= answer.getAssessmentCriteria() %>" mode="EscapeHTML"/>
</div>
<div class="detail-tab-row-text col-md-1 col-sm-1 col-xs-1" style="width: 15%;">
<oneit:toString value="<%= answer.getAnswer() ? "Yes" : "No" %>" mode="EscapeHTML"/>
<%
if(answer.getNotes()!=null)
{
%>
<span class="info-toggle">
&#9432;
</span>
<%
}
%>
</div>
</div>
<%
if(answer.getNotes()!=null)
{
%>
<div class="tab-row info-panel">
<oneit:toString value="<%= answer.getNotes() %>" mode="ParagraphHTML"/>
</div>
<%
}
}
%>
}
}
%>
</td>
</tr>
......@@ -137,30 +211,112 @@
<div>
<img src="file:///<%= jobApplication.getRoleFitChart() %>" alt="Ring Chart"/>
</div>
<div class="row four-label">
<%
List<FactorScore> factorScores = jobApplication.getRoleAreaOfConcerns();
if(detailed && !factorScores.isEmpty())
{
int rowCount = (factorScores.size() % 2 == 0) ? (factorScores.size() / 2) : ((factorScores.size() + 1) / 2);
for(int i = 0; i < rowCount; i++)
{
FactorScore firstScore = factorScores.get(i*2);
FactorScore secondScore = (factorScores.size() > ((i*2) + 1)) ? factorScores.get((i*2) + 1) : null;
String dotClass = firstScore.getColorCode() != null ? firstScore.getColorCode().getDotCSSClass() : "";
%>
<div class="a-label-row">
<div class="col-md-6 col-sm-6 col-xs-6 text-left" onClick="focusDiv('<%= "#" + firstScore.getObjectID() %>')">
<span class="common-dot <%= dotClass %>"></span>
<span class="r-y-label text-dot-dot">
<oneit:toString value="<%= firstScore.getFactor() %>" mode="EscapeHTML"/>
</span>
</div>
<%
if(secondScore != null)
{
dotClass = secondScore.getColorCode() != null ? secondScore.getColorCode().getDotCSSClass() : "";
%>
<div class="col-md-6 col-sm-6 col-xs-6 text-left" onClick="focusDiv('<%= "#" + secondScore.getObjectID() %>')">
<span class="common-dot <%= dotClass %>"></span>
<span class="r-y-label text-dot-dot">
<oneit:toString value="<%= secondScore.getFactor() %>" mode="EscapeHTML"/>
</span>
</div>
<%
}
%>
</div>
<%
}
}
%>
</div>
</td>
<td class="chart-info-cell">
<%
Map<FactorClass, Tuple.T3<Double, ColorCode, Double>> roleScoreMap = (Map<FactorClass, Tuple.T3<Double, ColorCode, Double>>)jobApplication.getRoleFit();
Map<FactorClass, Map<FactorLevelLink, Map>> factorClassDtls = (Map<FactorClass, Map<FactorLevelLink, Map>>) jobApplication.getFactorScoreDetails();
for(FactorClass factorClass : factorClassDtls.keySet())
{
Map<FactorLevelLink, Map> factorDetails = factorClassDtls.get(factorClass);
Double rating = roleScoreMap.get(factorClass).get2();
%>
<div class="appli-row">
<span class="appli-label"><oneit:toString value="<%= factorClass %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="PercentageWholeNumber" /></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100" style="width:<%= rating %>%;"></div>
</div>
</span>
</div>
<%
Map<FactorClass, Tuple.T3<Double, ColorCode, Double>> roleScoreMap = (Map<FactorClass, Tuple.T3<Double, ColorCode, Double>>)jobApplication.getRoleFit();
Map<FactorClass, Map<FactorLevelLink, Map>> factorClassDtls = (Map<FactorClass, Map<FactorLevelLink, Map>>) jobApplication.getFactorScoreDetails();
for(FactorClass factorClass : factorClassDtls.keySet())
if(detailed)
{
Double rating = roleScoreMap.get(factorClass).get2();
for(FactorLevelLink factorLevelLink : factorDetails.keySet())
{
Map factorLinkDetails = factorDetails.get(factorLevelLink);
if(!factorLinkDetails.isEmpty())
{
FactorScore factorScore = (FactorScore) factorLinkDetails.get("factorScore");
%>
<div class="appli-row">
<span class="appli-label"><oneit:toString value="<%= factorClass %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="PercentageWholeNumber" /></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100" style="width:<%= rating %>%;"></div>
<div class="tab-row">
<div class="tab-view-label">
<oneit:toString value="<%= factorLevelLink.getFactor() %>" mode="EscapeHTML"/>
</div>
<div class="tab-view-side">
<div class="result-want">
<div class="result"><oneit:toString value="<%= factorLevelLink.getLeftAnnot() %>" mode="EscapeHTML"/></div>
<div class="wants"><oneit:toString value="<%= factorLevelLink.getRightAnnot() %>" mode="EscapeHTML"/></div>
</div>
<div class="result-bar">
<ul>
<%
Map<FactorScoreResult, Double> factorScoreDetails = (Map<FactorScoreResult, Double>)factorLinkDetails.get("factorScoreDetails");
for(FactorScoreResult factorScoreResult : factorScoreDetails.keySet())
{
%>
<li class="<%= factorScoreResult.getColorCode() != null ? factorScoreResult.getColorCode().getCSSClass() : "" %>" style="width: <%= factorScoreDetails.get(factorScoreResult) %>%; height: 10px"></li>
<%
}
%>
</ul>
<span class="triangle-arrow" style="left: <%= factorLinkDetails.get("scoreLeftMargin")%>%;"></span>
</div>
<div class="like-strive"><oneit:toString value="<%= factorScore != null ? factorScore.getNarrative() : null %>" mode="EscapeHTML"/></div>
</div>
</div>
</span>
</div>
<%
<%
}
}
}
%>
}
%>
</td>
</tr>
</table>
......@@ -173,6 +329,48 @@
<div>
<img src="file:///<%= jobApplication.getCultureRingChart() %>" alt="Ring Chart"/>
</div>
<div class="row four-label">
<%
List<Tuple.T2> cultureConcerns = jobApplication.getCultureAreaOfConcerns();
if(detailed && !cultureConcerns.isEmpty())
{
int rowCount = (cultureConcerns.size() % 2 == 0) ? (cultureConcerns.size() / 2) : ((cultureConcerns.size() + 1) / 2);
for(int i = 0; i < rowCount; i++)
{
Tuple.T2 firstTuple = cultureConcerns.get(i*2);
Tuple.T2 secondTuple = (cultureConcerns.size() > ((i*2) + 1)) ? cultureConcerns.get((i*2) + 1) : null;
String dotClass = ((ColorCode)firstTuple.get1()).getDotCSSClass();
%>
<div class="a-label-row">
<div class="col-md-6 col-sm-6 col-xs-6 text-left" onClick="focusDiv('<%= "#" + ((CultureElement)firstTuple.get0()).getObjectID() %>')">
<span class="common-dot <%= dotClass %>"></span>
<span class="r-y-label text-dot-dot">
<oneit:toString value="<%= firstTuple.get0() %>" mode="EscapeHTML"/>
</span>
</div>
<%
if(secondTuple != null)
{
dotClass = ((ColorCode)secondTuple.get1()).getDotCSSClass();
%>
<div class="col-md-6 col-sm-6 col-xs-6 text-left" onClick="focusDiv('<%= "#" + ((CultureElement)firstTuple.get0()).getObjectID() %>')">
<span class="common-dot <%= dotClass %>"></span>
<span class="r-y-label text-dot-dot">
<oneit:toString value="<%= secondTuple.get0() %>" mode="EscapeHTML"/>
</span>
</div>
<%
}
%>
</div>
<%
}
}
%>
</div>
</td>
<td class="chart-info-cell">
......@@ -197,16 +395,29 @@
</div>
</span>
</div>
<%
<%
for(Tuple.T3 tuple : cultureFitData.get(cClass).get1())
{
CultureNarrative cultureNarrative = (CultureNarrative) tuple.get2();
String dotClass = cultureNarrative != null && cultureNarrative.getColorCode() != null ? cultureNarrative.getColorCode().getDotCSSClass() : "";
%>
<div class="detail-tab-row" id="<%= ((CultureElement)tuple.get1()).getObjectID() %>">
<div class="detail-tab-row-title col-md-4 col-sm-4 col-xs-4">
<span class="common-dot <%= dotClass %>"></span> &nbsp;
<oneit:toString value="<%= tuple.get1() %>" mode="EscapeHTML"/>
</div>
<div class="detail-tab-row-text col-md-8 col-sm-8 col-xs-8">
<oneit:toString value="<%= cultureNarrative %>" mode="EscapeHTML"/>
</div>
</div>
<%
}
}
%>
</td>
</tr>
</table>
</div>
</div>
</oneit:dynIncluded>
\ No newline at end of file
......@@ -55,6 +55,19 @@
.progress {margin-bottom: 0; border-radius: 0;height: 24px;background: #e9ecef;box-shadow: none;}
.progress-bar{background: #667281;height: 24px; }
.tab-row{ float: left; width: 100%; border-bottom: solid 1px #e3e3e3;}
.tab-view-label { color: #4e5258; float: left; font-size: 10px; text-align: left; text-transform: uppercase; width: 20%; padding-left: 10px; line-height: 50px;}
.tab-view-side { float: right; padding: 17px 38px 17px 10px; width: 50%; }
.result-want { float: left; width: 100%; }
.result-bar { float: left; position: relative; width: 100%; }
.like-strive{ font-size: 12px; line-height: 1.17; color: #7d7f82; float: left; width: 100%; margin-top: 8px; }
.result{ float: left; }
.wants{ float: right; }
.result-bar { float: left; position: relative; width: 100%; }
.result-bar ul{ background: none; padding: 0 !important; }
@page
{
size: A4 portrait;
......
......@@ -146,9 +146,25 @@
requestAttribs="<%= CollectionUtils.mapEntry("ShowList", showList)
.mapEntry("ApplicantPage", applicantPage)
.mapEntry("Applications", applications)
.mapEntry("Detailed", false)
.toMap() %>">
EXPORT APPLICANT REPORT
</oneit:button>
<%
if(applicantPage)
{
%>
<oneit:button value=" " cssClass="job-edit-menu-item" name="downloadApplicantReport" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("ShowList", showList)
.mapEntry("ApplicantPage", applicantPage)
.mapEntry("Applications", applications)
.mapEntry("Detailed", true)
.toMap() %>">
EXPORT DETAILED APPLICANT REPORT
</oneit:button>
<%
}
%>
</div>
......
......@@ -102,9 +102,8 @@
<div class="form-group">
<label><oneit:label GUIName="Default Hiring Team"/></label>
<div class="wider-select">
<tagfile:ormsingleasso_select obj="<%= companyUser %>" assocName="DefaultHiringTeam" options="<%= Utils.getHiringTeamsByUser(companyUser) %>"/>
<tagfile:ormsingleasso_select obj="<%= companyUser %>" assocName="DefaultHiringTeam" options="<%= companyUser.getCompany().getHiringTeamsSet().toArray(new HiringTeam[0]) %>"/>
</div>
<tagfile:ormsingleasso_select obj="<%= companyUser %>" assocName="DefaultHiringTeam" options="<%= companyUser.getCompany().getHiringTeamsSet().toArray(new HiringTeam[0]) %>"/>
</div>
<div class="text-center form-group">
......
<%@ page import="performa.orm.*, performa.orm.types.*, performa.form.*, performa.utils.*, performa.search.*"%>
<%@ page import="performa.intercom.utils.*, performa.intercom.resources.User, com.stripe.model.*"%>
<%@ page import="oneit.objstore.rdbms.filters.*, oneit.security.jsp.SecUserToNameTransform, oneit.servlets.utils.*, oneit.utils.image.*, oneit.objstore.utils.ObjstoreUtils "%>
<%@ page import="oneit.utils.text.FormatUtils"%>
<%@ page import="oneit.utils.text.FormatUtils, oneit.utils.math.*"%>
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