|
|
|
|
@ -23,11 +23,11 @@ |
|
|
|
|
<a href="#tab2" data-toggle="tab">Заказчики</a> |
|
|
|
|
</li> |
|
|
|
|
|
|
|
|
|
{% if team_orders %} |
|
|
|
|
|
|
|
|
|
<li role="presentation"> |
|
|
|
|
<a href="#tab3" data-toggle="tab">Исполнители</a> |
|
|
|
|
</li> |
|
|
|
|
{% endif %} |
|
|
|
|
|
|
|
|
|
</ul> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
@ -142,9 +142,9 @@ |
|
|
|
|
<div class="col-lg-6 commChat"> |
|
|
|
|
<div id="message-chat-order-space"></div> |
|
|
|
|
<form id="chat-order-add"> |
|
|
|
|
<input type="text" id="orderId" name="orderId"> |
|
|
|
|
<input type="text" id="senderId" name="senderId" value="{{ request.user.pk }}"> |
|
|
|
|
<input type="text" id="recipentId" name="recipentId" value=""> |
|
|
|
|
<input type="hidden" id="orderId" name="orderId"> |
|
|
|
|
<input type="hidden" id="senderId" name="senderId" value="{{ request.user.pk }}"> |
|
|
|
|
<input type="hidden" id="recipentId" name="recipentId" value=""> |
|
|
|
|
<textarea id="chat" class="box-sizing"></textarea> |
|
|
|
|
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя отправить</p> |
|
|
|
|
<div class="bunChat"> |
|
|
|
|
@ -204,6 +204,15 @@ |
|
|
|
|
<!-- Arbitration add --> |
|
|
|
|
{% include 'arbitration_modal.html' %} |
|
|
|
|
<!-- --> |
|
|
|
|
|
|
|
|
|
<div class="col-lg-12 documentsChat"> |
|
|
|
|
<p>Входящие документы</p> |
|
|
|
|
<ul id="documentOrderSpace"></ul> |
|
|
|
|
{# <a href="javascript:void(0)">#} |
|
|
|
|
{# Распечатать с помощью ресурса#} |
|
|
|
|
{# </a>#} |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="textAreaBlock2 box-sizing disTab"> |
|
|
|
|
<ul class="notes-block"> |
|
|
|
|
</ul> |
|
|
|
|
@ -220,7 +229,7 @@ |
|
|
|
|
</div> |
|
|
|
|
<!-- End block Tab2--> |
|
|
|
|
|
|
|
|
|
{% if team_orders %} |
|
|
|
|
|
|
|
|
|
<!-- Tab3 groups block --> |
|
|
|
|
<div class="chatBlock disTab tab-pane fade" id="tab3"> |
|
|
|
|
<div class="col-lg-3 wrMessages"> |
|
|
|
|
@ -262,13 +271,47 @@ |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
{% endfor %} |
|
|
|
|
|
|
|
|
|
{% for yteam in your_teams %} |
|
|
|
|
<div class="team-block orderBlock box-sizing" data-id="{{ yteam.pk }}"> |
|
|
|
|
<span class="dimovChat"></span> |
|
|
|
|
<p class="titleOB"> |
|
|
|
|
{{ yteam }} |
|
|
|
|
</p> |
|
|
|
|
<div class="hideOBB disTab"> |
|
|
|
|
<p class="pOB"> |
|
|
|
|
<span>Владелец группы:</span> {{ yteam.owner }} |
|
|
|
|
</p> |
|
|
|
|
<ul class="listChat1"> |
|
|
|
|
{% for tuser in yteam.contractors.all %} |
|
|
|
|
<li>{{ tuser }}</li> |
|
|
|
|
{% endfor %} |
|
|
|
|
</ul> |
|
|
|
|
<p class="pOB"> |
|
|
|
|
<span>Чаты:</span> |
|
|
|
|
{% if request.user.pk != torder.team.owner.pk %} |
|
|
|
|
<span class="team-chat-user" |
|
|
|
|
data-id="{{ torder.team.owner.pk}}">{{ torder.team.owner.username }},</span> |
|
|
|
|
{% endif %} |
|
|
|
|
{% for tuser in yteam.contractors.all %} |
|
|
|
|
{% if request.user.pk != tuser.pk %} |
|
|
|
|
<span class="team-chat-user" |
|
|
|
|
data-id="{{ tuser.pk }}">{{ tuser.username }},</span> |
|
|
|
|
{% endif %} |
|
|
|
|
{% endfor %} |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
{% endfor %} |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-lg-6 commChat"> |
|
|
|
|
<div id="message-chat-team-space"></div> |
|
|
|
|
<form id="team-chat-form"> |
|
|
|
|
<input type="hidden" name="sender" id="senderTeamId" value="{{ request.user.pk }}"/> |
|
|
|
|
<input type="hidden" name="recipent" id="recipenTeamtId" value=""/> |
|
|
|
|
<input type="hidden" name="recipent" id="recipentTeamId" value=""/> |
|
|
|
|
<input type="hidden" name="order" id="orderTeamId"> |
|
|
|
|
<input type="hidden" name="team" id="teamId" value=""/> |
|
|
|
|
<input type="hidden" name="document-send" id="documentSendIds"/> |
|
|
|
|
@ -292,7 +335,7 @@ |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- End block Tab3--> |
|
|
|
|
{% endif %} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- order-info --> |
|
|
|
|
{% include 'order_info.html' %} |
|
|
|
|
@ -322,15 +365,20 @@ |
|
|
|
|
}, 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, |
|
|
|
|
formData: { |
|
|
|
|
sender: $("#team-chat-form #senderId").val(), |
|
|
|
|
recipent: $("#team-chat-form #recipentId").val(), |
|
|
|
|
team: $("#team-chat-form #teamId").val(), |
|
|
|
|
order: $("#team-chat-form #orderId").val(), |
|
|
|
|
}, |
|
|
|
|
crossDomain: false, |
|
|
|
|
beforeSend: function (xhr, settings) { |
|
|
|
|
$('#progress .progress-bar').css( |
|
|
|
|
@ -402,10 +450,48 @@ |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Согласование этапов |
|
|
|
|
$("#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 #recipentId").val(recipentId); |
|
|
|
|
$("#team-chat-form #recipentTeamId").val(recipentId); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$(".team-order-block").on('click', function () { |
|
|
|
|
@ -418,7 +504,7 @@ |
|
|
|
|
var teamId = $(this).attr('data-team-id'); |
|
|
|
|
var orderId = $(this).attr('data-order-id'); |
|
|
|
|
$("#team-chat-form #teamId").val(teamId); |
|
|
|
|
$("#team-chat-form #orderId").val(orderId); |
|
|
|
|
$("#team-chat-form #orderTeamId").val(orderId); |
|
|
|
|
|
|
|
|
|
var inbox = document.getElementById('message-chat-team-space'); |
|
|
|
|
inbox.innerHTML = ''; |
|
|
|
|
@ -464,6 +550,7 @@ |
|
|
|
|
$("#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 = ''; |
|
|
|
|
|
|
|
|
|
@ -487,6 +574,24 @@ |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$.ajax({ |
|
|
|
|
url:'/api/documents', |
|
|
|
|
type: 'GET', |
|
|
|
|
data:{ |
|
|
|
|
csrfmiddlewaretoken: csrftoken, |
|
|
|
|
'order': orderId |
|
|
|
|
}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json){ |
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
docList.innerHTML += '<li style="word-break: break-all;"><a class="file-link" href="'+ v.file_url +'">'+ 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', |
|
|
|
|
@ -508,7 +613,6 @@ |
|
|
|
|
type: 'GET', |
|
|
|
|
data:{csrfmiddlewaretoken: csrftoken}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
|
|
|
|
|
}).then(function(data){ |
|
|
|
|
var htmlInbox = ""; |
|
|
|
|
var stagesReservedHtml = ""; |
|
|
|
|
@ -522,7 +626,7 @@ |
|
|
|
|
if (v.status == "completed"){ |
|
|
|
|
stagesCompleted.push(v); |
|
|
|
|
} |
|
|
|
|
if(v.status == "not_agreed"){ |
|
|
|
|
if(v.status == "not_agreed" || v.status == "send_approve"){ |
|
|
|
|
statusNotAgreed = true; |
|
|
|
|
} |
|
|
|
|
if(!data.secure){ |
|
|
|
|
@ -544,6 +648,23 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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 = 'Завершен'; |
|
|
|
|
} |
|
|
|
|
@ -557,7 +678,10 @@ |
|
|
|
|
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></div>'; |
|
|
|
|
' 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>'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -661,18 +785,17 @@ |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
//Добавить сообщение для исполнителей в группе |
|
|
|
|
$("#add-team-chat-message").on('click', function () { |
|
|
|
|
$("#add-team-chat-message").on('click', function (e) { |
|
|
|
|
e.preventDefault(); |
|
|
|
|
var chatMessage = $("#team-chat-form #chatText").val(); |
|
|
|
|
var recipentId = $("#team-chat-form #recipentId").val(); |
|
|
|
|
var senderId = $("#team-chat-form #senderId").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 #orderId").val(); |
|
|
|
|
|
|
|
|
|
var orderId = $("#team-chat-form #orderTeamId").val(); |
|
|
|
|
var documentSendIds = $("#documentSendIds").val(); |
|
|
|
|
console.log(documentSendIds); |
|
|
|
|
var teamDocumentIds = documentSendIds.split(';'); |
|
|
|
|
|
|
|
|
|
teamDocumentIds.pop(); |
|
|
|
|
console.log(teamDocumentIds); |
|
|
|
|
socket.add_team_message({ |
|
|
|
|
"format_type": "add_message_team", |
|
|
|
|
"data": { |
|
|
|
|
@ -686,6 +809,7 @@ |
|
|
|
|
|
|
|
|
|
$("#team-chat-form #chatText").val(""); |
|
|
|
|
$("#document-send").html(""); |
|
|
|
|
$("#documentSendIds").val(""); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|