1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-11-24 12:06:15 +01:00

storage adjustment

This commit is contained in:
Kyle Spearrin 2017-07-11 10:59:49 -04:00
parent ea4d772dda
commit 1dbf831bda
6 changed files with 141 additions and 0 deletions

View File

@ -0,0 +1,37 @@
angular
.module('bit.organization')
.controller('organizationBillingAdjustStorageController', function ($scope, $state, $uibModalInstance, apiService,
$analytics, toastr, add) {
$analytics.eventTrack('organizationBillingAdjustStorageController', { category: 'Modal' });
$scope.add = add;
$scope.storageAdjustment = 0;
$scope.submit = function () {
var request = {
storageGbAdjustment: $scope.storageAdjustment
};
if (!add) {
request.storageGbAdjustment *= -1;
}
$scope.submitPromise = apiService.organizations.putStorage({ id: $state.params.orgId }, request)
.$promise.then(function (response) {
if (add) {
$analytics.eventTrack('Added Organization Storage');
toastr.success('You have added ' + $scope.storageAdjustment + ' GB.');
}
else {
$analytics.eventTrack('Removed Organization Storage');
toastr.success('You have removed ' + $scope.storageAdjustment + ' GB.');
}
$uibModalInstance.close();
});
};
$scope.close = function () {
$uibModalInstance.dismiss('cancel');
};
});

View File

@ -63,6 +63,23 @@
}); });
}; };
$scope.adjustStorage = function (add) {
var modal = $uibModal.open({
animation: true,
templateUrl: 'app/settings/views/settingsBillingAdjustStorage.html',
controller: 'organizationBillingAdjustStorageController',
resolve: {
add: function () {
return add;
}
}
});
modal.result.then(function () {
load();
});
};
$scope.cancel = function () { $scope.cancel = function () {
if (!confirm('Are you sure you want to cancel? All users will lose access to the organization ' + if (!confirm('Are you sure you want to cancel? All users will lose access to the organization ' +
'at the end of this billing cycle.')) { 'at the end of this billing cycle.')) {

View File

@ -64,6 +64,7 @@
put: { method: 'POST', params: { id: '@id' } }, put: { method: 'POST', params: { id: '@id' } },
putPayment: { url: _apiUri + '/organizations/:id/payment', method: 'POST', params: { id: '@id' } }, putPayment: { url: _apiUri + '/organizations/:id/payment', method: 'POST', params: { id: '@id' } },
putSeat: { url: _apiUri + '/organizations/:id/seat', method: 'POST', params: { id: '@id' } }, putSeat: { url: _apiUri + '/organizations/:id/seat', method: 'POST', params: { id: '@id' } },
putStorage: { url: _apiUri + '/organizations/:id/storage', method: 'POST', params: { id: '@id' } },
putUpgrade: { url: _apiUri + '/organizations/:id/upgrade', method: 'POST', params: { id: '@id' } }, putUpgrade: { url: _apiUri + '/organizations/:id/upgrade', method: 'POST', params: { id: '@id' } },
putCancel: { url: _apiUri + '/organizations/:id/cancel', method: 'POST', params: { id: '@id' } }, putCancel: { url: _apiUri + '/organizations/:id/cancel', method: 'POST', params: { id: '@id' } },
putReinstate: { url: _apiUri + '/organizations/:id/reinstate', method: 'POST', params: { id: '@id' } }, putReinstate: { url: _apiUri + '/organizations/:id/reinstate', method: 'POST', params: { id: '@id' } },
@ -125,6 +126,7 @@
'import': { url: _apiUri + '/accounts/import', method: 'POST', params: {} }, 'import': { url: _apiUri + '/accounts/import', method: 'POST', params: {} },
postDelete: { url: _apiUri + '/accounts/delete', method: 'POST', params: {} }, postDelete: { url: _apiUri + '/accounts/delete', method: 'POST', params: {} },
postPremium: { url: _apiUri + '/accounts/premium', method: 'POST', params: {} }, postPremium: { url: _apiUri + '/accounts/premium', method: 'POST', params: {} },
putStorage: { url: _apiUri + '/accounts/storage', method: 'POST', params: {} },
putCancelPremium: { url: _apiUri + '/accounts/cancel-premium', method: 'POST', params: {} }, putCancelPremium: { url: _apiUri + '/accounts/cancel-premium', method: 'POST', params: {} },
putReinstatePremium: { url: _apiUri + '/accounts/reinstate-premium', method: 'POST', params: {} }, putReinstatePremium: { url: _apiUri + '/accounts/reinstate-premium', method: 'POST', params: {} },
getBilling: { url: _apiUri + '/accounts/billing', method: 'GET', params: {} } getBilling: { url: _apiUri + '/accounts/billing', method: 'GET', params: {} }

View File

@ -0,0 +1,37 @@
angular
.module('bit.settings')
.controller('settingsBillingAdjustStorageController', function ($scope, $state, $uibModalInstance, apiService,
$analytics, toastr, add) {
$analytics.eventTrack('settingsBillingAdjustStorageController', { category: 'Modal' });
$scope.add = add;
$scope.storageAdjustment = 0;
$scope.submit = function () {
var request = {
storageGbAdjustment: $scope.storageAdjustment
};
if (!add) {
request.storageGbAdjustment *= -1;
}
$scope.submitPromise = apiService.accounts.putStorage(null, request)
.$promise.then(function (response) {
if (add) {
$analytics.eventTrack('Added Storage');
toastr.success('You have added ' + $scope.storageAdjustment + ' GB.');
}
else {
$analytics.eventTrack('Removed Storage');
toastr.success('You have removed ' + $scope.storageAdjustment + ' GB.');
}
$uibModalInstance.close();
});
};
$scope.close = function () {
$uibModalInstance.dismiss('cancel');
};
});

View File

@ -0,0 +1,46 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">
<i class="fa fa-database"></i>
{{add ? 'Add Storage' : 'Remove Storage'}}
</h4>
</div>
<form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise">
<div class="modal-body">
<div class="callout callout-default" ng-show="add">
<h4><i class="fa fa-dollar"></i> Note About Charges</h4>
<p>
Adding storage to your plan will result in adjustments to your billing totals and immediately charge your
payment method on file. The first charge will be prorated for the remainder of the current billing cycle.
</p>
</div>
<div class="callout callout-default" ng-show="!add">
<h4><i class="fa fa-dollar"></i> Note About Charges</h4>
<p>
Removing storage will result in adjustments to your billing totals that will be prorated as credits
to your next billing charge.
</p>
</div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="gb">{{add ? 'GB of Storage To Add' : 'GB of Storage To Remove'}}</label>
<input type="number" id="gb" name="StroageGbAdjustment" ng-model="storageAdjustment" class="form-control"
required min="0" max="99" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading">
<i class="fa fa-refresh fa-spin loading-icon" ng-show="form.$loading"></i>Submit
</button>
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>
</form>

View File

@ -185,6 +185,7 @@
<script src="app/organization/organizationBillingController.js"></script> <script src="app/organization/organizationBillingController.js"></script>
<script src="app/organization/organizationBillingChangePaymentController.js"></script> <script src="app/organization/organizationBillingChangePaymentController.js"></script>
<script src="app/organization/organizationBillingAdjustSeatsController.js"></script> <script src="app/organization/organizationBillingAdjustSeatsController.js"></script>
<script src="app/organization/organizationBillingAdjustStorageController.js"></script>
<script src="app/organization/organizationDeleteController.js"></script> <script src="app/organization/organizationDeleteController.js"></script>
<script src="app/organization/organizationBillingChangePlanController.js"></script> <script src="app/organization/organizationBillingChangePlanController.js"></script>
<script src="app/organization/organizationVaultController.js"></script> <script src="app/organization/organizationVaultController.js"></script>
@ -214,6 +215,7 @@
<script src="app/settings/settingsDeleteController.js"></script> <script src="app/settings/settingsDeleteController.js"></script>
<script src="app/settings/settingsCreateOrganizationController.js"></script> <script src="app/settings/settingsCreateOrganizationController.js"></script>
<script src="app/settings/settingsBillingController.js"></script> <script src="app/settings/settingsBillingController.js"></script>
<script src="app/settings/settingsBillingAdjustStorageController.js"></script>
<script src="app/settings/settingsUpdateKeyController.js"></script> <script src="app/settings/settingsUpdateKeyController.js"></script>
<script src="app/settings/settingsPremiumController.js"></script> <script src="app/settings/settingsPremiumController.js"></script>