Commit a4945b01 by Nilu

Added billing, plan and invoice tabs

parent 282d184e
package performa.form;
import java.util.HashMap;
import java.util.Map;
import oneit.appservices.config.ConfigMgr;
import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import oneit.utils.StringUtils;
import oneit.utils.math.NullArith;
import oneit.utils.parsers.FieldException;
import javax.servlet.http.HttpServletRequest;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.objstore.StorageException;
import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState;
import performa.orm.Job;
import com.stripe.Stripe;
import com.stripe.exception.StripeException;
import com.stripe.model.Charge;
import com.stripe.model.Customer;
import com.stripe.model.Subscription;
import java.util.Calendar;
import java.util.Date;
import oneit.utils.DateDiff;
public class MakePaymentFP extends SaveFP
{
public static final String STRIPE_KEY = ConfigMgr.getKeyfileString("stripe.key","");
public static final String STRIPE_PUB_KEY = ConfigMgr.getKeyfileString("stripe.pubkey","");
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map p) throws BusinessException, StorageException
{
HttpServletRequest request = submission.getRequest();
LogMgr.log(Job.LOG, LogLevel.PROCESSING1,"In MakePaymentFP : " );
Stripe.apiKey = STRIPE_KEY;
try
{
Customer customer = Customer.retrieve("cus_C8kIeItf64JnHe");
System.out.println("customer :: " + customer);
// Map<String, Object> item = new HashMap<>();
// item.put("plan", "0001");
//
// Map<String, Object> items = new HashMap<>();
// items.put("0", item);
//
// Map<String, Object> params = new HashMap<>();
// params.put("items", items);
// params.put("coupon", "EAP");
// params.put("customer", "cus_C8kIeItf64JnHe");
//
// Date today = new Date();
// Date trialExpiry = DateDiff.add(today, Calendar.DATE, 30);
//
// params.put("trial_end", trialExpiry.getTime() / 1000L);
//
// Subscription subscription = Subscription.create(params);
//
// System.out.println("subscription : " + subscription);
}
catch(Exception e)
{
System.out.println("error occured : " + e);
}
// performStripePayment(submission);
return super.processForm(process, submission, p);
}
private void performStripePayment(SubmissionDetails submission) throws FieldException, BusinessException
{
HttpServletRequest request = submission.getRequest();
String token = request.getParameter("stripe-token-id");
if(StringUtils.subBlanks(token) == null)
{
throw new BusinessException("Stripe payment was failed, Please contact adminstrator for more info.");
}
Stripe.apiKey = STRIPE_KEY;
// Charge the Customer instead of the card:
Map<String, Object> chargeParams = new HashMap<String, Object>();
chargeParams.put("amount", NullArith.intVal(NullArith.multiply(100d, 100, 0d)));
chargeParams.put("currency", "aud");
chargeParams.put("description", "Charges of creating job");
chargeParams.put("source", token);
Charge charge;
try
{
charge = Charge.create(chargeParams);
}
catch (StripeException e)
{
throw new BusinessException("Stripe payment failure. Reason :: " + e.getMessage());
}
if(charge.getFailureCode() != null)
{
String errorMsg = "Stripe payment failure Code :: " + charge.getFailureCode() + ", Message :: " + charge.getFailureMessage();
if(charge.getFraudDetails() != null)
{
errorMsg += ", Fraud Details :: " + charge.getFraudDetails();
}
throw new BusinessException(errorMsg);
}
System.out.println("stripe response : " + charge.toJson());
}
}
\ No newline at end of file
......@@ -5368,15 +5368,45 @@ label, label .label-title span {
font-weight: normal;
}
.company-content-area label
{
.company-content-area label{
font-family: "Usual-Regular";
}
.company-content-area .fileLink
{
.company-content-area .fileLink{
display: none;
}
.company-content-area .grey-area{
background-color: #EFF0F2;
border-radius: 2px;
padding: 5% 10%;
margin-top: 10px;
}
.company-content-area .line-break{
border: solid 1px #EFF0F2;
display: inline-block;
width: 100%;
margin-top: 5px;
}
.company-content-area .footer-note{
margin-top: 150px;
}
.label-20{
font-size: 20px;
}
.label-14{
font-size: 14px;
}
.company-content-area .bold{
font-family: "Usual-Medium";
}
.company-content-area .large-btn{
width: 50%;
height: 60px;
border-radius: 100px;
font-size: 15px;
font-family: "Usual-Medium";
margin-top: 20px;
}
/*My Company Pages End*/
......
......@@ -40,6 +40,7 @@
<RenderMode name="WorkplaceCulture" preIncludeJSP="extensions/adminportal/workplace_culture.jsp"/>
<RenderMode name="JobMatchAssessment" preIncludeJSP="extensions/adminportal/job_match_assessment.jsp"/>
<RenderMode name="JobReview" preIncludeJSP="extensions/adminportal/job_review_submit.jsp"/>
<RenderMode name="CardPayment" preIncludeJSP="extensions/adminportal/card_payment.jsp"/>
<RenderMode name="CreatedJob" preIncludeJSP="extensions/adminportal/created_job.jsp"/>
</NODE>
</MAP>
......@@ -73,6 +74,9 @@
<INHERITS nodename="StandardJSP"/>
<RenderMode name="Page" preIncludeJSP="extensions/adminportal/my_company.jsp"/>
<RenderMode name="ManagePlan" preIncludeJSP="extensions/adminportal/manage_plan.jsp"/>
<RenderMode name="Billing" preIncludeJSP="extensions/adminportal/billing.jsp"/>
<RenderMode name="Invoices" preIncludeJSP="extensions/adminportal/invoices.jsp"/>
</NODE>
</MAP>
......
<%@ 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>
<%
SecUser loggedInUser = SecUser.getTXUser(transaction);
CompanyUser companyUser = loggedInUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
Company company = companyUser.getCompany();
Debug.assertion(company != null , "Invalid company in admin portal my company");
String nextPage = WebUtils.getSamePageInRenderMode(request, "Page");
%>
<script src="https://js.stripe.com/v3/"></script>
<script>
var stripePubKey = '<%= MakePaymentFP.STRIPE_PUB_KEY %>';
</script>
<oneit:script>
<!-- MUST be included after initializing stripePubKey -->
<oneit:script src="/scripts/performaStripe.js"/>
</oneit:script>
<script type="text/javascript">
$(document).ready(function()
{
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
});
</script>
<div class="container-fluid">
<div class="row content">
<div class="main-content-area">
<h1 class="page-title">My Hiring Team</h1>
<div class="my-company-area">
<oneit:form name="editCompany" method="post" enctype="multipart/form-data">
<div style="padding-left: 15px; padding-right: 15px;">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
</div>
<oneit:dynInclude page="/extensions/adminportal/inc/my_company_tabs.jsp" TabNumber="3" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="company-content-area">
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="company-detail">
<div class="tabpage-title">
<label class="label-20">Billing</label>
</div>
<div>
<label class="label-14 bold">Add a payment method</label><br/>
<label class="label-14">Your card details will be saved for future billing</label>
</div>
<div class="grey-area">
<div class="form-group hide">
<input type="hidden" name="stripe-token-id" />
</div>
<div class="form-group">
<label>Card Number</label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="CompanyName" cssClass="form-control" />
</div>
<div class="form-group">
<label>Name on Card</label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="CompanyName" cssClass="form-control" />
</div>
<div class="form-group row">
<div class="col-md-4">
<label>Expires</label>
<oneit:ormEnum obj="<%= company %>" attributeName="Country" cssClass="form-control"/>
</div>
<div class="col-md-4">
<label>CCV</label>
<oneit:ormEnum obj="<%= company %>" attributeName="State" cssClass="form-control"/>
</div>
<div class="col-md-4">
<label>Postal Code</label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="PostCode" cssClass="form-control" />
</div>
</div>
<div class="form-group">
<oneit:button value="Save Card" name="saveCompany" cssClass="btn btn-primary btn-green large-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("Company", company)
.toMap() %>" />
</div>
</div>
</div>
</div>
</div>
<form action="/charge" method="post" id="payment-form">
<div class="form-row">
<label for="card-element">
Credit or debit card
</label>
<div id="card-element">
a Stripe Element will be inserted here.
</div>
Used to display Element errors
<div id="card-errors" role="alert"></div>
</div>
<button>Submit Payment</button>
</form>
</oneit:form>
</div>
</div>
</div>
</div>
</oneit:dynIncluded>
<%@ 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>
<%
String nextPage = WebUtils.getSamePageInRenderMode(request, "CardPayment");
%>
<oneit:form name="editJob" method="post" enctype="multipart/form-data">
<div class="container-fluid">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<h1 class="page-title">Enter Payment Details</h1>
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-6">
<div class="form-group hide">
<input type="hidden" name="stripe-token-id" />
</div>
</div>
</div>
<oneit:button value="Pay" name="savePayment" cssClass="btn btn-primary btn-lg" id="payNow"
requestAttribs='<%= CollectionUtils.mapEntry("nextPage", nextPage)
.toMap() %>'/>
</div>
</oneit:form>
<form action="/charge" method="post" id="payment-form">
<div class="form-row">
<label for="card-element">
Credit or debit card
</label>
<div id="card-element">
a Stripe Element will be inserted here.
</div>
<div id="card-number">
a Stripe Element will be inserted here.
</div>
<div id="card-expiry">
a Stripe Element will be inserted here.
</div>
<div id="card-cvc">
a Stripe Element will be inserted here.
</div>
Used to display Element errors
<div id="card-errors" role="alert"></div>
</div>
<button>Submit Payment</button>
</form>
<script src="https://js.stripe.com/v3/"></script>
<script>
var stripePubKey = '<%= MakePaymentFP.STRIPE_PUB_KEY %>';
</script>
<oneit:script>
<!-- MUST be included after initializing stripePubKey -->
<oneit:script src="/scripts/performaStripe.js"/>
</oneit:script>
</oneit:dynIncluded>
\ No newline at end of file
......@@ -7,6 +7,9 @@
<%
String tabNumber = (String) getData(request, "TabNumber");
String firstPage = WebUtils.getSamePageInRenderMode(request, "Page");
String secondPage = WebUtils.getSamePageInRenderMode(request, "ManagePlan");
String thirdPage = WebUtils.getSamePageInRenderMode(request, "Billing");
String forthPage = WebUtils.getSamePageInRenderMode(request, "Invoices");
%>
<oneit:dynIncluded>
......@@ -19,9 +22,27 @@
Hiring Team Details
</oneit:button>
</li>
<li class="">Manage Plan</li>
<li class="">Billing</li>
<li class="disabled">Invoices</li>
<li class="<%= tabNumber == "2" ? "active" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondPage)
.toMap() %>">
Manage Plan
</oneit:button>
</li>
<li class="<%= tabNumber == "3" ? "active" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage)
.toMap() %>">
Billing
</oneit:button>
</li>
<li class="<%= tabNumber == "4" ? "active" : ""%>">
<oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", forthPage)
.toMap() %>">
Invoices
</oneit:button>
</li>
</ul>
</div>
</oneit:dynIncluded>
......
<%@ 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>
<%
SecUser loggedInUser = SecUser.getTXUser(transaction);
CompanyUser companyUser = loggedInUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
Company company = companyUser.getCompany();
Debug.assertion(company != null , "Invalid company in admin portal my company");
String nextPage = WebUtils.getSamePageInRenderMode(request, "Page");
%>
<script type="text/javascript">
$(document).ready(function()
{
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$("#upload").change(function(){
readURL(this);
});
$("#remove-logo").click(function(){
removeLogo();
});
});
</script>
<div class="container-fluid">
<div class="row content">
<div class="main-content-area">
<h1 class="page-title">My Hiring Team</h1>
<div class="my-company-area">
<oneit:form name="editCompany" method="post" enctype="multipart/form-data">
<div style="padding-left: 15px; padding-right: 15px;">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
</div>
<oneit:dynInclude page="/extensions/adminportal/inc/my_company_tabs.jsp" TabNumber="4" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="company-content-area">
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="company-detail">
<div class="tabpage-title">
<label class="label-20">No Current Plan</label><br/>
<label class="label-14">You'll be charged each time you add a new job</label>
<div class="line-break"></div>
</div>
</div>
</div>
</div>
</oneit:form>
</div>
</div>
</div>
</div>
</oneit:dynIncluded>
<%@ 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>
<%
SecUser loggedInUser = SecUser.getTXUser(transaction);
CompanyUser companyUser = loggedInUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
Company company = companyUser.getCompany();
Debug.assertion(company != null , "Invalid company in admin portal my company");
String nextPage = WebUtils.getSamePageInRenderMode(request, "Page");
%>
<script type="text/javascript">
$(document).ready(function()
{
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$("#upload").change(function(){
readURL(this);
});
$("#remove-logo").click(function(){
removeLogo();
});
});
</script>
<div class="container-fluid">
<div class="row content">
<div class="main-content-area">
<h1 class="page-title">My Hiring Team</h1>
<div class="my-company-area">
<oneit:form name="editCompany" method="post" enctype="multipart/form-data">
<div style="padding-left: 15px; padding-right: 15px;">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
</div>
<oneit:dynInclude page="/extensions/adminportal/inc/my_company_tabs.jsp" TabNumber="2" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="company-content-area">
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="company-detail">
<div class="tabpage-title">
<label class="label-20">No Current Plan</label><br/>
<label class="label-14">You'll be charged each time you add a new job</label>
<div class="line-break"></div>
</div>
<div>
<label class="label-20">Pay Per Plan</label>
</div>
<div class="grey-area">
<div class="text-center">
<label class="label-20">Subscribe and save</label>
</div>
<div class="text-center">
<label class="label-14">Active Jobs Per Month</label>
<input type="number" min="0" max="10" step="2" value="6" size="6">
<label class="label-14">$300.00</label>
<label class="label-14">Per Job</label>
</div>
<div class="text-center form-group">
<oneit:button value="Upgrade" name="saveCompany" cssClass="btn btn-primary btn-green large-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("Company", company)
.toMap() %>" />
</div>
<div class="text-center">
<label class="label-14">$1500.00 Monthly for up to 5 jobs / month</label>
</div>
<div class="text-center">
<label class="label-14">Save $995.00 per month</label>
</div>
</div>
<div class="text-center footer-note">
Looking to cancel your account? Please <a href="#">contact us.</a>
</div>
</div>
</div>
</div>
</oneit:form>
</div>
</div>
</div>
</div>
</oneit:dynIncluded>
......@@ -47,7 +47,7 @@
<div class="tab-content">
<div class="tab-pane active" id="company-detail">
<div class="tabpage-title">
<label class="label-16">Hiring Team Details</label>
<label class="label-20">Hiring Team Details</label>
</div>
<div class="form-group">
<label><oneit:ormlabel obj="<%= company %>" field="CompanyName" /></label>
......
/**
* Reference : https://stripe.com/docs/stripe-js#elements
*/
// Create a Stripe client
var stripe = Stripe(stripePubKey);
// Create an instance of Elements
var elements = stripe.elements();
// Custom styling can be passed to options when creating an Element.
var style = {
base: {
// Add your base input styles here. For example:
fontSize: '16px',
color: "#32325d",
}
};
var cardNumber = elements.create('cardNumber', {style: style});
cardNumber.mount('#card-number');
var cardExpiry = elements.create('cardExpiry', {style: style});
cardExpiry.mount('#card-expiry');
var cardCvc = elements.create('cardCvc', {style: style});
cardCvc.mount('#card-cvc');
registerElements([cardNumber, cardExpiry, cardCvc], 'example2');
// Create an instance of the card Element
var card = elements.create('card', {style: style});
// Add an instance of the card Element into the `card-element` <div>
card.mount('#card-element');
card.addEventListener('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
// Create a token or display an error when the form is submitted.
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
event.preventDefault();
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the customer that there was an error
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
// Send the token to your server
$('input[name=stripe-token-id]').val(result.token.id);
$('#payNow').click();
// stripeTokenHandler(result.token);
}
});
});
function stripeTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
// var form = document.getElementById('payment-form');
// var hiddenInput = document.createElement('input');
// hiddenInput.setAttribute('type', 'hidden');
// hiddenInput.setAttribute('name', 'stripeToken');
// hiddenInput.setAttribute('value', token.id);
// form.appendChild(hiddenInput);
alert(token.id);
$('input[name=stripe-token-id]').val(token.id);
// $('div.stripedetails').removeClass('stripedetails');
alert($('input[name=stripe-token-id]').val());
$('#payNow').click();
// Submit the form
// form.submit();
}
\ 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