#ARC-16 add groups for contractors

remotes/origin/PR-39
Mukhtar 9 years ago
parent 0e43a71f2b
commit c9440bf5b5
  1. 9
      assets/css/extra.css
  2. 11
      assets/js/chat.js
  3. 3
      chat/chat.py
  4. 2
      chat/serializers.py
  5. 159
      chat/templates/chat_contractor.html
  6. 6
      chat/templates/chat_customer.html

@ -112,7 +112,7 @@
color: #777620; color: #777620;
} }
#document-send-contact a, #document-send-order a { #document-send-contact a, #document-send-order a , #document-send a {
float: left; float: left;
font-family: 'pfdintextcomppro-regular', sans-serif; font-family: 'pfdintextcomppro-regular', sans-serif;
color: #373737; color: #373737;
@ -138,3 +138,10 @@
.documentsChat > p { .documentsChat > p {
font-size: 20px; font-size: 20px;
} }
#message-chat-order-space, #message-chat-team-space {
height: 312px;
display: block;
overflow: auto;
}

@ -9,6 +9,7 @@ var SocketHandler = function () {
sock.send('{"dummy": 1}'); sock.send('{"dummy": 1}');
}, 15000); }, 15000);
}; };
sock.onmessage = function (event) { sock.onmessage = function (event) {
console.log(event.data); console.log(event.data);
var message = JSON.parse(event.data); var message = JSON.parse(event.data);
@ -48,6 +49,10 @@ var SocketHandler = function () {
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + classMessage + '"><div class="topCommChat">' + inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + classMessage + '"><div class="topCommChat">' +
'<p class="nameCommChat">' + senderName + '</p> <span>' + timeMessage + '</span></div>' + '<p class="nameCommChat">' + senderName + '</p> <span>' + timeMessage + '</span></div>' +
'<p class="textCommChat">' + textMessage + '</p></div>'; '<p class="textCommChat">' + textMessage + '</p></div>';
var height = inbox.scrollHeight;
inbox.scrollTop = height;
inbox.animate({scrollTop: height});
} }
}; };
@ -126,8 +131,8 @@ $(function () {
}, 10); }, 10);
setTimeout(function () { setTimeout(function () {
$(".order-block").last().trigger('click'); $(".order-block").first().trigger('click');
}, 100); }, 500);
} }
@ -281,6 +286,8 @@ $(function () {
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>'; '<p class="textCommChat">' + v.text + '</p></div>';
}); });
var height = inbox.scrollHeight;
inbox.scrollTop = height;
} }
}); });

@ -57,6 +57,7 @@ class ChatHandler(websocket.WebSocketHandler):
sender_id = message_data['data']['sender_id'] sender_id = message_data['data']['sender_id']
recipent_id = message_data['data']['recipent_id'] recipent_id = message_data['data']['recipent_id']
order_id = message_data['data'].get('order_id', None) order_id = message_data['data'].get('order_id', None)
team_id = message_data['data'].get('team_id', None) team_id = message_data['data'].get('team_id', None)
message = message_data['data'].get('chat_message', None) message = message_data['data'].get('chat_message', None)
docs_send_links = message_data['data'].get('document_send_links', None) docs_send_links = message_data['data'].get('document_send_links', None)
@ -73,7 +74,7 @@ class ChatHandler(websocket.WebSocketHandler):
if team_value and not recipent_id: if team_value and not recipent_id:
recipent_id = sender_id recipent_id = sender_id
order_value = "NULL" if order_id is None else order_id order_value = "NULL" if order_id is None or not order_id else order_id
insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id," \ insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id," \
" private_type,team_id, order_id,is_delete,is_new) " \ " private_type,team_id, order_id,is_delete,is_new) " \

@ -62,7 +62,7 @@ class MessageSerializer(ModelSerializer):
out = obj.text out = obj.text
documents = obj.documents.all() documents = obj.documents.all()
if len(documents)>0: if len(documents)>0:
documents_str = '<br />'.join(['<a href="'+doc.file.url+'">' + doc.file.name + '</a>' for doc in documents]) documents_str = '<br />'.join(['<a target="_blank" href="'+doc.file.url+'">' + doc.file.name + '</a>' for doc in documents])
out += '<br />' + documents_str out += '<br />' + documents_str
return out return out

@ -23,10 +23,9 @@
<a href="#tab2" data-toggle="tab">Заказчики</a> <a href="#tab2" data-toggle="tab">Заказчики</a>
</li> </li>
<li role="presentation">
<li role="presentation"> <a href="#tab3" data-toggle="tab">Исполнители,Группы</a>
<a href="#tab3" data-toggle="tab">Исполнители</a> </li>
</li>
</ul> </ul>
</div> </div>
@ -273,7 +272,7 @@
{% endfor %} {% endfor %}
{% for yteam in your_teams %} {% for yteam in your_teams %}
<div class="team-block orderBlock box-sizing" data-id="{{ yteam.pk }}"> <div class="team-block orderBlock box-sizing" data-team-id="{{ yteam.pk }}">
<span class="dimovChat"></span> <span class="dimovChat"></span>
<p class="titleOB"> <p class="titleOB">
{{ yteam }} {{ yteam }}
@ -290,14 +289,10 @@
<p class="pOB"> <p class="pOB">
<span>Чаты:</span> <span>Чаты:</span>
{% if request.user.pk != torder.team.owner.pk %} {% if request.user.pk != torder.team.owner.pk %}
<span class="team-chat-user" <span class="team-chat-user" data-id="{{ yteam.owner.pk}}">{{ yteam.owner.username }},</span>
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 %} {% endif %}
{% for tuser in yteam.contractors.all %}<span class="team-chat-user" data-id="{{ tuser.pk }}">{{ tuser.username }},</span>
{% endfor %} {% endfor %}
</p> </p>
@ -332,6 +327,26 @@
</div> </div>
<div class="col-lg-3 wrstepschat"> <div class="col-lg-3 wrstepschat">
<div class="col-lg-12 documentsChat">
<p>Прикрепленные документы</p>
<ul id="documentTeamSpace"></ul>
<a href="{% url 'common:create' %}">
Распечатать с помощью ресурса
</a>
</div>
<div class="textAreaBlock2 box-sizing disTab">
<ul class="notes-block">
</ul>
<p>Для заметок</p>
<form id="add-form-team-note">
<textarea id="chat2" name="text"></textarea>
<input type="hidden" name="order" id="orderNote" value=""/>
<input type="hidden" name="sender" id="senderNote" value="{{ request.user.pk }}"/>
<input type="hidden" name="recipent" id="recipentNote" value=""/>
<a href="#" id="add-note-button">сохранить</a>
</form>
</div>
</div> </div>
</div> </div>
<!-- End block Tab3--> <!-- End block Tab3-->
@ -395,7 +410,7 @@
var currentValue = $("#documentSendIds").val(); var currentValue = $("#documentSendIds").val();
currentValue += file.id + ';'; currentValue += file.id + ';';
$("#documentSendIds").val(currentValue); $("#documentSendIds").val(currentValue);
var htmlImg = '<p>' + file.name + '</p>'; var htmlImg = '<a href="'+ file.url+'" class="send-doc" data-id="'+ file.id +'">' + file.name + '</a>';
var document_send = $(htmlImg).appendTo("#document-send"); var document_send = $(htmlImg).appendTo("#document-send");
}); });
}, },
@ -496,7 +511,7 @@
$(".team-order-block").on('click', function () { $(".team-order-block").on('click', function () {
$('.team-order-block').each(function () { $('.team-order-block, .team-block').each(function () {
$(this).removeClass('orAct'); $(this).removeClass('orAct');
}); });
$(this).addClass('orAct'); $(this).addClass('orAct');
@ -508,6 +523,8 @@
var inbox = document.getElementById('message-chat-team-space'); var inbox = document.getElementById('message-chat-team-space');
inbox.innerHTML = ''; inbox.innerHTML = '';
var docList = document.getElementById('documentTeamSpace');
docList.innerHTML = '';
$.ajax({ $.ajax({
url: '/api/message', url: '/api/message',
@ -526,11 +543,86 @@
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></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="'+ 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',
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>';
});
$(".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 teamId = $(this).attr('data-team-id');
$("#team-chat-form #teamId").val(teamId);
$("#team-chat-form #orderTeamId").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 !== currentChatUser) {
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><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;
}
});
});
// Вытащить сообщения для чата заказа // Вытащить сообщения для чата заказа
$('.order-block').on('click', function () { $('.order-block').on('click', function () {
$('.order-block').each(function () { $('.order-block').each(function () {
@ -572,6 +664,9 @@
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + '<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>'; '<p class="textCommChat">' + v.text + '</p></div>';
}); });
var height = inbox.scrollHeight;
inbox.scrollTop = height;
} }
}); });
@ -796,23 +891,29 @@
var teamId = $("#team-chat-form #teamId").val(); var teamId = $("#team-chat-form #teamId").val();
var orderId = $("#team-chat-form #orderTeamId").val(); var orderId = $("#team-chat-form #orderTeamId").val();
var documentSendIds = $("#documentSendIds").val(); var documentSendIds = $("#documentSendIds").val();
var teamDocumentIds = documentSendIds.split(';');
teamDocumentIds.pop(); if(chatMessage) {
socket.add_team_message({ var sendLinks = $("#document-send a");
"format_type": "add_message_team", var sendLinkIds = "";
"data": { $.each(sendLinks, function(i, v){
"sender_id": senderId, sendLinkIds += $(this).attr('data-id') + ';';
"recipent_id": recipentId, });
"chat_message": chatMessage, socket.add_team_message({
"team_id": teamId, "format_type": "add_message_team",
"order_id": orderId, "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(""); $("#team-chat-form #chatText").val("");
$("#document-send").html(""); $("#document-send").html("");
$("#documentSendIds").val(""); $("#documentSendIds").val("");
}
}); });

@ -61,8 +61,7 @@
</div> </div>
</div> </div>
<div class="col-lg-6 commChat" id="contact-chat"> <div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space"> <div id="message-chat-space"></div>
</div>
<form id="contact-chat-form"> <form id="contact-chat-form">
<input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderContactId"/> <input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderContactId"/>
<input type="hidden" name="recipentId" id="recipentContactId"> <input type="hidden" name="recipentId" id="recipentContactId">
@ -699,7 +698,10 @@
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
'<p class="nameCommChat">' + senderName + '</p><span>' + v.created + '</span></div>' + '<p class="nameCommChat">' + senderName + '</p><span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>'; '<p class="textCommChat">' + v.text + '</p></div>';
}); });
var height = inbox.scrollHeight;
inbox.scrollTop = height;
} }
}); });
getStages(orderId,userId,recipentId, secureOrder); getStages(orderId,userId,recipentId, secureOrder);

Loading…
Cancel
Save