diff --git a/assets/css/extra.css b/assets/css/extra.css index 0be3fb1..c443207 100644 --- a/assets/css/extra.css +++ b/assets/css/extra.css @@ -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; +} diff --git a/assets/js/chat.js b/assets/js/chat.js index f38847e..06eacb9 100644 --- a/assets/js/chat.js +++ b/assets/js/chat.js @@ -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 += '
' + '

' + senderName + '

' + timeMessage + '
' + '

' + textMessage + '

'; + + 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 () { '

' + senderName + '

' + v.created + '' + '

' + v.text + '

'; }); + var height = inbox.scrollHeight; + inbox.scrollTop = height; } }); diff --git a/chat/chat.py b/chat/chat.py index 7c53ff4..79b38ad 100644 --- a/chat/chat.py +++ b/chat/chat.py @@ -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) " \ diff --git a/chat/serializers.py b/chat/serializers.py index d8c07cc..765bfd5 100644 --- a/chat/serializers.py +++ b/chat/serializers.py @@ -62,7 +62,7 @@ class MessageSerializer(ModelSerializer): out = obj.text documents = obj.documents.all() if len(documents)>0: - documents_str = '
'.join(['' + doc.file.name + '' for doc in documents]) + documents_str = '
'.join(['' + doc.file.name + '' for doc in documents]) out += '
' + documents_str return out diff --git a/chat/templates/chat_contractor.html b/chat/templates/chat_contractor.html index d5b083c..c33dc32 100644 --- a/chat/templates/chat_contractor.html +++ b/chat/templates/chat_contractor.html @@ -23,10 +23,9 @@ Заказчики - -
  • - Исполнители -
  • +
  • + Исполнители,Группы +
  • @@ -273,7 +272,7 @@ {% endfor %} {% for yteam in your_teams %} -
    +

    {{ yteam }} @@ -290,14 +289,10 @@

    Чаты: {% if request.user.pk != torder.team.owner.pk %} - {{ torder.team.owner.username }}, - {% endif %} - {% for tuser in yteam.contractors.all %} - {% if request.user.pk != tuser.pk %} - {{ tuser.username }}, + {{ yteam.owner.username }}, {% endif %} + {% for tuser in yteam.contractors.all %}{{ tuser.username }}, + {% endfor %}

    @@ -332,6 +327,26 @@
    +
    +

    Прикрепленные документы

    +
      + + Распечатать с помощью ресурса + +
      + +
      +
        +
      +

      Для заметок

      +
      + + + + + сохранить +
      +
      @@ -395,7 +410,7 @@ var currentValue = $("#documentSendIds").val(); currentValue += file.id + ';'; $("#documentSendIds").val(currentValue); - var htmlImg = '

      ' + file.name + '

      '; + var htmlImg = '' + file.name + ''; 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 @@ '

      ' + senderName + '

      ' + v.created + '' + '

      ' + v.text + '

      '; }); + 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 += '
    • '+ v.file+'
    • '; + }); + }, + 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 += '
    • ' + v.text + '
    • '; + + }); + $(".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 += '
      ' + + '

      ' + senderName + '

      ' + v.created + '
      ' + + '

      ' + v.text + '

      '; + }); + var height = inbox.scrollHeight; + inbox.scrollTop = height; + } + }); + }); + // Вытащить сообщения для чата заказа $('.order-block').on('click', function () { $('.order-block').each(function () { @@ -572,6 +664,9 @@ '

      ' + senderName + '

      ' + v.created + '' + '

      ' + v.text + '

      '; }); + + 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(""); + } }); diff --git a/chat/templates/chat_customer.html b/chat/templates/chat_customer.html index e58861a..1d9fc2d 100644 --- a/chat/templates/chat_customer.html +++ b/chat/templates/chat_customer.html @@ -61,8 +61,7 @@
      -
      -
      +
      @@ -699,7 +698,10 @@ inbox.innerHTML += '
      ' + '

      ' + senderName + '

      ' + v.created + '
      ' + '

      ' + v.text + '

      '; + }); + var height = inbox.scrollHeight; + inbox.scrollTop = height; } }); getStages(orderId,userId,recipentId, secureOrder);