var settingHideInfo1=0x00000001;var settingHideInfo2=0x00000002;var settingHideNote=0x00000004;angular.module('twoBookApp').service('SessionService',['$window','$filter','$http','$q','$rootScope','$rootElement',function($window,$filter,$http,$q,$rootScope,$rootElement){var self=this;var _apiUrl='https://2book.huebner.at';var _clients=undefined;var _bookKeepings=undefined;var _userInfo=undefined;var _smallEntrepreneur=false;var _settings=undefined;var _incomeExpensesWithCategories=undefined;var _incomeExpensesCategories=undefined;var _bookEntryTypes=undefined;var _waitCounter=0;this.getApiUrl=function(){return _apiUrl;};this.isSmallEntrepreneur=function(){return _smallEntrepreneur;};this.setToken=function setToken(token){$window.sessionStorage.token=token;return;};this.setRefreshToken=function setRefreshToken(token){$window.sessionStorage.refresh_token=token;return;};this.getToken=function getToken(){return $window.sessionStorage.token;} this.getRefreshToken=function getRefreshToken(){return $window.sessionStorage.refresh_token;} this.logOut=function logOut(){$window.sessionStorage.clear();_clients=undefined;_bookKeepings=undefined;_userInfo=undefined;_smallEntrepreneur=false;_settings=undefined;_incomeExpensesWithCategories=undefined;_incomeExpensesCategories=undefined;_bookEntryTypes=undefined;return;} this.isAnonymus=function isAnonymus(){if(self.getToken()===undefined){return true;}else{return false;}} this.setClients=function setClients(clients){_clients=JSON.parse(JSON.stringify(clients));return;};this.getClients=function getClients(){var deferred=$q.defer();if(_clients!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_clients)));}else{console.log('try to reload clients from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/clients',headers:{'Content-Type':'text/xml'}}).then(function(response){console.log('clients returned from server:'+response.data);self.setClients(response.data);return response.data;});} return deferred.promise;} this.setUserInfo=function setUserInfo(userInfo,nosave){nosave=typeof nosave!=='undefined'?nosave:false;if(nosave){_userInfo=JSON.parse(JSON.stringify(userInfo));}else{var deferred=$q.defer();userDto=JSON.parse(JSON.stringify(userInfo));self.progressSymbol(true);deferred.promise=$http({method:'POST',url:_apiUrl+'/api/Account/ChangePassword',headers:{'Content-Type':'application/json'},data:userDto}).then(function(response){self.progressSymbol(false);_userInfo=JSON.parse(JSON.stringify(userInfo));return response;},function(response){self.progressSymbol(false);return deferred.reject(response);});return deferred.promise;} return;};this.getUserInfo=function getUserInfo(){var deferred=$q.defer();if(_userInfo!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_userInfo)));}else{DEBUG&&console.log('try to reload user info from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/Account/UserInfo',headers:{'Content-Type':'text/xml'}}).then(function(response){DEBUG&&console.log('user info returned from server:'+response.data);self.setUserInfo(response.data,true);return response.data;});} return deferred.promise;} this.getIncomeExpensesWithCategories=function getIncomeExpensesWithCategories(){var deferred=$q.defer();if(_incomeExpensesWithCategories!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_incomeExpensesWithCategories)));}else{DEBUG&&console.log('try to reload IncomeExpensesWithCategories from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/incomeexpenses',headers:{'Content-Type':'text/xml'}}).then(function(response){DEBUG&&console.log('IncomeExpensesWithCategories returned from server:'+response.data);_incomeExpensesWithCategories=response.data;return response.data;});} return deferred.promise;} this.getIncomeExpensesCategories=function getIncomeExpensesCategories(){var deferred=$q.defer();if(_incomeExpensesCategories!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_incomeExpensesCategories)));}else{DEBUG&&console.log('try to reload IncomeExpensesCategories from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/incomeexpenses/categories',headers:{'Content-Type':'text/xml'}}).then(function(response){DEBUG&&console.log('IncomeExpensesCategories returned from server:'+response.data);_incomeExpensesWithCategories=response.data;return response.data;});} return deferred.promise;} this.getBookEntryTypes=function getBookEntryTypes(){var deferred=$q.defer();if(_bookEntryTypes!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_bookEntryTypes)));}else{DEBUG&&console.log('try to reload BookEntryTypes from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/bookentrytypes',headers:{'Content-Type':'text/xml'}}).then(function(response){DEBUG&&console.log('BookEntryTypes returned from server:'+response.data);_bookEntryTypes=response.data;return response.data;});} return deferred.promise;} this.setSettings=function setSettings(settings,nosave){nosave=typeof nosave!=='undefined'?nosave:false;_settings=JSON.parse(JSON.stringify(settings));settingsBC=JSON.parse(JSON.stringify(settings));$rootScope.$broadcast('tboSettingsChanged',{settingsBC:settingsBC});if(!nosave){settingsDto=JSON.parse(JSON.stringify(settings));settingsDto.HiddenColumns=0;if(settings.HiddenColumns.Info1)settingsDto.HiddenColumns|=settingHideInfo1;if(settings.HiddenColumns.Info2)settingsDto.HiddenColumns|=settingHideInfo2;if(settings.HiddenColumns.Note)settingsDto.HiddenColumns|=settingHideNote;$http({method:'PUT',url:_apiUrl+'/api/settings',headers:{'Content-Type':'application/json'},data:settingsDto}).then(function(response){});} return;};this.getSettings=function getSettings(){var deferred=$q.defer();if(_settings!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_settings)));}else{DEBUG&&console.log('try to reload settings from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/settings',headers:{'Content-Type':'text/xml'}}).then(function(response){DEBUG&&console.log('settings returned from server:'+response.data.HiddenColumns);var tmpSettings=response.data;tmpSettings.HiddenColumns={Info1:(response.data.HiddenColumns&settingHideInfo1)?true:false,Info2:(response.data.HiddenColumns&settingHideInfo2)?true:false,Note:(response.data.HiddenColumns&settingHideNote)?true:false};self.setSettings(tmpSettings,true);return tmpSettings;});} return deferred.promise;} this.setBookKeepings=function setBookKeepings(bookKeepings){_bookKeepings=JSON.parse(JSON.stringify(bookKeepings));return;};this.getBookKeepings=function getBookKeepings(){var deferred=$q.defer();if(_bookKeepings!==undefined){deferred.resolve(JSON.parse(JSON.stringify(_bookKeepings)));}else{console.log('try to reload book keepings from server') deferred.promise=$http({method:'GET',url:_apiUrl+'/api/bookkeepings',headers:{'Content-Type':'text/xml'}}).then(function(response){console.log('bookkeepings returned from server:'+response.data);self.setBookKeepings(response.data);return response.data;});} return deferred.promise;} this.setCurrentBookKeeping=function setCurrentBookKeeping(lea,year){console.log('set current book keeping Lea:'+lea+' Year:'+year);$window.sessionStorage.lea=lea;$window.sessionStorage.year=year;$window.sessionStorage.isGross=($filter('filter')(_bookKeepings,{Lea:lea,Year:year}))[0].IsGross;var clientname=($filter('filter')(_clients,{Lea:$window.sessionStorage.lea}))[0].Name;$window.sessionStorage.clientname=clientname;$rootScope.$broadcast('tboCurrentBookKeeping',{Lea:lea,Year:year,ClientName:clientname,IsGross:$window.sessionStorage.isGross});} this.getCurrentBookKeeping=function getCurrentBookKeeping(){var deferred=$q.defer();if($window.sessionStorage.lea!==undefined&&$window.sessionStorage.year!==undefined&&$window.sessionStorage.clientname!==undefined&&$window.sessionStorage.isGross!==undefined){console.log('return current book keeping from memory: Lea:'+$window.sessionStorage.lea+' Clientname:'+$window.sessionStorage.clientname+' Year:'+$window.sessionStorage.year+' IsGross:'+$window.sessionStorage.isGross);deferred.resolve({Lea:$window.sessionStorage.lea,ClientName:$window.sessionStorage.clientname,Year:$window.sessionStorage.year,IsGross:$window.sessionStorage.isGross});}else{console.log('try to reload current book keeping') deferred.promise=self.getBookKeepings().then(function(response){console.log('got response for getBookKeepings on reloading current book keeping');$window.sessionStorage.lea=response.length?response[0].Lea:null;$window.sessionStorage.year=response.length?response[0].Year:null;$window.sessionStorage.isGross=response.length?response[0].IsGross:null;return self.getClients().then(function(response){console.log('got response for getClients on reloading current bookkeeping');$window.sessionStorage.clientname=response.length?($filter('filter')(response,{Lea:$window.sessionStorage.lea}))[0].Name:null;return{Lea:$window.sessionStorage.lea,ClientName:$window.sessionStorage.clientname,Year:$window.sessionStorage.year,IsGross:$window.sessionStorage.isGross}});});} return deferred.promise;} this.progressSymbol=function(show){if(show){_waitCounter++;kendo.ui.progress($rootElement,true);}else{_waitCounter--;if(_waitCounter<=0){_waitCounter=0;kendo.ui.progress($rootElement,false);}}}}]);angular.module('twoBookApp').factory('sessionInjector',['$injector','$q',function($injector,$q){var inFlightAuthRequest=null;var inFlightAuthRequestErrorHandled=false;var sessionInjector={request:function(config){var SessionService=$injector.get('SessionService');if(!SessionService.isAnonymus()&&config.url!=SessionService.getApiUrl()+'/token'){config.headers['Authorization']='Bearer '+SessionService.getToken()} return config;},responseError:function(response){var SessionService=$injector.get('SessionService');switch(response.status){case 401:DEBUG&&console.log("sessionInjector: 401");var deferred=$q.defer();if(!inFlightAuthRequest){DEBUG&&console.log("sessionInjector: 401 first time");inFlightAuthRequest=$injector.get("$http").post(SessionService.getApiUrl()+'/token',"grant_type=refresh_token&refresh_token="+SessionService.getRefreshToken());} inFlightAuthRequest.then(function(r){DEBUG&&console.log("sessionInjector: response of refresh request r.status:"+r.status);if(inFlightAuthRequest!=null){inFlightAuthRequest=null;inFlightAuthRequestErrorHandled=false;} if(r.data.access_token&&r.data.refresh_token){SessionService.setToken(r.data.access_token);SessionService.setRefreshToken(r.data.refresh_token);$injector.get("$http")(response.config).then(function(resp){deferred.resolve(resp);},function(resp){deferred.reject();});}else{if(!inFlightAuthRequestErrorHandled){inFlightAuthRequestErrorHandled=true;config={headers:{}};config.headers[HEADER_NAME]=true;deferred.reject({status:418,statusText:"Sitzung abgelaufen",config:config});}else{deferred.reject({status:418,statusText:"Sitzung abgelaufen"});} SessionService.logOut();$injector.get("$state").go('landingpage')}},function(response){inflightAuthRequest=null;deferred.reject();SessionService.logOut();$injector.get("$state").go('landingpage');return;});return deferred.promise;break;default:return $q.reject(response);break;} return response||$q.when(response);}};return sessionInjector;}]);angular.module('twoBookApp').config(['$httpProvider',function($httpProvider){$httpProvider.interceptors.push('sessionInjector');}]);