angular.module('kalgudiApp').service('surveyServices', ['$rootScope', '$q', 'searchRestangular', 'commonDataFactory', 's3Restangular', 'surveyOfflineService', function($rootScope, $q, searchRestangular, commonDataFactory, s3Restangular, surveyOfflineService) { /** * Gets, list of all surveys from service. * * @param {string} userId Current logged in user profile key * @param {string} userType 'member' or 'admin' * @param {number} offset Offset of data to fetch */ this.surveyList = function(userId, userType, offset) { var deferred = $q.defer(); const URL = "v1/surveys/" + userType + "/" + userId + "/" + offset; s3Restangular.one(URL).get().then( function(res) { deferred.resolve(res); }, function(err) { // Check cache for survey lists var data = {}; if (userType == 'member') { data = surveyOfflineService.getSurveyList(); } else { data = surveyOfflineService.getAdminSurveyList(); } if (data && data.length > 0) { console.log('Getting survey list from cache.'); deferred.resolve({ code: 200, info: 'Survey from cache', data: data, }); return; } deferred.reject(err); } ); return deferred.promise; } this.getStats=function(surveyId){ var deferred = $q.defer(); var offset=20; s3Restangular.one("v1/surveys/"+surveyId+"/analytics").get().then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.getActivites=function(surveyId){ var deferred = $q.defer(); var offset=0; s3Restangular.one("v1/surveys/"+surveyId+"/response/"+offset).get().then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.removeAdmin=function(surveyId,members){ var deferred = $q.defer(); var offset=20; s3Restangular.one("v1/surveys/"+surveyId+"/admins").remove(members).then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.addAdmin=function(surveyId,members){ var deferred = $q.defer(); s3Restangular.one("v1/surveys/"+surveyId+"/admins").customPUT(members).then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } /** * Gets, complete survey details from service. * @param {string} surveyId Unique survey Id */ this.getSurvey = function (surveyId) { const URL = "v1/surveys/" + surveyId; var deferred = $q.defer(); s3Restangular.one(URL).get().then( function (res) { deferred.resolve(res); }, function (err) { deferred.reject(err); } ); return deferred.promise; }; /** * Gets, complete survey details from service. * @param {string} surveyId Unique survey Id */ this.getSurveyDetails = function (surveyId, profileKey) { const URL = "v1/surveys/" + surveyId + '/' + profileKey; var deferred = $q.defer(); s3Restangular.one(URL).get().then( function (res) { deferred.resolve(res); }, function (err) { // Check cache for the survey. const data = surveyOfflineService.getSurveyDetials(surveyId); if (data) { console.log('Getting survey details from cache.'); deferred.resolve(data); return; } deferred.reject(err); } ); return deferred.promise; }; /** * Submits or updates a survey response. * * @param {any} requestPayload Request object to send to service * @param {boolean} isSubmitted Whether user already submitted survey or not. */ this.submitSurvey = function (requestPayload, isSubmitted) { const URL = "v1/surveys/response"; var deferred = $q.defer(); if (isSubmitted) { // If survey already submitted then update s3Restangular.one(URL).customPUT(requestPayload).then( function (res) { deferred.resolve(res); }, function (err) { deferred.reject(err); } ); } else { // Submit a survey if not submitted s3Restangular.one(URL).customPOST(requestPayload).then( function (res) { deferred.resolve(res); }, function (err) { deferred.reject(err); } ); } return deferred.promise; }; this.rejectSurvey = function (surveyId, profileKey) { var deferred = $q.defer(); const URL = 'v1/surveys/'+ surveyId + '/reject/' + profileKey; // If survey already submitted then update s3Restangular.one(URL).get().then( function (res) { deferred.resolve(res); }, function (err) { deferred.reject(err); } ); return deferred.promise; } this.reminder=function(surveyId){ var deferred = $q.defer(); s3Restangular.one("v1/surveys/"+surveyId+"/reminder").customPUT().then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.updateSurvey=function(surveyId,operation,surveyObj){ var deferred = $q.defer(); s3Restangular.one("v1/surveys/"+surveyId+"/"+operation).customPUT(surveyObj).then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.createSurvey=function(surveyObj){ var deferred = $q.defer(); s3Restangular.one("v1/surveys").customPOST(surveyObj).then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.getAnalytics=function(surveyId){ var deferred = $q.defer(); s3Restangular.one("v1/surveys/"+surveyId+"/analytics").get().then(function(publishedContent){ deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.getFilters=function(orgId){ var deferred = $q.defer(); const url = 'v1/surveys/filters?organisationId='+orgId; s3Restangular.one(url).get().then(function(res){ deferred.resolve(res); },function(err) { deferred.reject(err); }); return deferred.promise; } this.getTargettedAudienceCount = function(requestPayload) { var deferred = $q.defer(); const URL = 'v1/surveys/target/count'; s3Restangular.one(URL).customPUT(requestPayload).then( function(res) { deferred.resolve(res); },function(err) { deferred.reject(err); } ); return deferred.promise; } this.getTargettedAudience = function(requestPayload) { var deferred = $q.defer(); const URL = 'v1/surveys/target/members'; s3Restangular.one(URL).customPUT(requestPayload).then( function(res) { localStorage['targettedMembers'] = res.data; deferred.resolve(res); },function(err) { deferred.reject(err); } ); return deferred.promise; } this.getMembers = function (surveyId, offset) { var deferred = $q.defer(); const URL = 'v1/surveys/' + surveyId + '/members/' + offset; s3Restangular.one(URL).get().then( function (res) { deferred.resolve(res); }, function (err) { // Check cache for survey lists const data = surveyOfflineService.getMembersList(surveyId); if (data && data.length > 0) { console.log('Getting members from cache.'); deferred.resolve({ code: 200, info: 'Survey from cache', data: data, }); return; } deferred.reject(err); } ); return deferred.promise; }; /** * Get, survey members list for the surveys created under program. * * @param {string} surveyId Survey Id * @param {number} Offset to get members list */ this.getMembersOfSurveyUnderProgram = function (surveyId, offset) { // Validate offset offset = typeof offset === 'number' ? offset : 0; var deferred = $q.defer(); const URL = 'v1/surveys/' + surveyId + '/targetedMembers?offset=' + offset; s3Restangular.one(URL).get().then( function (res) { deferred.resolve(s3Restangular.stripRestangular(res)); }, function (err) { deferred.reject(err); } ); return deferred.promise; }; this.isSurveyAvailable = function(userId) { var deferred = $q.defer(); s3Restangular.one("v1/surveys/"+userId).get().then(function(publishedContent) { deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.sendSurveyReportInEmail = function(emailID, surveyId) { var deferred = $q.defer(); s3Restangular.one("v1/surveys/" + surveyId + "/email/" + emailID).get().then(function(publishedContent) { deferred.resolve(publishedContent); },function(err) { if(err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } /** * Adds or updates a Survey Questions */ this.submitSurveyQuestions = function (surveyId, surveyQuestions) { var deferred = $q.defer(); const URL = "v1/surveys/" + surveyId + "/qa"; s3Restangular.one(URL).customPOST(surveyQuestions).then(function(response) { deferred.resolve(response); },function(err) { deferred.reject(err); }); return deferred.promise; } /** * Adds or updates a Survey Members */ this.submitSurveyMembers = function (surveyId, members) { var deferred = $q.defer(); const URL = "v1/surveys/" + surveyId + "/members"; s3Restangular.one(URL).customPUT(members).then(function(response) { deferred.resolve(response); },function(err) { deferred.reject(err); }); return deferred.promise; } /** * Adds Multiple Survey Members */ this.addMultipleMembers = function (surveyId, members) { var deferred = $q.defer(); const URL = "v1/surveys/" + surveyId + "/multiplemembers"; s3Restangular.one(URL).customPUT(members).then(function(response) { deferred.resolve(response); },function(err) { deferred.reject(err); }); return deferred.promise; }; /** * Gets, stream of survey created under a specific program. * * @param {string} programId Program id * @param {number} offset Offset to get stream data * @param {number} limit Limit of stream data. Currently not used set at server. */ this.getProgramSurveyStream = function (programId, offset, limit) { const deferred = $q.defer(); const URL = 'v1/surveys/programStream/' + programId + '/' + offset; s3Restangular.one(URL).get().then( function (res) { deferred.resolve( s3Restangular.stripRestangular(res)); }, function (err) { deferred.reject(err); } ); return deferred.promise; }; /** * Submit attendance form for a survey */ this.postAttendanceForm = function (id,requestObj) { var deferred = $q.defer(); const URL = "v1/surveys/" + id + "/attendanceForm"; console.log('URL : ',URL); s3Restangular.one(URL).customPOST(requestObj).then(function (response) { deferred.resolve(response); }, function (err) { if (err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } this.getAttendanceForm = function (id, requestObj) { var deferred = $q.defer(); const URL = "v1/surveys/" + id + "/attendanceForm"; console.log('URL : ', URL); s3Restangular.one(URL).get().then(function (res) { deferred.resolve(s3Restangular.stripRestangular(res)); }, function (err) { deferred.reject(err); } ); return deferred.promise; } this.updateAttendanceForm = function (id,requestObj) { var deferred = $q.defer(); const URL = "v1/surveys/" + id + "/attendanceForm"; console.log('URL : ',URL); s3Restangular.one(URL).customPUT(requestObj).then(function (response) { deferred.resolve(response); }, function (err) { if (err.config.data == "nonetwork") { $rootScope.spinerisActive = false; } deferred.reject(err); }); return deferred.promise; } }]);