#ARC-52 Add 403.html, 404.html, 500.html

remotes/origin/PR-39
Mukhtar 10 years ago
parent df4695161c
commit c812f5918d
  1. 1
      archilance/settings/dev.py
  2. 64
      chat/app.py
  3. 102
      chat/app2.py
  4. 5
      chat/apps.py
  5. 10
      chat/chat.py
  6. 20
      chat/migrations/0006_message_is_delete.py
  7. 1
      chat/models.py
  8. 74
      chat/templates/chat.js
  9. 75
      chat/templates/chat1.js
  10. 68
      chat/templates/chat2.js
  11. 18
      chat/templates/chat_contractor.html
  12. 7
      chat/views.py
  13. 19
      projects/templates/project_detail.html
  14. 2
      projects/views.py
  15. 14
      templates/403.html
  16. 14
      templates/404.html
  17. 15
      templates/500.html
  18. 2
      users/views.py
  19. 3
      wallets/admin.py
  20. 2
      wallets/signals.py
  21. 2
      wallets/templates/score-detail.html
  22. 2
      wallets/views.py

@ -3,7 +3,6 @@ from .base import *
# AUTH_PASSWORD_VALIDATORS = []
# INSTALLED_APPS += ['debug_toolbar',]
try:
from .local import *
except ImportError:

@ -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'})

@ -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<channel>\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()

@ -1,5 +0,0 @@
from django.apps import AppConfig
class ChatConfig(AppConfig):
name = 'chat'

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

@ -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),
),
]

@ -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):

@ -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 += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">ВЫ</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + message.msg + '</p></div>';
};
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 = "";
}
}

@ -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 += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">ВЫ</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + message.msg + '</p></div>';
};
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 = "";
}
}

@ -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 += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Вы</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + message.msg + '</p></div>';
};
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 = "";
}
}

@ -187,7 +187,6 @@
</p>
<div class="hideOBB disTab">
<p class="pOB">
{# <span>Заказчик:</span> {{ torder.project.customer }}#}
<span>Исполнитель:</span> {{ torder.team.name }}
</p>
<ul class="listChat1">
@ -195,10 +194,13 @@
<li>{{ tuser }}</li>
{% endfor %}
</ul>
<p class="pOB">
<span>Чаты:</span>
{% for tuser in torder.team.users.all %}
{% if request.user.pk != torder.team.owner.pk %}
<span class="team-chat-user"
data-id="{{ torder.team.owner.pk}}">{{ torder.team.owner.username }},</span>
{% endif %}
{% for tuser in torder.team.contractors.all %}
{% if request.user.pk != tuser.pk %}
<span class="team-chat-user"
data-id="{{ tuser.pk }}">{{ tuser.username }},</span>
@ -217,11 +219,11 @@
<div class="col-lg-6 commChat">
<div id="message-chat-team-space"></div>
<form id="team-chat-form">
<input type="text" name="sender" id="senderId" value="{{ request.user.pk }}"/>
<input type="text" name="recipent" id="recipentId" value=""/>
<input type="text" name="order" id="orderId" value=""/>
<input type="text" name="team" id="teamId" value=""/>
<input type="text" name="document-send" id="documentSendIds"/>
<input type="hidden" name="sender" id="senderId" value="{{ request.user.pk }}"/>
<input type="hidden" name="recipent" id="recipentId" value=""/>
<input type="hidden" name="order" id="orderId" value=""/>
<input type="hidden" name="team" id="teamId" value=""/>
<input type="hidden" name="document-send" id="documentSendIds"/>
<textarea id="chatText" class="chat-textarea box-sizing"></textarea>
<div class="bunChat">
<div class="setChat box-sizing upload">

@ -6,7 +6,8 @@ from django.db.models import Q
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Message
from users.models import User
from projects.models import Order
from users.models import User, Team
class ChatUserView(LoginRequiredMixin, View):
@ -57,7 +58,9 @@ class ChatUserView(LoginRequiredMixin, View):
if request.user.is_owner_team():
team_orders = request.user.team.orders.all()
else:
team_orders = []
teams = Team.objects.filter(contractors__id=request.user.pk).all()
team_orders = Order.objects.filter(team_id__in=[team.pk for team in teams]).all()
# team_orders = []
self.template_name = 'chat_contractor.html'
return render(request, self.template_name, {'orders': orders,

@ -33,7 +33,7 @@
</div>
</a>
<p class="nameExecutor">
<a href="#">{{ project.customer.get_full_name }} [{{ project.customer.username }}]</a>
<a href="{% url 'users:customer-profile-open-projects' project.customer.pk %}">{{ project.customer.get_full_name }} [{{ project.customer.username }}]</a>
</p>
<p class="navv2">На сайте {{ project.created|naturaltime }}</p>
@ -67,17 +67,12 @@
{% endif %}
<div class="col-lg-2 new-dashed">
<div class="dashedCol4 dashedCol44 dashedColColor">
<p class="specUser">
Специализации:
</p>
<div class="insetSpec">
<span>Интерьеры</span>
</div>
<div class="insetSpec">
<span>Визуализация/3D</span>
</div>
</div>
{% specialization_widget contractor.pk %}
{# <div class="dashedCol4 dashedCol44 dashedColColor">#}
{# <p class="specUser">#}
{# Специализации:#}
{# </p>#}
{# </div>#}
</div>
<div class="col-lg-3 retts new-list">

@ -335,7 +335,7 @@ class CustomerProjectCreateView(BaseMixin, View):
if request.user.is_authenticated() and request.user.is_customer():
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden('403 Forbidden')
return HttpResponseForbidden()
def get(self, request, *args, **kwargs):
form = self.form_class(request=request)

@ -0,0 +1,14 @@
{% extends 'partials/base.html' %}
{% block content %}
<section class="mainContainer">
{% include 'partials/header.html' %}
<div class="container-fluid">
<div class="row">
<p class="welcomeMain">Ошибка 403! Доступ ограничен.</p>
</div>
</div>
</section>
{% endblock %}

@ -0,0 +1,14 @@
{% extends 'partials/base.html' %}
{% block content %}
<section class="mainContainer">
{% include 'partials/header.html' %}
<div class="container-fluid">
<div class="row">
<p class="welcomeMain">404 ошибка сайта</p>
</div>
</div>
</section>
{% endblock %}

@ -0,0 +1,15 @@
{% extends 'partials/base.html' %}
{% block content %}
<section class="mainContainer">
{% include 'partials/header.html' %}
<div class="container-fluid">
<div class="row">
<p class="welcomeMain">500 ошибка сервера</p>
</div>
</div>
</section>
{% endblock %}

@ -539,7 +539,7 @@ class CustomerProfileCurrentProjectsView(BaseMixin, DetailView):
context_object_name = 'customer'
def add_user_in_team(request):
def join_user_in_team(request):
pass

@ -1,6 +1,6 @@
from django.contrib import admin
from .models import InvoiceHistory, WithDraw, Transaction
from .models import InvoiceHistory, WithDraw, Transaction, Wallet
class InvoiceHistoryAdmin(admin.ModelAdmin):
@ -18,3 +18,4 @@ class TransactionAdmin(admin.ModelAdmin):
admin.site.register(InvoiceHistory, InvoiceHistoryAdmin)
admin.site.register(WithDraw, WithDrawAdmin)
admin.site.register(Transaction, TransactionAdmin)
admin.site.register(Wallet)

@ -26,7 +26,7 @@ def add_invoice_history(sender, instance,created, **kwargs):
inv_history = InvoiceHistory()
inv_history.comment = 'Пополнение счета'
inv_history.sum = instance.sum
inv_history.user = instance.user
inv_history.user = instance.customer
inv_history.save()

@ -18,7 +18,7 @@
{% if user_score.is_customer %}
<div class="col-lg-6">
<a href="javascript:void(0)" data-toggle="modal" data-target="#fullfill-balance"class="linkS linkS1">пополнить</a>
<a href="#" data-toggle="modal" data-target="#fullfill-balance"class="linkS linkS1">пополнить</a>
</div>
{% endif %}

@ -17,7 +17,7 @@ from users.mixins import CheckForUserMixin
from users.models import User
class ScoreDetailView(CheckForUserMixin, DetailView):
class ScoreDetailView(DetailView):
model = User
template_name = 'score-detail.html'
context_object_name = 'user_score'

Loading…
Cancel
Save