From 8ef7e8f1336d110d92cb9f0d29965eb8b603bb68 Mon Sep 17 00:00:00 2001
From: Mukhtar
Date: Tue, 23 Aug 2016 16:30:27 +0300
Subject: [PATCH] #ARC-16 Fixes
---
assets/js/chat.js | 16 ++++++---
chat/chat.py | 25 ++++++++++----
chat/serializers.py | 2 ++
chat/templates/chat_customer.html | 23 ++++---------
projects/templates/project_detail.html | 45 +++++++-------------------
projects/urls.py | 2 +-
projects/views.py | 9 ++++--
users/mixins.py | 7 ++--
wallets/forms.py | 1 +
wallets/signals.py | 2 +-
wallets/templates/score-detail.html | 17 +++++-----
wallets/views.py | 13 ++++++--
12 files changed, 82 insertions(+), 80 deletions(-)
diff --git a/assets/js/chat.js b/assets/js/chat.js
index 93c8c3b..1375c1f 100644
--- a/assets/js/chat.js
+++ b/assets/js/chat.js
@@ -1,6 +1,6 @@
var SocketHandler = function () {
domain = domain.replace(':' + port, '');
- var url = 'ws://' + domain + '/chat/' + userId + '/';
+ var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
var sock = new WebSocket(url);
var intervalId;
sock.onopen = function () {
@@ -23,9 +23,17 @@ var SocketHandler = function () {
alert('approve stages');
}
if (inbox) {
- inbox.innerHTML += '' +
- '
' + message.msg + '
';
+ var textMessage = message.msg;
+ var classMessage = 'youChat';
+ var senderName = 'Вы';
+ var timeMessage = message.msg_time;
+ if (message.sender_id != userId){
+ senderName = message.sender_name;
+ classMessage = '';
+ }
+ inbox.innerHTML += '' +
+ '
'+ senderName +'
' + timeMessage + '' +
+ '
' + textMessage + '
';
}
};
diff --git a/chat/chat.py b/chat/chat.py
index c4143ab..84897e0 100644
--- a/chat/chat.py
+++ b/chat/chat.py
@@ -1,4 +1,4 @@
-import os.path
+import html
from tornado import gen, web, websocket, escape, options
from tornado.ioloop import IOLoop
from tornado.httpserver import HTTPServer
@@ -33,7 +33,6 @@ class ChatHandler(websocket.WebSocketHandler):
if 'dummy' in parsed:
return
- print(parsed['format_type'])
if 'approve_stages' in parsed['format_type']:
self.approve_stages(parsed)
else:
@@ -60,6 +59,8 @@ class ChatHandler(websocket.WebSocketHandler):
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)
+ message = html.escape(message)
+ message = message.replace('\n', '
')
answer_type = message_data['format_type']
private_type = 'true' if not order_id and not team_id else 'false'
@@ -74,14 +75,26 @@ class ChatHandler(websocket.WebSocketHandler):
insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id," \
" private_type,team_id, order_id,is_delete,is_new) " \
- "VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5},{6},{7})".\
+ "VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5},{6},{7}) RETURNING id".\
format(message, sender_id, recipent_id, private_type, team_value,order_value, is_delete, is_new)
- yield self.db.execute(insert_sql)
- waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id)
+ cursor_list = yield dict(cursor=self.db.execute(insert_sql))
+ cursor = cursor_list.get('cursor')
+ result = cursor.fetchone()
+ message_id = result[0]
+ select_last_sql = "SELECT chat_message.id, chat_message.text, chat_message.created, chat_message.sender_id," \
+ "users_user.id, users_user.username FROM chat_message" \
+ " INNER JOIN users_user ON (chat_message.sender_id = users_user.id)" \
+ " WHERE chat_message.id = {0}".format(message_id)
+
+ cursor_msg = yield self.db.execute(select_last_sql)
+ msg_data = cursor_msg.fetchone()
+ sender_name = msg_data[5]
+ msg_time = msg_data[2].strftime("%Y-%m-%d %H:%M:%S")
+ 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': message, 'answer_type': answer_type})
+ waiter.write_message({'msg': message, 'msg_time': msg_time, 'sender_id': sender_id, 'sender_name': sender_name, 'answer_type': answer_type})
def check_origin(self, origin):
return True
diff --git a/chat/serializers.py b/chat/serializers.py
index cd43c8d..e4d8467 100644
--- a/chat/serializers.py
+++ b/chat/serializers.py
@@ -1,3 +1,4 @@
+from rest_framework import serializers
from rest_framework.serializers import ModelSerializer
from .models import Message, Notes, Documents
@@ -20,6 +21,7 @@ class DocumentsSerializer(ModelSerializer):
class MessageSerializer(ModelSerializer):
sender = UserSerializer()
recipent = UserSerializer()
+ created = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
class Meta:
model = Message
diff --git a/chat/templates/chat_customer.html b/chat/templates/chat_customer.html
index 12c4df7..a3db522 100644
--- a/chat/templates/chat_customer.html
+++ b/chat/templates/chat_customer.html
@@ -72,7 +72,7 @@
- отправить
+ отправить
@@ -108,7 +108,7 @@
Испонитель: {{ order.order.contractor.get_full_name }}
-
+
Полное описание заказа
@@ -134,7 +134,7 @@
Не более 10 файлов с общим объемом 500мб
- отправить
+ отправить
@@ -448,18 +448,7 @@
}
ii--;
});
-
-
}
-{# #}
-{# var updateFormStages = $(".update-stages-form");#}
-{# var limitCount = countStage + 1;#}
-{# for (var i = 2; i < limitCount; i++) {#}
-{# var stageCopy = $("#stage1").clone().attr("id", "stage" + i).addClass("stages_form");#}
-{# stageCopy.find('.stage-span-id').html(i);#}
-{# $("#stage1").after(stageCopy);#}
-{##}
-{# }#}
});
$('.order-block').on('click', function () {
@@ -545,7 +534,8 @@
});
- $('#contact-chat-add-message').on('click', function () {
+ $('#contact-chat-add-message').on('click', function (e) {
+ e.preventDefault();
var chatMessage = $("#chat").val();
var recipentId = $("#recipentId").val();
var senderId = $("#senderId").val();
@@ -566,7 +556,8 @@
alert('add review');
});
- $('#order-chat-add-message').on('click', function () {
+ $('#order-chat-add-message').on('click', function (e) {
+ e.preventDefault();
var chatMessage = $("#chat-order-add #chat").val();
var recipentId = $("#chat-order-add #recipentId").val();
var senderId = $("#chat-order-add #senderId").val();
diff --git a/projects/templates/project_detail.html b/projects/templates/project_detail.html
index e4d6105..2dcd2a3 100644
--- a/projects/templates/project_detail.html
+++ b/projects/templates/project_detail.html
@@ -36,21 +36,8 @@
{{ project.customer.get_full_name }} [{{ project.customer.username }}]
На сайте {{ project.created|naturaltime }}
-
- {% if not request.user.is_contractor %}
-
- {% endif %}
-
- {% if request.user.is_contractor %}
+
- Рейтинг: 0
@@ -64,27 +51,13 @@
- {% endif %}
-
-
- {% specialization_widget contractor.pk %}
-{#
#}
-{#
#}
-{# Специализации:#}
-{#
#}
-{#
#}
-
+
- -
- {{ project.created }}
-
- -
- {{ project.get_work_type_display }}
-
+ - {{ project.created }}
+ - {{ project.get_work_type_display }}
-
{% if project.cro %}