Merge branch 'master' of http://code.brln.tv/diffusion/ARCH/archilance into artur
commit
8e6f1a054d
20 changed files with 894 additions and 1039 deletions
@ -0,0 +1,568 @@ |
|||||||
|
$(function () { |
||||||
|
var form = document.getElementById('message_form'); |
||||||
|
setTimeout(function () { |
||||||
|
$(".team-order-block").first().trigger('click'); |
||||||
|
}, 1000); |
||||||
|
|
||||||
|
var url = '/chat/create/'; |
||||||
|
|
||||||
|
$("#upload-document-team").bind('fileuploadsubmit', function (e, data) { |
||||||
|
data.formData = { |
||||||
|
sender: $("#team-chat-form #senderTeamId").val(), |
||||||
|
recipent: $("#team-chat-form #recipentTeamId").val(), |
||||||
|
order: $("#team-chat-form #orderTeamId").val(), |
||||||
|
team: $("#team-chat-form #teamId").val(), |
||||||
|
} |
||||||
|
console.log(data.formData); |
||||||
|
}); |
||||||
|
|
||||||
|
//Загрузка документов
|
||||||
|
$('#upload-document-team').fileupload({ |
||||||
|
url: url, |
||||||
|
crossDomain: false, |
||||||
|
beforeSend: function (xhr, settings) { |
||||||
|
$('#progress .progress-bar').css( |
||||||
|
'width', |
||||||
|
'0%' |
||||||
|
); |
||||||
|
if (!csrfSafeMethod(settings.type)) { |
||||||
|
xhr.setRequestHeader("X-CSRFToken", csrftoken); |
||||||
|
} |
||||||
|
}, |
||||||
|
dataType: 'json', |
||||||
|
done: function (e, data) { |
||||||
|
$.each(data.result.files, function (index, file) { |
||||||
|
var currentValue = $("#documentSendIds").val(); |
||||||
|
currentValue += file.id + ';'; |
||||||
|
$("#documentSendIds").val(currentValue); |
||||||
|
var htmlImg = '<a href="' + file.url + '" class="send-doc" data-id="' + file.id + '">' + file.name + '</a>'; |
||||||
|
var document_send = $(htmlImg).appendTo("#document-send"); |
||||||
|
}); |
||||||
|
}, |
||||||
|
fail: function (e) { |
||||||
|
console.log(e); |
||||||
|
}, |
||||||
|
progressall: function (e, data) { |
||||||
|
var progress = parseInt(data.loaded / data.total * 100, 10); |
||||||
|
$('#progress .progress-bar').css( |
||||||
|
'width', |
||||||
|
progress + '%' |
||||||
|
); |
||||||
|
} |
||||||
|
}).prop('disabled', !$.support.fileInput) |
||||||
|
.parent().addClass($.support.fileInput ? undefined : 'disabled'); |
||||||
|
|
||||||
|
// Согласование этапов
|
||||||
|
$("#order-stages").on('click', "#approve-stages", function (e) { |
||||||
|
e.preventDefault(); |
||||||
|
$(".stage-block-approve").each(function () { |
||||||
|
var stageId = $(this).attr('data-id'); |
||||||
|
$.ajax({ |
||||||
|
url: '/api/stages/' + stageId + '/', |
||||||
|
type: 'PATCH', |
||||||
|
beforeSend: function (xhr) { |
||||||
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
||||||
|
}, |
||||||
|
data: "status=in_process", |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
console.log(json); |
||||||
|
|
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
console.log('error'); |
||||||
|
console.log(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
var orderId = $(this).attr('data-order-id'); |
||||||
|
|
||||||
|
socket.send_stages_approve({ |
||||||
|
"format_type": "approve_stages", |
||||||
|
"data": { |
||||||
|
"sender_id": $(this).attr('data-sender-id'), |
||||||
|
"recipent_id": $(this).attr('data-recipent-id'), |
||||||
|
"order_id": orderId, |
||||||
|
"msg": "Исполнитель согласовал этапы для заказа " + orderId, |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
// Согласование этапов
|
||||||
|
$("#order-stages").on('click', "#cancel-stages", function (e) { |
||||||
|
e.preventDefault(); |
||||||
|
$(".stage-block-approve").each(function () { |
||||||
|
var stageId = $(this).attr('data-id'); |
||||||
|
$.ajax({ |
||||||
|
url: '/api/stages/' + stageId + '/', |
||||||
|
type: 'PATCH', |
||||||
|
beforeSend: function (xhr) { |
||||||
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
||||||
|
}, |
||||||
|
data: "status=cancel_approve", |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
console.log(json); |
||||||
|
|
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
console.log('error'); |
||||||
|
console.log(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
var orderId = $(this).attr('data-order-id'); |
||||||
|
|
||||||
|
socket.send_stages_approve({ |
||||||
|
"format_type": "approve_stages", |
||||||
|
"data": { |
||||||
|
"sender_id": $(this).attr('data-sender-id'), |
||||||
|
"recipent_id": $(this).attr('data-recipent-id'), |
||||||
|
"order_id": orderId, |
||||||
|
"msg": "Исполнитель отказался от текущих этапов " + orderId, |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
$(".team-chat-user").on('click', function (e) { |
||||||
|
e.stopPropagation(); |
||||||
|
var recipentId = $(this).attr('data-id'); |
||||||
|
$("#team-chat-form #recipentTeamId").val(recipentId); |
||||||
|
}); |
||||||
|
|
||||||
|
$(".team-order-block").on('click', function () { |
||||||
|
|
||||||
|
$('.team-order-block, .team-block').each(function () { |
||||||
|
$(this).removeClass('orAct'); |
||||||
|
}); |
||||||
|
$(this).addClass('orAct'); |
||||||
|
|
||||||
|
var teamId = $(this).attr('data-team-id'); |
||||||
|
var orderId = $(this).attr('data-order-id'); |
||||||
|
$("#team-chat-form #teamId").val(teamId); |
||||||
|
$("#team-chat-form #orderTeamId").val(orderId); |
||||||
|
|
||||||
|
$("#add-form-team-note #teamNote").val(teamId); |
||||||
|
$("#add-form-team-note #orderNote").val(orderId); |
||||||
|
|
||||||
|
|
||||||
|
var inbox = document.getElementById('message-chat-team-space'); |
||||||
|
inbox.innerHTML = ''; |
||||||
|
var docList = document.getElementById('documentTeamSpace'); |
||||||
|
docList.innerHTML = ''; |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/message', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken, 'team': teamId, 'order': orderId}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
var senderName = 'Вы'; |
||||||
|
var className = 'youChat'; |
||||||
|
if (v.sender.id !== userId) { |
||||||
|
senderName = v.sender.username; |
||||||
|
className = ''; |
||||||
|
} |
||||||
|
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + |
||||||
|
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + |
||||||
|
'<p class="textCommChat">' + v.text + '</p></div>'; |
||||||
|
}); |
||||||
|
var height = inbox.scrollHeight; |
||||||
|
inbox.scrollTop = height; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/documents', |
||||||
|
type: 'GET', |
||||||
|
data: { |
||||||
|
csrfmiddlewaretoken: csrftoken, |
||||||
|
'order': orderId, |
||||||
|
'team': teamId, |
||||||
|
'is_delete': false, |
||||||
|
'is_send': true, |
||||||
|
}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
docList.innerHTML += '<li style="word-break: break-all;"><a class="file-link" href="/chat/download/' + v.file + '">' + v.file + '</a><div class="remove-document" data-id="' + v.id + '" style="right:-10px;"></div></li>'; |
||||||
|
}); |
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
console.log(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/note/', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId, 'team': teamId}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
console.log(json.results); |
||||||
|
var noteHtmlInbox = ''; |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
noteHtmlInbox += '<li>' + v.text + '<li>'; |
||||||
|
|
||||||
|
}); |
||||||
|
$(".team-notes-block").html(noteHtmlInbox); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
$('.team-block').on('click', function () { |
||||||
|
$('.team-order-block, .team-block').each(function () { |
||||||
|
$(this).removeClass('orAct'); |
||||||
|
}); |
||||||
|
$(this).addClass('orAct'); |
||||||
|
|
||||||
|
var inbox = document.getElementById('message-chat-team-space'); |
||||||
|
inbox.innerHTML = ''; |
||||||
|
|
||||||
|
var docList = document.getElementById('documentTeamSpace'); |
||||||
|
docList.innerHTML = ''; |
||||||
|
|
||||||
|
var teamId = $(this).attr('data-team-id'); |
||||||
|
$("#team-chat-form #teamId").val(teamId); |
||||||
|
$("#add-form-team-note #teamNote").val(teamId); |
||||||
|
$("#team-chat-form #orderTeamId").val(""); |
||||||
|
$("#add-form-team-note #orderNote").val(""); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/message', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken, 'team': teamId, 'order__isnull': 'true'}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
var senderName = 'Вы'; |
||||||
|
var className = 'youChat'; |
||||||
|
if (v.sender.id !== userId) { |
||||||
|
senderName = v.sender.username; |
||||||
|
className = ''; |
||||||
|
} |
||||||
|
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + |
||||||
|
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + |
||||||
|
'<p class="textCommChat">' + v.text + '</p></div>'; |
||||||
|
}); |
||||||
|
var height = inbox.scrollHeight; |
||||||
|
inbox.scrollTop = height; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/documents', |
||||||
|
type: 'GET', |
||||||
|
data: { |
||||||
|
csrfmiddlewaretoken: csrftoken, |
||||||
|
'team': teamId, |
||||||
|
'is_delete': false, |
||||||
|
'is_send': true, |
||||||
|
}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
docList.innerHTML += '<li style="word-break: break-all;"><a class="file-link" href="/chat/download/' + v.file + '">' + v.file + '</a><div class="remove-document" data-id="' + v.id + '" style="right:-10px;"></div></li>'; |
||||||
|
}); |
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
console.log(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/note/', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken, 'team': teamId}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
console.log(json.results); |
||||||
|
var noteHtmlInbox = ''; |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
noteHtmlInbox += '<li>' + v.text + '<li>'; |
||||||
|
|
||||||
|
}); |
||||||
|
$(".team-notes-block").html(noteHtmlInbox); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
// Вытащить сообщения для чата заказа
|
||||||
|
$('.order-block').on('click', function () { |
||||||
|
$('.order-block').each(function () { |
||||||
|
$(this).removeClass('orAct'); |
||||||
|
}); |
||||||
|
$(this).addClass('orAct'); |
||||||
|
var orderId = $(this).attr('data-id'); |
||||||
|
var recipentId = $(this).attr('data-recipent-id'); |
||||||
|
var projectId = $(this).attr('data-project-id'); |
||||||
|
|
||||||
|
$("#chat-order-add #orderId").val(orderId); |
||||||
|
$("#add-form-order-note #orderNote").val(orderId); |
||||||
|
$("#orderArbitrationId").val(orderId); |
||||||
|
$("#projectReviewId").val(projectId); |
||||||
|
|
||||||
|
$("#chat-order-add #recipentId").val(recipentId); |
||||||
|
$("#targetCustomerId").val(recipentId); |
||||||
|
$("#add-form-order-note #recipentNote").val(recipentId); |
||||||
|
|
||||||
|
var docList = document.getElementById('documentOrderSpace'); |
||||||
|
var inbox = document.getElementById('message-chat-order-space'); |
||||||
|
inbox.innerHTML = ''; |
||||||
|
docList.innerHTML = ''; |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/message', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId, 'team__isnull': 'true'}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
var senderName = 'Вы'; |
||||||
|
var className = 'youChat'; |
||||||
|
if (v.sender.id !== userId) { |
||||||
|
senderName = v.sender.username; |
||||||
|
className = ''; |
||||||
|
} |
||||||
|
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + |
||||||
|
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + |
||||||
|
'<p class="textCommChat">' + v.text + '</p></div>'; |
||||||
|
}); |
||||||
|
|
||||||
|
var height = inbox.scrollHeight; |
||||||
|
inbox.scrollTop = height; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/documents', |
||||||
|
type: 'GET', |
||||||
|
data: { |
||||||
|
csrfmiddlewaretoken: csrftoken, |
||||||
|
'order': orderId, |
||||||
|
'is_delete': false, |
||||||
|
'is_send': true, |
||||||
|
}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
docList.innerHTML += '<li style="word-break: break-all;"><a class="file-link" href="/chat/download/' + v.file + '">' + v.file + '</a><div class="remove-document" data-id="' + v.id + '" style="right:-10px;"></div></li>'; |
||||||
|
}); |
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
console.log(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/note/', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
console.log(json.results); |
||||||
|
var noteHtmlInbox = ''; |
||||||
|
$.each(json.results, function (i, v) { |
||||||
|
noteHtmlInbox += '<li>' + v.text + '<li>'; |
||||||
|
|
||||||
|
}); |
||||||
|
$(".order-notes-block").html(noteHtmlInbox); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$.ajax({ |
||||||
|
url: '/api/orders/' + orderId + '/', |
||||||
|
type: 'GET', |
||||||
|
data: {csrfmiddlewaretoken: csrftoken}, |
||||||
|
dataType: 'json', |
||||||
|
}).then(function (data) { |
||||||
|
var htmlInbox = ""; |
||||||
|
var stagesReservedHtml = ""; |
||||||
|
var stagesPaidProcess = []; |
||||||
|
var stagesInWork = []; |
||||||
|
var stagesResults = data.stages; |
||||||
|
var statusNotAgreed = false; |
||||||
|
var stagesCompleted = []; |
||||||
|
if (stagesResults.length > 0) { |
||||||
|
$.each(stagesResults, function (i, v) { |
||||||
|
if (v.status == "completed") { |
||||||
|
stagesCompleted.push(v); |
||||||
|
} |
||||||
|
if (v.status == "not_agreed" || v.status == "send_approve") { |
||||||
|
statusNotAgreed = true; |
||||||
|
} |
||||||
|
if (!data.secure) { |
||||||
|
if (v.status == "in_process") { |
||||||
|
stagesInWork.push(v); |
||||||
|
|
||||||
|
} |
||||||
|
} else if ((v.status == "in_process") && (v.is_paid)) { |
||||||
|
stagesPaidProcess.push(v); |
||||||
|
stagesInWork.push(v); |
||||||
|
} |
||||||
|
|
||||||
|
if (data.secure) { |
||||||
|
if (v.is_paid) { |
||||||
|
stagesReservedHtml += '<li class="reserved">Сумма за этап ' + v.pos + '.Зарезервирована.</li>'; |
||||||
|
} else { |
||||||
|
stagesReservedHtml += '<li class="unreserved">Сумма за этап ' + v.pos + '.Не зарезервирована.</li>'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var statusName = ''; |
||||||
|
switch (v.status) { |
||||||
|
case 'not_agreed': |
||||||
|
statusName = 'Не согласован'; |
||||||
|
break; |
||||||
|
case 'send_approve': |
||||||
|
statusName = 'На согласовании'; |
||||||
|
break; |
||||||
|
case 'cancel_approve': |
||||||
|
statusName = 'Исполнитель отказался'; |
||||||
|
break; |
||||||
|
case 'in_process': |
||||||
|
statusName = 'В процессе'; |
||||||
|
break; |
||||||
|
case 'completed': |
||||||
|
statusName = 'Завершен'; |
||||||
|
break; |
||||||
|
} |
||||||
|
if (v.status == 'completed') { |
||||||
|
statusName = 'Завершен'; |
||||||
|
} |
||||||
|
|
||||||
|
htmlInbox += '<div data-id="' + v.id + '" class="numberStepp box-sizing stage-block-approve"><div class="insetNumStepp">' + |
||||||
|
'<p class="titleNumStepp"><span>Этап ' + v.pos + '</span>' + v.name + '</p>' + |
||||||
|
'<p class="textNumStepp">Результаты этапа:' + v.result + '</p><div>' + |
||||||
|
'<p> до ' + v.term + '</p><span>' + v.cost + ' <i class="fa fa-rub"></i></span></div><div><p>' + statusName + '</p></div></div></div>'; |
||||||
|
}); |
||||||
|
|
||||||
|
if (statusNotAgreed) { |
||||||
|
htmlInbox += '<div class="textAreaBlock2 FFD box-sizing disTab">' + |
||||||
|
'<a id="approve-stages" data-sender-id="{{ request.user.pk }}" data-recipent-id="' + recipentId + '"' + |
||||||
|
' data-order-id="' + orderId + '" href="#">согласовать</a>' + |
||||||
|
'<a id="cancel-stages" data-sender-id="{{ request.user.pk }}" data-recipent-id="' + recipentId + '"' + |
||||||
|
' data-order-id="' + orderId + '" href="#">отказаться</a>' + |
||||||
|
'</div>'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
$("#order-stages").html(htmlInbox); |
||||||
|
$(".stages-paid").html(stagesReservedHtml); |
||||||
|
if (data.secure) { |
||||||
|
$("#reserveSpace").show(); |
||||||
|
|
||||||
|
} else { |
||||||
|
$("#reserveSpace").hide(); |
||||||
|
} |
||||||
|
|
||||||
|
if (stagesInWork.length > 0) { |
||||||
|
$("#completeWork").show(); |
||||||
|
var stage = stagesInWork[0]; |
||||||
|
var stageWork = '<div class="numberStepp box-sizing">' + |
||||||
|
'<div class="insetNumStepp"><div><p>В работе ' + stage.name + '</p></div>' + |
||||||
|
'<div><p>Результат этапа : ' + stage.result + '</p></div>' + |
||||||
|
'<div><p>Срок сдачи ' + stage.term + ' <span>' + stage.cost + '<i class="fa fa-rub"></i></span></p></div></div></div>'; |
||||||
|
|
||||||
|
if (!stage.close_contractor) { |
||||||
|
stageWork += '<div class="textAreaBlock2 FFD box-sizing disTab"><a href="#" class="closeStage" data-sender-id="{{ request.user.pk }}" data-recipent-id="' + recipentId + '"' + |
||||||
|
' data-order-id="' + data.id + '" data-stage-id="' + stage.id + '">Завершить этап</a></div>'; |
||||||
|
} else { |
||||||
|
stageWork += '<div><p>Этап ожидает завершения статуса от заказчика</p><div>'; |
||||||
|
} |
||||||
|
if (data.secure) { |
||||||
|
stageWork += '<div class="textAreaBlock2 FFD box-sizing disTab"><a href="#" data-toggle="modal" data-target="#arbitration-add">Обратитьсяв арбитраж</a></div>'; |
||||||
|
} |
||||||
|
$("#stagesWork").html(stageWork); |
||||||
|
} else { |
||||||
|
$("#completeWork").hide(); |
||||||
|
} |
||||||
|
|
||||||
|
if (stagesCompleted.length == stagesResults.length && stagesCompleted.length > 0) { |
||||||
|
$("#leaveReview").show(); |
||||||
|
} |
||||||
|
|
||||||
|
if (data.status == 'completed') { |
||||||
|
$("#leaveReview").hide(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
$('#tab2').on('click', '.closeStage', function (e) { |
||||||
|
e.preventDefault(); |
||||||
|
var stageId = $(this).attr('data-stage-id'); |
||||||
|
var _this = $(this); |
||||||
|
$.ajax({ |
||||||
|
url: '/api/stages/' + stageId + '/', |
||||||
|
type: 'PATCH', |
||||||
|
beforeSend: function (xhr) { |
||||||
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
||||||
|
}, |
||||||
|
data: "close_contractor=True", |
||||||
|
dataType: 'json', |
||||||
|
success: function (json) { |
||||||
|
|
||||||
|
socket.send_stages_approve({ |
||||||
|
"format_type": "approve_stages", |
||||||
|
"data": { |
||||||
|
"sender_id": _this.attr('data-sender-id'), |
||||||
|
"recipent_id": _this.attr('data-recipent-id'), |
||||||
|
"order_id": _this.attr('data-order-id'), |
||||||
|
"msg": "Исполнитель завершил этап " + json.name, |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
console.log(json); |
||||||
|
}, |
||||||
|
error: function (e) { |
||||||
|
console.log('error'); |
||||||
|
console.log(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
//Добавить сообщение для исполнителей в группе
|
||||||
|
$("#add-team-chat-message").on('click', function (e) { |
||||||
|
e.preventDefault(); |
||||||
|
var chatMessage = $("#team-chat-form #chatText").val(); |
||||||
|
var recipentId = $("#team-chat-form #recipentTeamId").val(); |
||||||
|
var senderId = $("#team-chat-form #senderTeamId").val(); |
||||||
|
var teamId = $("#team-chat-form #teamId").val(); |
||||||
|
var orderId = $("#team-chat-form #orderTeamId").val(); |
||||||
|
var documentSendIds = $("#documentSendIds").val(); |
||||||
|
|
||||||
|
if (chatMessage) { |
||||||
|
var sendLinks = $("#document-send a"); |
||||||
|
var sendLinkIds = ""; |
||||||
|
$.each(sendLinks, function (i, v) { |
||||||
|
sendLinkIds += $(this).attr('data-id') + ';'; |
||||||
|
}); |
||||||
|
socket.add_team_message({ |
||||||
|
"format_type": "add_message_team", |
||||||
|
"data": { |
||||||
|
"sender_id": senderId, |
||||||
|
"recipent_id": recipentId, |
||||||
|
"chat_message": chatMessage, |
||||||
|
"team_id": teamId, |
||||||
|
"order_id": orderId, |
||||||
|
"document_send_links": sendLinkIds, |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
$("#team-chat-form #chatText").val(""); |
||||||
|
$("#document-send").html(""); |
||||||
|
$("#documentSendIds").val(""); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.7 on 2016-09-07 08:01 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
import django.db.models.deletion |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('users', '0015_user_phone2'), |
||||||
|
('chat', '0011_documents_is_delete'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AddField( |
||||||
|
model_name='notes', |
||||||
|
name='team', |
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='users.Team'), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.7 on 2016-09-07 12:56 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.conf import settings |
||||||
|
from django.db import migrations, models |
||||||
|
import django.db.models.deletion |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('chat', '0012_notes_team'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterField( |
||||||
|
model_name='notes', |
||||||
|
name='recipent', |
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='recipent_notes', to=settings.AUTH_USER_MODEL), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,19 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.7 on 2016-09-07 08:01 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('common', '0013_liveimageupload'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterModelOptions( |
||||||
|
name='liveimageupload', |
||||||
|
options={'verbose_name': 'Живая загрузка изображений', 'verbose_name_plural': 'Живая загрузка изображений'}, |
||||||
|
), |
||||||
|
] |
||||||
Loading…
Reference in new issue