organization signup plan details
This commit is contained in:
parent
ebb1044c43
commit
8098ab50e8
|
@ -1,37 +1,65 @@
|
||||||
angular
|
angular
|
||||||
.module('bit.settings')
|
.module('bit.settings')
|
||||||
|
|
||||||
.controller('settingsCreateOrganizationController', function($scope, $state, apiService, $uibModalInstance, cryptoService,
|
.controller('settingsCreateOrganizationController', function ($scope, $state, apiService, $uibModalInstance, cryptoService,
|
||||||
toastr, $analytics, authService, stripe) {
|
toastr, $analytics, authService, stripe) {
|
||||||
$analytics.eventTrack('settingsCreateOrganizationController', { category: 'Modal' });
|
$analytics.eventTrack('settingsCreateOrganizationController', { category: 'Modal' });
|
||||||
|
|
||||||
$scope.model = {
|
$scope.plans = {
|
||||||
plan: 'Personal'
|
free: {
|
||||||
|
basePrice: 0
|
||||||
|
},
|
||||||
|
personal: {
|
||||||
|
basePrice: 1,
|
||||||
|
annualBasePrice: 12,
|
||||||
|
baseUsers: 3,
|
||||||
|
userPrice: 1,
|
||||||
|
annualUserPrice: 12
|
||||||
|
},
|
||||||
|
teams: {
|
||||||
|
basePrice: 5,
|
||||||
|
annualBasePrice: 60,
|
||||||
|
monthlyBasePrice: 8,
|
||||||
|
baseUsers: 5,
|
||||||
|
userPrice: 2,
|
||||||
|
annualUserPrice: 24,
|
||||||
|
monthlyUserPrice: 2.5
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.submit = function(model) {
|
$scope.model = {
|
||||||
$scope.submitPromise = stripe.card.createToken(model.card).then(function(response) {
|
plan: 'personal',
|
||||||
|
additionalUsers: 0,
|
||||||
|
interval: 'annually'
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.submit = function (model) {
|
||||||
|
$scope.submitPromise = stripe.card.createToken(model.card).then(function (response) {
|
||||||
var request = {
|
var request = {
|
||||||
name: model.name,
|
name: model.name,
|
||||||
planType: model.plan,
|
planType: model.plan,
|
||||||
key: cryptoService.makeShareKey(),
|
key: cryptoService.makeShareKey(),
|
||||||
cardToken: response.id
|
cardToken: response.id,
|
||||||
|
additionalUsers: model.additionalUsers,
|
||||||
|
billingEmail: model.billingEmail,
|
||||||
|
businessName: model.ownedBusiness ? model.businessName : null,
|
||||||
|
monthly: model.interval === 'monthly'
|
||||||
};
|
};
|
||||||
|
|
||||||
return apiService.organizations.post(request).$promise;
|
return apiService.organizations.post(request).$promise;
|
||||||
}).then(function(result) {
|
}).then(function (result) {
|
||||||
$scope.model.card = null;
|
$scope.model.card = null;
|
||||||
|
|
||||||
$uibModalInstance.dismiss('cancel');
|
$uibModalInstance.dismiss('cancel');
|
||||||
$analytics.eventTrack('Created Organization');
|
$analytics.eventTrack('Created Organization');
|
||||||
authService.addProfileOrganization(result);
|
authService.addProfileOrganization(result);
|
||||||
$state.go('backend.org.dashboard', { orgId: result.Id }).then(function() {
|
$state.go('backend.org.dashboard', { orgId: result.Id }).then(function () {
|
||||||
toastr.success('Your new organization is ready to go!', 'Organization Created');
|
toastr.success('Your new organization is ready to go!', 'Organization Created');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.close = function() {
|
$scope.close = function () {
|
||||||
$uibModalInstance.dismiss('cancel');
|
$uibModalInstance.dismiss('cancel');
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -15,27 +15,94 @@
|
||||||
<input type="text" id="name" name="Name" ng-model="model.name" class="form-control"
|
<input type="text" id="name" name="Name" ng-model="model.name" class="form-control"
|
||||||
required api-field />
|
required api-field />
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group" show-errors>
|
||||||
<div class="radio">
|
<label for="billingEmail">Billing Email</label>
|
||||||
<label>
|
<input type="email" id="billingEmail" name="BillingEmail" ng-model="model.billingEmail" class="form-control"
|
||||||
<input type="radio" ng-model="model.plan" name="PlanType" value="Personal">
|
required api-field />
|
||||||
Personal ($1 /month)
|
|
||||||
</label>
|
|
||||||
<p class="help-block">Share with up to 5 users.</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="radio">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input type="radio" ng-model="model.plan" name="PlanType" value="Teams">
|
<input type="checkbox" ng-model="model.ownedBusiness"> This account is owned by a business.
|
||||||
Teams ($2 /user per month)
|
|
||||||
</label>
|
</label>
|
||||||
<p class="help-block">Share with as many users as you need.</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group" ng-show="model.ownedBusiness" show-errors>
|
||||||
|
<label for="businessName">Business Name</label>
|
||||||
|
<input type="text" id="businessName" name="BusinessName" ng-model="model.businessName" class="form-control"
|
||||||
|
api-field />
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
<h4>Choose Your Plan</h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="radio" ng-show="!model.ownedBusiness">
|
||||||
|
<label>
|
||||||
|
<input type="radio" ng-model="model.plan" name="PlanType" value="free">
|
||||||
|
Free
|
||||||
|
</label>
|
||||||
|
<p class="help-block">Share with 1 other user.</p>
|
||||||
|
</div>
|
||||||
|
<div class="radio" ng-show="!model.ownedBusiness">
|
||||||
|
<label>
|
||||||
|
<input type="radio" ng-model="model.plan" name="PlanType" value="personal">
|
||||||
|
Personal - ${{plans.personal.basePrice}} /month for {{plans.personal.baseUsers}} users,
|
||||||
|
additional users ${{plans.personal.userPrice}} /month
|
||||||
|
</label>
|
||||||
|
<p class="help-block">For personal users such as families & friends.</p>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input type="radio" ng-model="model.plan" name="PlanType" value="teams">
|
||||||
|
Teams - ${{plans.teams.basePrice}} /month for {{plans.teams.baseUsers}} users,
|
||||||
|
additional users ${{plans.teams.userPrice}} /month
|
||||||
|
</label>
|
||||||
|
<p class="help-block">For businesses and other large teams.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="model.plan !== 'free'">
|
||||||
|
<hr />
|
||||||
|
<h4>Additional Users</h4>
|
||||||
|
<p>
|
||||||
|
Your plan comes with {{plans[model.plan].baseUsers}} users. You can add additional users to your plan
|
||||||
|
for ${{plans[model.plan].userPrice}} /month.
|
||||||
|
</p>
|
||||||
|
<div class="form-group" show-errors>
|
||||||
|
<label for="additionalUsers">Additional Users</label>
|
||||||
|
<input type="number" id="additionalUsers" name="AdditionalUsers" ng-model="model.additionalUsers" min="0"
|
||||||
|
class="form-control" api-field />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="model.plan !== 'free'">
|
||||||
|
<hr />
|
||||||
|
<h4>Billing Totals</h4>
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input type="radio" ng-model="model.interval" name="BillingInterval" value="annually">
|
||||||
|
Bill me annually
|
||||||
|
</label>
|
||||||
|
<p class="help-block">
|
||||||
|
Base price: {{plans[model.plan].basePrice | currency:"$":2}} ×12 mo. = {{plans[model.plan].annualBasePrice | currency:"$":2}} /year<br />
|
||||||
|
Additional users: {{model.additionalUsers || 0}} ×{{plans[model.plan].userPrice | currency:"$":2}} ×12 mo. = {{(model.additionalUsers * plans[model.plan].annualUserPrice) | currency:"$":2}} /year<br />
|
||||||
|
<b>Total:</b> {{((model.additionalUsers || 0) * plans[model.plan].annualUserPrice + plans[model.plan].annualBasePrice) | currency:"USD $":2}} /year
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="radio" ng-show="model.plan !== 'personal'">
|
||||||
|
<label>
|
||||||
|
<input type="radio" ng-model="model.interval" name="BillingInterval" value="monthly">
|
||||||
|
Bill me monthly
|
||||||
|
</label>
|
||||||
|
<p class="help-block">
|
||||||
|
Base price: {{plans[model.plan].monthlyBasePrice | currency:"$":2}} /month<br />
|
||||||
|
Additional users: {{model.additionalUsers || 0}} ×{{plans[model.plan].monthlyUserPrice | currency:"$":2}} = {{(model.additionalUsers * plans[model.plan].monthlyUserPrice) | currency:"$":2}} /month<br />
|
||||||
|
<b>Total:</b> {{((model.additionalUsers || 0) * plans[model.plan].monthlyUserPrice + plans[model.plan].monthlyBasePrice) | currency:"USD $":2}} /month
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="model.plan !== 'free'">
|
||||||
|
<hr />
|
||||||
|
<h4>Payment Information</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="card_number">Card number</label>
|
<label for="card_number">Card Number</label>
|
||||||
<input type="text" id="card_number" name="card_number" ng-model="model.card.number" class="form-control"
|
<input type="text" id="card_number" name="card_number" ng-model="model.card.number" class="form-control"
|
||||||
cc-number cc-eager-type required />
|
cc-number cc-eager-type required />
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,7 +119,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="exp_month">Expiration month</label>
|
<label for="exp_month">Expiration Month</label>
|
||||||
<select id="exp_month" class="form-control" ng-model="model.card.exp_month" required cc-exp-month>
|
<select id="exp_month" class="form-control" ng-model="model.card.exp_month" required cc-exp-month>
|
||||||
<option value="">-- Select --</option>
|
<option value="">-- Select --</option>
|
||||||
<option value="01">01 - January</option>
|
<option value="01">01 - January</option>
|
||||||
|
@ -72,7 +139,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="exp_year">Expiration year</label>
|
<label for="exp_year">Expiration Year</label>
|
||||||
<select id="exp_year" class="form-control" ng-model="model.card.exp_year" required cc-exp-year>
|
<select id="exp_year" class="form-control" ng-model="model.card.exp_year" required cc-exp-year>
|
||||||
<option value="">-- Select --</option>
|
<option value="">-- Select --</option>
|
||||||
<option value="17">2017</option>
|
<option value="17">2017</option>
|
||||||
|
@ -354,12 +421,13 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="address_zip" ng-bind="model.card.address_country === 'US' ? 'Zip code' : 'Postal code'"></label>
|
<label for="address_zip" ng-bind="model.card.address_country === 'US' ? 'Zip Code' : 'Postal Code'"></label>
|
||||||
<input type="text" id="address_zip" ng-model="model.card.address_zip" class="form-control" required />
|
<input type="text" id="address_zip" ng-model="model.card.address_zip" class="form-control" required />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="createOrgForm.$loading">
|
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="createOrgForm.$loading">
|
||||||
<i class="fa fa-refresh fa-spin loading-icon" ng-show="createOrgForm.$loading"></i>Submit
|
<i class="fa fa-refresh fa-spin loading-icon" ng-show="createOrgForm.$loading"></i>Submit
|
||||||
|
|
Loading…
Reference in New Issue