Commit 42207fbc by Nilu

Extend job changes

Job List: Capture status changes
Confirm action when changing and explain consequences – needs to be at least a 2-step process:
Are you sure you want to change the Status of this Job? Yes/No
If you change the status of this Job to Closed/Filled then no further applicants can be accepted and the Job can not be reopened. Do you wish to continue? Yes/No
parent 6c3d0057
...@@ -8,7 +8,6 @@ import oneit.logging.LogLevel; ...@@ -8,7 +8,6 @@ import oneit.logging.LogLevel;
import oneit.logging.LogMgr; import oneit.logging.LogMgr;
import oneit.logging.LoggingArea; import oneit.logging.LoggingArea;
import oneit.objstore.StorageException; import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser; import oneit.security.SecUser;
import oneit.servlets.forms.SubmissionDetails; import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.forms.SuccessfulResult; import oneit.servlets.forms.SuccessfulResult;
...@@ -16,7 +15,6 @@ import oneit.servlets.process.ORMProcessState; ...@@ -16,7 +15,6 @@ import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.SaveFP; import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException; import oneit.utils.BusinessException;
import oneit.utils.DateDiff; import oneit.utils.DateDiff;
import oneit.utils.MultiException;
import oneit.utils.math.NullArith; import oneit.utils.math.NullArith;
import performa.orm.CompanyUser; import performa.orm.CompanyUser;
import performa.orm.HiringTeam; import performa.orm.HiringTeam;
...@@ -29,22 +27,6 @@ public class ExtendJobFP extends SaveFP ...@@ -29,22 +27,6 @@ public class ExtendJobFP extends SaveFP
private static final LoggingArea LOG = LoggingArea.createLoggingArea("ExtendJobFP"); private static final LoggingArea LOG = LoggingArea.createLoggingArea("ExtendJobFP");
@Override @Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
HttpServletRequest request = submission.getRequest();
SecUser secUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = (CompanyUser) request.getAttribute("CompanyUser");
if(!companyUser.isLoggedViaSocial())
{
BusinessObjectParser.assertFieldCondition(companyUser.getConfirmPassword() != null, companyUser, CompanyUser.FIELD_ConfirmPassword, "mandatory", exceptions, true, request);
}
super.validate(process, submission, exceptions, params);
}
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{ {
HttpServletRequest request = submission.getRequest(); HttpServletRequest request = submission.getRequest();
...@@ -53,40 +35,25 @@ public class ExtendJobFP extends SaveFP ...@@ -53,40 +35,25 @@ public class ExtendJobFP extends SaveFP
HiringTeam billingTeam = hiringTeam.getManageOwnBilling() ? hiringTeam : hiringTeam.getBilledByTeam(); HiringTeam billingTeam = hiringTeam.getManageOwnBilling() ? hiringTeam : hiringTeam.getBilledByTeam();
SecUser secUser = SecUser.getTXUser(process.getTransaction()); SecUser secUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser); CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
boolean valid = true;
LogMgr.log(LOG, LogLevel.PROCESSING1, "Start of Extend job : ", job); LogMgr.log(LOG, LogLevel.PROCESSING1, "Start of Extend job : ", job);
if(!companyUser.isLoggedViaSocial()) //cannot check password for social media logedin user
job.setApplyBy(DateDiff.add(job.getApplyBy(), Calendar.DATE, 30));
job.setLastEdited(new Date());
if (billingTeam.canCreateJob())
{ {
valid = secUser.checkPassword(companyUser.getConfirmPassword()); billingTeam.setUsedCredits(NullArith.add(billingTeam.getUsedCredits(), 1).intValue());
if(!valid) if(billingTeam.getUsedCredits() > billingTeam.getAvailableCredits())
{ {
companyUser.setConfirmPassword(null); StripeUtils.recordUsage(billingTeam);
} }
BusinessObjectParser.assertFieldCondition(valid, companyUser, CompanyUser.FIELD_ConfirmPassword, "passwordNotMatch");
} }
else if(billingTeam.getIsPPJ())
if(valid)
{ {
job.setApplyBy(DateDiff.add(job.getApplyBy(), Calendar.DATE, 30)); StripeUtils.makePayment(hiringTeam, job);
job.setLastEdited(new Date());
if (billingTeam.canCreateJob())
{
billingTeam.setUsedCredits(NullArith.add(billingTeam.getUsedCredits(), 1).intValue());
if(billingTeam.getUsedCredits() > billingTeam.getAvailableCredits())
{
StripeUtils.recordUsage(billingTeam);
}
}
else if(billingTeam.getIsPPJ())
{
StripeUtils.makePayment(hiringTeam, job);
}
} }
LogMgr.log(LOG, LogLevel.PROCESSING1, "Job Extended. Apply by date : ", job.getApplyBy()); LogMgr.log(LOG, LogLevel.PROCESSING1, "Job Extended. Apply by date : ", job.getApplyBy());
......
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
<oneit:dynIncluded> <oneit:dynIncluded>
<script type="text/javascript"> <script type="text/javascript">
var ExtendPopup = null; var ExtendPopup = null;
var StatusPopup = null;
var ConfirmPopup = null;
$(document).ready(function() $(document).ready(function()
{ {
...@@ -35,7 +37,19 @@ ...@@ -35,7 +37,19 @@
ExtendPopup = new jBox('Modal', { ExtendPopup = new jBox('Modal', {
id : "extend-job", id : "extend-job",
overlay : true, overlay : true,
width : 500, height : 450 width : 500, height : 380
});
StatusPopup = new jBox('Modal', {
id : "status-change",
overlay : true,
width : 500, height : 280
});
ConfirmPopup = new jBox('Modal', {
id : "status-change-confirm",
overlay : true,
width : 500, height : 350
}); });
$(".job-status").change(function() $(".job-status").change(function()
...@@ -54,6 +68,19 @@ ...@@ -54,6 +68,19 @@
ExtendPopup.setContent($("#" + $(elem).data('popupid') )); ExtendPopup.setContent($("#" + $(elem).data('popupid') ));
ExtendPopup.open(); ExtendPopup.open();
} }
function showStatusPopup(elemid)
{
StatusPopup.setContent($("#status-change-" + elemid ));
StatusPopup.open();
}
function showStatusConfirmPopup(elemid)
{
StatusPopup.close();
ConfirmPopup.setContent($("#status-change-confirm-" + elemid ));
ConfirmPopup.open();
}
</script> </script>
<style> <style>
.calendar .extend-icon{ .calendar .extend-icon{
...@@ -190,15 +217,6 @@ ...@@ -190,15 +217,6 @@
<oneit:toString value="<%= DateDiff.add(job.getApplyBy(), Calendar.DATE, 30) %>" mode="LongDate" />. <oneit:toString value="<%= DateDiff.add(job.getApplyBy(), Calendar.DATE, 30) %>" mode="LongDate" />.
Would you like to continue? Would you like to continue?
</div> </div>
<%
if(!compUser.isLoggedViaSocial())
{
%>
<p class="password-text">Please confirm your password to continue.</p>
<oneit:ormInput obj="<%= compUser %>" type="password" attributeName="ConfirmPassword" cssClass="form-control"/>
<%
}
%>
</div> </div>
<div class="change-plan-button extend-job-button"> <div class="change-plan-button extend-job-button">
<a class="change-plan-no-button popup-no-button">No</a> <a class="change-plan-no-button popup-no-button">No</a>
...@@ -266,27 +284,70 @@ ...@@ -266,27 +284,70 @@
</div> </div>
<div class="job-states jl-c wider-select"> <div class="job-states jl-c wider-select">
<div class="dropdown show select2type"> <div class="dropdown show select2type">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink<%= job.getID() %>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink<%= job.getID() %>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="top-selected-item"><img src="images/<%= job.getJobStatus().getDescription().toLowerCase() %>.png" class="userPic" /> <%= job.getJobStatus().getDescription() %></span> <span class="top-selected-item"><img src="images/<%= job.getJobStatus().getDescription().toLowerCase() %>.png" class="userPic" /> <%= job.getJobStatus().getDescription() %></span>
<span class="select2type_arrow " role="presentation"><b role="presentation"></b></span> <span class="select2type_arrow " role="presentation"><b role="presentation"></b></span>
</a> </a>
<div class="dropdown-menu select2type-results" aria-labelledby="dropdownMenuLink<%= job.getID() %>"> <div class="dropdown-menu select2type-results" aria-labelledby="dropdownMenuLink<%= job.getID() %>">
<a href="#" class="dropdown-item icontype_<%= job.getJobStatus().getDescription().toLowerCase() %>"><%= job.getJobStatus().getDescription() %></a> <a href="#" class="dropdown-item icontype_<%= job.getJobStatus().getDescription().toLowerCase() %>"><%= job.getJobStatus().getDescription() %></a>
<% <%
for (JobStatus jStatus : job.getAvailableStatus(roleType)) for (JobStatus jStatus : job.getAvailableStatus(roleType))
{ {
%> %>
<oneit:button name="saveJob" value="<%= jStatus.getDescription() %>" skin="link" cssClass="<%="dropdown-item icontype_" + jStatus.getDescription().toLowerCase() %>" <a class="<%="dropdown-item icontype_" + jStatus.getDescription().toLowerCase() %>" onClick="showStatusPopup('<%= job.getID().toString() + jStatus %>')">
<%= jStatus.getDescription() %>
</a>
<div id="status-change-<%= job.getID().toString() + jStatus %>" style="display:none" >
<div class="extend-job-content">
<h3>
Are you sure you want to change the status of this job?
</h3>
</div>
<div class="change-plan-button extend-job-button">
<a class="change-plan-no-button popup-no-button">No</a>
<%
if(jStatus == JobStatus.OPEN)
{
%>
<oneit:button skin="link" value="Yes" name="saveJob" cssClass="change-plan-yes-button"
requestAttribs="<%= CollectionUtils.mapEntry("Job", job)
.mapEntry("nextPage", homePage + "&JobStatus=" + (jobStatus != null ? jobStatus : "") + "&JobSortOption=" + jobSortOption)
.mapEntry("JobStatus", jStatus)
.toMap() %>" />
<%
}
else
{
%>
<a class=" change-plan-yes-button" onclick="showStatusConfirmPopup('<%= job.getID().toString() + jStatus %>')">Yes</a>
<%
}
%>
</div>
</div>
<div id="status-change-confirm-<%= job.getID().toString() + jStatus %>" style="display:none" >
<div class="extend-job-content">
<h3>
Are you sure you want to change the status of this job?
</h3>
<div class="extend-job-info">
By changing this job to Closed or Filled no further applicants can be accepted and the Job can not be reopened. Do you with to continue?
</div>
</div>
<div class="change-plan-button extend-job-button">
<a class="change-plan-no-button popup-no-button">No</a>
<oneit:button skin="link" value="Yes" name="saveJob" cssClass="change-plan-yes-button"
requestAttribs="<%= CollectionUtils.mapEntry("Job", job) requestAttribs="<%= CollectionUtils.mapEntry("Job", job)
.mapEntry("nextPage", homePage + "&JobStatus=" + (jobStatus != null ? jobStatus : "") + "&JobSortOption=" + jobSortOption) .mapEntry("nextPage", homePage + "&JobStatus=" + (jobStatus != null ? jobStatus : "") + "&JobSortOption=" + jobSortOption)
.mapEntry("JobStatus", jStatus) .mapEntry("JobStatus", jStatus)
.toMap() %>" /> .toMap() %>" />
</div>
<% </div>
} <%
%> }
</div> %>
</div> </div>
</div>
</div> </div>
</div> </div>
<% <%
......
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