/** * Element for displaying the list of billing invoices for the user or organization. */ angular.module('quay').directive('billingInvoices', function () { var directiveDefinitionObject = { priority: 0, templateUrl: '/static/directives/billing-invoices.html', replace: false, transclude: false, restrict: 'C', scope: { 'organization': '=organization', 'user': '=user', 'makevisible': '=makevisible' }, controller: function($scope, $element, $sce, ApiService) { $scope.loading = false; $scope.showCreateField = null; $scope.invoiceFields = []; var update = function() { var hasValidUser = !!$scope.user; var hasValidOrg = !!$scope.organization; var isValid = hasValidUser || hasValidOrg; if (!$scope.makevisible || !isValid) { return; } $scope.loading = true; ApiService.listInvoices($scope.organization).then(function(resp) { $scope.invoices = resp.invoices; $scope.loading = false; }, function() { $scope.invoices = []; $scope.loading = false; }); ApiService.listInvoiceFields($scope.organization).then(function(resp) { $scope.invoiceFields = resp.fields || []; }, function() { $scope.invoiceFields = []; }); }; $scope.$watch('organization', update); $scope.$watch('user', update); $scope.$watch('makevisible', update); $scope.showCreateField = function() { $scope.createFieldInfo = { 'title': '', 'value': '' }; }; $scope.askDeleteField = function(field) { bootbox.confirm('Are you sure you want to delete field ' + field.title + '?', function(r) { if (r) { var params = { 'field_uuid': field.uuid }; ApiService.deleteInvoiceField($scope.organization, null, params).then(function(resp) { $scope.invoiceFields = $.grep($scope.invoiceFields, function(current) { return current.uuid != field.uuid }); }, ApiService.errorDisplay('Could not delete custom field')); } }); }; $scope.createCustomField = function(title, value, callback) { var data = { 'title': title, 'value': value }; if (!title || !value) { callback(false); bootbox.alert('Missing title or value'); return; } ApiService.createInvoiceField($scope.organization, data).then(function(resp) { $scope.invoiceFields.push(resp); callback(true); }, ApiService.errorDisplay('Could not create custom field')); }; } }; return directiveDefinitionObject; });