remotes/origin/PR-39
ArturBaybulatov 9 years ago
commit e8c52ad55a
  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;
}
#document-send-contact a, #document-send-order a {
#document-send-contact a, #document-send-order a , #document-send a {
float: left;
font-family: 'pfdintextcomppro-regular', sans-serif;
color: #373737;
@ -138,3 +138,10 @@
.documentsChat > p {
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}');
}, 15000);
};
sock.onmessage = function (event) {
console.log(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">' +
'<p class="nameCommChat">' + senderName + '</p> <span>' + timeMessage + '</span></div>' +
'<p class="textCommChat">' + textMessage + '</p></div>';
var height = inbox.scrollHeight;
inbox.scrollTop = height;
inbox.animate({scrollTop: height});
}
};
@ -126,8 +131,8 @@ $(function () {
}, 10);
setTimeout(function () {
$(".order-block").last().trigger('click');
}, 100);
$(".order-block").first().trigger('click');
}, 500);
}
@ -281,6 +286,8 @@ $(function () {
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></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']
recipent_id = message_data['data']['recipent_id']
order_id = message_data['data'].get('order_id', None)
team_id = message_data['data'].get('team_id', None)
message = message_data['data'].get('chat_message', 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:
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," \
" private_type,team_id, order_id,is_delete,is_new) " \

@ -62,7 +62,7 @@ class MessageSerializer(ModelSerializer):
out = obj.text
documents = obj.documents.all()
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
return out

@ -23,10 +23,9 @@
<a href="#tab2" data-toggle="tab">Заказчики</a>
</li>
<li role="presentation">
<a href="#tab3" data-toggle="tab">Исполнители</a>
</li>
<li role="presentation">
<a href="#tab3" data-toggle="tab">Исполнители,Группы</a>
</li>
</ul>
</div>
@ -273,7 +272,7 @@
{% endfor %}
{% 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>
<p class="titleOB">
{{ yteam }}
@ -290,14 +289,10 @@
<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>
<span class="team-chat-user" data-id="{{ yteam.owner.pk}}">{{ yteam.owner.username }},</span>
{% endif %}
{% for tuser in yteam.contractors.all %}<span class="team-chat-user" data-id="{{ tuser.pk }}">{{ tuser.username }},</span>
{% endfor %}
</p>
@ -332,6 +327,26 @@
</div>
<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>
<!-- End block Tab3-->
@ -395,7 +410,7 @@
var currentValue = $("#documentSendIds").val();
currentValue += file.id + ';';
$("#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");
});
},
@ -496,7 +511,7 @@
$(".team-order-block").on('click', function () {
$('.team-order-block').each(function () {
$('.team-order-block, .team-block').each(function () {
$(this).removeClass('orAct');
});
$(this).addClass('orAct');
@ -508,6 +523,8 @@
var inbox = document.getElementById('message-chat-team-space');
inbox.innerHTML = '';
var docList = document.getElementById('documentTeamSpace');
docList.innerHTML = '';
$.ajax({
url: '/api/message',
@ -526,11 +543,86 @@
'<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="'+ 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').each(function () {
@ -572,6 +664,9 @@
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></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 orderId = $("#team-chat-form #orderTeamId").val();
var documentSendIds = $("#documentSendIds").val();
var teamDocumentIds = documentSendIds.split(';');
teamDocumentIds.pop();
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,
}
});
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("");
$("#team-chat-form #chatText").val("");
$("#document-send").html("");
$("#documentSendIds").val("");
}
});

@ -61,8 +61,7 @@
</div>
</div>
<div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space">
</div>
<div id="message-chat-space"></div>
<form id="contact-chat-form">
<input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderContactId"/>
<input type="hidden" name="recipentId" id="recipentContactId">
@ -699,7 +698,10 @@
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;
}
});
getStages(orderId,userId,recipentId, secureOrder);

Loading…
Cancel
Save