(function () { 'use strict'; angular.module('.config', []) .constant('API_ENDPOINT', 'https://api-dot-celbrea.appspot.com/API').constant('DEMO_MODE', undefined).constant('ENDPOINT_BASE', 'https://api-dot-celbrea.appspot.com/').constant('MEDIAKIT_ENDPOINT', 'https://storage.googleapis.com/prod-celbrea/mk/PressKit.zip').constant('PROJECT', 'WELWAZE');})(); ;(function() { 'use strict' angular.module('core', ['ui.router']).config([ '$stateProvider', function($stateProvider) { $stateProvider.state({ name: 'home', url: '/', views: { base: { templateUrl: '/ngtemplates/core/views/home.html', controller: 'HomeController', }, }, }) }, ]) })() ;(function() { 'use strict' function HomeController($scope, $state, $http, API_ENDPOINT) { // Redirect if token not valid var urlChecking = API_ENDPOINT + '/InvestmentReports?PageIndex=1&PageSize=1' var headers = { Authorization: 'Bearer ' + localStorage.getItem('token'), } $http.get(urlChecking, { headers: headers }).then( function(response) { checkResponse(response) }, function(err) { checkResponse(err) } ) function checkResponse(response) { if (response.status == 401) { localStorage.removeItem('token') localStorage.removeItem('refreshToken') localStorage.removeItem('user') $state.go('login') } } } angular .module('core') .controller('HomeController', [ '$scope', '$state', '$http', 'API_ENDPOINT', HomeController, ]) })() ;(function() { 'use strict' function ConfirmModalController($scope) { var params = {} $scope.displayModal = false $scope.confirm = function() { $scope.callbackSuccess(params) $scope.displayModal = false } $scope.cancel = function() { $scope.displayModal = false } $scope.$on('_showConfirmModal_' + $scope.idModal, function(_, attr) { if (attr.params) { params = attr.params } $scope.displayModal = true if (attr.params.updateCycle) { $scope.$apply() } }) } angular.module('core').directive('confirmModalComponent', function() { return { restrict: 'E', templateUrl: 'ngtemplates/core/directives/confirm-modal.html', scope: { callbackSuccess: '=', message: '=', idModal: '=', }, controller: ['$scope', ConfirmModalController], } }) })() ;(function() { 'use strict' angular.module('core').directive('copyClipboard', [ 'ToastMessage', function(ToastMessage) { return { restrict: 'A', scope: { valueToCopy: '=?', domElement: '@?', messageCopy: '=', }, link: function($scope, elem, attr) { $scope.copyToClipboard = function() { if ($scope.domElement) { var targetEl = document.querySelector( '#link-invite' ) $scope.valueToCopy = targetEl.text } if ($scope.valueToCopy) { var txtArea = document.createElement('textarea') txtArea.style = 'display=none' txtArea.value = $scope.valueToCopy document.body.appendChild(txtArea) txtArea.select() document.execCommand('copy') txtArea.remove() ToastMessage.showMessage($scope.messageCopy, 'info') } } elem.bind('click', $scope.copyToClipboard) }, } }, ]) })() ;(function() { 'use strict' function headerComponentCtrl($scope, $state, $http, API_ENDPOINT) { var url = API_ENDPOINT + '/BackOfficeUsers/me' $scope.logout = function() { localStorage.removeItem('token') localStorage.removeItem('username') $state.go('login') } $scope.getUsername = function() { var name = localStorage.getItem('username') if (!name) { name = '' } return name } $scope.userName = $scope.getUsername() $scope.loadUserName = function() { var token = localStorage.getItem('token') $http .get(url, { headers: { Authorization: 'Bearer ' + token, }, }) .then( function(resp) { $scope.userName = resp.data.firstName localStorage.setItem('username', $scope.userName) }, function(err) { console.error(err) } ) } $scope.loadUserName() } function HeaderComponent() { return { restrict: 'E', templateUrl: 'ngtemplates/core/directives/header-backoffice.html', controller: [ '$scope', '$state', '$http', 'API_ENDPOINT', headerComponentCtrl, ], } } angular.module('core').directive('headerBackOffice', HeaderComponent) })() ;(function() { angular.module('core').directive('ngInputFile', function() { return { restrict: 'E', templateUrl: '/ngtemplates/core/directives/ng-input-file.html', scope: { labelName: '=', inputModel: '=', inputName: '=', fileLoaded: '=?', fileNameLoaded: '=?', }, link: function(scope, elem, attr) { scope.fileChanged = function(ev) { scope.inputModel = elem.find('input')[0].files[0] // FIXME: Fix illegal invocation and update model file scope.$apply() } }, } }) })() ;(function () { 'use strict' function pageNavigationController($scope, $http, AuthService) { let limitPage = -1 $scope.disabledPrev = true $scope.disabledNext = false $scope.itemsNext = [] $scope.getPrevItems = function () { if ($scope.currentPage > 1) { $scope.currentPage-- $scope.disabledPrev = false $scope.disabledNext = false $scope.callItems() if ($scope.currentPage === 1) { $scope.disabledPrev = true } } } $scope.getNextItems = function () { if ( $scope.itemsNext.length && (limitPage === -1 || (limitPage !== -1 && $scope.currentPage < limitPage)) ) { $scope.currentPage++ $scope.disabledNext = false $scope.disabledPrev = false $scope.callItems() if (limitPage !== -1 && $scope.currentPage === limitPage) { $scope.disabledNext = true } } } $scope.callItems = function () { $scope .callback( $scope.currentPage, $scope.pageSize, $scope.orderBy, $scope.order ) .then(function () { $scope.callNextItems() }) } $scope.callNextItems = function () { var urlNext = $scope.urlHttp .replace('X', $scope.currentPage + 1) .replace('Y', $scope.pageSize) .replace('Z', $scope.orderBy) .replace('W', $scope.order) var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $http({method: 'GET', url: urlNext, headers: headers}).then( function (r) { $scope.itemsNext = r.data if (!$scope.itemsNext.length) { limitPage = $scope.currentPage $scope.disabledNext = true } else if ( $scope.itemsNext.length > 0 && $scope.itemsNext.length < $scope.pageSize ) { limitPage = $scope.currentPage + 1 } } ) } var $$urlHTTPwatcher = $scope.$watch('urlHttp', function (v) { if (!v) return $$urlHTTPwatcher() $scope.callNextItems() }) var $$listItemsWatcher = $scope.$watch('listItems', function (v) { if (!v || !v.length) return $$listItemsWatcher() if ( $scope.currentPage == 1 && (v.length == 0 || v.length < $scope.pageSize) ) { $scope.disabledNext = true limitPage = 1 } }) } angular.module('core').directive('pageNavigator', function () { return { restrict: 'E', templateUrl: 'ngtemplates/core/directives/page-navigation.html', scope: { callback: '=', listItems: '=', urlHttp: '=', currentPage: '=', pageSize: '=', orderBy: '=', order: '=', }, controller: [ '$scope', '$http', 'AuthService', pageNavigationController, ], } }) })() ;(function() { 'use strict' angular.module('core').directive('projectClassnameLoader', [ 'PROJECT', function(PROJECT) { return { restrict: 'A', link: function($scope, elem, attr) { var className = PROJECT.toLowerCase() + '_view' elem.addClass(className) }, } }, ]) })() ;(function() { 'use strict' function SideBarDirective() { return { restrict: 'E', templateUrl: '/ngtemplates/core/directives/sidebar.html', controller: [ '$scope', '$state', 'PROJECT', function($scope, $state, PROJECT) { $scope.$state = $state $scope.PROJECT = PROJECT $scope.oneAtATime = true $scope.status = { isOpenRelease: false, isOpenReports: false, } $scope.openAccordion = function(statusName) { $scope.status[statusName] = !$scope.status[statusName] } $scope.switchMenu = function($event) { var parentMenu = $($event.currentTarget.parentElement) var arrow = parentMenu.find('.glyphicon') if (parentMenu.hasClass('opened-sub-menu')) { parentMenu.removeClass('opened-sub-menu') arrow.addClass('glyphicon-chevron-right') arrow.removeClass('glyphicon-chevron-down') } else { parentMenu.addClass('opened-sub-menu') arrow.addClass('glyphicon-chevron-down') arrow.removeClass('glyphicon-chevron-right') } } }, ], } } angular.module('core').directive('sidebarBackOffice', SideBarDirective) })() ;(function() { 'use strict' angular.module('core').directive('spinnerLoader', function() { return { restrict: 'E', templateUrl: '/ngtemplates/core/directives/spinner-loader.html', scope: { showSpinner: '=', }, } }) })() ;(function() { 'use strict' angular .module('core') .filter('humanDate', function() { return function(date) { return moment(date).format('MM/DD/YYYY') } }) .filter('fullHumanDate', function() { return function(date) { return moment(date).format('YYYY/MM/DD hh:mm:ss a') } }) })() ;(function() { 'use strict' angular .module('core') .filter('humanQuarter', function() { var humanQuarter = { Quarter1: 'Quarter 1', Quarter2: 'Quarter 2', Quarter3: 'Quarter 3', Quarter4: 'Quarter 4', } return function(quarter) { return humanQuarter[quarter] } }) .filter('humanTypeReport', function() { var humanTypeReport = { ProfitAndLoss: 'Profit & Loss', BalanceSheet: 'Balance Sheet', CashFlow: 'Cash Flow', BudgetVsActual: 'Budget Vs Actual', InvestorsUpdate: 'Investors Update', Annual: 'Annual', } return function(typeReport) { return humanTypeReport[typeReport] } }) })() ;(function() { 'use strict' function ErrorFormatting() { this.formatMessage = function(errorObj) { var message = 'Error: ' if (errorObj.hasOwnProperty('data')) { var errorData = errorObj['data'] if (typeof errorData == 'object') { message = 'Error: ' Object.keys(errorData).forEach(function(item, index) { message += errorData[item] if (errorData[item][0].indexOf('.') === -1) { message += '. ' } }) } else { message += errorData } } else { return errorObj } return message } } angular.module('core').service('ErrorFormattingService', [ErrorFormatting]) })() ;(function() { 'use strict' function ExportCSVService() { var _this = this this.exportToCSV = function(data, filename) { if (!filename) { filename = 'export' } var json_d = [] if (typeof data === 'object') { json_d = [data] } else { json_d = data } var strData = _this.exportFromJSONToCSV(data) var blob = new Blob([strData], { type: 'text/plain;charset=utf-8' }) saveAs(blob, filename + '.csv') } this.exportFromJSONToCSV = function(json_data) { var str_exp = '' var keys = Object.keys(json_data[0]) // Remove $$hashKey object keys.pop() str_exp += keys.join(',') str_exp += '\n' for (var x = 0; x < json_data.length; x++) { var row = json_data[x] var rowVal = Object.values(row) // Remove $$object:id angular rowVal.pop() str_exp += rowVal.join(',') str_exp += '\n' } return str_exp } } angular.module('core').service('ExportCSVService', [ExportCSVService]) })() ;(function() { 'use strict' function ToastMessageService() { this.init = function() { toastr.options.progressBar = false toastr.options.positionClass = 'toast-top-right' toastr.options.preventDuplicates = true toastr.options.showDuration = 500 toastr.options.hideDuration = 750 toastr.options.timeOut = 6500 toastr.options.showEasing = 'swing' toastr.options.hideEasing = 'linear' toastr.options.showMethod = 'fadeIn' toastr.options.hideMethod = 'fadeOut' } this.showMessage = function(message, type) { var callbackToast = toastr[type] if (callbackToast) { callbackToast(message) } } this.init() } angular.module('core').service('ToastMessage', [ToastMessageService]) })() ;(function() { 'use strict' angular .module('auth', ['ui.router', 'ngMessages', 'core', '.config']) .config([ '$stateProvider', 'PROJECT', function($stateProvider, PROJECT) { var states = $stateProvider.state({ name: 'login', url: '/login', views: { base: { templateUrl: '/ngtemplates/auth/views/login.html', controller: 'LoginController', }, }, }) if (PROJECT == 'WELWAZE') { states .state({ name: 'users', url: '/users', views: { base: { templateUrl: '/ngtemplates/auth/views/users-list.html', controller: 'UsersList', }, }, }) .state({ name: 'users-crud', url: '/users/create', views: { base: { templateUrl: '/ngtemplates/auth/views/users-crud.html', controller: 'UserCRUDController', }, }, }) .state({ name: 'invite-user', url: '/invite', views: { base: { templateUrl: '/ngtemplates/auth/views/invite-user.html', controller: 'InviteUserController', }, }, }) } }, ]) })() ;(function() { 'use strict' function InviteUserController( $scope, $http, API_ENDPOINT, AuthService, $state, ToastMessage, ErrorFormattingService ) { var inviteInvestorEndpoint = '/BackOfficeUsers/investors/invite' var inviteAdministratorEndpoint = '/BackOfficeUsers/administrators/invite' var UNAUTHORIZED_REQUEST = 401 var headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': 'application/json', } $scope.copyClipText = 'Link copy to clipboard' $scope.formTouched = false $scope.showSpinner = false $scope.invitedLinkGenerated = false $scope.invitedLink = '' $scope.typeUser = '' $scope.userData = { firstName: '', lastName: '', email: '', } AuthService.checkAuthValid(null, $state) $scope.resetForm = function() { $scope.formTouched = false $scope.showSpinner = false $scope.invitedLinkGenerated = false $scope.invitedLink = '' $scope.typeUser = '' $scope.userData = { firstName: '', lastName: '', email: '', } } $scope.inviteUser = function() { $scope.formTouched = true var url = API_ENDPOINT + inviteInvestorEndpoint if ($scope.typeUser == 'administrator') { url = API_ENDPOINT + inviteAdministratorEndpoint } if ($scope.inviteUserForm.$valid) { $scope.showSpinner = true $http({ url: url, method: 'POST', data: $scope.userData, headers: headers, }).then( function(resp) { $scope.showSpinner = false $scope.invitedLink = resp.data.inviteCodeLink $scope.invitedLinkGenerated = true }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } } angular .module('auth') .controller('InviteUserController', [ '$scope', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', 'ErrorFormattingService', InviteUserController, ]) })() ;(function() { 'use strict' function LoginController( $scope, $http, AuthService, API_ENDPOINT, $state, ToastMessage, PROJECT ) { var loginUrl = API_ENDPOINT + '/BackOfficeUsers/login' var UNSUCCESSFUL_LOGIN = 401 var ERROR_FIELD_USER = 400 $scope.PROJECT = PROJECT $scope.formSubmitted = false $scope.showSpinner = false $scope.session = { email: '', password: '', } $scope.loginEnter = function($event) { var keyCodeEnter = 13 if ($event.keyCode == keyCodeEnter) { $scope.login() } } $scope.login = function() { $scope.formSubmitted = true if ($scope.loginForm.$valid) { $scope.showSpinner = true $http.post(loginUrl, $scope.session).then( function(resp) { $scope.formSubmitted = false AuthService.saveSession( resp.data.token, resp.data.refreshToken, resp.data.userId ) $scope.showSpinner = false $state.go('home') }, function(err) { $scope.showSpinner = false if (err.status == UNSUCCESSFUL_LOGIN) { ToastMessage.showMessage( 'Email or password provided does not exist.', 'error' ) } else if (err.status == ERROR_FIELD_USER) { var message = 'Error on fields: ' Object.keys(err.data).forEach(function( item, index ) { message += err.data[item].pop() }) ToastMessage.showMessage(message, 'error') } else { ToastMessage.showMessage(err.statusText, 'error') } } ) } } } angular .module('auth') .controller('LoginController', [ '$scope', '$http', 'AuthService', 'API_ENDPOINT', '$state', 'ToastMessage', 'PROJECT', LoginController, ]) })() ;(function() { 'use strict' function UserCRUDController( $scope, $http, AuthService, $state, API_ENDPOINT, ToastMessage, ErrorFormattingService ) { var userInvestor = '/BackOfficeUsers/investors' var userAdmin = '/BackOfficeUsers/administrators' var UNAUTHORIZED_REQUEST = 401 $scope.user = { firstname: '', lastname: '', email: '', password: '', } $scope.typeUser = '' $scope.showSpinner = false $scope.formTouched = false var headers = { 'Content-Type': 'application/json', Authorization: 'Bearer ' + AuthService.getToken(), } AuthService.checkAuthValid(null, $state) $scope.createUser = function() { $scope.formTouched = true var url = API_ENDPOINT + userInvestor if ($scope.typeUser == 'administrator') { url = API_ENDPOINT + userAdmin } if ($scope.userForm.$valid) { $scope.showSpinner = true $http({ url: url, method: 'POST', data: $scope.user, headers: headers, }).then( function(data) { ToastMessage.showMessage( 'User was created successfully', 'success' ) $scope.showSpinner = false $state.go('users') }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } } angular .module('auth') .controller('UserCRUDController', [ '$scope', '$http', 'AuthService', '$state', 'API_ENDPOINT', 'ToastMessage', 'ErrorFormattingService', UserCRUDController, ]) })() ;(function() { 'use strict' function UsersListController( $scope, API_ENDPOINT, AuthService, $state, $http, ToastMessage, ErrorFormattingService ) { var UNAUTHORIZED_REQUEST = 401 var pageIndexDefault = 1 var userListUrl = '/BackOfficeUsers?PageIndex=X&PageSize=Y&OrderBy=Z&Order=W' $scope.users = [] $scope.urlBase = API_ENDPOINT + userListUrl $scope.pageSizeDefault = 10 $scope.currentPage = pageIndexDefault $scope.showSpinner = true $scope.copyClipText = 'Link copy to clipboard' $scope.orderBy = 'firstname' $scope.order = 'asc' $scope.setOrdering = function (orderBy) { if ($scope.orderBy == orderBy) { if ($scope.order == 'desc') { $scope.order = 'asc' } else { $scope.order = 'desc' } } else { $scope.orderBy = orderBy } $scope.getUsers($scope.currentPage) } $scope.getUsers = function (page) { $scope.showSpinner = true if (!page || isNaN(page)) { page = pageIndexDefault } $scope.currentPage = page var headers = { 'Content-Type': 'application/json', Authorization: 'Bearer ' + AuthService.getToken(), } var url = API_ENDPOINT + userListUrl .replace('X', $scope.currentPage) .replace('Y', $scope.pageSizeDefault) .replace('Z', $scope.orderBy) .replace('W', $scope.order) return $http({ url: url, method: 'GET', headers: headers, }).then( function (r) { $scope.users = r.data $scope.showSpinner = false }, function (err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage(err) ToastMessage.showMessage(message, 'error') } } ) } $scope.reInviteUser = function (userId) { const url = API_ENDPOINT + '/BackOfficeUsers/' + userId + '/regenerateInvite'; const headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': 'application/json', } $scope.showSpinner = true $http({ method: 'POST', url: url, headers: headers, }).then( function (r) { $scope.getUsers() ToastMessage.showMessage('User invite regenerated', 'info') }, function (e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.sendResetPasswordEmail = function(userId) { var url = API_ENDPOINT + '/BackOfficeUsers/' + userId + '/reset' var headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': 'application/json', } $scope.showSpinner = true $http({ method: 'POST', url: url, headers: headers, }).then( function(r) { $scope.getUsers() ToastMessage.showMessage('Reset password email sent', 'info') }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.switchEnableUser = function(userId, status) { var action = 'disable' if (!status) { action = 'enable' } var url = API_ENDPOINT + '/BackOfficeUsers/' + userId + '/' + action var headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': 'application/json', } $scope.showSpinner = true $http({ method: 'POST', url: url, headers: headers, }).then( function(r) { $scope.getUsers() var messageEnable = status ? 'disabled' : 'enabled' ToastMessage.showMessage('User ' + messageEnable, 'info') }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } AuthService.checkAuthValid($scope.getUsers, $state) } angular .module('auth') .controller('UsersList', [ '$scope', 'API_ENDPOINT', 'AuthService', '$state', '$http', 'ToastMessage', 'ErrorFormattingService', UsersListController, ]) })() ;(function() { 'use strict' function AuthService($http, API_ENDPOINT) { var _this = this this.saveSession = function(token, refreshToken, user) { localStorage.setItem('token', token) localStorage.setItem('refreshToken', refreshToken) localStorage.setItem('user', user) } this.getToken = function() { return localStorage.getItem('token') } this.checkAuthValid = function(callback, $stateService) { var urlChecking = API_ENDPOINT + '/InvestmentReports?PageIndex=1&PageSize=1' if (!callback) { callback = function() {} } $http .get(urlChecking, { headers: { Authorization: 'Bearer ' + _this.getToken(), }, }) .then(callback, function(err) { if (err.status == 401) { _this.removeToken() $stateService.go('login') } }) } this.removeToken = function() { localStorage.removeItem('token') localStorage.removeItem('refreshToken') localStorage.removeItem('user') } } angular .module('auth') .service('AuthService', ['$http', 'API_ENDPOINT', AuthService]) })() ;(function() { 'use strict' angular.module('media-kit', ['core']).config([ '$stateProvider', function($stateProvider) { $stateProvider.state({ name: 'media-kit', url: '/media-kit', views: { base: { templateUrl: '/ngtemplates/media-kit/views/media-kit.html', controller: 'MediaKitController', }, }, }) }, ]) })() ;(function() { 'use strict' function MediaKitController( $scope, $http, API_ENDPOINT, $state, AuthService, ToastMessage, MEDIAKIT_ENDPOINT ) { var fakeUrl = '/api/fake' var templateDragItem = '
' + '' + '
' + '{{ template }}' + '
' + '
' var mediaKitUrl = '/mediakit/upload' var UNAUTHORIZED_REQUEST = 401 $scope.mediaFiles = [] $scope.showSpinner = true $scope.MEDIAKIT_ENDPOINT = MEDIAKIT_ENDPOINT // Redirect if token not valid var callbackSuccess = function() { $scope.showSpinner = false $scope.addMediaItem() } AuthService.checkAuthValid(callbackSuccess, $state) $scope.addMediaItem = function() { var modelFile = { label: 'File', name: 'file', loadFile: false, fileName: '', model: null, } $scope.mediaFiles.push(modelFile) } $scope.submitFiles = function() { var mediaUrl = API_ENDPOINT + mediaKitUrl var fileForm = new FormData() var headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': undefined, } $scope.mediaFiles.forEach(function(item, index) { if (item.model) { fileForm.append('files', item.model) } }) if (Array.from(fileForm.entries()).length) { $scope.showSpinner = true $http .post(mediaUrl, fileForm, { transformRequest: angular.identity, headers: headers, }) .then( function(r) { ToastMessage.showMessage( 'Media Kit was uploaded successfully', 'success' ) $scope.showSpinner = false $state.go('home') }, function(err) { if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } ToastMessage.showMessage(err, 'error') $scope.showSpinner = false } ) } else { ToastMessage.showMessage( 'You must select at least one file to upload a Media Kit', 'error' ) } } $scope.loadDropZone = function() { $scope.dropzoneMediaKit = new Dropzone('#dropzone-media-kit', { url: fakeUrl, autoProcessQueue: false, dictDefaultMessage: 'Drop your files here to upload', }) var originalTemplate = $scope.dropzoneMediaKit.options.previewTemplate $scope.dropzoneMediaKit.options.previewTemplate = templateDragItem.replace( '{{ template }}', originalTemplate ) } } angular .module('media-kit') .controller('MediaKitController', [ '$scope', '$http', 'API_ENDPOINT', '$state', 'AuthService', 'ToastMessage', 'MEDIAKIT_ENDPOINT', MediaKitController, ]) })() ;(function() { 'use strict' angular.module('products', ['ui.router', 'core', '.config']).config([ '$stateProvider', function($stateProvider) { $stateProvider .state({ name: 'products', url: '/products', views: { base: { templateUrl: '/ngtemplates/products/views/products-list.html', controller: 'ProductsListController', }, }, }) .state({ name: 'products-create', url: '/products/create', views: { base: { templateUrl: '/ngtemplates/products/views/products-edit.html', controller: 'ProductsEditController', }, }, }) .state({ name: 'products-edit', url: '/products/:id/edit', views: { base: { templateUrl: '/ngtemplates/products/views/products-edit.html', controller: 'ProductsEditController', }, }, }) }, ]) })() ;(function() { 'use strict' function ProductsDetail( $scope, $http, API_ENDPOINT, AuthService, $state, ToastMessage, ErrorFormattingService ) { var productEndpoint = '/Products' var UNAUTHORIZED_REQUEST = 401 $scope.formTouched = false $scope.showSpinner = true $scope.productImages = [] $scope.loadImages = false $scope.product = { description: '', price: 0, title: '', name: '', } // Redirect if token not valid var callbackSuccess = function() { if ($state.params.id) { var url = API_ENDPOINT + productEndpoint + '/' + $state.params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $http({ url: url, method: 'GET', headers: headers }).then( function(r) { $scope.product = r.data $scope.productImages = $scope.product.images $scope.loadImages = true $scope.showSpinner = false } ) } else { $scope.showSpinner = false } } AuthService.checkAuthValid(callbackSuccess, $state) $scope.saveProduct = function() { $scope.formTouched = true var url = API_ENDPOINT + productEndpoint var method = 'POST' if ($scope.productsEditForm.$valid) { var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } if ($scope.product.productId) { var method = 'PATCH' url += '/' + $scope.product.productId } $scope.showSpinner = true $http({ method: method, url: url, headers: headers, data: $scope.product, }).then( function(resp) { var prodId = null var statusItem = 'created' if (method == 'POST') { prodId = resp.data.productId } else { prodId = $scope.product.productId statusItem = 'updated' } $scope.productImages.forEach(function(el, index) { $scope.savePicture(prodId, el) }) $scope.showSpinner = false ToastMessage.showMessage( 'Product was successfully ' + statusItem, 'success' ) $state.go('products') }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } $scope.savePicture = function(id, fileObj) { var url = API_ENDPOINT + productEndpoint + '/' + id + '/images' var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } var request = null if (fileObj.status == 'CREATE') { var formPict = new FormData() var meta = { transformRequest: angular.identity, headers: headers, } headers['Content-Type'] = undefined formPict.append('file', fileObj.file) formPict.append('order', fileObj.order) request = $http.post(url, formPict, meta) } else if (fileObj.status == 'DELETE') { url += '/' + fileObj.imageId request = $http({ method: 'DELETE', url: url, headers: headers, }) } else if (fileObj.status == 'UPDATE') { var imgData = { order: fileObj.order, } url += '/' + fileObj.imageId request = $http({ method: 'PATCH', url: url, data: imgData, headers: headers, }) } if (fileObj.status != 'LOADED') { request.then( function(r) { console.log(r) }, function(err) { $scope.showSpinner = false ToastMessage.showMessage(err.data, 'error') } ) } } } angular .module('products') .controller('ProductsEditController', [ '$scope', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', 'ErrorFormattingService', ProductsDetail, ]) })() ;(function() { 'use strict' function ProductsList( $scope, DEMO_MODE, $http, API_ENDPOINT, AuthService, $state, ToastMessage ) { var prodListUrl = '/Products' var pageIndexDefault = 1 var UNAUTHORIZED_REQUEST = 401 $scope.productList = [] $scope.showSpinner = true $scope.modalRemove = { id: 'removeProduct', message: 'Remove?', } $scope.pageSizeDefault = 10 $scope.urlBase = API_ENDPOINT + prodListUrl // Redirect if token not valid var callbackSuccess = function(r) { $scope.getProducts() } AuthService.checkAuthValid(callbackSuccess, $state) $scope.getProducts = function(page) { var currentPage = page var currentSize = $scope.pageSizeDefault var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } if (!currentPage) { currentPage = pageIndexDefault } $scope.showSpinner = true var url = API_ENDPOINT + prodListUrl return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.productList = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.removeProductConfirm = function(id) { $scope.$broadcast('_showConfirmModal_removeProduct', { params: { id: id }, }) } $scope.removeProduct = function(params) { var id = params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true var url = API_ENDPOINT + prodListUrl + '/' + id return $http({ method: 'DELETE', url: url, headers: headers, }).then( function(r) { $scope.getProducts() $scope.showSpinner = false ToastMessage.showMessage( 'Product was removed successfully.', 'success' ) return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.editProduct = function(id) { $state.go('products-edit', { id: id }) } } angular .module('products') .controller('ProductsListController', [ '$scope', 'DEMO_MODE', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', ProductsList, ]) })() ;(function() { 'use strict' function ImageLoaderCtrl($scope, $timeout, $http, $q) { var $hiddenInputFile = null $scope.modalRemove = { id: 'removePicture', message: 'Are you sure?', } $scope.loadDropZone = function() { $scope.imgDropZone = new Dropzone('#dropzone-image-loader', { url: '/api/fake', autoProcessQueue: false, acceptedFiles: 'image/*', dictDefaultMessage: 'Drop your files here to upload', thumbnail: thumbnailLoadImg, complete: completeLoadImg, error: errorLoadImg, }) $hiddenInputFile = $($scope.imgDropZone.hiddenFileInput) Sortable.create(document.getElementById('dropzone-image-loader'), { animation: 150, draggable: '.dz-preview', group: 'grid-gallery-group', ghostClass: 'ghost', fallbackTolerance: 3, forceFallback: true, onUpdate: function(evt) { $scope.updateOrderPictures() }, onEnd: function(evt) { $hiddenInputFile.attr('disabled', true) $timeout(function() { $($scope.imgDropZone.hiddenFileInput).removeAttr( 'disabled' ) }, 500) }, }) } $scope.updateOrderPictures = function() { $('.dz-preview').each(function(index, el) { var pictStatus = $scope.images[index].status $scope.images[index].order = index if ( pictStatus == 'UPDATE' || (pictStatus == 'LOADED' && $scope.images[index].order != index) ) { $scope.images[index].status = 'UPDATE' } operateAttrOrder($(el), index) }) } $scope.loadPictures = function() { var pictPromises = [] $scope.images.forEach(function(el, index) { var imgUrl = el['uri'] var imgName = el['imageId'] var promise = $http .get(imgUrl, { responseType: 'blob' }) .then(function(response) { var fileInstance = new File([response.data], imgName, { type: response.data.type, }) fileInstance.loaded = true fileInstance.orderFile = el['order'] $scope.images[index].file = fileInstance $scope.images[index].status = 'LOADED' $scope.imgDropZone.emit('addedfile', fileInstance) $scope.imgDropZone.emit( 'thumbnail', fileInstance, response.config.url ) }) pictPromises.push(promise) }) return pictPromises } var $$loadImgWatcher = $scope.$watch('loadImages', function(v) { if (!v) return $$loadImgWatcher() var prom = $scope.loadPictures() $q.all(prom).then(function() { $scope.updateOrderPictures() }) }) /*************************/ /* Callbacks */ /*************************/ function loadPictureInDropzone(response) { var fileInstance = new File([response.data], fileName, { type: response.data.type, }) fileInstance.loaded = true $scope.images[index].file = fileInstance $scope.images[index].status = 'LOADED' $scope.imgDropZone.emit('addedfile', fileInstance) $scope.imgDropZone.emit( 'thumbnail', fileInstance, response.config.url ) } function operateAttrOrder($el, order) { if (!order && isNaN(order)) { return parseInt($el.attr('data-order'), 10) } else { $el.attr('data-order', order) } } function removeImgConfirm(ev) { $scope.$broadcast('_showConfirmModal_removePicture', { params: { removeEvent: ev, updateCycle: true, }, }) } function removeImg(params) { var $el = $(params.removeEvent.currentTarget) var $parent = $el.parent() var order = operateAttrOrder($parent) $parent.remove() if ($scope.images[order].status == 'CREATE') { $scope.images.splice(order, 1) } else { $scope.images[order].status = 'DELETE' } $scope.updateOrderPictures() } function completeLoadImg(file) { Dropzone.prototype.defaultOptions.complete(file) var $el = $(file.previewElement) var $elErr = $el.find('.dz-error-mark') $elErr.click(removeImgConfirm) if (!file.loaded) { operateAttrOrder($el, $scope.images.length) $scope.images.push({ file: file, order: $scope.images.length, status: 'CREATE', }) } else { operateAttrOrder($el, file.orderFile) } } function thumbnailLoadImg(file, dataUrl) { var _this = this Dropzone.prototype.defaultOptions.thumbnail(file, dataUrl) $timeout(function() { var $previewEl = $(file.previewElement)[0] $previewEl.classList.add('dz-success') _this.emit('complete', file) }, 1) } function errorLoadImg(file, error) { Dropzone.prototype.defaultOptions.error(file, error) } $scope.removeImg = removeImg $scope.loadDropZone() } angular.module('products').directive('imageLoader', function() { return { restrict: 'E', templateUrl: '/ngtemplates/products/directives/image-loader.html', scope: { images: '=', loadImages: '=?', }, controller: ['$scope', '$timeout', '$http', '$q', ImageLoaderCtrl], } }) })() ;(function() { 'use strict' angular.module('newsletter', ['ui.router', 'core', '.config']).config([ '$stateProvider', function($stateProvider) { $stateProvider.state({ name: 'newsletter-list', url: '/newsletter', views: { base: { templateUrl: '/ngtemplates/newsletter/views/newsletter-list.html', controller: 'NewsLetterListController', }, }, }) }, ]) })() ;(function() { 'use strict' // TODO: Remove $timeout on API integration function NewsLetterListController( $scope, ExportCSVService, $timeout, AuthService, $state, API_ENDPOINT, ToastMessage, $http ) { var newsletterURL = '/NewsletterMails?pageNumber=X&pageSize=Y&orderBy=date' var UNAUTHORIZED_REQUEST = 401 var pageIndexDefault = 1 var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true $scope.newsletterList = [] $scope.urlBase = API_ENDPOINT + newsletterURL $scope.pageSizeDefault = 5 $scope.modalRemove = { id: 'removeNews', message: 'Remove?', } $scope.removeNewsletterItemConfirm = function(email) { $scope.$broadcast('_showConfirmModal_removeNews', { params: { email: email }, }) } $scope.removeNewsletterItem = function(params) { var email = params.email if (email) { var url = API_ENDPOINT + '/NewsletterMails/' + email $scope.showSpinner = true $http({ method: 'DELETE', url: url, headers: headers, }).then( function(r) { $scope.loadNewsLetterList() ToastMessage.showMessage( 'Newsletter ' + email + ' removed successfully', 'success' ) }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } } $scope.exportToCSV = function() { ExportCSVService.exportToCSV( $scope.newsletterList, 'newsletter-report' ) } $scope.loadNewsLetterList = function(page) { var currentPage = page var currentSize = $scope.pageSizeDefault if (!currentPage) { currentPage = pageIndexDefault } var url = API_ENDPOINT + newsletterURL .replace('X', currentPage) .replace('Y', currentSize) return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.newsletterList = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } AuthService.checkAuthValid($scope.loadNewsLetterList, $state) } angular .module('newsletter') .controller('NewsLetterListController', [ '$scope', 'ExportCSVService', '$timeout', 'AuthService', '$state', 'API_ENDPOINT', 'ToastMessage', '$http', NewsLetterListController, ]) })() ;(function() { 'use strict' angular.module('early-access', ['ui.router', 'core', '.config']).config([ '$stateProvider', function($stateProvider) { $stateProvider.state({ name: 'early-access-list', url: '/early-access', views: { base: { templateUrl: '/ngtemplates/early-access/views/betatest.html', controller: 'BetaTestListController', }, }, }) }, ]) })() ;(function() { 'use strict' // TODO: Remove $timeout on API integration function BetaTestListController( $scope, ExportCSVService, $timeout, AuthService, $state, API_ENDPOINT, ToastMessage, $http ) { var earlyAccessURL = '/EarlyAccessMails?pageNumber=X&pageSize=Y&orderBy=date' var UNAUTHORIZED_REQUEST = 401 var pageIndexDefault = 1 var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true $scope.earlyAccessList = [] $scope.urlBase = API_ENDPOINT + earlyAccessURL $scope.pageSizeDefault = 5 $scope.modalRemove = { id: 'removeEA', message: 'Remove?', } $scope.removeEarlyAccessItemConfirm = function(email) { $scope.$broadcast('_showConfirmModal_removeEA', { params: { email: email }, }) } $scope.removeEarlyAccessItem = function(params) { var email = params.email if (email) { var url = API_ENDPOINT + '/EarlyAccessMails/' + email $scope.showSpinner = true $http({ method: 'DELETE', url: url, headers: headers, }).then( function(r) { $scope.loadEarlyAccess() ToastMessage.showMessage( 'Early Access ' + email + ' removed successfully', 'success' ) }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } } $scope.exportToCSV = function() { ExportCSVService.exportToCSV( $scope.earlyAccessList, 'access-list-report' ) } $scope.loadEarlyAccess = function(page) { var currentPage = page var currentSize = $scope.pageSizeDefault if (!currentPage) { currentPage = pageIndexDefault } var url = API_ENDPOINT + earlyAccessURL .replace('X', currentPage) .replace('Y', currentSize) $scope.showSpinner = true return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.earlyAccessList = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } AuthService.checkAuthValid($scope.loadEarlyAccess, $state) } angular .module('early-access') .controller('BetaTestListController', [ '$scope', 'ExportCSVService', '$timeout', 'AuthService', '$state', 'API_ENDPOINT', 'ToastMessage', '$http', BetaTestListController, ]) })() ;(function() { 'use strict' angular.module('releases', ['ui.router', 'core', '.config']).config([ '$stateProvider', function($stateProvider) { $stateProvider .state({ name: 'releases', url: '/releases', views: { base: { templateUrl: '/ngtemplates/releases/views/releases-list.html', controller: 'ReleasesListController', }, }, }) .state({ name: 'releases-create', url: '/releases/create', views: { base: { templateUrl: '/ngtemplates/releases/views/releases-create.html', controller: 'ReleasesDetailController', }, }, }) .state({ name: 'release-detail', url: '/releases/:id', views: { base: { templateUrl: '/ngtemplates/releases/views/release-new-display.html', controller: 'ReleaseDisplayViewController', }, }, }) }, ]) })() ;(function() { 'use strict' function ReleaseDisplayViewController( $scope, $http, $state, AuthService, API_ENDPOINT, ENDPOINT_BASE, ToastMessage ) { var releaseEndpoint = '/PressReleases' var url = API_ENDPOINT + releaseEndpoint var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.releaseNewData = {} $scope.showSpinner = false $scope.ENDPOINT_BASE = ENDPOINT_BASE // Redirect if token not valid var callbackSuccess = function() { if ($state.params.id) { $scope.showSpinner = true url += '/' + $state.params.id $http({ url: url, method: 'GET', headers: headers }).then( function(response) { $scope.releaseNewData = response.data $scope.showSpinner = false }, function(e) { $scope.showSpinner = false ToastMessage.showMessage(e, 'error') } ) } } AuthService.checkAuthValid(callbackSuccess, $state) } angular .module('releases') .controller('ReleaseDisplayViewController', [ '$scope', '$http', '$state', 'AuthService', 'API_ENDPOINT', 'ENDPOINT_BASE', 'ToastMessage', ReleaseDisplayViewController, ]) })() ;(function() { 'use strict' function ReleasesDetail( $scope, $http, API_ENDPOINT, AuthService, $state, ToastMessage, ErrorFormattingService ) { var releaseEndpoint = '/PressReleases' var UNAUTHORIZED_REQUEST = 401 $scope.options = { showWeeks: false, dateDisabled: function(date, mode) { return false }, minDate: new Date('January 01, 1970 00:00:00'), maxDate: new Date('December 31, 2040 23:59:59'), } $scope.showSpinner = false $scope.formTouched = false $scope.releaseNewInformation = { date: new Date(), title: '', file: null, image: null, } $scope.releaseImage = { label: 'Image (355px x 240px)', name: 'releaseimage', loadFile: false, fileName: '', } $scope.releasePdfFile = { label: 'PDF File', name: 'releasepdffile', loadFile: false, fileName: '', } // Redirect if token not valid var callbackSuccess = function() { if ($state.params.id) { var url = API_ENDPOINT + releaseEndpoint + '/' + $state.params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $http({ url: url, method: 'GET', headers: headers }).then( function(r) { $scope.releaseNewInformation = r.data // Load files $scope.releasePdfFile.fileName = r.data.fileName $scope.releaseImage.fileName = r.data.imgName // Enable files $scope.releasePdfFile.loadFile = true $scope.releaseImage.loadFile = true } ) } } AuthService.checkAuthValid(callbackSuccess, $state) $scope.hasReleasePDF = function() { return $scope.releaseNewInformation.file } $scope.hasReleaseImage = function() { return $scope.releaseNewInformation.image } $scope.saveReleaseInformation = function() { $scope.formTouched = true if (!$scope.hasReleasePDF()) { $scope.releaseForm.releasepdffile.$error.pdfrequired = true $scope.releaseForm.$valid = false } if (!$scope.hasReleaseImage()) { $scope.releaseForm.releaseimage.$error.imagerequired = true $scope.releaseForm.$valid = false } if ($scope.releaseForm.$valid) { var url = API_ENDPOINT + releaseEndpoint var headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': undefined, } var formData = new FormData() var callbackHttp = $http.post formData.append( 'Date', moment($scope.releaseNewInformation.date).format( 'MM/DD/YYYY' ) ) formData.append('Title', $scope.releaseNewInformation.title) formData.append('file', $scope.releaseNewInformation.file) formData.append('Image', $scope.releaseNewInformation.image) if ($scope.releaseNewInformation.pressReleaseId) { var callbackHttp = $http.patch } $scope.showSpinner = true callbackHttp(url, formData, { transformRequest: angular.identity, headers: headers, }).then( function(r) { $scope.showSpinner = false ToastMessage.showMessage( 'Release new was successfully created.', 'success' ) $state.go('releases') }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } $scope.$watch( 'releaseNewInformation', function(val) { if (val.file) { $scope.releaseForm.releasepdffile.$error.pdfrequired = false } if (val.image) { $scope.releaseForm.releaseimage.$error.imagerequired = false } }, true ) } angular .module('releases') .controller('ReleasesDetailController', [ '$scope', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', 'ErrorFormattingService', ReleasesDetail, ]) })() ;(function() { 'use strict' function ReleasesList( $scope, DEMO_MODE, $http, API_ENDPOINT, ENDPOINT_BASE, AuthService, $state, ToastMessage ) { var releaseListUrl = '/PressReleases?PageIndex=X&PageSize=Y' var pageIndexDefault = 1 var UNAUTHORIZED_REQUEST = 401 $scope.releaseNewsList = [] $scope.showSpinner = true $scope.ENDPOINT_BASE = ENDPOINT_BASE $scope.currentPage = pageIndexDefault $scope.pageSizeDefault = 10 $scope.urlBase = API_ENDPOINT + releaseListUrl // Redirect if token not valid var callbackSuccess = function() { $scope.getReleases() } AuthService.checkAuthValid(callbackSuccess, $state) $scope.getReleases = function(page) { var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } if (!page || isNaN(page)) { page = pageIndexDefault } $scope.currentPage = page var url = API_ENDPOINT + releaseListUrl .replace('X', $scope.currentPage) .replace('Y', $scope.pageSizeDefault) $scope.showSpinner = true return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.releaseNewsList = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.switchEnableRelease = function(releaseId, status) { var url = API_ENDPOINT + '/PressReleases/' + releaseId var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true $http({ method: 'PATCH', url: url, headers: headers, data: { Active: !status, }, }).then( function(r) { $scope.getReleases() var messageEnable = status ? 'disabled' : 'enabled' ToastMessage.showMessage('Release ' + messageEnable, 'info') }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.viewRelease = function(releaseId) { $state.go('release-detail', { id: releaseId }) } } angular .module('releases') .controller('ReleasesListController', [ '$scope', 'DEMO_MODE', '$http', 'API_ENDPOINT', 'ENDPOINT_BASE', 'AuthService', '$state', 'ToastMessage', ReleasesList, ]) })() ;(function() { 'use strict' angular.module('reports', ['ui.router', 'core', '.config']).config([ '$stateProvider', function($stateProvider) { $stateProvider .state({ name: 'reports', url: '/reports', views: { base: { templateUrl: '/ngtemplates/reports/views/reports-list.html', controller: 'ReportsListController', }, }, }) .state({ name: 'reports-create', url: '/reports/create', views: { base: { templateUrl: '/ngtemplates/reports/views/reports-create.html', controller: 'ReportsDetailController', }, }, }) .state({ name: 'report-detail', url: '/reports/:id', views: { base: { templateUrl: '/ngtemplates/reports/views/report-display.html', controller: 'ReportDisplayViewController', }, }, }) }, ]) })() ;(function() { 'use strict' function ReportDisplayViewController( $scope, $http, $state, AuthService, API_ENDPOINT, ENDPOINT_BASE, ToastMessage ) { var reportEndpoint = '/InvestmentReports' var url = API_ENDPOINT + reportEndpoint var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.reportData = {} $scope.showSpinner = false $scope.ENDPOINT_BASE = ENDPOINT_BASE // Redirect if token not valid var callbackSuccess = function() { if ($state.params.id) { $scope.showSpinner = true var reqUrl = url + ('/' + $state.params.id) $http({ url: reqUrl, method: 'GET', headers: headers }).then( function(response) { $scope.reportData = response.data $scope.showSpinner = false }, function(e) { $scope.showSpinner = false ToastMessage.showMessage(e, 'error') } ) } else { $state.go('reports') } } AuthService.checkAuthValid(callbackSuccess, $state) $scope.downloadReport = function($event) { $event.preventDefault() var dUrl = url + '/' + String($scope.reportData.investmentReportId) + '/download?hash=' + AuthService.getToken() window.open(dUrl) } } angular .module('reports') .controller('ReportDisplayViewController', [ '$scope', '$http', '$state', 'AuthService', 'API_ENDPOINT', 'ENDPOINT_BASE', 'ToastMessage', ReportDisplayViewController, ]) })() ;(function() { 'use strict' function ReportsDetail( $scope, $http, API_ENDPOINT, AuthService, $state, ToastMessage, ErrorFormattingService ) { var reportEndpoint = '/InvestmentReports' var UNAUTHORIZED_REQUEST = 401 $scope.menuOptions = { quarters: ['Quarter1', 'Quarter2', 'Quarter3', 'Quarter4'], months: { Quarter4: ['October', 'November', 'December'], Quarter3: ['July', 'August', 'September'], Quarter2: ['April', 'May', 'June'], Quarter1: ['January', 'February', 'March'], }, reportTypes: [ 'ProfitAndLoss', 'BalanceSheet', 'CashFlow', 'BudgetVsActual', 'InvestorsUpdate', 'Annual', ], } $scope.formTouched = false $scope.showSpinner = false $scope.reportInvestmentInfo = { year: new Date().getFullYear(), quarter: '', title: '', month: '', type: '', file: null, active: true, } $scope.reportFile = { label: 'File report', name: 'filereport', loadFile: false, required: true, fileName: '', } // Redirect if token not valid var callbackSuccess = function() { if ($state.params.id) { var url = API_ENDPOINT + reportEndpoint + '/' + $state.params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $http({ url: url, method: 'GET', headers: headers }).then( function(r) { var data = r.data $scope.reportInvestmentInfo = data $scope.reportFile.fileName = data.fileName $scope.reportFile.loadFile = true } ) } } AuthService.checkAuthValid(callbackSuccess, $state) $scope.isMonthInQuarter = function() { var month = $scope.reportInvestmentInfo.month var quarter = $scope.reportInvestmentInfo.quarter if (quarter && month) { return $scope.menuOptions.months[quarter].indexOf(month) != -1 } return true } $scope.hasReportFile = function() { return $scope.reportInvestmentInfo.file } $scope.createReport = function() { $scope.formTouched = true var url = API_ENDPOINT + reportEndpoint var formData = new FormData() var callbackHttp = $http.post if ($scope.reportInvestmentInfo.type == 'Annual') { $scope.reportInvestmentInfo.quarter = '' $scope.reportInvestmentInfo.month = '' } if (!$scope.isMonthInQuarter()) { $scope.reportsCreateForm.month.$error.monthnotinquarter = true $scope.reportsCreateForm.$valid = false } if (!$scope.hasReportFile()) { $scope.reportsCreateForm.filereport.$error.filerequired = true $scope.reportsCreateForm.$valid = false } if ($scope.reportsCreateForm.$valid) { formData.append('Year', $scope.reportInvestmentInfo.year) formData.append( 'Quarter', $scope.reportInvestmentInfo.quarter.toLowerCase() ) formData.append('Title', $scope.reportInvestmentInfo.title) formData.append( 'Month', $scope.reportInvestmentInfo.month.toLowerCase() ) formData.append('Type', $scope.reportInvestmentInfo.type) formData.append('File', $scope.reportInvestmentInfo.file) var headers = { Authorization: 'Bearer ' + AuthService.getToken(), 'Content-Type': undefined, } if ($scope.reportInvestmentInfo.investmentReportId) { var callbackHttp = $http.patch } $scope.showSpinner = true callbackHttp(url, formData, { transformRequest: angular.identity, headers: headers, }).then( function(resp) { $scope.showSpinner = false ToastMessage.showMessage( 'Report investment was successfully created', 'success' ) $state.go('reports') }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } $scope.$watch( 'reportInvestmentInfo', function(val) { if (val.month && val.quarter && $scope.isMonthInQuarter()) { $scope.reportsCreateForm.month.$error.monthnotinquarter = false } if (val.file) { $scope.reportsCreateForm.filereport.$error.filerequired = false } }, true ) } angular .module('reports') .controller('ReportsDetailController', [ '$scope', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', 'ErrorFormattingService', ReportsDetail, ]) })() ;(function() { 'use strict' function ReportsList( $scope, DEMO_MODE, $http, API_ENDPOINT, AuthService, $state, ToastMessage ) { var reportsListUrl = '/InvestmentReports?PageIndex=X&PageSize=Y' var pageIndexDefault = 1 var UNAUTHORIZED_REQUEST = 401 $scope.reportsInvestList = [] $scope.showSpinner = true $scope.currentPage = pageIndexDefault $scope.pageSizeDefault = 10 $scope.urlBase = API_ENDPOINT + reportsListUrl // Redirect if token not valid var callbackSuccess = function(r) { $scope.getReports() } AuthService.checkAuthValid(callbackSuccess, $state) $scope.getReports = function(page) { var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } if (!page || isNaN(page)) { page = pageIndexDefault } $scope.currentPage = page $scope.showSpinner = true var url = API_ENDPOINT + reportsListUrl .replace('X', $scope.currentPage) .replace('Y', $scope.pageSizeDefault) return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.reportsInvestList = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.switchEnableReport = function(reportId, status) { var url = API_ENDPOINT + '/InvestmentReports/' + reportId var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true $http({ method: 'PATCH', url: url, headers: headers, data: { Active: !status, }, }).then( function(r) { $scope.getReports() var messageEnable = status ? 'disabled' : 'enabled' ToastMessage.showMessage('Report ' + messageEnable, 'info') }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.viewReport = function(reportId) { $state.go('report-detail', { id: reportId }) } } angular .module('reports') .controller('ReportsListController', [ '$scope', 'DEMO_MODE', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', ReportsList, ]) })() ;(function() { 'use strict' angular.module('tokens', ['ui.router', 'core', '.config']).config([ '$stateProvider', function($stateProvider) { $stateProvider .state({ name: 'token-edit', url: '/tokens/:id', views: { base: { templateUrl: '/ngtemplates/tokens/views/token-edition.html', controller: 'TokenEditController', }, }, }) .state({ name: 'token-list', url: '/tokens', views: { base: { templateUrl: '/ngtemplates/tokens/views/token-list.html', controller: 'TokenListController', }, }, }) .state({ name: 'tokens-per-event-list', url: '/tokens/events', views: { base: { templateUrl: '/ngtemplates/tokens/views/token-event-list.html', controller: 'TokensPerEventListController', }, }, }) .state({ name: 'tokens-per-event-edit', url: '/tokens/events/:id/edit', views: { base: { templateUrl: '/ngtemplates/tokens/views/token-event-edit.html', controller: 'TokensPerEventEditController', }, }, }) }, ]) })() ;(function() { 'use strict' function TokenEditController( $scope, $http, API_ENDPOINT, AuthService, $state, ToastMessage ) { var tokenUrl = '/TokenArbitrations' var UNAUTHORIZED_REQUEST = 401 $scope.formTouched = false $scope.showSpinner = true $scope.token = { price: 0.1, minimunToConsume: 1, } if ($state.params.id) { var url = API_ENDPOINT + tokenUrl + '/' + $state.params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $http({ url: url, method: 'GET', headers: headers }).then( function(r) { $scope.token.price = r.data.price $scope.token.minimunToConsume = r.data.minimunToConsume $scope.showSpinner = false }, function(e) { console.error(e) $scope.showSpinner = false } ) } $scope.saveToken = function() { $scope.formTouched = true if ($scope.tokenForm.$valid) { var url = API_ENDPOINT + tokenUrl var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true $http({ url: url, method: 'POST', data: $scope.token, headers: headers, }).then( function(resp) { $scope.showSpinner = false ToastMessage.showMessage( 'Token was successfully updated', 'success' ) $state.go('token-list') }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } } angular .module('tokens') .controller('TokenEditController', [ '$scope', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', TokenEditController, ]) })() ;(function() { 'use strict' function TokenListController( $scope, ENDPOINT_BASE, API_ENDPOINT, $state, ToastMessage, AuthService, $http ) { var tokenEventsListUrl = '/TokenArbitrations' var UNAUTHORIZED_REQUEST = 401 $scope.tokenArbitrations = [] $scope.showSpinner = true $scope.ENDPOINT_BASE = ENDPOINT_BASE $scope.urlBase = API_ENDPOINT + tokenEventsListUrl // Redirect if token not valid var callbackSuccess = function() { $scope.getTokenArbitrations() } AuthService.checkAuthValid(callbackSuccess, $state) $scope.getTokenArbitrations = function() { var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } var url = API_ENDPOINT + tokenEventsListUrl $scope.showSpinner = true return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.tokenArbitrations = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.editToken = function() { var lastToken = $scope.tokenArbitrations[$scope.tokenArbitrations.length - 1] var tokenId = null if (lastToken) { tokenId = lastToken.tokenArbitrationId $scope.redirectTokenEdit(tokenId) } } $scope.redirectTokenEdit = function(eventId) { $state.go('token-edit', { id: eventId }) } } angular .module('tokens') .controller('TokenListController', [ '$scope', 'ENDPOINT_BASE', 'API_ENDPOINT', '$state', 'ToastMessage', 'AuthService', '$http', TokenListController, ]) })() ;(function() { 'use strict' function TokensPerEventEdit( $scope, $http, API_ENDPOINT, AuthService, $state, ToastMessage ) { var tokenEventUrl = '/EventTokenArbitrations' var UNAUTHORIZED_REQUEST = 401 $scope.event = { description: '', eventKind: '', eventTokenArbitrationId: '', tokens: 0, } $scope.showSpinner = true $scope.formTouched = false if ($state.params.id) { var url = API_ENDPOINT + tokenEventUrl + '/' + $state.params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $http({ url: url, method: 'GET', headers: headers }).then( function(r) { $scope.event = r.data $scope.showSpinner = false }, function(e) { console.error(e) $scope.showSpinner = false } ) } $scope.updateEventToken = function() { $scope.formTouched = true if ($scope.tokenEvForm.$valid) { var data = { Tokens: $scope.event.tokens, } var url = API_ENDPOINT + tokenEventUrl + '/' + $state.params.id var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } $scope.showSpinner = true $http({ url: url, method: 'PUT', data: data, headers: headers, }).then( function(resp) { $scope.showSpinner = false ToastMessage.showMessage( 'Event arbitration was successfully updated', 'success' ) $state.go('tokens-per-event-list') }, function(err) { $scope.showSpinner = false if (err.status == UNAUTHORIZED_REQUEST) { $state.go('login') } else { var message = ErrorFormattingService.formatMessage( err ) ToastMessage.showMessage(message, 'error') } } ) } } } angular .module('tokens') .controller('TokensPerEventEditController', [ '$scope', '$http', 'API_ENDPOINT', 'AuthService', '$state', 'ToastMessage', TokensPerEventEdit, ]) })() ;(function() { 'use strict' function TokensPerEventList( $scope, ENDPOINT_BASE, API_ENDPOINT, $state, ToastMessage, AuthService, $http ) { var tokenEventsListUrl = '/EventTokenArbitrations' var UNAUTHORIZED_REQUEST = 401 $scope.events = [] $scope.showSpinner = true $scope.ENDPOINT_BASE = ENDPOINT_BASE $scope.urlBase = API_ENDPOINT + tokenEventsListUrl // Redirect if token not valid var callbackSuccess = function() { $scope.getTokenEvents() } AuthService.checkAuthValid(callbackSuccess, $state) $scope.getTokenEvents = function() { var headers = { Authorization: 'Bearer ' + AuthService.getToken(), } var url = API_ENDPOINT + tokenEventsListUrl $scope.showSpinner = true return $http({ method: 'GET', url: url, headers: headers, }).then( function(r) { $scope.events = r.data $scope.showSpinner = false return r }, function(e) { $scope.showSpinner = false if (e.status == UNAUTHORIZED_REQUEST) { ToastMessage.showMessage(e.statusText, 'error') $state.go('login') } else { ToastMessage.showMessage(e.data, 'error') } } ) } $scope.editTokenEvent = function(eventId) { $state.go('tokens-per-event-edit', { id: eventId }) } } angular .module('tokens') .controller('TokensPerEventListController', [ '$scope', 'ENDPOINT_BASE', 'API_ENDPOINT', '$state', 'ToastMessage', 'AuthService', '$http', TokensPerEventList, ]) })() ;(function() { 'use strict' let project = 'WELWAZE' let deps = ['ui.router', 'ngMessages', 'ui.bootstrap', 'core', 'auth'] if (project.localeCompare('WELWAZE') === 0) { deps.push('reports') deps.push('releases') deps.push('media-kit') } else if (project.localeCompare('CELBREA') === 0) { deps.push('early-access') deps.push('newsletter') deps.push('products') deps.push('tokens') } console.log(deps) angular.module('app', deps).config([ '$urlRouterProvider', '$locationProvider', function($urlRouterProvider, $locationProvider) { $urlRouterProvider.otherwise('/') $locationProvider.html5Mode(true) }, ]) })()