Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
PERFORMA_REPLICA
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Muhammad Usman
PERFORMA_REPLICA
Commits
2a845e44
Commit
2a845e44
authored
Nov 08, 2018
by
Nilu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
applicant detailed report layout
parent
9df632d3
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
266 additions
and
26 deletions
+266
-26
ApplicantReportFP.java
cmsWebApp/src/performa/form/ApplicantReportFP.java
+3
-1
PDFUtils.java
cmsWebApp/src/performa/utils/PDFUtils.java
+2
-2
applicant_report.jsp
...p/webroot/extensions/adminportal/inc/applicant_report.jsp
+230
-20
applicant_report_header.jsp
...ot/extensions/adminportal/inc/applicant_report_header.jsp
+13
-0
job_title_bar.jsp
...bApp/webroot/extensions/adminportal/inc/job_title_bar.jsp
+16
-0
my_details.jsp
cmsWebApp/webroot/extensions/adminportal/my_details.jsp
+1
-2
stdimports.jsp
cmsWebApp/webroot/extensions/performa/inc/stdimports.jsp
+1
-1
No files found.
cmsWebApp/src/performa/form/ApplicantReportFP.java
View file @
2a845e44
...
...
@@ -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
{
...
...
cmsWebApp/src/performa/utils/PDFUtils.java
View file @
2a845e44
...
...
@@ -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
...
...
cmsWebApp/webroot/extensions/adminportal/inc/applicant_report.jsp
View file @
2a845e44
...
...
@@ -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>
...
...
@@ -62,7 +61,6 @@
<div class="shortlised" style="background-image: url('file:///<%= PDFUtils.FILE_BASE_PATH %>/images/shortlist.png')">
Shortlisted
</div>
</div>
</div>
<div class="contact-row">
...
...
@@ -73,20 +71,13 @@
<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">Do
se not want to reclocated
</div></span>
<span>Melbourne,Victoria Austrilia 3000 <div class="orange-text">Do
es 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)
...
...
@@ -99,10 +90,53 @@
<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">
<%
MultiHashtable<Importance, AssessmentCriteriaAnswer> reqAnswersByImportance = jobApplication.getRequirementAnswersByImportance();
Map<Importance, Long> requirementFitData = (Map<Importance, Long>)jobApplication.getRequirementFit();
for(Importance importance: Utils.getImportancesForAssessment())
...
...
@@ -119,6 +153,46 @@
</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>
<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">
ⓘ
</span>
<%
}
%>
</div>
</div>
<%
if(answer.getNotes()!=null)
{
%>
<div class="tab-row info-panel">
<oneit:toString value="<%= answer.getNotes() %>" mode="ParagraphHTML"/>
</div>
<%
}
}
}
}
%>
...
...
@@ -137,15 +211,57 @@
<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">
...
...
@@ -158,9 +274,49 @@
</span>
</div>
<%
}
if(detailed)
{
for(FactorLevelLink factorLevelLink : factorDetails.keySet())
{
Map factorLinkDetails = factorDetails.get(factorLevelLink);
if(!factorLinkDetails.isEmpty())
{
FactorScore factorScore = (FactorScore) factorLinkDetails.get("factorScore");
%>
<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>
<%
}
}
}
}
%>
</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">
...
...
@@ -198,15 +396,28 @@
</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>
<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
cmsWebApp/webroot/extensions/adminportal/inc/applicant_report_header.jsp
View file @
2a845e44
...
...
@@ -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;
...
...
cmsWebApp/webroot/extensions/adminportal/inc/job_title_bar.jsp
View file @
2a845e44
...
...
@@ -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>
...
...
cmsWebApp/webroot/extensions/adminportal/my_details.jsp
View file @
2a845e44
...
...
@@ -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) %>"/>
</div>
<tagfile:ormsingleasso_select obj="<%= companyUser %>" assocName="DefaultHiringTeam" options="<%= companyUser.getCompany().getHiringTeamsSet().toArray(new HiringTeam[0]) %>"/>
</div>
</div>
<div class="text-center form-group">
...
...
cmsWebApp/webroot/extensions/performa/inc/stdimports.jsp
View file @
2a845e44
<%@ 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.*
"%>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment