Skip to content

Instantly share code, notes, and snippets.

@dennyjohnk
Created April 10, 2020 06:27
Show Gist options
  • Save dennyjohnk/5cbfa5c081c589d87155933ebf76ccad to your computer and use it in GitHub Desktop.
Save dennyjohnk/5cbfa5c081c589d87155933ebf76ccad to your computer and use it in GitHub Desktop.
(function () {
app.service('SlaService', function () {
var slaStatus = [
{
"status": "EXECUTED",
"responseColor": "#5cb85c",
"resolutionColor" : "#5cb85c",
"timeFormat": 1,
"friendlyName": "ON-TIME",
'helpTextResponse' : 'Ticket Responded in XX',
'helpTextResolution' : 'Ticket Resolved in XX'
},
{
"status": "BREACHED",
"responseColor": "#d9534f",
"resolutionColor" : "#d9534f",
"timeFormat": 2,
"friendlyName": "OVERDUE BY",
'helpTextResponse' : 'Ticket not responded within SLA and overdue by XX',
'helpTextResolution' : 'Ticket not resolved within SLA and overdue by XX'
},
{
"status": "BREACHED_EXECUTED",
"responseColor": "#98b10d",
"resolutionColor" : "#98b10d",
"timeFormat": 2,
"friendlyName": "OVERTIME BY",
'helpTextResponse' : 'Ticket Responded with overtime of XX',
'helpTextResolution' : 'Ticket Resolved with overtime of XX'
},
{
"status": "PAUSED",
"responseColor": "#5bc0de",
"resolutionColor" : "#5bc0de",
"timeFormat": 1,
"friendlyName": "PAUSED",
'helpTextResponse' : 'SLA is paused',
'helpTextResolution' : 'SLA is paused'
},
{
"status": "DEVIATED",
"responseColor": "#555555",
"resolutionColor": "#555555",
"timeFormat": 3,
"friendlyName": "SLA N/A",
'helpTextResponse' : 'Response time elapsed, SLA not applicable',
'helpTextResolution' : 'Resolution time elapsed, SLA not applicable'
},
{
"status": "RUNNING",
"responseColor": "#e2790d",
"resolutionColor": "#e2790d",
"timeFormat": 4,
"friendlyName": "DUE IN",
'helpTextResponse' : 'Ticket Response due in XX',
'helpTextResolution' : 'Ticket Resolution due in XX'
}
];
return {
generateSlaData: function (data) {
if (!data)
return;
var slaData = data;
var obj = slaStatus.filter(function (obj) { return obj.status === slaData.status; })
.map(function (item) {
var time = convertSlaTime(slaData.maxTime, slaData.usedTime, item.timeFormat);
var helpTextTime = convertSlaTimeForHelptext(slaData.maxTime, slaData.usedTime, item.timeFormat);
var data = {
'name': item.friendlyName,
'time': time,
'responseColor': item.responseColor,
'resolutionColor' : item.resolutionColor,
'helpTextResponse' : item.helpTextResponse.replace('XX', helpTextTime),
'helpTextResolution' : item.helpTextResolution.replace('XX', helpTextTime)
};
return data;
});
function convertSlaTime(maxTime, usedTime, timeFormat) {
if (timeFormat === 1) {
return minuteConverter(usedTime);
}
else if (timeFormat === 2) {
return minuteConverter(usedTime - maxTime);
}
else if (timeFormat === 3) {
return '- -';
}
else if (timeFormat === 4) {
return minuteConverter(maxTime - usedTime);
}
}
function minuteConverter(minutes) {
var day = Math.floor((minutes / 1440));
var hrs = Math.floor((minutes % 1440) / 60);
var min = getMin();
function getMin(){
var data = Math.round((minutes % 60));
if(data < 1)
return '< 1 ';
else
return data;
}
var dayString = '<span class="text-bold">' + day + '</span>' + '<span class="text-light">d </span>';
var hrsString = '<span class="text-bold">' + hrs + '</span>' + '<span class="text-light">h </span>';
var minString = '<span class="text-bold">' + min + '</span>' + '<span class="text-light">m </span>';
if (day === 0 & hrs !== 0 & min !== '< 1 ') {
return hrsString + minString;
}
else if (day === 0 & hrs !== 0 & min == '< 1 ') {
return hrsString;
}
else if (day === 0 & hrs === 0) {
return minString;
}
else if (day > 0 & min == '< 1 ') {
return dayString + hrsString;
}
else if (day > 0 ) {
return dayString + hrsString + minString;
}
}
/**
*
* Help text data
*/
function convertSlaTimeForHelptext(maxTime, usedTime, timeFormat) {
if (timeFormat === 1) {
return minuteConverterForHelptext(usedTime);
}
else if (timeFormat === 2) {
return minuteConverterForHelptext(usedTime - maxTime);
}
else if (timeFormat === 3) {
return '- -';
}
else if (timeFormat === 4) {
return minuteConverterForHelptext(maxTime - usedTime);
}
}
function minuteConverterForHelptext(minutes) {
var day = Math.floor((minutes / 1440));
var hrs = Math.floor((minutes % 1440) / 60);
var min = getMin();
function getMin(){
var data = Math.round((minutes % 60));
if(data < 1)
return '< 1 ';
else
return data;
}
var dayString = day + 'd ';
var hrsString = hrs + 'h ';
var minString = min + 'm ';
if (day === 0 & hrs !== 0 & min !== '< 1 ') {
return hrsString + minString;
}
else if (day === 0 & hrs !== 0 & min == '< 1 ') {
return hrsString;
}
else if (day === 0 & hrs === 0) {
return minString;
}
else if (day > 0 & min == '< 1 ') {
return dayString + hrsString;
}
else if (day > 0 ) {
return dayString + hrsString + minString;
}
}
return obj[0];
}
};
});
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment