From 508d440a2a65f62e3748acae3d92ce6e97c657a9 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Sun, 3 Jul 2016 12:26:09 +0300 Subject: [PATCH] #ARC-16 Add messages access --- chat/models.py | 9 + chat/templates/chat_customer.html | 314 +++++++++++++++++++++++++++++- chat/testapp.py | 38 ++-- chat/views.py | 12 +- 4 files changed, 339 insertions(+), 34 deletions(-) diff --git a/chat/models.py b/chat/models.py index 63517e5..2b5d506 100644 --- a/chat/models.py +++ b/chat/models.py @@ -20,4 +20,13 @@ class Message(models.Model): verbose_name = 'Сообщение' verbose_name_plural = 'Сообщения' +class Notes(models.Model): + text = models.TextField() + + + def __str__(self): + return self.text + class Meta: + verbose_name = 'Сообщение' + verbose_name_plural = 'Сообщения' diff --git a/chat/templates/chat_customer.html b/chat/templates/chat_customer.html index e149a39..8408b7e 100644 --- a/chat/templates/chat_customer.html +++ b/chat/templates/chat_customer.html @@ -1,10 +1,304 @@ - - - - - Title - - - - - +{% extends 'partials/base.html' %} +{% load staticfiles %} +{% block content %} +{% include 'partials/header.html' %} +
+
+
+

Чат

+
+
+
+
+
+ +
+
+
+
+
+
+
+

Контакты

+ {% for contact in customer_contacts %} + + + {% endfor %} + +
+
+
+
+
+
+ + + + +
+
+

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

+ + Не более 10 файлов с общим объемом 500мб + +
+ + отправить + +
+
+ +
+
+
+

Контакты

+ +
+
+
+ Начало: + Срок сдачи: +
+
+ 13.0.2016 + 13.0.2016 +
+
+
+

Входящие документы

+
    +
  • + Архитерурное 2.jpg + 7мб +
    +
  • +
+ + Распечатать с помощью ресурса + +
+
+

Для заметок

+ + сохранить +
+ + +
+
+
+
+ +
+

Заказы

+ {% for order in orders %} +
+ +

+ {{ order }} +

+
+

+ Испонитель: {{ order.order.contractor.get_full_name }} +

+{#

#} +{# Чаты: Иванов, Петров, Пенкин#} +{#

#} + + + Полное описание заказа + +
+
+ {% endfor%} +
+ +
+
+
+ {% for msg in chat_messages %} +{#
#} +{#
#} +{#

{{ msg.sender.get_full_name }}

#} +{# {{ msg.created }}#} +{#
#} +{#

{{ msg }}

#} +{#
#} + {% endfor %} +
+
+ + + + +
+
+

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

+ + Не более 10 файлов с общим объемом 500мб + +
+ отправить +
+
+
+
+
+

Для заметок

+ + сохранить +
+ +
+
+
+ {% include 'partials/footer.html' %} +
+
+ +{% endblock %} + +{% block js_block %} + + +{% endblock %} diff --git a/chat/testapp.py b/chat/testapp.py index cfddf02..97edcfc 100644 --- a/chat/testapp.py +++ b/chat/testapp.py @@ -41,8 +41,8 @@ class TestHandler(web.RequestHandler): print(type(d[1])) print(str(d[1])) -class TutorialHandler(websocket.WebSocketHandler): +class TutorialHandler(websocket.WebSocketHandler): @property def db(self): return self.application.db @@ -56,20 +56,20 @@ class TutorialHandler(websocket.WebSocketHandler): # @gen.coroutine def on_message(self, message): parsed = escape.json_decode(message) - print(parsed) - if 'dummy' in parsed: return if parsed['format_type'] == 'add_message_contact': - self.add_message_for_contact(parsed['data']['chat_message'], parsed['data']['sender_id'], parsed['data']['recipent_id']) + self.add_message_for_contact(parsed['data']['chat_message'], parsed['data']['sender_id'], + parsed['data']['recipent_id']) + elif parsed['format_type'] == 'order_message': + self.get_messages_from_order_chat(parsed['order_id']) else: self.get_messages_from_order(parsed['user_id']) def on_close(self): self.waiters.remove(self) - # # 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) # @@ -81,12 +81,10 @@ class TutorialHandler(websocket.WebSocketHandler): @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) + "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': message}) + waiter.write_message({'msg': message, 'answer_type': 'add_contact'}) @gen.coroutine def get_messages_from_order(self, order_id): @@ -95,20 +93,22 @@ class TutorialHandler(websocket.WebSocketHandler): messages = cursor.fetchall() for msg in messages: for waiter in self.waiters: - waiter.write_message({'msg': msg[0]}) + waiter.write_message({'msg': msg[0], 'answer_type': 'order'}) + + @gen.coroutine + def get_messages_from_order_chat(self, order_id): + sql = "SELECT text FROM chat_message WHERE order_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], 'answer_type': 'contact'}) def check_origin(self, origin): return True - # @gen.coroutine - # def get(self): - # cursor = yield self.db.execute("SELECT * FROM users_user WHERE id=2") - # data = cursor.fetchone() - # print(data[0]) - # self.finish() class Application(web.Application): - def __init__(self): handlers = [ (r"/chat", TutorialHandler), @@ -128,12 +128,10 @@ if __name__ == '__main__': ioloop=ioloop, ) future = application.db.connect() - ioloop.add_future(future, lambda f: ioloop.stop()) + ioloop.add_future(future, lambda f: ioloop.stop()) ioloop.start() future.result() http_server = HTTPServer(application) http_server.listen(8888, 'localhost') ioloop.start() - - diff --git a/chat/views.py b/chat/views.py index 02a5960..1e6ce01 100644 --- a/chat/views.py +++ b/chat/views.py @@ -6,20 +6,24 @@ from .models import Message class ChatUserView(View): - template_name = 'chat_user.html' + template_name = '' def get(self, request, *args, **kwargs): if request.user.is_authenticated() and request.user.is_customer(): - # orders + customer_contacts = Message.objects.values('sender_id','recipent_id').filter(Q(recipent_id=6)| Q(sender_id=6)).distinct() + chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)) + orders = request.user.projects.select_related('order').all() self.template_name = 'chat_customer.html' + return render(request, self.template_name, {'customer_contacts': customer_contacts, + 'chat_messages': chat_messages, + 'orders': orders}) 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', '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' - - return render(request, self.template_name, {'orders': orders, + return render(request, self.template_name, {'orders': orders, 'contractor_contacts': contractor_contacts, 'chat_messages': chat_messages})