#ARC-16 Add chat customer order rooms

remotes/origin/setup
Mukhtar 10 years ago
parent fdfea6e3ee
commit 097d8a12b0
  1. 149
      chat/templates/chat_contractor.html
  2. 60
      chat/testapp.py
  3. 2
      chat/views.py

@ -30,9 +30,8 @@
<div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
{% for contact in contractor_contacts %}
<div class="message messd">
<div class="message messd user-block" data-id="{{ contact.recipent_id__id}}">
<div class="imgMess">
<img src="{% static 'img/mess.png' %}" alt="mess-image">
</div>
@ -49,19 +48,17 @@
</div>
</div>
<div class="col-lg-6 commChat">
<div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space">
<div class="col-lg-12 insetCommChat">
<div class="topCommChat">
<p class="nameCommChat">
Иванов Петр Иванович
</p>
<span>
13.0.2016 / 21:05
</span>
<span>13.0.2016 / 21:05</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
@ -76,16 +73,25 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<textarea id="chat" class="box-sizing"></textarea>
<div class="bunChat">
</div>
<form id="contact-chat-form">
<input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId" />
<input type="hidden" value="" name="recipentId" id="recipentId" />
<textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat">
<div class="setChat box-sizing">
<p>Прикрепить файл</p>
<span>
Не более 10 файлов с общим объемом 500мб
</span>
</div>
<a href="javascript:void(0)">отправить</a>
<a id="contact-chat-add-message" href="javascript:void(0)">отправить</a>
</div>
</form>
</div>
<div class="col-lg-3 wrChat1">
<div class="messageBlock box-sizing disTab">
@ -165,12 +171,6 @@
<p class="pOB">
<span>Испонитель:</span> {{ request.user.get_full_name }}
</p>
{# <ul class="listChat1">#}
{# <li>Иванов Петр Иванович</li>#}
{# <li>Сергей Пенкин</li>#}
{# <li>Александ Смирнов</li>#}
{# <li>Иванов Петр</li>#}
{# </ul>#}
<p class="pOB">
<span>Чаты:</span> Иванов, Петров, Пенкин
</p>
@ -258,25 +258,6 @@
</a>
</div>
</div>
<div class="orderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB disTab">
<p class="pOB">
<span>Заказчик:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
</ul>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
</div>
</div>
<div class="col-lg-6 commChat">
@ -304,45 +285,6 @@
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
<div class="col-lg-12 insetCommChat">
<div class="topCommChat">
<p class="nameCommChat">
Иванов Петр Иванович
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</div>
<textarea id="chat" class="box-sizing"></textarea>
<div class="bunChat">
<div class="setChat box-sizing">
@ -428,17 +370,32 @@
$('.order-block').on('click',function(){
var orderId = $(this).attr('data-id');
});
});
window.onload = function(){
$('.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 = '';
socket.send_contact_message(userId);
});
$('#contact-chat-add-message').on('click', function(){
var chatMessage = $("#chat").val();
var recipentId = $("#recipentId").val();
var senderId = $("#senderId").val();
{# form.onsubmit = function(e){#}
{# e.preventDefault();#}
{# console.log('submit click');#}
{# socket.send_message(form);#}
{# }#}
};
socket.add_contact_message({
"format_type": "add_message_contact",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
}
});
$("#chat").val("");
});
});
var SocketHandler = function(){
var url = 'ws://127.0.0.1:8888/chat';
@ -450,10 +407,28 @@
};
sock.onmessage = function(event){
console.log(event.data);
message = JSON.parse(event.data);
var inbox = document.getElementById('message_chat');
inbox.innerHTML += '<h2>' + message.msg + '</h2>';
var message = JSON.parse(event.data);
var inbox = document.getElementById('message-chat-space');
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' +
'<p class="textCommChat">' + message.msg +'</p></div>';
};
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 = {};
@ -464,7 +439,7 @@
}
}
sock.send(JSON.stringify(data));
var textareaMessage = document.getElementById("message");
var textareaMessage = document.getElementById("message");
textareaMessage.value = "";
}

@ -6,7 +6,7 @@ from tornado.options import parse_command_line
import psycopg2
import momoko
import json
settings = {
'cookie_secret': '__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__',
@ -19,12 +19,28 @@ settings = {
'server_traceback': True,
}
class BaseHandler(web.RequestHandler):
@property
def db(self):
return self.application.db
class TestHandler(web.RequestHandler):
@property
def db(self):
return self.application.db
@gen.coroutine
def get(self, *args, **kwargs):
sql = "SELECT text,created FROM chat_message"
cursor = yield self.db.execute(sql)
data = cursor.fetchall()
for d in data:
print(d[1])
print(type(d[1]))
print(str(d[1]))
class TutorialHandler(websocket.WebSocketHandler):
@property
@ -35,26 +51,51 @@ class TutorialHandler(websocket.WebSocketHandler):
def open(self, *args, **kwargs):
self.waiters.add(self)
# cursor = self.db.execute("SELECT * FROM users_user WHERE id=2")
# data = cursor.fetchone()
print({'hello': 'test'})
@gen.coroutine
# @gen.coroutine
def on_message(self, message):
parsed = escape.json_decode(message)
print(parsed)
if 'dummy' in parsed:
return
insert_sql = "INSERT INTO chat_message (id,text,created,order_id, user_id) VALUES (DEFAULT,'{0}',NOW(),6,4)".format(str(parsed['message']))
if parsed['format_type'] == 'add_message_contact':
self.add_message_for_contact(parsed['data']['chat_message'], parsed['data']['sender_id'], parsed['data']['recipent_id'])
else:
self.get_messages_from_order(parsed['user_id'])
yield self.db.execute(insert_sql)
def on_close(self):
self.waiters.remove(self)
cursor = yield self.db.execute("SELECT * FROM chat_message")
data = cursor.fetchall()
#
# insert_sql = "INSERT INTO chat_message (id,text,created,order_id, user_id) VALUES (DEFAULT,'{0}',NOW(),6,4)".format(str(parsed['message']))
# yield self.db.execute(insert_sql)
#
# # cursor = yield self.db.execute("SELECT * FROM chat_message")
# # data = cursor.fetchall()
# for waiter in self.waiters:
# waiter.write_message({'msg': parsed['message']})
@gen.coroutine
def add_message_for_contact(self, message, sender_id, recipent_id):
insert_sql = "INSERT INTO chat_message (id,text,created,order_id, sender_id,recipent_id, private_type) " \
"VALUES (DEFAULT,'{0}',NOW(),NULL,{1},{2},'true')".format(message,sender_id, recipent_id)
yield self.db.execute(insert_sql)
# last_select_sql = "SELECT text FROM chat_message "
# last_message = yield self.db.execute("SELECT ")
for waiter in self.waiters:
waiter.write_message({'msg': parsed['message']})
waiter.write_message({'msg': message})
@gen.coroutine
def get_messages_from_order(self, order_id):
sql = "SELECT text FROM chat_message WHERE recipent_id=" + order_id
cursor = yield self.db.execute(sql)
messages = cursor.fetchall()
for msg in messages:
for waiter in self.waiters:
waiter.write_message({'msg': msg[0]})
def check_origin(self, origin):
return True
@ -71,6 +112,7 @@ class Application(web.Application):
def __init__(self):
handlers = [
(r"/chat", TutorialHandler),
(r"/test", TestHandler),
]
super().__init__(handlers=handlers, **settings)

@ -15,7 +15,7 @@ class ChatUserView(View):
else:
orders = request.user.orders.all()
contractor_contacts = request.user.sender_messages.values('recipent_id').distinct('recipent_id').\
values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name')
values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name', 'recipent_id__id')
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by('created')
self.template_name = 'chat_contractor.html'

Loading…
Cancel
Save