diff --git a/chat/templates/chat_contractor.html b/chat/templates/chat_contractor.html index b62488c..1308463 100644 --- a/chat/templates/chat_contractor.html +++ b/chat/templates/chat_contractor.html @@ -30,9 +30,8 @@

Контакты

- {% for contact in contractor_contacts %} -
+
mess-image
@@ -49,19 +48,17 @@
-
+
+

Иванов Петр Иванович

- - 13.0.2016 / 21:05 - + 13.0.2016 / 21:05

- 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

@@ -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.

- -
+
+
+ + + + +

Прикрепить файл

Не более 10 файлов с общим объемом 500мб
- отправить + + отправить +
+
+
@@ -165,12 +171,6 @@

Испонитель: {{ request.user.get_full_name }}

-{#
    #} -{#
  • Иванов Петр Иванович
  • #} -{#
  • Сергей Пенкин
  • #} -{#
  • Александ Смирнов
  • #} -{#
  • Иванов Петр
  • #} -{#
#}

Чаты: Иванов, Петров, Пенкин

@@ -258,25 +258,6 @@
-
- -

- Дизай-проект квартиры на набережной 200 m2 -

-
-

- Заказчик: Группа Икс -

-
    -
  • Иванов Петр Иванович
  • -
  • Сергей Пенкин
  • -
- - - Полное описание заказа - -
-
@@ -304,45 +285,6 @@

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

-
-
-

- Иванов Петр Иванович -

- - 13.0.2016 / 21:05 - -
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. -

-
-
-
-

- Вы -

- - 13.0.2016 / 21:05 - -
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. -

-
-
-
-

- Вы -

- - 13.0.2016 / 21:05 - -
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. -

-
@@ -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 += '

' + message.msg + '

'; + var message = JSON.parse(event.data); + var inbox = document.getElementById('message-chat-space'); + 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_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 = ""; } diff --git a/chat/testapp.py b/chat/testapp.py index dc79397..cfddf02 100644 --- a/chat/testapp.py +++ b/chat/testapp.py @@ -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) diff --git a/chat/views.py b/chat/views.py index 1590b8a..02a5960 100644 --- a/chat/views.py +++ b/chat/views.py @@ -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'