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

@ -6,7 +6,7 @@ from tornado.options import parse_command_line
import psycopg2 import psycopg2
import momoko import momoko
import json
settings = { settings = {
'cookie_secret': '__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__', 'cookie_secret': '__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__',
@ -19,12 +19,28 @@ settings = {
'server_traceback': True, 'server_traceback': True,
} }
class BaseHandler(web.RequestHandler): class BaseHandler(web.RequestHandler):
@property @property
def db(self): def db(self):
return self.application.db 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): class TutorialHandler(websocket.WebSocketHandler):
@property @property
@ -35,26 +51,51 @@ class TutorialHandler(websocket.WebSocketHandler):
def open(self, *args, **kwargs): def open(self, *args, **kwargs):
self.waiters.add(self) self.waiters.add(self)
# cursor = self.db.execute("SELECT * FROM users_user WHERE id=2")
# data = cursor.fetchone()
print({'hello': 'test'}) print({'hello': 'test'})
@gen.coroutine # @gen.coroutine
def on_message(self, message): def on_message(self, message):
parsed = escape.json_decode(message) parsed = escape.json_decode(message)
print(parsed)
if 'dummy' in parsed: if 'dummy' in parsed:
return 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: 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): def check_origin(self, origin):
return True return True
@ -71,6 +112,7 @@ class Application(web.Application):
def __init__(self): def __init__(self):
handlers = [ handlers = [
(r"/chat", TutorialHandler), (r"/chat", TutorialHandler),
(r"/test", TestHandler),
] ]
super().__init__(handlers=handlers, **settings) super().__init__(handlers=handlers, **settings)

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

Loading…
Cancel
Save