Skip to content

Instantly share code, notes, and snippets.

@Rijen
Last active November 13, 2015 12:47
Show Gist options
  • Save Rijen/1e9de2844d480d0ecc00 to your computer and use it in GitHub Desktop.
Save Rijen/1e9de2844d480d0ecc00 to your computer and use it in GitHub Desktop.
var __users = {}
var otrs = {
ticket: {
get: function (id, callback) {
var method = 'ticket/get'
var params = {
'TicketID': id,
'DynamicFields': 1,
'AllArticles': 1
}
otrs.call(method, params, function (data) {
callback(data)
})
},
search: function (phone, callback) {
if (phone.length == 11) {
var method = 'ticket/search'
var params = {
'DynamicField_phone': {
'Equals': phone
},
TicketLastChangeTimeNewerMinutes: 7 * (24 * 60), //7 дней в минутах
OrderBy: 'Down',
SortBy: 'Age'
}
otrs.call(method, params, function (data) {
callback(data)
})
}
},
add: function () {
$('#loader').show()
var method = 'ticket/add'
var queue = $('#inputType>option:selected')[0]
var type_id = $(queue).attr('-data-id')
var comment = $('#comment-area').val()
if (type_id == 10 || type_id == 11) {
comment += '\n\
\n\
-------\n\
Номер маршрута: ' + $('#routeNumber').val() + '\n\
Предприятие: ' + $('#companyName').html() + '\n\
Госномер: ' + $('#stateNumber').val() + '\n\
'
}
if (type_id == 11) {
comment += '\n\
Тип жалобы: ' + $('[name=inlineRadioOptions]:checked').val()
}
var customer = $('#inputEmail').val() ? $('#inputEmail').val() : 'manager'
var params = {
'Ticket': {
'Title': 'Заявитель: ' + $('#inputName').val(),
'QueueID': type_id,
// 'QueueID': 1,
'StateID': $('[name=optionsRadios]:checked').val(),
'PriorityID': 3,
'CustomerUser': customer,
'OwnerID': $('select[name=owner]').val()
},
'Article': {
'Subject': '--',
'Body': comment,
'ContentType': 'text/plain; charset=utf8'
},
'DynamicField': [
{
'Name': 'phone',
'Value': $('#caller_id').html()
},
{
'Name': 'recall',
'Value': $('#inputPhone').val()
},
{
'Name': 'name',
'Value': $('#inputName').val()
},
]
}
otrs.call(method, params, function (data) {
$('#loader').hide()
$('#added_task').append('Зарегистрирована новая заявка под номером '+data.TicketNumber+'<br/>').fadeIn()
console.log(data)
})
}
},
user: {
list: function (callback) {
if (!this.data) {
var method = 'user/list'
otrs.call(method, {}, function (data) {
var new_data = {}
$.map(data, function (item, id) {
var internal = 0
var finds = item.UserComment.match(/<вн:(\d{3})>/)
if (finds) {
internal = finds[1]
}
new_data[id] = {
'roles': item.Roles,
'name': item.UserFullname,
'uid': item.UserID,
'login': item.UserLogin,
'comment': item.UserComment,
'internal': internal
}
})
callback(new_data)
})
}
}
},
call: function (method, params, callback) {
console.log('call [' + method + ']')
$.post('caller.php', {'method': method, 'params': params}, function (data) {
callback(data)
}, 'json')
},
load_form: function () {
$('#loader').show()
var id = $('#inputType').val()
$.get('forms/' + id + '.html', function (data) {
$('#wrapper').html(data)
if ($.inArray(id, ['complaints', 'technical_issues']) >= 0) {
otrs.fill_routes()
}
otrs.fill_owners2call(id)
})
},
fill_routes: function () {
$.map(_routes, function (group) {
$.map(group.data, function (company) {
$.map(company.routes, function (route) {
$('#routeNumber').append('<option var="' + route + '" -data-role="' + group.role + '" -data-name=\'' + company.name + '\'>' + route + '</option>')
$('option[value=' + route + ']')
.prop('-data-role', group.role)
.prop('-data-name', company.name)
})
})
})
var options = $('select#routeNumber option');
var arr = options.map(function (_, o) {
return {t: $(o).text(), v: o.value};
}).get();
arr.sort(function (o1, o2) {
return parseInt(o1.t) > parseInt(o2.t) ? 1 : parseInt(o1.t) < parseInt(o2.t) ? -1 : 0;
});
options.each(function (i, o) {
o.value = arr[i].v;
$(o).text(arr[i].t);
});
},
fill_route_data: function () {
var route = $('#routeNumber>option:selected')[0]
$('#companyName').html($(route).attr('-data-name'))
otrs.fill_owners2call($(route).attr('-data-role'))
},
fill_owners2call: function (use_role) {
$('select[name=owner]').html('')
$('select#owner2call').html('')
$('select#owner2call').append($('<option/>', {value: 0, html: 'Не звонить'}))
if($.inArray(use_role,['educational_institutions','social_protection'])>=0){
$('select#owner2call').append($('<option/>', {value: 810, html: 'Удаление/Редактирование (вн 810)'}))
}
if($.inArray(use_role,['social_protection'])>=0){
$('select#owner2call').append($('<option/>', {value: 888, html: 'Техподдержка РСТК (вн 888)'}))
}
var use_group = [use_role]
otrs.user.list(function (users) {
// var users = __users
$.map(users, function (item) {
var find = false
$.map(item.roles, function (role) {
if ($.inArray(role, use_group) >= 0) {
find = true
}
})
if (find) {
$('select#owner2call').append($('<option/>', {value: item.internal, html: item.name + ' (вн ' + item.internal + ')'}))
$('select[name=owner]').append($('<option/>', {value: item.uid, html: item.name + ' (вн ' + item.internal + ')'}))
}
})
$('#loader').hide()
})
},
show_ticket: function (id) {
$('#myModal').modal('show')
otrs.ticket.get(id, function (res) {
var ticket = res.Ticket[0];
console.log(ticket)
$('#myModal #Created').html(ticket.Created)
$('#myModal #Queue').html(ticket.Queue)
$('#myModal #Owner').html(ticket.Owner)
$('#myModal #DynamicField_phone').html(ticket.DynamicField_phone)
$('#myModal #DynamicField_recall').html(ticket.DynamicField_recall)
$('#myModal #DynamicField_name').html(ticket.DynamicField_name)
$('#articles').html('')
$.map(ticket.Article, function (item, id) {
var msg = '<div class="panel panel-default">\n\
<div class="panel-heading">\n\
<h3 class="panel-title">\n\
<span id="sequence">#' + id + '</span>\n\
<span id="From"><b>' + item.From + '</b></span>\n\
<span id="article-1-Created" class="text-right small" style="display:block; float:right;">' + item.Created + '</span></h3>\n\
</div>\n\
<div class="panel-body">\n\
<p id="Body">' + item.Body.replace(/([^>])\n/g, '$1<br/>') + '</p></div></div>'
$('#articles').append(msg)
})
})
}
}
$(function () {
var statuses = {
1: {
't': 'Новая',
's': 'warning'
},
2: {
't': 'Решена',
's': 'success'
},
3: {
't': 'Закрыта, не решена',
's': 'danger'
},
4: {
't': 'В работе',
's': 'warning'
},
5: {
't': 'Удалена',
's': 'danger'
},
6: {
't': 'Ожидает напоминания',
's': 'info'
},
7: {
't': 'Ожидает автозакрытия',
's': 'info'
},
8: {
't': 'Ожидает автозакрытия',
's': 'info'
}
}
$('#loader').show()
otrs.load_form()
$('#inputPhone').val(parse_getp().phone)
$('#caller_id').html(parse_getp().phone)
otrs.ticket.search($('#caller_id').html(), function (data) {
otrs.ticket.get(data.TicketID, function (res) {
$.map(res.Ticket, function (item) {
$('#t_history').append('\n\
<tr onclick="otrs.show_ticket(' + item.TicketID + ')" class="' + statuses[item.StateID]['s'] + '"><td>' + item.TicketNumber + '</td><td>' + statuses[item.StateID]['t'] + '</td><td>' +item.Owner + '</td></tr>')
})
})
})
})
function parse_getp() {
var q = window.location.search.substring(1)
var r = {}
var t1 = q.split('&')
$.map(t1, function (t) {
var t2 = t.split('=')
r[t2[0]] = t2[1]
})
return r
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment