diff --git a/archilance/settings/dev.py b/archilance/settings/dev.py
index 9603670..a3da647 100644
--- a/archilance/settings/dev.py
+++ b/archilance/settings/dev.py
@@ -3,7 +3,6 @@ from .base import *
# AUTH_PASSWORD_VALIDATORS = []
# INSTALLED_APPS += ['debug_toolbar',]
-
try:
from .local import *
except ImportError:
diff --git a/chat/app.py b/chat/app.py
deleted file mode 100644
index dedfad5..0000000
--- a/chat/app.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from tornado import web, ioloop, options, websocket
-import os.path
-
-clients = []
-messages = []
-
-class Application(web.Application):
- def __init__(self):
- handlers = [
- (r"/", MainHandler),
- (r"/chat", ChatHandler),
- ]
- settings = dict(
- cookie_secret="tes12323hhdfdfre9312313",
- template_path=os.path.join(os.path.dirname(__file__), "templates"),
- static_path=os.path.join(os.path.dirname(__file__), "static"),
- xsrf_cookies=True,
- )
- super().__init__(handlers, **settings)
-
-
-class MainHandler(web.RequestHandler):
-
- def get(self):
- self.render("index.html")
-
-
-class ChatHandler(websocket.WebSocketHandler):
-
- def open(self):
- print("Web socket opened")
- clients.append(self)
-
- def on_message(self, message):
- messages.append({'msg':message})
- for msg in messages:
- self.write_message(msg)
-
- def check_origin(self, origin):
- return True
-
-
-def main():
- options.parse_command_line()
- app = Application()
- app.listen(8888)
- ioloop.IOLoop.current().start()
-
-
-
-if __name__ == '__main__':
- main()
-
-
-
-
- @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'})
diff --git a/chat/app2.py b/chat/app2.py
deleted file mode 100644
index 96ede4c..0000000
--- a/chat/app2.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import logging
-import datetime
-import os.path
-from redis import StrictRedis
-from tornado import web, websocket, escape, options, locale, ioloop
-from tornado.httpserver import HTTPServer
-
-r = StrictRedis(db=1)
-
-logger = logging.getLogger('handlers')
-
-settings = {
- 'cookie_secret': '__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__',
- 'template_path': os.path.join(os.path.dirname(__file__), 'templates'),
- 'static_path': os.path.join(os.path.dirname(__file__), 'static'),
- 'login_url': '/login',
- 'xsrf_cookies': True,
- 'debug': True,
- 'autoreload': True,
- 'server_traceback': True,
-}
-
-
-class Application(web.Application):
- def __init__(self):
- handlers = [
- (r"/",ChannelHandler),
- (r"/chatsocket/(?P\w+)/", ChatSocketHandler)
- ]
- super().__init__(handlers=handlers, **settings)
-
-
-class ChannelHandler(web.RequestHandler):
- def get(self, *args, **kwargs):
- title = kwargs.get('channel', 'main')
- self.chnl = kwargs.get('channel', 'main')
- cache = r.lrange('channels:{}'.format(title), 0, -1)
- messages =(escape.json_decode(x) for x in cache) if cache else []
- print(messages)
-
- self.render('index2.html',messages=messages)
-
-
-class ChatSocketHandler(websocket.WebSocketHandler):
-
- waiters = set()
-
- def open(self, *args, **kwargs):
- self.chnl = kwargs.get('channel', 'main')
- self.waiters.add((self.chnl, self))
- # self.chnl_key = 'channels:{}:users'.format(self.chnl)
- # count = int(r.zcard(self.chnl_key))
- # r.zadd(self.chnl_key, count+1, "mukhtar")
- # users = r.zrange(self.chnl_key,0,-1)
- # self.send_updates()
-
- def on_close(self):
- self.waiters.remove(self.chnl, self)
-
- def on_message(self, message):
- parsed = escape.json_decode(message)
- if 'dummy' in parsed:
- return
-
- chat = {
- 'parent': 'inbox',
- 'body': parsed['message'],
- 'user': 'Mukhtar',
- 'time': datetime.datetime.now().strftime('%H:%M:%S %Y-%m-%d')
- }
- self.update_channel_history(chat)
- self.send_updates(parsed);
-
- def update_channel_history(self,chat):
- chnl = 'channels:{}'.format(self.chnl)
- r.rpush(chnl, escape.json_encode(chat))
- r.ltrim(chnl, -25, -1)
-
- def send_updates(self, chat):
- chnl_waiters = tuple(w for c, w in self.waiters)
- for waiter in chnl_waiters:
- try:
- waiter.write_message(chat)
- except:
- pass
-
- def __del__(self):
- r.zrem(self.chnl_key, self.current_user)
- self.log('PUSHED OUT')
-
-
-def main():
- options.parse_command_line()
- app = Application()
- server = HTTPServer(app)
- server.listen(8888)
- loop = ioloop.IOLoop.current()
- loop.start()
-
-
-if __name__ == '__main__':
- main()
diff --git a/chat/apps.py b/chat/apps.py
deleted file mode 100644
index 8ebb9f0..0000000
--- a/chat/apps.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class ChatConfig(AppConfig):
- name = 'chat'
diff --git a/chat/chat.py b/chat/chat.py
index bc54fe1..2645140 100644
--- a/chat/chat.py
+++ b/chat/chat.py
@@ -64,12 +64,18 @@ class ChatHandler(websocket.WebSocketHandler):
answer_type = message_data['format_type']
private_type = 'true' if not order_id and not team_id else 'false'
is_new = 'true'
+ is_delete = 'false'
team_value = "NULL" if team_id is None else team_id
+ if team_value and not recipent_id:
+ recipent_id = sender_id
+
order_value = "NULL" if order_id is None else order_id
- insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id, private_type,team_id, order_id,is_new) " \
- "VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5},{6})".format(message, sender_id, recipent_id, private_type, team_value,order_value,is_new)
+ 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})".\
+ 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)
diff --git a/chat/migrations/0006_message_is_delete.py b/chat/migrations/0006_message_is_delete.py
new file mode 100644
index 0000000..85d773c
--- /dev/null
+++ b/chat/migrations/0006_message_is_delete.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-22 16:24
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('chat', '0005_message_is_new'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='message',
+ name='is_delete',
+ field=models.BooleanField(default=False),
+ ),
+ ]
diff --git a/chat/models.py b/chat/models.py
index dbd9eb2..04333f5 100644
--- a/chat/models.py
+++ b/chat/models.py
@@ -13,6 +13,7 @@ class Message(models.Model):
recipent = models.ForeignKey(User, related_name='recipent_messages')
private_type = models.BooleanField(default=False)
team = models.ForeignKey(Team, related_name='messages', null=True, blank=True)
+ is_delete = models.BooleanField(default=False)
is_new = models.BooleanField(default=True)
def __str__(self):
diff --git a/chat/templates/chat.js b/chat/templates/chat.js
deleted file mode 100644
index d7f0942..0000000
--- a/chat/templates/chat.js
+++ /dev/null
@@ -1,74 +0,0 @@
-var SocketHandler = function () {
-
- domain = domain.replace(':' + port, '');
- var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
- var sock = new WebSocket(url);
- var intervalId;
- sock.onopen = function () {
- console.log("Start connect");
- intervalId = setInterval(function () {
- sock.send('{"dummy": 1}');
- }, 150000);
- };
- sock.onmessage = function (event) {
- console.log(event.data);
- var message = JSON.parse(event.data);
- var inbox;
- if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') {
- inbox = document.getElementById('message-chat-space');
- } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') {
- inbox = document.getElementById('message-chat-order-space');
- } else if (message.answer_type == 'add_message_team') {
- inbox = document.getElementById('message-chat-team-space');
- }
- inbox.innerHTML += '' +
- '
' + message.msg + '
';
-
- };
-
- this.send_order_message = function (orderId) {
- var data = {
- "format_type": "order_message",
- "order_id": orderId
- }
- sock.send(JSON.stringify(data));
- console.log(data);
- };
-
- 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_team_message = function (messageData) {
-
- console.log(messageData);
- sock.send(JSON.stringify(messageData));
- }
-
- 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 = {};
- var i = 0;
- for (var i; i < elements.length; i++) {
- if (elements[i].name == 'message') {
- data[elements[i].name] = elements[i].value;
- }
- }
- sock.send(JSON.stringify(data));
- var textareaMessage = document.getElementById("message");
- textareaMessage.value = "";
- }
-
-}
-
diff --git a/chat/templates/chat1.js b/chat/templates/chat1.js
deleted file mode 100644
index de9b61d..0000000
--- a/chat/templates/chat1.js
+++ /dev/null
@@ -1,75 +0,0 @@
-var SocketHandler = function () {
- var userId = {{ request.user.pk }};
- var domain = '{{ request.META.HTTP_HOST }}';
- var port = '{{ request.META.SERVER_PORT }}';
- domain = domain.replace(':' + port, '');
- var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
- var sock = new WebSocket(url);
- var intervalId;
- sock.onopen = function () {
- console.log("Start connect");
- intervalId = setInterval(function () {
- sock.send('{"dummy": 1}');
- }, 150000);
- };
- sock.onmessage = function (event) {
- console.log(event.data);
- var message = JSON.parse(event.data);
- var inbox;
- if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') {
- inbox = document.getElementById('message-chat-space');
- } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') {
- inbox = document.getElementById('message-chat-order-space');
- } else if (message.answer_type == 'add_message_team') {
- inbox = document.getElementById('message-chat-team-space');
- }
- inbox.innerHTML += '' +
- '
' + message.msg + '
';
-
- };
-
- this.send_order_message = function (orderId) {
- var data = {
- "format_type": "order_message",
- "order_id": orderId
- }
- sock.send(JSON.stringify(data));
- console.log(data);
- };
-
- 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_team_message = function (messageData) {
-
- console.log(messageData);
- sock.send(JSON.stringify(messageData));
- }
-
- 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 = {};
- var i = 0;
- for (var i; i < elements.length; i++) {
- if (elements[i].name == 'message') {
- data[elements[i].name] = elements[i].value;
- }
- }
- sock.send(JSON.stringify(data));
- var textareaMessage = document.getElementById("message");
- textareaMessage.value = "";
- }
-
- }
diff --git a/chat/templates/chat2.js b/chat/templates/chat2.js
deleted file mode 100644
index 6283706..0000000
--- a/chat/templates/chat2.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var SocketHandler = function () {
- var domain = '{{ request.META.HTTP_HOST }}';
- var port = '{{ request.META.SERVER_PORT }}';
- domain = domain.replace(':' + port, '');
- var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
- var sock = new WebSocket(url);
- var intervalId;
- sock.onopen = function () {
- console.log("Start connect");
- intervalId = setInterval(function () {
- sock.send('{"dummy": 1}');
- }, 150000);
- };
- sock.onmessage = function (event) {
- console.log(event.data);
- var message = JSON.parse(event.data);
- var inbox;
- if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') {
- inbox = document.getElementById('message-chat-space');
- } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') {
- inbox = document.getElementById('message-chat-order-space');
- } else if (message.answer_type == 'add_message_team') {
- inbox = document.getElementById('message-chat-team-space');
- }
- inbox.innerHTML += '' +
- '
' + message.msg + '
';
-
- };
-
- this.send_order_message = function (orderId) {
- var data = {
- "format_type": "order_message",
- "order_id": orderId
- }
- sock.send(JSON.stringify(data));
- console.log(data);
- };
-
- 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 = {};
- var i = 0;
- for (var i; i < elements.length; i++) {
- if (elements[i].name == 'message') {
- data[elements[i].name] = elements[i].value;
- }
- }
- sock.send(JSON.stringify(data));
- var textareaMessage = document.getElementById("message");
- textareaMessage.value = "";
-
- }
- }
diff --git a/chat/templates/chat_contractor.html b/chat/templates/chat_contractor.html
index f41dda4..48081e4 100644
--- a/chat/templates/chat_contractor.html
+++ b/chat/templates/chat_contractor.html
@@ -187,7 +187,6 @@
- {# Заказчик: {{ torder.project.customer }}#}
Исполнитель: {{ torder.team.name }}
@@ -195,10 +194,13 @@
- {{ tuser }}
{% endfor %}
-
Чаты:
- {% for tuser in torder.team.users.all %}
+ {% if request.user.pk != torder.team.owner.pk %}
+ {{ torder.team.owner.username }},
+ {% endif %}
+ {% for tuser in torder.team.contractors.all %}
{% if request.user.pk != tuser.pk %}
{{ tuser.username }},
@@ -217,11 +219,11 @@