From 9239c2992f3d472fa0b466d4dd3682dc0e94bc54 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Mon, 22 Aug 2016 09:23:44 +0300 Subject: [PATCH] #ARC-25 Fixes bugs in stages project --- api/views.py | 11 + assets/js/chat.js | 136 ++-- chat/templates/chat.js | 743 ++---------------- chat/templates/chat1.js | 75 ++ chat/templates/chat2.js | 68 ++ chat/templates/chat_contractor.html | 120 +-- chat/templates/chat_customer.html | 162 ++-- chat/testapp.py | 18 +- reviews/models.py | 8 +- templates/partials/header.html | 7 +- users/templates/contractor_profile.html | 6 +- .../templatetags/contractor_indicator.html | 5 + users/templatetags/__init__.py | 0 users/templatetags/user_tags.py | 19 + 14 files changed, 442 insertions(+), 936 deletions(-) create mode 100644 chat/templates/chat1.js create mode 100644 chat/templates/chat2.js create mode 100644 users/templates/templatetags/contractor_indicator.html create mode 100644 users/templatetags/__init__.py diff --git a/api/views.py b/api/views.py index 502ba87..5c9909c 100755 --- a/api/views.py +++ b/api/views.py @@ -74,6 +74,17 @@ class NoteViewSet(ModelViewSet): filter_class = NoteFilterSet permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + def get_queryset(self): + queryset = Notes.objects.all() + search_param = self.request.query_params.get('operand', None) + recipent_id = self.request.query_params.get('recipent_id', None) + sender_id = self.request.query_params.get('sender_id', None) + if search_param: + # import code; code.interact(local=dict(globals(), **locals())) + if search_param == 'in': + queryset = queryset.filter(Q(sender__in=[sender_id,recipent_id]),Q(recipent__in=[sender_id,recipent_id])).order_by('created') + return queryset + class MessageViewSet(ModelViewSet): queryset = Message.objects.all() serializer_class = MessageSerializer diff --git a/assets/js/chat.js b/assets/js/chat.js index dd5a27e..1a91812 100644 --- a/assets/js/chat.js +++ b/assets/js/chat.js @@ -1,10 +1,6 @@ -/** - * Created by mukhtar on 04.07.16. - */ - - var SocketHandler = function () { - var url = 'ws://127.0.0.1:8888/chat'; + domain = domain.replace(':' + port, ''); + var url = 'ws://' + domain + ':8888/chat/' + userId + '/'; var sock = new WebSocket(url); var intervalId; sock.onopen = function () { @@ -16,11 +12,36 @@ var SocketHandler = function () { sock.onmessage = function (event) { console.log(event.data); var message = JSON.parse(event.data); - var inbox = document.getElementById('message-chat-space'); - inbox.innerHTML += '
' + - '

Иванов

13.0.2016
' + - '

' + message.msg + '

'; + var inbox; + if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') { + inbox = document.getElementById('message-chat-space'); + } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') { + inbox = document.getElementById('message-chat-order-space'); + } else if (message.answer_type == 'add_message_team') { + inbox = document.getElementById('message-chat-team-space'); + }else if (message.answer_type == 'approve_stages') { + alert('approve stages'); + } + if(inbox) { + inbox.innerHTML += '
' + + '

ВЫ

Сейчас
' + + '

' + message.msg + '

'; + } + + }; + + this.send_order_message = function (orderId) { + var data = { + "format_type": "order_message", + "order_id": orderId + } + sock.send(JSON.stringify(data)); + console.log(data); + }; + this.send_stages_approve = function(data){ + sock.send(JSON.stringify(data)); + console.log(data); }; this.send_contact_message = function (userId) { @@ -32,6 +53,12 @@ var SocketHandler = function () { console.log(data); }; + this.add_team_message = function (messageData) { + + console.log(messageData); + sock.send(JSON.stringify(messageData)); + } + this.add_contact_message = function (messageData) { console.log(messageData); sock.send(JSON.stringify(messageData)); @@ -49,82 +76,39 @@ var SocketHandler = function () { sock.send(JSON.stringify(data)); var textareaMessage = document.getElementById("message"); textareaMessage.value = ""; - } } -$(function () { - var socket = new SocketHandler(); - var form = document.getElementById('message_form'); - var csrftoken = getCookie('csrftoken'); - - // Вытащить сообщения для чата заказа - $('.order-block').on('click', function () { - var orderId = $(this).attr('data-id'); - $("#chat-contractor-order #orderId").val(orderId); - var inbox = document.getElementById('message-chat-order-space'); - inbox.innerHTML = ''; - $.ajax({ - url: '/api/message', - type: 'GET', - data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, - dataType: 'json', - success: function (json) { - $.each(json.results, function (i, v) { - inbox.innerHTML += '
' + - '

Иванов

13.0.2016
' + - '

' + v.text + '

'; - }); - } - }); - - }); +function csrfSafeMethod(method) { + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); +} - // Вытащить сообщения для конактов - $('.user-block').on('click', function () { - var userId = $(this).attr('data-id'); - $("#contact-chat-form #recipentId").val(userId); - var inbox = document.getElementById('message-chat-space'); - inbox.innerHTML = ''; +$(function(){ + $('#add-note-contractor').on('click', function (e) { + e.preventDefault(); $.ajax({ - url: '/api/message', - type: 'GET', - data: {csrfmiddlewaretoken: csrftoken, 'recipent__id': userId}, - dataType: 'json', - success: function (json) { - $.each(json.results, function (i, v) { - console.log(v.sender.id); - console.log(v.recipent.id); - inbox.innerHTML += '
' + - '

Иванов

13.0.2016
' + - '

' + v.text + '

'; - }); - } + url: '/api/note/', + type: 'POST', + beforeSend: function (xhr) { + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) + }, + data: $("#add-form-contractor-note").serialize(), + dataType: 'json', + success: function (json) { + console.log(json); + $("#add-form-contractor-note #chat2").val(""); + $('
  • ' + json.text + '
  • ').appendTo(".contractor-notes-block"); + }, + error: function (e) { + console.log('error'); + console.log(e); + } }); - - }); - - // Добавить сообщение для контакта - $('#contact-chat-add-message').on('click', function () { - var chatMessage = $("#chat").val(); - var recipentId = $("#recipentId").val(); - var senderId = $("#senderId").val(); - - socket.add_contact_message({ - "format_type": "add_message_contact", - "data": { - "sender_id": senderId, - "recipent_id": recipentId, - "chat_message": chatMessage, - } - }); - - $("#chat").val(""); }); +}); -}); diff --git a/chat/templates/chat.js b/chat/templates/chat.js index 1afb936..d7f0942 100644 --- a/chat/templates/chat.js +++ b/chat/templates/chat.js @@ -1,683 +1,74 @@ - - function csrfSafeMethod(method) { - // these HTTP methods do not require CSRF protection - return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); +var SocketHandler = function () { + + domain = domain.replace(':' + port, ''); + var url = 'ws://' + domain + ':8888/chat/' + userId + '/'; + var sock = new WebSocket(url); + var intervalId; + sock.onopen = function () { + console.log("Start connect"); + intervalId = setInterval(function () { + sock.send('{"dummy": 1}'); + }, 150000); + }; + sock.onmessage = function (event) { + console.log(event.data); + var message = JSON.parse(event.data); + var inbox; + if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') { + inbox = document.getElementById('message-chat-space'); + } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') { + inbox = document.getElementById('message-chat-order-space'); + } else if (message.answer_type == 'add_message_team') { + inbox = document.getElementById('message-chat-team-space'); } + inbox.innerHTML += '
    ' + + '

    ВЫ

    Сейчас
    ' + + '

    ' + message.msg + '

    '; - var SocketHandler = function () { - var userId = {{ request.user.pk }}; - var url = 'ws://127.0.0.1:8888/chat/' + userId + '/'; - var sock = new WebSocket(url); - var intervalId; - sock.onopen = function () { - console.log("Start connect"); - intervalId = setInterval(function () { - sock.send('{"dummy": 1}'); - }, 150000); - }; - sock.onmessage = function (event) { - console.log(event.data); - var message = JSON.parse(event.data); - var inbox; - - if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') { - inbox = document.getElementById('message-chat-space'); - } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') { - inbox = document.getElementById('message-chat-order-space'); - } else if(message.answer_type == 'add_message_team'){ - inbox = document.getElementById('message-chat-team-space'); - } - console.log(message.answer_type); - console.log(message.msg); - - inbox.innerHTML += '
    ' + - '

    ВЫ

    13.0.2016
    ' + - '

    ' + message.msg + '

    '; - }; - - this.send_contact_message = function (userId) { - var data = { - "format_type": "add_message", - "user_id": userId - } - sock.send(JSON.stringify(data)); - console.log(data); - }; - - this.add_team_message = function(messageData){ - - console.log(messageData); - sock.send(JSON.stringify(messageData)); - } - - this.add_contact_message = function (messageData) { - console.log(messageData); - sock.send(JSON.stringify(messageData)); - }; - - this.send_message = function (form) { - var elements = form.elements; - var data = {}; - var i = 0; - for (var i; i < elements.length; i++) { - if (elements[i].name == 'message') { - data[elements[i].name] = elements[i].value; - } - } - sock.send(JSON.stringify(data)); - var textareaMessage = document.getElementById("message"); - textareaMessage.value = ""; - } + }; + this.send_order_message = function (orderId) { + var data = { + "format_type": "order_message", + "order_id": orderId } - - $(function () { - var currentChatUser = {{ request.user.pk }}; - var socket = new SocketHandler(); - var form = document.getElementById('message_form'); - var csrftoken = getCookie('csrftoken'); - - setTimeout(function(){ - $(".user-block").first().trigger('click'); - }, 10); - - setTimeout(function(){ - $(".order-block").first().trigger('click'); - }, 100); - - setTimeout(function(){ - $(".team-order-block").first().trigger('click'); - }, 1000); - - - var url = '/work_sell/basic/'; - $('#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 = '

    '+ file.name+'

    '; - var document_send = $(htmlImg).appendTo("#document-send"); - }); - }, - 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'); - - - $("#approve-stages").on('click', function(){ - $(".stage-block-approve").each(function(){ - var stageId = $(this).attr('data-id'); - }); - }); - - $(".team-chat-user").on('click',function(e){ - e.stopPropagation(); - var recipentId = $(this).attr('data-id'); - $("#team-chat-form #recipentId").val(recipentId); - }); - - $(".team-order-block").on('click', function(){ - - $('.team-order-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 #orderId").val(orderId); - - var inbox = document.getElementById('message-chat-team-space'); - inbox.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 !== currentChatUser) { - senderName = v.sender.username; - className = ''; - } - inbox.innerHTML += '
    ' + - '

    ' + senderName + '

    ' + v.created + '
    ' + - '

    ' + v.text + '

    '; - }); - } - }); - - }); - - // Вытащить сообщения для чата заказа - $('.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'); - $("#chat-contractor-order #orderId").val(orderId); - $("#add-form-order-note #orderNote").val(orderId); - - $("#chat-contractor-order #recipentOrderId").val(recipentId); - $("#add-form-order-note #recipentNote").val(recipentId); - - var inbox = document.getElementById('message-chat-order-space'); - inbox.innerHTML = ''; - - $.ajax({ - url: '/api/message', - type: 'GET', - data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, - 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 + '

    '; - }); - } - }); - - $.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 += '
  • '+ v.text +'
  • '; - - }); - $(".notes-block").html(noteHtmlInbox); - } - }); - - $.ajax({ - url: '/api/stages/', - type: 'GET', - data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, - dataType: 'json', - success: function (json) { - console.log(json.results); - var htmlInbox = ""; - var stagesReservedHtml = ""; - if (json.results.length > 0) { - - $.each(json.results, function (i, v) { - if(v.is_paid){ - stagesReservedHtml += '
  • Сумма за этап '+ i +'.Зарезервирована.
  • '; - }else{ - stagesReservedHtml += '
  • Сумма за этап '+ i +'.Не зарезервирована.
  • '; - } - htmlInbox += '
    ' + - '

    Этап ' + v.pos + '' + v.name + '

    ' + - '

    Результаты этапа:' + v.result + '

    ' + - '

    '+ v.status+'

    ' + v.cost + '
    '; - }); - htmlInbox += '
    согласовать
    '; - - } - $("#order-stages").html(htmlInbox); - $(".stages-paid").html(stagesReservedHtml); - - } - }); - - }); - - $('#add-note-button').on('click', function(){ - $.ajax({ - url: '/api/note/', - type: 'POST', - beforeSend: function (xhr) { - xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) - }, - data:$("#add-form-order-note").serialize(), - dataType: 'json', - success: function (json) { - console.log(json); - $("#add-form-order-note #chat2").val(""); - - }, - error: function(e){ - console.log('error'); - console.log(e); - } - }); - }); - - // Вытащить сообщения для конактов - $('.user-block').on('click', function () { - var userId = $(this).attr('data-id'); - $("#contact-chat-form #recipentId").val(userId); - var inbox = document.getElementById('message-chat-space'); - inbox.innerHTML = ''; - $.ajax({ - url: '/api/message', - type: 'GET', - data: { - csrfmiddlewaretoken: csrftoken, - 'operand': 'in', - 'sender_id': currentChatUser, - 'recipent_id': userId - }, - dataType: 'json', - success: function (json) { - $.each(json.results, function (i, v) { - console.log(v.sender.id); - var senderName = 'Вы'; - var className = 'youChat'; - if (v.sender.id == userId) { - senderName = v.sender.username; - className = ''; - } - inbox.innerHTML += '
    ' + - '

    ' + senderName + '

    ' + v.created + '
    ' + - '

    ' + v.text + '

    '; - }); - } - }); - - }); - - //Добавить сообщение для исполнителей в группе - $("#add-team-chat-message").on('click', function(){ - var chatMessage = $("#team-chat-form #chatText").val(); - var recipentId = $("#team-chat-form #recipentId").val(); - var senderId = $("#team-chat-form #senderId").val(); - var teamId = $("#team-chat-form #teamId").val(); - var orderId = $("#team-chat-form #orderId").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": { - "sender_id": senderId, - "recipent_id": recipentId, - "chat_message": chatMessage, - "team_id": teamId, - "order_id": orderId, - } - }); - - - - $("#team-chat-form #chatText").val(""); - }); - - // Добавить сообщение для контакта - $('#contact-chat-add-message').on('click', function () { - var chatMessage = $("#chat").val(); - var recipentId = $("#recipentId").val(); - var senderId = $("#senderId").val(); - - socket.add_contact_message({ - "format_type": "add_message_contact", - "data": { - "sender_id": senderId, - "recipent_id": recipentId, - "chat_message": chatMessage, - } - }); - - var inbox = $('#message-chat-space').html(); - $('#message-chat-space').html(inbox + '
    ' + - '

    Вы

    Сейчас
    ' + - '

    ' + chatMessage + '

    '); - - $("#chat").val(""); - }); - - $('#order-chat-add-message').on('click', function () { - var chatMessage = $("#chat-contractor-order #chat").val(); - var recipentId = $("#chat-contractor-order #recipentOrderId").val(); - var senderId = $("#chat-contractor-order #senderOrderId").val(); - var orderId = $("#chat-contractor-order #orderId").val(); - - socket.add_contact_message({ - "format_type": "add_message_order", - "data": { - "sender_id": senderId, - "recipent_id": recipentId, - "chat_message": chatMessage, - "order_id": orderId, - - } - }); - - $("#chat-contractor-order #chat").val(""); - - }); - - }); - - - $(function () { - var currentChatUser = {{ request.user.pk }}; - var socket = new SocketHandler(); - var form = document.getElementById('message_form'); - var csrftoken = getCookie('csrftoken'); - setTimeout(function(){ - $(".user-block").first().trigger('click'); - }, 10); - - setTimeout(function(){ - $(".order-block").first().trigger('click'); - }, 100); - - $("#order-stages").on('click', "#addStagesForm", function(){ - $(".new-stages-form").each(function(i,v){ - console.log($(this).serialize()); - alert($(this).serialize()); - - $.ajax({ - url: '/api/stages/', - type: 'POST', - beforeSend: function (xhr) { - xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) - }, - data:$(this).serialize(), - dataType: 'json', - success: function (json) { - console.log(json); - }, - error: function(e){ - console.log('error'); - console.log(e); - } - }); - - }); - }); - - $('#order-stages-tab').on('change', '#countStage', function(){ - var countStage = parseInt($(this).val()); - var updateFormStages = $(".update-stages-form"); - - alert(updateFormStages.length); - alert(typeof updateFormStages.length); - var limitCount = countStage + 1; - for (var i = 2; i < limitCount; i++) { - var stageCopy = $("#stage1").clone().attr("id", "stage" + i).addClass("stages_form"); - $("#stage1").after(stageCopy); - } - }); - - $('.order-block').on('click', function () { - $("#chat-order-add").css("display", "block"); - $("#formsetStage").css("display","block"); - - $('.order-block').each(function () { - $(this).removeClass('orAct'); - }); - - $(this).addClass('orAct'); - var orderId = $(this).attr('data-id'); - var recipentId = $(this).attr('data-recipent-id'); - $("#chat-order-add #orderId").val(orderId); - $("#chat-order-add #recipentId").val(recipentId); - $(".orderStagesInput").val(orderId); - var inbox = document.getElementById('message-chat-order-space'); - inbox.innerHTML = ''; - $.ajax({ - url: '/api/message', - type: 'GET', - data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, - 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 + '

    '; - }); - } - }); - - $.ajax({ - url: '/api/stages/', - type: 'GET', - data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, - dataType: 'json', - success: function (json) { - var stageCount = json.results.length; - if (stageCount == 0){ - stageCountVal = 1; - }else{ - stageCountVal = stageCount; - } - - var htmlInbox = ""; - - var htmlInboxStage = '

    Какое кол-во этапов подразумевает работа? ' + - '

    '; - - if (stageCount == 0){ - htmlInboxStage += '
    ' + - '

    Этап 1

    ' + - '' + - '' + - ' />' + - '' + - '' + - '
    '; - } - var statusNotAgreed = true; - $.each(json.results, function (i, v) { - if (v.status == "not_agreed") { - htmlInbox += '
    ' + - '

    Этап

    ' + - '' + - '' + - '' + - '' + - '' + - '
    '; - } else { - statusNotAgreed = false; - htmlInboxStage = ""; - htmlInbox += '
    ' + - '

    Этап ' + v.pos + '' + v.name + '

    ' + - '

    Результаты этапа:' + v.result + '

    ' + - '

    до 16.03.2015

    ' + v.cost + '
    '; - - } - }); - - if (statusNotAgreed) { - htmlInbox += '
    Перейти в режим безопасной сделки' + - '
    ' + - 'отправить на согласование
    '; - } - htmlInbox = htmlInboxStage + htmlInbox; - $("#order-stages").html(htmlInbox); - } - }); - - - }); - - // Вытащить сообщения для конактов - $('.user-block').on('click', function () { - var userId = $(this).attr('data-id'); - $("#contact-chat-form #recipentId").val(userId); - var inbox = document.getElementById('message-chat-space'); - inbox.innerHTML = ''; - $.ajax({ - url: '/api/message', - type: 'GET', - data: { - csrfmiddlewaretoken: csrftoken, - 'operand': 'in', - 'sender_id': currentChatUser, - 'recipent_id': userId - }, - 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 += '
    ' + - '

    ' + senderName + '

    ' + v.created + '
    ' + - '

    ' + v.text + '

    '; - }); - } - }); - - }); - - $('#contact-chat-add-message').on('click', function () { - var chatMessage = $("#chat").val(); - var recipentId = $("#recipentId").val(); - var senderId = $("#senderId").val(); - - socket.add_contact_message({ - "format_type": "add_message_contact", - "data": { - "sender_id": senderId, - "recipent_id": recipentId, - "chat_message": chatMessage, - } - }); - - $("#chat").val(""); - }); - - $('#order-chat-add-message').on('click', function () { - var chatMessage = $("#chat-order-add #chat").val(); - var recipentId = $("#chat-order-add #recipentId").val(); - var senderId = $("#chat-order-add #senderId").val(); - var orderId = $("#chat-order-add #orderId").val(); - - socket.add_contact_message({ - "format_type": "add_message_order", - "data": { - "sender_id": senderId, - "recipent_id": recipentId, - "chat_message": chatMessage, - "order_id": orderId, - - } - }); - - $("#chat-order-add #chat").val(""); - }); - - }); - - var userId = '{{ request.user.pk }}'; - - var SocketHandler = function () { - var url = 'ws://127.0.0.1:8888/chat/' + userId + '/'; - var sock = new WebSocket(url); - var intervalId; - sock.onopen = function () { - console.log("Start connect"); - intervalId = setInterval(function () { - sock.send('{"dummy": 1}'); - }, 150); - }; - sock.onmessage = function (event) { - console.log(event.data); - var message = JSON.parse(event.data); - var inbox; - if (message.answer_type == 'contact') { - inbox = document.getElementById('message-chat-space'); - } else if (message.answer_type == 'order' || message.answer_type == 'add_order') { - inbox = document.getElementById('message-chat-order-space') - } - inbox.innerHTML += '
    ' + - '

    Иванов

    13.0.2016
    ' + - '

    ' + message.msg + '

    '; - - }; - - this.send_order_message = function (orderId) { - var data = { - "format_type": "order_message", - "order_id": orderId - } - sock.send(JSON.stringify(data)); - console.log(data); - }; - - this.send_contact_message = function (userId) { - var data = { - "format_type": "add_message", - "user_id": userId - } - sock.send(JSON.stringify(data)); - console.log(data); - }; - - this.add_contact_message = function (messageData) { - console.log(messageData); - sock.send(JSON.stringify(messageData)); - }; - - this.send_message = function (form) { - var elements = form.elements; - var data = {}; - var i = 0; - for (var i; i < elements.length; i++) { - if (elements[i].name == 'message') { - data[elements[i].name] = elements[i].value; - } - } - sock.send(JSON.stringify(data)); - var textareaMessage = document.getElementById("message"); - textareaMessage.value = ""; - + sock.send(JSON.stringify(data)); + console.log(data); + }; + + this.send_contact_message = function (userId) { + var data = { + "format_type": "add_message", + "user_id": userId + } + sock.send(JSON.stringify(data)); + console.log(data); + }; + + this.add_team_message = function (messageData) { + + console.log(messageData); + sock.send(JSON.stringify(messageData)); + } + + this.add_contact_message = function (messageData) { + console.log(messageData); + sock.send(JSON.stringify(messageData)); + }; + + this.send_message = function (form) { + var elements = form.elements; + var data = {}; + var i = 0; + for (var i; i < elements.length; i++) { + if (elements[i].name == 'message') { + data[elements[i].name] = elements[i].value; } } + sock.send(JSON.stringify(data)); + var textareaMessage = document.getElementById("message"); + textareaMessage.value = ""; + } + +} diff --git a/chat/templates/chat1.js b/chat/templates/chat1.js new file mode 100644 index 0000000..de9b61d --- /dev/null +++ b/chat/templates/chat1.js @@ -0,0 +1,75 @@ +var SocketHandler = function () { + var userId = {{ request.user.pk }}; + var domain = '{{ request.META.HTTP_HOST }}'; + var port = '{{ request.META.SERVER_PORT }}'; + domain = domain.replace(':' + port, ''); + var url = 'ws://' + domain + ':8888/chat/' + userId + '/'; + var sock = new WebSocket(url); + var intervalId; + sock.onopen = function () { + console.log("Start connect"); + intervalId = setInterval(function () { + sock.send('{"dummy": 1}'); + }, 150000); + }; + sock.onmessage = function (event) { + console.log(event.data); + var message = JSON.parse(event.data); + var inbox; + if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') { + inbox = document.getElementById('message-chat-space'); + } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') { + inbox = document.getElementById('message-chat-order-space'); + } else if (message.answer_type == 'add_message_team') { + inbox = document.getElementById('message-chat-team-space'); + } + inbox.innerHTML += '
    ' + + '

    ВЫ

    Сейчас
    ' + + '

    ' + message.msg + '

    '; + + }; + + this.send_order_message = function (orderId) { + var data = { + "format_type": "order_message", + "order_id": orderId + } + sock.send(JSON.stringify(data)); + console.log(data); + }; + + this.send_contact_message = function (userId) { + var data = { + "format_type": "add_message", + "user_id": userId + } + sock.send(JSON.stringify(data)); + console.log(data); + }; + + this.add_team_message = function (messageData) { + + console.log(messageData); + sock.send(JSON.stringify(messageData)); + } + + this.add_contact_message = function (messageData) { + console.log(messageData); + sock.send(JSON.stringify(messageData)); + }; + + this.send_message = function (form) { + var elements = form.elements; + var data = {}; + var i = 0; + for (var i; i < elements.length; i++) { + if (elements[i].name == 'message') { + data[elements[i].name] = elements[i].value; + } + } + sock.send(JSON.stringify(data)); + var textareaMessage = document.getElementById("message"); + textareaMessage.value = ""; + } + + } diff --git a/chat/templates/chat2.js b/chat/templates/chat2.js new file mode 100644 index 0000000..6283706 --- /dev/null +++ b/chat/templates/chat2.js @@ -0,0 +1,68 @@ +var SocketHandler = function () { + var domain = '{{ request.META.HTTP_HOST }}'; + var port = '{{ request.META.SERVER_PORT }}'; + domain = domain.replace(':' + port, ''); + var url = 'ws://' + domain + ':8888/chat/' + userId + '/'; + var sock = new WebSocket(url); + var intervalId; + sock.onopen = function () { + console.log("Start connect"); + intervalId = setInterval(function () { + sock.send('{"dummy": 1}'); + }, 150000); + }; + sock.onmessage = function (event) { + console.log(event.data); + var message = JSON.parse(event.data); + var inbox; + if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') { + inbox = document.getElementById('message-chat-space'); + } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') { + inbox = document.getElementById('message-chat-order-space'); + } else if (message.answer_type == 'add_message_team') { + inbox = document.getElementById('message-chat-team-space'); + } + inbox.innerHTML += '
    ' + + '

    Вы

    Сейчас
    ' + + '

    ' + message.msg + '

    '; + + }; + + this.send_order_message = function (orderId) { + var data = { + "format_type": "order_message", + "order_id": orderId + } + sock.send(JSON.stringify(data)); + console.log(data); + }; + + this.send_contact_message = function (userId) { + var data = { + "format_type": "add_message", + "user_id": userId + } + sock.send(JSON.stringify(data)); + console.log(data); + }; + + this.add_contact_message = function (messageData) { + console.log(messageData); + sock.send(JSON.stringify(messageData)); + }; + + this.send_message = function (form) { + var elements = form.elements; + var data = {}; + var i = 0; + for (var i; i < elements.length; i++) { + if (elements[i].name == 'message') { + data[elements[i].name] = elements[i].value; + } + } + sock.send(JSON.stringify(data)); + var textareaMessage = document.getElementById("message"); + textareaMessage.value = ""; + + } + } diff --git a/chat/templates/chat_contractor.html b/chat/templates/chat_contractor.html index 3b91f43..f651d77 100644 --- a/chat/templates/chat_contractor.html +++ b/chat/templates/chat_contractor.html @@ -80,9 +80,16 @@
    +
      +
    +

    Для заметок

    - - сохранить + + + + + сохранить +
    @@ -246,84 +253,14 @@ {% endblock %} {% block js_block %} - {# #} - + + + + {% endblock %} diff --git a/chat/testapp.py b/chat/testapp.py index 7de5d58..61fe46d 100644 --- a/chat/testapp.py +++ b/chat/testapp.py @@ -43,13 +43,25 @@ class ChatHandler(websocket.WebSocketHandler): if 'dummy' in parsed: return - self.add_message(parsed) + print(parsed['format_type']) + if 'approve_stages' in parsed['format_type']: + self.approve_stages(parsed) + else: + self.add_message(parsed) def on_close(self): self.waiters.remove((self.user_id, self)) -# waiter.write_message({'msg': message, 'answer_type': 'add_contact'}) -# waiter.write_message({'msg': message, 'answer_type': 'add_order'}) + @gen.coroutine + def approve_stages(self, data): + print(data) + sender_id = data['data']['sender_id'] + recipent_id = data['data']['recipent_id'] + order_id = data['data'].get('order_id') + answer_type = data['format_type'] + waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id) + for waiter in waiters: + waiter.write_message({'msg': 'Этапы обновлены', 'answer_type': answer_type}) @gen.coroutine def add_message(self, message_data): diff --git a/reviews/models.py b/reviews/models.py index 174e2c3..a4e68ba 100644 --- a/reviews/models.py +++ b/reviews/models.py @@ -14,11 +14,11 @@ class Review(models.Model): type = models.CharField(max_length=30, choices=TYPE_REVIEWS, default='neutral') text = models.TextField() created = models.DateTimeField(default=timezone.now) - target_customer = models.ForeignKey('users.User', related_name='reviews_by_contractor', null=True, blank=True) - target_contractor = models.ForeignKey('users.User', related_name='reviews_by_customer', null=True, blank=True) + target_customer = models.ForeignKey('users.User', related_name='reviews_by_customer', null=True, blank=True) + target_contractor = models.ForeignKey('users.User', related_name='reviews_by_contractor', null=True, blank=True) target_team = models.ForeignKey('users.Team', related_name='reviews_by_team', null=True, blank=True) - from_customer = models.ForeignKey('users.User', related_name='contractor_reviews', null=True, blank=True) - from_contractor = models.ForeignKey('users.User', related_name='customer_reviews', null=True, blank=True) + from_customer = models.ForeignKey('users.User', related_name='customer_reviews', null=True, blank=True) + from_contractor = models.ForeignKey('users.User', related_name='contractor_reviews', null=True, blank=True) from_team = models.ForeignKey('users.Team', related_name='team_reviews', null=True, blank=True) def __str__(self): diff --git a/templates/partials/header.html b/templates/partials/header.html index 1b34556..4624e77 100644 --- a/templates/partials/header.html +++ b/templates/partials/header.html @@ -1,5 +1,6 @@ {% load staticfiles %} {% load thumbnail %} +{% load user_tags %}
    @@ -122,11 +123,7 @@
    {% if request.user.is_contractor %} -
    -
    -
    -
    -

    45%

    + {% contractor_indicator request.user %} {% endif %}
    {% else %} diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html index 4bc6c16..706acdb 100644 --- a/users/templates/contractor_profile.html +++ b/users/templates/contractor_profile.html @@ -463,11 +463,11 @@
    - {% for review in contractor.contractor_reviews.all %} + {% for review in contractor.reviews_by_contractor.all %}

    - {{ review.get_sender }} + {{ review.get_sender }}

    {% if review.project.deal_type == 'secure_deal' %} @@ -478,7 +478,7 @@ положительный отзыв

    - {{ review.text }} + {{ review.text|safe }}

    diff --git a/users/templates/templatetags/contractor_indicator.html b/users/templates/templatetags/contractor_indicator.html new file mode 100644 index 0000000..1a123d7 --- /dev/null +++ b/users/templates/templatetags/contractor_indicator.html @@ -0,0 +1,5 @@ +
    +
    +
    +
    +

    {{ current_indicator }}%

    diff --git a/users/templatetags/__init__.py b/users/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/users/templatetags/user_tags.py b/users/templatetags/user_tags.py index a8bf069..4df1023 100644 --- a/users/templatetags/user_tags.py +++ b/users/templatetags/user_tags.py @@ -1,8 +1,27 @@ +import math from django import template + register = template.Library() +@register.inclusion_tag('templatetags/contractor_indicator.html', takes_context=True) +def contractor_indicator(context, contractor): + fields = ['avatar','cro','first_name','gender', + 'last_name', 'patronym', 'phone', + 'skype','website','location'] + indicator_sum = 0 + for f in fields: + if hasattr(contractor,f) and getattr(contractor, f): + indicator_sum += 1 + + current_indicator = math.ceil(math.ceil(100 / len(fields)) * indicator_sum) + current_indicator_px = math.ceil(current_indicator / 2) + return { + 'current_indicator': current_indicator, + 'current_indicator_px': current_indicator_px, + } + @register.filter('has_group') def has_group(user, group_name):