Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;(function () {
- 'use strict';
- angular
- .module('service.moodService', [])
- .service('moodService', moodService);
- moodService.$inject = ['http', 'url', '$window', 'dateFactory', 'calendarSvc'];
- function moodService(http, url, $window, dateFactory, calendarSvc) {
- var model = {};
- model.getMyMoodByDate = getMyMoodByDate;
- model.getMyMoodByYear = getMyMoodByYear;
- model.separateMoodPerMonth = separateMoodPerMonth;
- model.getCurrentMonth = getCurrentMonth;
- model.getCurrentYear = getCurrentYear;
- model.configureChart = configureChart;
- model.generateYearsArr = generateYearsArr;
- model.currentWeek = currentWeek;
- model.arrWeekMonth = arrWeekMonth;
- var EMPTY_VALUE = 1;
- var MEDIUM_VALUE = 25;
- var MIN_TWO_VALUE = 20;
- var MAX_TWO_VALUE = 30;
- var UPPER_TWO_SMILE = 4;
- var BOTTOM_TWO_SMILE = 3;
- var empty = true;
- model.weekList = [
- {
- label: 'Week 1', number: 1
- },
- {
- label: 'Week 2', number: 2
- },
- {
- label: 'Week 3', number: 3
- },
- {
- label: 'Week 4', number: 4
- },
- {
- label: 'Week 5', number: 5
- },
- {
- label: 'Week 6', number: 6
- }
- ];
- model.monthLabels = calendarSvc.getMonths();
- model.dayLabels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
- model.smileLabels = [
- ' ',
- ' ',
- '<img src="content/images/moods-new/01_bad.svg" style="left:0"/>',
- '<img src="content/images/moods-new/02_somewhat_bad.svg" style="left:0"/>',
- '<img src="content/images/moods-new/03_ok.svg" style="left:0"/>',
- '<img src="content/images/moods-new/04_good.svg" style="left:0"/>',
- '<img src="content/images/moods-new/05_great.svg" style="left:0"/>'
- ];
- model.smileLabels2 = [
- '',
- '',
- '<img src="content/images/moods-new/01_bad.svg" style="left:0"/>',
- '',
- '<img src="content/images/moods-new/05_great.svg" style="left:0"/>'
- ];
- return model;
- function getDayNameWithNum(dayNum,dateObj) {
- var date = dateObj || (new Date());
- date.setDate(dayNum);
- var dayOfWeek = date.getDay() - 1;
- if (dayOfWeek === -1) {
- dayOfWeek = 6;
- }
- return {
- dayName: model.dayLabels[dayOfWeek],
- dayNum: dayNum,
- dayInWeek: date.getDay()
- }
- }
- function arrWeekMonth(month) {
- var result = [];
- var tempStrArr = [];
- var date = new Date();
- if (month){
- date.setMonth(month);
- }
- var currentMonth = date.getMonth();
- var numberOfWeek = 1;
- date.setDate(0);
- if (getDayNameWithNum(1).dayInWeek !== 1){
- var day = null;
- while(true){
- day = date.getDate();
- if (getDayNameWithNum(day, date).dayInWeek === 1){
- break;
- }
- date.setDate(date.getDate()-1);
- }
- }
- do {
- tempStrArr = date.toString().split(" ");
- result.push({
- label: tempStrArr[1]+" "+tempStrArr[2]+'th',
- number: numberOfWeek++
- });
- date.setDate(date.getDate()+7);
- } while(date.getMonth() !== currentMonth+1);
- return result;
- }
- /**
- * Get moods array and transform for our format
- * @param credentials
- * @returns {Promise.<TResult>|*}
- */
- function getMyMoodByDate(credentials) {
- return http.get(url.mood.getMyMoodByDate, credentials)
- .then(function (res) {
- if (res.moods !== undefined) {
- res.moods.forEach(function (el) {
- var tmpDate = dateFactory.created_date(el.created_at * 1000);
- el.created_time_row = tmpDate.moodTime;
- el.created_month_row = tmpDate.moodMonth;
- el.created_week_row = tmpDate.weekDay;
- el.created_year_row = tmpDate.moodYear;
- });
- }
- return res;
- });
- }
- function getMyMoodByYear(credentials) {
- return http.get(url.mood.getMyMoodByYear, credentials);
- }
- /**
- * separate moods array per month for chart.
- * @param arr
- * @returns {Array}
- */
- function separateMoodPerMonth(arr) {
- var result = [];
- var arrayMood = arr || [];
- arrayMood.forEach(function (el) {
- var date = new Date(el.created_at * 1000);
- var month = date.getMonth() + 1;
- var existMonthIndex = _getIndexByMonth(result, month);
- if (typeof existMonthIndex !== 'undefined') {
- result[existMonthIndex].values.push(el.level);
- } else {
- var tmpObj = {
- month: month,
- values: [el.level],
- };
- result.push(tmpObj);
- }
- });
- return _getAverage(result);
- }
- function _getIndexByMonth(arr, month) {
- var indexRes = undefined;
- arr.forEach(function (el, index) {
- if (el.month === month) {
- indexRes = index;
- }
- });
- return indexRes;
- }
- /**
- * get average value from arr
- * @param arr
- * @returns {Array}
- * @private
- */
- function _getAverage(arr) {
- var result = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
- arr.forEach(function (element) {
- var tmpArr = [];
- element.values.forEach(function (el) {
- if (el === MIN_TWO_VALUE) {
- el = 2;
- tmpArr.push(el);
- }
- if (el === MAX_TWO_VALUE) {
- el = 6;
- tmpArr.push(el);
- } else {
- tmpArr.push(el);
- }
- });
- element.average = tmpArr.sum() / tmpArr.length;
- element.month--;
- result[element.month] = element.average;
- });
- return result;
- }
- function currentWeek() {
- var currentDate = new Date();
- var first = (currentDate.getDate() - currentDate.getDay()) / 7;
- return Math.ceil(first);
- }
- /**
- *
- * @returns {number}
- */
- function getCurrentMonth() {
- var date = new Date();
- return date.getMonth();
- }
- /**
- *
- * @returns {number}
- */
- function getCurrentYear() {
- var date = new Date();
- return date.getFullYear();
- }
- function configureChart(week, moods, type, twoSmiles, data) {
- var chartData = [];
- var labels = [];
- if (typeof moods.group_by_week === 'undefined') {
- moods.group_by_week = [];
- if (moods.group_by_week === false) {
- empty = true;
- } else {
- empty = false;
- }
- }
- if (type === 'weekly') {
- var weekData = typeof moods.group_by_week[week] !== 'undefined' ? moods.group_by_week[week] : [];
- chartData = _transformMoodsPerWeek(weekData, twoSmiles);
- labels = model.dayLabels;
- } else {
- var arrData = _prepareMoodData(data, twoSmiles);
- chartData = arrData;
- labels = model.monthLabels;
- }
- // var width = $window.innerWidth * 0.7;
- var height = $window.innerHeight * 0.5;
- var chartObj = {
- credits: false,
- exporting: {
- enabled: false
- },
- chart: {
- type: 'line',
- height: height
- },
- plotOptions: {
- series: {
- color: '#26BB9C'
- }
- },
- title: {
- text: ''
- },
- series: [{
- data: chartData,
- id: 'series1'
- }],
- xAxis: {
- categories: labels
- },
- yAxis: {
- min: EMPTY_VALUE,
- tickInterval: 1,
- title: {
- text: ''
- },
- max: twoSmiles ? 5 : 6,
- labels: {
- style: {
- padding: '0 5px 5px 0',
- position: 'absolute',
- left: '10px',
- top: '-24px',
- },
- step: 1,
- useHTML: true,
- formatter: function () {
- if (twoSmiles) {
- return model.smileLabels2[this.value];
- } else {
- return model.smileLabels[this.value];
- }
- }
- }
- },
- legend: {
- enabled: false
- },
- /* tooltip:{
- formatter: function() {
- // fixme if 6 smiles = true
- if (twoSmiles) {
- if (this.y > 3) {
- return "Yes";
- } else {
- return "No";
- }
- }else{
- return this;
- }
- }
- },*/
- navigation: {
- buttonOptions: {
- enabled: false
- }
- }
- };
- if (twoSmiles) {
- chartObj.tooltip = {
- formatter: function () {
- if (this.y > BOTTOM_TWO_SMILE) {
- return "Yes";
- } else if (this.y < BOTTOM_TWO_SMILE + 1 && this.y > EMPTY_VALUE) {
- return "No";
- } else {
- return 'unanswered';
- }
- }
- };
- }
- return chartObj;
- }
- function _prepareMoodData(data, twoSmiles) {
- if (data && data.length) {
- var arr = data.map(function (val) {
- var temp = +val;
- if (twoSmiles) {
- if (temp >= MEDIUM_VALUE) {
- return UPPER_TWO_SMILE;
- } else if (temp < MEDIUM_VALUE && temp > EMPTY_VALUE) {
- return BOTTOM_TWO_SMILE;
- } else {
- return EMPTY_VALUE;
- }
- } else if (temp === 0) {
- return EMPTY_VALUE;
- }
- return temp;
- });
- return arr;
- }
- }
- /**
- * dynamically generate year list
- * @returns {Array}
- */
- function generateYearsArr() {
- var result = [];
- var currentYear = getCurrentYear();
- for (var i = currentYear; i > currentYear - 2; i--) {
- result.push(i);
- }
- return result;
- }
- /**
- * Sort moods arr per day
- * @param moodsArr
- * @returns {[number,number,number,number,number,number,number]}
- * @private
- */
- function _transformMoodsPerWeek(moodsArr, twoSmiles) {
- // var result = [0, 0, 0, 0, 0, 0, 0];
- var result = [1, 1, 1, 1, 1, 1, 1];
- if (twoSmiles) {
- moodsArr.forEach(function (el) {
- var date = new Date(el.created_at * 1000);
- var dayOfWeek = date.getDay();
- if (dayOfWeek === 0) {
- dayOfWeek = 7; //Sunday is 0;
- }
- if (el.level > 10) {
- if (el.level === MAX_TWO_VALUE) {
- result[dayOfWeek - 1] = UPPER_TWO_SMILE;
- } else {
- result[dayOfWeek - 1] = BOTTOM_TWO_SMILE;
- }
- } else {
- result[dayOfWeek - 1] = EMPTY_VALUE;
- }
- });
- return result;
- } else {
- moodsArr.forEach(function (el) {
- var date = new Date(el.created_at * 1000);
- var dayOfWeek = date.getDay();
- if (dayOfWeek === 0) {
- dayOfWeek = 7; //Sunday is 0;
- }
- if (el.level < 10 && el.level > EMPTY_VALUE) {
- result[dayOfWeek - 1] = el.level;
- } else {
- result[dayOfWeek - 1] = EMPTY_VALUE;
- }
- });
- return result;
- }
- }
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement