#ARC-11 add changes for views

remotes/origin/setup
Mukhtar 10 years ago
parent f2ef7363a8
commit f3564ee943
  1. 5
      api/views.py
  2. 69
      chat/templates/chat_contractor.html
  3. 638
      chat/templates/chat_customer.html
  4. 42
      chat/views.py
  5. 2
      templates/home.html

@ -39,11 +39,10 @@ class MessageViewSet(ModelViewSet):
search_param = self.request.query_params.get('operand', None) search_param = self.request.query_params.get('operand', None)
recipent_id = self.request.query_params.get('recipent_id', None) recipent_id = self.request.query_params.get('recipent_id', None)
sender_id = self.request.query_params.get('sender_id', None) sender_id = self.request.query_params.get('sender_id', None)
# queryset = queryset.filter(Q(sender=self.request.user.pk) | Q(recipent=self.request.user.pk))
# import code; code.interact(local=dict(globals(), **locals()))
if search_param: if search_param:
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))
queryset = queryset.filter(Q(sender=self.request.user.pk) | Q(recipent=self.request.user.pk)) if search_param == 'in':
queryset = queryset.filter(Q(sender__in=[sender_id,recipent_id]),Q(recipent__in=[sender_id,recipent_id])).order_by('created')
return queryset return queryset

@ -1,11 +1,12 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load staticfiles %}
{% load thumbnail %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
<h1>Чат {{ request.user }}</h1> <h1>Чат {{ request.user }} {{ request.user.pk }}</h1>
</div> </div>
<div class="btnReadyBlock disTab"> <div class="btnReadyBlock disTab">
<div class="triangle1"></div> <div class="triangle1"></div>
@ -33,20 +34,19 @@
<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 contacts_users %}
<div class="message messd user-block" data-id="{% if request.user.pk == contact.recipent_id %}{{ contact.sender_id }} {% else %}{{ contact.recipent_id}}{% endif %}"> <div class="message messd user-block" data-id="{{ contact.pk }}">
<div class="imgMess"> <div class="imgMess">
<img src="{% static 'img/mess.png' %}" alt="mess-image"> {% thumbnail contact.avatar "60x60" crop="center" as im %}
<img src="{{ im.url }}" alt="mess-image">
{% endthumbnail %}
</div> </div>
<p class="nameMess"> <p class="nameMess">
<a href="#">{{ contact.recipent_id__first_name }} {{ contact.recipent_id__last_name }}</a> <a href="#">{{ contact.username }}{{ contact.username }}{{ contact.first_name }} {{ contact.last_name }}</a>
</p> </p>
<a href="javascript:void(0)" class="conMess">Контакты</a> <a href="javascript:void(0)" class="conMess">Контакты</a>
<span>0</span> <span>0</span>
<a>Recipent_id {{ contact.recipent_id }}</a>
<a>Sender_id {{ contact.sender_id }}</a>
<a>Current {{ request.user.pk }}</a>
<a href="javascript:void(0)" class="deleteMess"> <a href="javascript:void(0)" class="deleteMess">
Удалить контакт Удалить контакт
</a> </a>
@ -57,10 +57,11 @@
</div> </div>
<div class="col-lg-6 commChat" id="contact-chat"> <div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space"> <div id="message-chat-space">
</div> </div>
<form id="contact-chat-form"> <form id="contact-chat-form">
<input type="text" value="{{ request.user.pk }}" name="senderId" id="senderId" /> <input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId" />
<input type="text" value="" name="recipentId" id="recipentId" /> <input type="hidden" value="" name="recipentId" id="recipentId" />
<textarea id="chat" name="chat_message" class="box-sizing"></textarea> <textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat"> <div class="bunChat">
@ -137,7 +138,7 @@
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
<p>Заказы</p> <p>Заказы</p>
{% for order in orders %} {% for order in orders %}
<div class="orderBlock box-sizing order-block" data-id="{{ order.id }}"> <div class="orderBlock box-sizing order-block" data-recipent-id="{{ order.project.customer.pk }}" data-id="{{ order.id }}">
<span class="dimovChat"></span> <span class="dimovChat"></span>
<p class="titleOB"> <p class="titleOB">
{{ order }} {{ order }}
@ -161,15 +162,15 @@
</div> </div>
<div class="col-lg-6 commChat"> <div class="col-lg-6 commChat">
<div id="message-chat-order-space"> <div id="message-chat-order-space">
{% for msg in chat_messages %} {# {% for msg in chat_messages %}#}
<div class="col-lg-12 insetCommChat {% if msg.sender.pk == request.user.pk %}youChat{% endif %}"> {# <div class="col-lg-12 insetCommChat {% if msg.sender.pk == request.user.pk %}youChat{% endif %}">#}
<div class="topCommChat"> {# <div class="topCommChat">#}
<p class="nameCommChat {% if msg.sender.pk == request.user.pk %}greenNCC{% endif %}">{{ msg.sender.get_full_name }}</p> {# <p class="nameCommChat {% if msg.sender.pk == request.user.pk %}greenNCC{% endif %}">{{ msg.sender.get_full_name }}</p>#}
<span>{{ msg.created }}</span> {# <span>{{ msg.created }}</span>#}
</div> {# </div>#}
<p class="textCommChat">{{ msg }}</p> {# <p class="textCommChat">{{ msg }}</p>#}
</div> {# </div>#}
{% endfor %} {# {% endfor %}#}
</div> </div>
<form id="chat-contractor-order"> <form id="chat-contractor-order">
<input type="text" id="orderId" /> <input type="text" id="orderId" />
@ -364,6 +365,7 @@ var SocketHandler = function () {
}; };
sock.onmessage = function (event) { sock.onmessage = function (event) {
console.log(event.data); console.log(event.data);
alert(event.data);
var message = JSON.parse(event.data); var message = JSON.parse(event.data);
var inbox = document.getElementById('message-chat-space'); var inbox = document.getElementById('message-chat-space');
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
@ -404,6 +406,7 @@ var SocketHandler = function () {
} }
$(function () { $(function () {
var currentChatUser = {{ request.user.pk }};
var socket = new SocketHandler(); var socket = new SocketHandler();
var form = document.getElementById('message_form'); var form = document.getElementById('message_form');
var csrftoken = getCookie('csrftoken'); var csrftoken = getCookie('csrftoken');
@ -411,7 +414,9 @@ $(function () {
// Вытащить сообщения для чата заказа // Вытащить сообщения для чата заказа
$('.order-block').on('click', function () { $('.order-block').on('click', function () {
var orderId = $(this).attr('data-id'); var orderId = $(this).attr('data-id');
var recipentId = $(this).attr('data-recipent-id');
$("#chat-contractor-order #orderId").val(orderId); $("#chat-contractor-order #orderId").val(orderId);
$("#chat-contractor-order #recipentId").val(recipentId);
var inbox = document.getElementById('message-chat-order-space'); var inbox = document.getElementById('message-chat-order-space');
inbox.innerHTML = ''; inbox.innerHTML = '';
$.ajax({ $.ajax({
@ -439,14 +444,21 @@ $(function () {
$.ajax({ $.ajax({
url: '/api/message', url: '/api/message',
type: 'GET', type: 'GET',
data: {csrfmiddlewaretoken: csrftoken, 'recipent__id': userId}, data: {csrfmiddlewaretoken: csrftoken, 'operand': 'in', 'sender_id':currentChatUser,'recipent_id': userId},
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
console.log(v.sender.id); console.log(v.sender.id);
console.log(v.recipent.id); var senderName = 'Вы';
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + var className = 'youChat';
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' + if(v.sender.id == userId){
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat '+ className+'"><div class="topCommChat">' +
'<p class="nameCommChat">'+ senderName +'</p> <span>'+ v.created +'</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>'; '<p class="textCommChat">' + v.text + '</p></div>';
}); });
} }
@ -469,14 +481,15 @@ $(function () {
} }
}); });
var inbox = $('#message-chat-space').html();
$('#message-chat-space').html(inbox + '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Вы</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + chatMessage +'</p></div>');
$("#chat").val(""); $("#chat").val("");
}); });
}); });
</script> </script>
{% endblock %} {% endblock %}

@ -1,326 +1,378 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load staticfiles %}
{% load thumbnail %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
<h1>Чат</h1> <h1>Чат</h1>
</div> </div>
<div class="btnReadyBlock disTab"> <div class="btnReadyBlock disTab">
<div class="triangle1"></div> <div class="triangle1"></div>
<div class="col-lg-6 col-lg-offset-3 tabsChat"> <div class="col-lg-6 col-lg-offset-3 tabsChat">
<div class="profileTabs2"> <div class="profileTabs2">
<ul class="nav nav-tabs nav-justified"> <ul class="nav nav-tabs nav-justified">
<li role="presentation" class="active"> <li role="presentation" class="active">
<a href="#tab1" data-toggle="tab">Личные</a> <a href="#tab1" data-toggle="tab">Личные</a>
</li> </li>
<li role="presentation"> <li role="presentation">
<a href="#tab2" data-toggle="tab">Исполнители</a> <a href="#tab2" data-toggle="tab">Исполнители</a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
<div class="tab-content"> <div class="tab-content">
<div class="chatBlock disTab tab-pane fade in active" id="tab1"> <div class="chatBlock disTab tab-pane fade in active" id="tab1">
<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 customer_contacts %} {% for contact in contacts_users %}
<div class="message messd user-block" data-id="{{ contact.pk }}">
<div class="message messd user-block" data-id="{{ contact.recipent_id}}"> <div class="imgMess">
<div class="imgMess"> {% thumbnail contact.avatar "60x60" crop="center" as im %}
<img src="{% static 'img/mess.png' %}" alt="mess-image"> <img src="{{ im.url }}" alt="mess-image">
</div> {% endthumbnail %}
<p class="nameMess"> </div>
<a href="#">Тестовый контакт</a> <p class="nameMess">
</p> <a href="#">{{ contact.username }} {{ contact.username }}</a>
<a href="javascript:void(0)" class="conMess">Контакты</a> </p>
<span>0</span> <a href="javascript:void(0)" class="conMess">Контакты</a>
<a href="javascript:void(0)" class="deleteMess"> <span>0</span>
Удалить контакт <a href="javascript:void(0)" class="deleteMess">
</a> Удалить контакт
</div> </a>
{% endfor %} </div>
{% endfor %}
</div>
</div> </div>
<div class="col-lg-6 commChat" id="contact-chat"> </div>
<div id="message-chat-space"> <div class="col-lg-6 commChat" id="contact-chat">
</div> <div id="message-chat-space">
<form id="contact-chat-form"> </div>
<input type="text" value="{{ request.user.pk }}" name="senderId" id="senderId" /> <form id="contact-chat-form">
<input type="text" value="" name="recipentId" id="recipentId" /> <input type="text" value="{{ request.user.pk }}" name="senderId" id="senderId"/>
<input type="text" value="" name="recipentId" id="recipentId"/>
<textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat"> <textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="setChat box-sizing"> <div class="bunChat">
<p>Прикрепить файл</p> <div class="setChat box-sizing">
<p>Прикрепить файл</p>
<span> <span>
Не более 10 файлов с общим объемом 500мб Не более 10 файлов с общим объемом 500мб
</span> </span>
</div> </div>
<a id="contact-chat-add-message" href="javascript:void(0)">отправить</a> <a id="contact-chat-add-message" href="javascript:void(0)">отправить</a>
</div> </div>
</form> </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">
<p>Контакты</p> <p>Контакты</p>
<div class="message"> <div class="message">
<div class="imgMess"> <div class="imgMess">
<img src="img/mess.png" alt="mess-image"> <img src="img/mess.png" alt="mess-image">
</div> </div>
<p class="nameMess"> <p class="nameMess">
<a href="#">Иванов Петр Иванович</a> <a href="#">Иванов Петр Иванович</a>
</p> </p>
<a href="javascript:void(0)" class="conMess">Контакты</a> <a href="javascript:void(0)" class="conMess">Контакты</a>
</div> </div>
</div> </div>
<div class="col-lg-12 startChat"> <div class="col-lg-12 startChat">
<div class="insetSC1"> <div class="insetSC1">
Начало: Начало:
<span>Срок сдачи:</span> <span>Срок сдачи:</span>
</div> </div>
<div class="insetSC2"> <div class="insetSC2">
13.0.2016 13.0.2016
<span>13.0.2016</span> <span>13.0.2016</span>
</div> </div>
</div> </div>
<div class="col-lg-12 documentsChat"> <div class="col-lg-12 documentsChat">
<p>Входящие документы</p> <p>Входящие документы</p>
<ul> <ul>
<li> <li>
Архитерурное 2.jpg Архитерурное 2.jpg
<span>7мб</span> <span>7мб</span>
<div></div> <div></div>
</li> </li>
</ul> </ul>
<a href="javascript:void(0)"> <a href="javascript:void(0)">
Распечатать с помощью ресурса Распечатать с помощью ресурса
</a> </a>
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p> <p>Для заметок</p>
<textarea id="chat2"></textarea> <textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a> <a href="javascript:void()">сохранить</a>
</div> </div>
<div class="closeChat closeChat1"> <div class="closeChat closeChat1">
<a href="javascript:void(0)"> <a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв Закрыть проект<br>и оставить отзыв
</a> </a>
</div> </div>
<div class="closeChat closeChat2"> <div class="closeChat closeChat2">
<a href="javascript:void(0)"> <a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв Закрыть проект<br>и оставить отзыв
</a> </a>
</div> </div>
</div> </div>
</div>
<div class="chatBlock disTab tab-pane fade" id="tab2">
<div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab">
<p>Заказы</p>
{% for order in orders %}
<div class="orderBlock box-sizing order-block" data-id="{{ order.order.id }}">
<span class="dimovChat"></span>
<p class="titleOB">
{{ order }}
</p>
<div class="hideOBB">
<p class="pOB">
<span>Испонитель:</span> {{ order.order.contractor.get_full_name }}
</p>
{# <p class="pOB">#}
{# <span>Чаты:</span> Иванов, Петров, Пенкин#}
{# </p>#}
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
{% endfor%}
</div>
</div>
<div class="col-lg-6 commChat">
<div id="message-chat-order-space">
{% for msg in chat_messages %}
{# <div class="col-lg-12 insetCommChat {% if msg.sender.pk == request.user.pk %}youChat{% endif %}">#}
{# <div class="topCommChat">#}
{# <p class="nameCommChat {% if msg.sender.pk == request.user.pk %}greenNCC{% endif %}">{{ msg.sender.get_full_name }}</p>#}
{# <span>{{ msg.created }}</span>#}
{# </div>#}
{# <p class="textCommChat">{{ msg }}</p>#}
{# </div>#}
{% endfor %}
</div> </div>
<form id="chat-order-add"> <div class="chatBlock disTab tab-pane fade" id="tab2">
<input type="text" name="senderId" value="{{ request.user.pk }}"/> <div class="col-lg-3 wrMessages">
<input type="text" name="recipentId" id="recipentId" value="" />
<input type="text" name="orderId" id="orderId" value="" /> <div class="messageBlock box-sizing disTab">
<textarea id="chat" class="box-sizing"></textarea> <p>Заказы</p>
<div class="bunChat"> {% for order in orders %}
<div class="setChat box-sizing"> <div class="orderBlock box-sizing order-block"
<p>Прикрепить файл</p> data-recipent-id="{{ order.order.contractor.pk }}" data-id="{{ order.order.id }}">
<span class="dimovChat"></span>
<p class="titleOB">
{{ order }}
</p>
<div class="hideOBB">
<p class="pOB">
<span>Испонитель:</span> {{ order.order.contractor.get_full_name }}
</p>
{# <p class="pOB">#}
{# <span>Чаты:</span> Иванов, Петров, Пенкин#}
{# </p>#}
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="col-lg-6 commChat">
<div id="message-chat-order-space">
{% for msg in chat_messages %}
{# <div class="col-lg-12 insetCommChat {% if msg.sender.pk == request.user.pk %}youChat{% endif %}">#}
{# <div class="topCommChat">#}
{# <p class="nameCommChat {% if msg.sender.pk == request.user.pk %}greenNCC{% endif %}">{{ msg.sender.get_full_name }}</p>#}
{# <span>{{ msg.created }}</span>#}
{# </div>#}
{# <p class="textCommChat">{{ msg }}</p>#}
{# </div>#}
{% endfor %}
</div>
<form id="chat-order-add">
<input type="text" name="senderId" id="senderId" value="{{ request.user.pk }}"/>
<input type="text" name="recipentId" id="recipentId" value=""/>
<input type="text" name="orderId" id="orderId" value=""/>
<textarea id="chat" class="box-sizing"></textarea>
<div class="bunChat">
<div class="setChat box-sizing">
<p>Прикрепить файл</p>
<span> <span>
Не более 10 файлов с общим объемом 500мб Не более 10 файлов с общим объемом 500мб
</span> </span>
</div> </div>
<a href="javascript:void(0)">отправить</a> <a href="javascript:void(0)" id="order-chat-add-message">отправить</a>
</div> </div>
</form> </form>
</div> </div>
<div class="col-lg-3 wrTAB"> <div class="col-lg-3 wrTAB">
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p> <p>Для заметок</p>
<textarea id="chat2" ></textarea> <textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a> <a href="javascript:void()">сохранить</a>
</div> </div>
<div class="linkChatB box-sizing disTab"> <div class="linkChatB box-sizing disTab">
<a href="javascript:void(0)">предложить проект</a> <a href="javascript:void(0)">предложить проект</a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block js_block %} {% block js_block %}
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function () {
var socket = new SocketHandler(); var currentChatUser = {{ request.user.pk }};
var form = document.getElementById('message_form'); var socket = new SocketHandler();
var csrftoken = getCookie('csrftoken'); var form = document.getElementById('message_form');
var csrftoken = getCookie('csrftoken');
$('.order-block').on('click',function(){
var orderId = $(this).attr('data-id'); $('.order-block').on('click', function () {
$("#chat-order-add #orderId").val(orderId); var orderId = $(this).attr('data-id');
alert(orderId); var recipentId = $(this).attr('data-recipent-id');
var inbox = document.getElementById('message-chat-order-space'); $("#chat-order-add #orderId").val(orderId);
inbox.innerHTML = ''; $("#chat-order-add #recipentId").val(recipentId);
{# socket.send_order_message(orderId);#} var inbox = document.getElementById('message-chat-order-space');
}); inbox.innerHTML = '';
$.ajax({
url: '/api/message',
type: 'GET',
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},
dataType: 'json',
success: function (json) {
$.each(json.results, function (i, v) {
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>';
});
}
});
});
// Вытащить сообщения для конактов // Вытащить сообщения для конактов
$('.user-block').on('click', function () { $('.user-block').on('click', function () {
var userId = $(this).attr('data-id'); var userId = $(this).attr('data-id');
$("#contact-chat-form #recipentId").val(userId); $("#contact-chat-form #recipentId").val(userId);
var inbox = document.getElementById('message-chat-space'); var inbox = document.getElementById('message-chat-space');
inbox.innerHTML = ''; inbox.innerHTML = '';
$.ajax({ $.ajax({
url: '/api/message', url: '/api/message',
type: 'GET', type: 'GET',
data: {csrfmiddlewaretoken: csrftoken, 'recipent__id': userId}, data: {
dataType: 'json', csrfmiddlewaretoken: csrftoken,
success: function (json) { 'operand': 'in',
$.each(json.results, function (i, v) { 'sender_id': currentChatUser,
console.log(v.sender.id); 'recipent_id': userId
console.log(v.recipent.id); },
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + dataType: 'json',
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' + success: function (json) {
'<p class="textCommChat">' + v.text + '</p></div>'; $.each(json.results, function (i, v) {
var senderName = 'Вы';
var className = 'youChat';
if (v.sender.id == userId) {
senderName = v.sender.username;
className = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>';
});
}
}); });
}
});
}); });
$('#contact-chat-add-message').on('click', function(){ $('#contact-chat-add-message').on('click', function () {
var chatMessage = $("#chat").val(); var chatMessage = $("#chat").val();
var recipentId = $("#recipentId").val(); var recipentId = $("#recipentId").val();
var senderId = $("#senderId").val(); var senderId = $("#senderId").val();
socket.add_contact_message({ socket.add_contact_message({
"format_type": "add_message_contact", "format_type": "add_message_contact",
"data": { "data": {
"sender_id": senderId, "sender_id": senderId,
"recipent_id": recipentId, "recipent_id": recipentId,
"chat_message": chatMessage, "chat_message": chatMessage,
} }
});
$("#chat").val("");
});
$('#order-chat-add-message').on('click', function () {
var chatMessage = $("#chat-order-add #chat").val();
var recipentId = $("#chat-order-add #recipentId").val();
var senderId = $("#chat-order-add #senderId").val();
var orderId = $("#chat-order-add #orderId").val();
socket.add_contact_message({
"format_type": "add_message_order",
"data": {
"sender_id": senderId,
"recipent_id": recipentId,
"chat_message": chatMessage,
"order_id": orderId,
}
});
$("#chat-order-add #chat").val("");
}); });
$("#chat").val("");
}); });
});
var userId = '{{ request.user.pk }}';
var userId = '{{ request.user.pk }}';
var SocketHandler = function () {
var SocketHandler = function(){ var url = 'ws://127.0.0.1:8888/chat/' + userId + '/';
var url = 'ws://127.0.0.1:8888/chat/' + userId + '/'; var sock = new WebSocket(url);
var sock = new WebSocket(url); var intervalId;
var intervalId; sock.onopen = function () {
sock.onopen = function(){ console.log("Start connect");
console.log("Start connect"); intervalId = setInterval(function () {
intervalId = setInterval(function(){sock.send('{"dummy": 1}');}, 150); sock.send('{"dummy": 1}');
}; }, 150);
sock.onmessage = function(event){ };
console.log(event.data); sock.onmessage = function (event) {
alert(event.data); console.log(event.data);
var message = JSON.parse(event.data); alert(event.data);
var inbox; var message = JSON.parse(event.data);
if (message.answer_type == 'contact'){ var inbox;
inbox= document.getElementById('message-chat-order-space'); if (message.answer_type == 'contact') {
}else if(message.answer_type == 'order'){ inbox = document.getElementById('message-chat-order-space');
inbox= document.getElementById('message-chat-space'); } else if (message.answer_type == 'order') {
} inbox = document.getElementById('message-chat-space');
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_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;
} }
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_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 = "";
} }
sock.send(JSON.stringify(data));
var textareaMessage = document.getElementById("message");
textareaMessage.value = "";
} }
} </script>
</script>
{% endblock %} {% endblock %}

@ -3,6 +3,7 @@ from django.views.generic import View
from django.db.models import Q from django.db.models import Q
from .models import Message from .models import Message
from users.models import User
class ChatUserView(View): class ChatUserView(View):
@ -10,25 +11,40 @@ class ChatUserView(View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): if request.user.is_authenticated() and request.user.is_customer():
customer_contacts = Message.objects.values('sender_id','recipent_id').\ customer_contacts = Message.objects.values_list('sender_id', 'recipent_id'). \
filter(Q(recipent_id=request.user.pk)| Q(sender_id=request.user.pk)).distinct() filter(Q(recipent_id=request.user.pk) | Q(sender_id=request.user.pk)).distinct()
users_ids = []
for msg in customer_contacts:
a, b = msg
if a != request.user.pk:
users_ids.append(a)
if b != request.user.pk:
users_ids.append(b)
contacts_users = User.objects.filter(pk__in=users_ids)
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)) chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk))
orders = request.user.projects.select_related('order').all() orders = request.user.projects.select_related('order').all()
self.template_name = 'chat_customer.html' self.template_name = 'chat_customer.html'
return render(request, self.template_name, {'customer_contacts': customer_contacts, return render(request, self.template_name, {'contacts_users': contacts_users,
'chat_messages': chat_messages, 'chat_messages': chat_messages,
'orders': orders}) 'orders': orders})
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 = Message.objects.values_list('sender_id', 'recipent_id').filter(
# values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name', 'recipent_id__id') Q(recipent_id=request.user.pk) | Q(sender_id=request.user.pk)).distinct()
contractor_contacts = Message.objects.values('sender_id','recipent_id').\ users_ids = []
filter(Q(recipent_id=request.user.pk)| Q(sender_id=request.user.pk)).distinct() for msg in contractor_contacts:
a, b = msg
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by('created') if a != request.user.pk:
users_ids.append(a)
if b != request.user.pk:
users_ids.append(b)
contacts_users = User.objects.filter(pk__in=users_ids)
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'
return render(request, self.template_name, {'orders': orders, return render(request, self.template_name, {'orders': orders,
'contractor_contacts': contractor_contacts, 'contacts_users': contacts_users,
'chat_messages': chat_messages}) 'chat_messages': chat_messages
})

@ -50,7 +50,7 @@
</div> </div>
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<a class="popup-youtube" href="https://www.youtube.com/watch?v=WjhmB0JlCTo"> <a class="popup-youtube" href="{{ main_settings.video_code }}">
<div class="youtube"></div> <div class="youtube"></div>
</a> </a>

Loading…
Cancel
Save