diff --git a/api/views.py b/api/views.py
index 502ba87..5c9909c 100755
--- a/api/views.py
+++ b/api/views.py
@@ -74,6 +74,17 @@ class NoteViewSet(ModelViewSet):
filter_class = NoteFilterSet
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
+ def get_queryset(self):
+ queryset = Notes.objects.all()
+ search_param = self.request.query_params.get('operand', None)
+ recipent_id = self.request.query_params.get('recipent_id', None)
+ sender_id = self.request.query_params.get('sender_id', None)
+ if search_param:
+ # import code; code.interact(local=dict(globals(), **locals()))
+ 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
+
class MessageViewSet(ModelViewSet):
queryset = Message.objects.all()
serializer_class = MessageSerializer
diff --git a/assets/js/chat.js b/assets/js/chat.js
index dd5a27e..1a91812 100644
--- a/assets/js/chat.js
+++ b/assets/js/chat.js
@@ -1,10 +1,6 @@
-/**
- * Created by mukhtar on 04.07.16.
- */
-
-
var SocketHandler = function () {
- var url = 'ws://127.0.0.1:8888/chat';
+ domain = domain.replace(':' + port, '');
+ var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
var sock = new WebSocket(url);
var intervalId;
sock.onopen = function () {
@@ -16,11 +12,36 @@ var SocketHandler = function () {
sock.onmessage = function (event) {
console.log(event.data);
var message = JSON.parse(event.data);
- var inbox = document.getElementById('message-chat-space');
- inbox.innerHTML += '
' +
- '
' + message.msg + '
';
+ 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');
+ }else if (message.answer_type == 'approve_stages') {
+ alert('approve stages');
+ }
+ if(inbox) {
+ 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_stages_approve = function(data){
+ sock.send(JSON.stringify(data));
+ console.log(data);
};
this.send_contact_message = function (userId) {
@@ -32,6 +53,12 @@ var SocketHandler = function () {
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));
@@ -49,82 +76,39 @@ var SocketHandler = function () {
sock.send(JSON.stringify(data));
var textareaMessage = document.getElementById("message");
textareaMessage.value = "";
-
}
}
-$(function () {
- var socket = new SocketHandler();
- var form = document.getElementById('message_form');
- var csrftoken = getCookie('csrftoken');
-
- // Вытащить сообщения для чата заказа
- $('.order-block').on('click', function () {
- var orderId = $(this).attr('data-id');
- $("#chat-contractor-order #orderId").val(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 += '';
- });
- }
- });
-
- });
+function csrfSafeMethod(method) {
+ return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
+}
- // Вытащить сообщения для конактов
- $('.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 = '';
+$(function(){
+ $('#add-note-contractor').on('click', function (e) {
+ e.preventDefault();
$.ajax({
- url: '/api/message',
- type: 'GET',
- data: {csrfmiddlewaretoken: csrftoken, 'recipent__id': userId},
- dataType: 'json',
- success: function (json) {
- $.each(json.results, function (i, v) {
- console.log(v.sender.id);
- console.log(v.recipent.id);
- inbox.innerHTML += '';
- });
- }
+ url: '/api/note/',
+ type: 'POST',
+ beforeSend: function (xhr) {
+ xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
+ },
+ data: $("#add-form-contractor-note").serialize(),
+ dataType: 'json',
+ success: function (json) {
+ console.log(json);
+ $("#add-form-contractor-note #chat2").val("");
+ $('' + json.text + '').appendTo(".contractor-notes-block");
+ },
+ error: function (e) {
+ console.log('error');
+ console.log(e);
+ }
});
-
- });
-
- // Добавить сообщение для контакта
- $('#contact-chat-add-message').on('click', function () {
- var chatMessage = $("#chat").val();
- var recipentId = $("#recipentId").val();
- var senderId = $("#senderId").val();
-
- socket.add_contact_message({
- "format_type": "add_message_contact",
- "data": {
- "sender_id": senderId,
- "recipent_id": recipentId,
- "chat_message": chatMessage,
- }
- });
-
- $("#chat").val("");
});
+});
-});
diff --git a/chat/templates/chat.js b/chat/templates/chat.js
index 1afb936..d7f0942 100644
--- a/chat/templates/chat.js
+++ b/chat/templates/chat.js
@@ -1,683 +1,74 @@
-
- function csrfSafeMethod(method) {
- // these HTTP methods do not require CSRF protection
- return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
+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 + '
';
- var SocketHandler = function () {
- var userId = {{ request.user.pk }};
- var url = 'ws://127.0.0.1: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');
- }
- console.log(message.answer_type);
- console.log(message.msg);
-
- inbox.innerHTML += '' +
- '
' + 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_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 = "";
- }
+ };
+ this.send_order_message = function (orderId) {
+ var data = {
+ "format_type": "order_message",
+ "order_id": orderId
}
-
- $(function () {
- var currentChatUser = {{ request.user.pk }};
- var socket = new SocketHandler();
- var form = document.getElementById('message_form');
- var csrftoken = getCookie('csrftoken');
-
- setTimeout(function(){
- $(".user-block").first().trigger('click');
- }, 10);
-
- setTimeout(function(){
- $(".order-block").first().trigger('click');
- }, 100);
-
- setTimeout(function(){
- $(".team-order-block").first().trigger('click');
- }, 1000);
-
-
- var url = '/work_sell/basic/';
- $('#upload-document-team').fileupload({
- url: url,
- crossDomain: false,
- beforeSend: function (xhr, settings) {
- $('#progress .progress-bar').css(
- 'width',
- '0%'
- );
- if (!csrfSafeMethod(settings.type)) {
- xhr.setRequestHeader("X-CSRFToken", csrftoken);
- }
- },
- dataType: 'json',
- done: function (e, data) {;
- $.each(data.result.files, function (index, file) {
- var currentValue = $("#documentSendIds").val();
- currentValue += file.id + ';';
- $("#documentSendIds").val(currentValue);
- var htmlImg = ''+ file.name+'
';
- var document_send = $(htmlImg).appendTo("#document-send");
- });
- },
- progressall: function (e, data) {
- var progress = parseInt(data.loaded / data.total * 100, 10);
- $('#progress .progress-bar').css(
- 'width',
- progress + '%'
- );
- }
- }).prop('disabled', !$.support.fileInput)
- .parent().addClass($.support.fileInput ? undefined : 'disabled');
-
-
- $("#approve-stages").on('click', function(){
- $(".stage-block-approve").each(function(){
- var stageId = $(this).attr('data-id');
- });
- });
-
- $(".team-chat-user").on('click',function(e){
- e.stopPropagation();
- var recipentId = $(this).attr('data-id');
- $("#team-chat-form #recipentId").val(recipentId);
- });
-
- $(".team-order-block").on('click', function(){
-
- $('.team-order-block').each(function () {
- $(this).removeClass('orAct');
- });
- $(this).addClass('orAct');
-
- var teamId = $(this).attr('data-team-id');
- var orderId = $(this).attr('data-order-id');
- $("#team-chat-form #teamId").val(teamId);
- $("#team-chat-form #orderId").val(orderId);
-
- var inbox = document.getElementById('message-chat-team-space');
- inbox.innerHTML = '';
-
- $.ajax({
- url: '/api/message',
- type: 'GET',
- data: {csrfmiddlewaretoken: csrftoken, 'team': teamId,'order': orderId},
- dataType: 'json',
- success: function (json) {
- $.each(json.results, function (i, v) {
- var senderName = 'Вы';
- var className = 'youChat';
- if (v.sender.id !== currentChatUser) {
- senderName = v.sender.username;
- className = '';
- }
- inbox.innerHTML += '' +
- '
' + senderName + '
' + v.created + '' +
- '
' + v.text + '
';
- });
- }
- });
-
- });
-
- // Вытащить сообщения для чата заказа
- $('.order-block').on('click', function () {
- $('.order-block').each(function () {
- $(this).removeClass('orAct');
- });
- $(this).addClass('orAct');
-
- var orderId = $(this).attr('data-id');
- var recipentId = $(this).attr('data-recipent-id');
- $("#chat-contractor-order #orderId").val(orderId);
- $("#add-form-order-note #orderNote").val(orderId);
-
- $("#chat-contractor-order #recipentOrderId").val(recipentId);
- $("#add-form-order-note #recipentNote").val(recipentId);
-
- 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) {
- var senderName = 'Вы';
- var className = 'youChat';
- if (v.sender.id !== currentChatUser) {
- senderName = v.sender.username;
- className = '';
- }
- inbox.innerHTML += '' +
- '
' + senderName + '
' + v.created + '' +
- '
' + v.text + '
';
- });
- }
- });
-
- $.ajax({
- url: '/api/note/',
- type: 'GET',
- data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},
- dataType: 'json',
- success: function (json) {
- console.log(json.results);
- var noteHtmlInbox = '';
- $.each(json.results, function (i, v) {
- noteHtmlInbox += ''+ v.text +'';
-
- });
- $(".notes-block").html(noteHtmlInbox);
- }
- });
-
- $.ajax({
- url: '/api/stages/',
- type: 'GET',
- data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},
- dataType: 'json',
- success: function (json) {
- console.log(json.results);
- var htmlInbox = "";
- var stagesReservedHtml = "";
- if (json.results.length > 0) {
-
- $.each(json.results, function (i, v) {
- if(v.is_paid){
- stagesReservedHtml += 'Сумма за этап '+ i +'.Зарезервирована.';
- }else{
- stagesReservedHtml += 'Сумма за этап '+ i +'.Не зарезервирована.';
- }
- htmlInbox += '' +
- '
Этап ' + v.pos + '' + v.name + '
' +
- '
Результаты этапа:' + v.result + '
' +
- '
'+ v.status+'
' + v.cost + ' ';
- });
- htmlInbox += '';
-
- }
- $("#order-stages").html(htmlInbox);
- $(".stages-paid").html(stagesReservedHtml);
-
- }
- });
-
- });
-
- $('#add-note-button').on('click', function(){
- $.ajax({
- url: '/api/note/',
- type: 'POST',
- beforeSend: function (xhr) {
- xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
- },
- data:$("#add-form-order-note").serialize(),
- dataType: 'json',
- success: function (json) {
- console.log(json);
- $("#add-form-order-note #chat2").val("");
-
- },
- error: function(e){
- console.log('error');
- console.log(e);
- }
- });
- });
-
- // Вытащить сообщения для конактов
- $('.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 = '';
- $.ajax({
- url: '/api/message',
- type: 'GET',
- data: {
- csrfmiddlewaretoken: csrftoken,
- 'operand': 'in',
- 'sender_id': currentChatUser,
- 'recipent_id': userId
- },
- dataType: 'json',
- success: function (json) {
- $.each(json.results, function (i, v) {
- console.log(v.sender.id);
- var senderName = 'Вы';
- var className = 'youChat';
- if (v.sender.id == userId) {
- senderName = v.sender.username;
- className = '';
- }
- inbox.innerHTML += '' +
- '
' + senderName + '
' + v.created + '' +
- '
' + v.text + '
';
- });
- }
- });
-
- });
-
- //Добавить сообщение для исполнителей в группе
- $("#add-team-chat-message").on('click', function(){
- var chatMessage = $("#team-chat-form #chatText").val();
- var recipentId = $("#team-chat-form #recipentId").val();
- var senderId = $("#team-chat-form #senderId").val();
- var teamId = $("#team-chat-form #teamId").val();
- var orderId = $("#team-chat-form #orderId").val();
-
- var documentSendIds = $("#documentSendIds").val();
- console.log(documentSendIds);
- var teamDocumentIds = documentSendIds.split(';');
- teamDocumentIds.pop();
- console.log(teamDocumentIds);
- socket.add_team_message({
- "format_type": "add_message_team",
- "data": {
- "sender_id": senderId,
- "recipent_id": recipentId,
- "chat_message": chatMessage,
- "team_id": teamId,
- "order_id": orderId,
- }
- });
-
-
-
- $("#team-chat-form #chatText").val("");
- });
-
- // Добавить сообщение для контакта
- $('#contact-chat-add-message').on('click', function () {
- var chatMessage = $("#chat").val();
- var recipentId = $("#recipentId").val();
- var senderId = $("#senderId").val();
-
- socket.add_contact_message({
- "format_type": "add_message_contact",
- "data": {
- "sender_id": senderId,
- "recipent_id": recipentId,
- "chat_message": chatMessage,
- }
- });
-
- var inbox = $('#message-chat-space').html();
- $('#message-chat-space').html(inbox + '' +
- '
' + chatMessage + '
');
-
- $("#chat").val("");
- });
-
- $('#order-chat-add-message').on('click', function () {
- var chatMessage = $("#chat-contractor-order #chat").val();
- var recipentId = $("#chat-contractor-order #recipentOrderId").val();
- var senderId = $("#chat-contractor-order #senderOrderId").val();
- var orderId = $("#chat-contractor-order #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-contractor-order #chat").val("");
-
- });
-
- });
-
-
- $(function () {
- var currentChatUser = {{ request.user.pk }};
- var socket = new SocketHandler();
- var form = document.getElementById('message_form');
- var csrftoken = getCookie('csrftoken');
- setTimeout(function(){
- $(".user-block").first().trigger('click');
- }, 10);
-
- setTimeout(function(){
- $(".order-block").first().trigger('click');
- }, 100);
-
- $("#order-stages").on('click', "#addStagesForm", function(){
- $(".new-stages-form").each(function(i,v){
- console.log($(this).serialize());
- alert($(this).serialize());
-
- $.ajax({
- url: '/api/stages/',
- type: 'POST',
- beforeSend: function (xhr) {
- xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
- },
- data:$(this).serialize(),
- dataType: 'json',
- success: function (json) {
- console.log(json);
- },
- error: function(e){
- console.log('error');
- console.log(e);
- }
- });
-
- });
- });
-
- $('#order-stages-tab').on('change', '#countStage', function(){
- var countStage = parseInt($(this).val());
- var updateFormStages = $(".update-stages-form");
-
- alert(updateFormStages.length);
- alert(typeof updateFormStages.length);
- var limitCount = countStage + 1;
- for (var i = 2; i < limitCount; i++) {
- var stageCopy = $("#stage1").clone().attr("id", "stage" + i).addClass("stages_form");
- $("#stage1").after(stageCopy);
- }
- });
-
- $('.order-block').on('click', function () {
- $("#chat-order-add").css("display", "block");
- $("#formsetStage").css("display","block");
-
- $('.order-block').each(function () {
- $(this).removeClass('orAct');
- });
-
- $(this).addClass('orAct');
- var orderId = $(this).attr('data-id');
- var recipentId = $(this).attr('data-recipent-id');
- $("#chat-order-add #orderId").val(orderId);
- $("#chat-order-add #recipentId").val(recipentId);
- $(".orderStagesInput").val(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) {
- var senderName = 'Вы';
- var className = 'youChat';
-
- if (v.sender.id !== currentChatUser) {
- senderName = v.sender.username;
- className = '';
- }
-
- inbox.innerHTML += '' +
- '
' + senderName + '
' + v.created + '' +
- '
' + v.text + '
';
- });
- }
- });
-
- $.ajax({
- url: '/api/stages/',
- type: 'GET',
- data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},
- dataType: 'json',
- success: function (json) {
- var stageCount = json.results.length;
- if (stageCount == 0){
- stageCountVal = 1;
- }else{
- stageCountVal = stageCount;
- }
-
- var htmlInbox = "";
-
- var htmlInboxStage = 'Какое кол-во этапов подразумевает работа? ' +
- '
';
-
- if (stageCount == 0){
- htmlInboxStage += '';
- }
- var statusNotAgreed = true;
- $.each(json.results, function (i, v) {
- if (v.status == "not_agreed") {
- htmlInbox += '';
- } else {
- statusNotAgreed = false;
- htmlInboxStage = "";
- htmlInbox += '' +
- '
Этап ' + v.pos + '' + v.name + '
' +
- '
Результаты этапа:' + v.result + '
' +
- '
до 16.03.2015
' + v.cost + ' ';
-
- }
- });
-
- if (statusNotAgreed) {
- htmlInbox += '';
- }
- htmlInbox = htmlInboxStage + htmlInbox;
- $("#order-stages").html(htmlInbox);
- }
- });
-
-
- });
-
- // Вытащить сообщения для конактов
- $('.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 = '';
- $.ajax({
- url: '/api/message',
- type: 'GET',
- data: {
- csrfmiddlewaretoken: csrftoken,
- 'operand': 'in',
- 'sender_id': currentChatUser,
- 'recipent_id': userId
- },
- dataType: 'json',
- success: function (json) {
- $.each(json.results, function (i, v) {
- var senderName = 'Вы';
- var className = 'youChat';
- if (v.sender.id == userId) {
- senderName = v.sender.username;
- className = '';
- }
- inbox.innerHTML += '' +
- '
' + senderName + '
' + v.created + '' +
- '
' + v.text + '
';
- });
- }
- });
-
- });
-
- $('#contact-chat-add-message').on('click', function () {
- var chatMessage = $("#chat").val();
- var recipentId = $("#recipentId").val();
- var senderId = $("#senderId").val();
-
- socket.add_contact_message({
- "format_type": "add_message_contact",
- "data": {
- "sender_id": senderId,
- "recipent_id": recipentId,
- "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("");
- });
-
- });
-
- var userId = '{{ request.user.pk }}';
-
- var SocketHandler = function () {
- var url = 'ws://127.0.0.1:8888/chat/' + userId + '/';
- var sock = new WebSocket(url);
- var intervalId;
- sock.onopen = function () {
- console.log("Start connect");
- intervalId = setInterval(function () {
- sock.send('{"dummy": 1}');
- }, 150);
- };
- sock.onmessage = function (event) {
- console.log(event.data);
- var message = JSON.parse(event.data);
- var inbox;
- if (message.answer_type == 'contact') {
- inbox = document.getElementById('message-chat-space');
- } else if (message.answer_type == 'order' || message.answer_type == 'add_order') {
- inbox = document.getElementById('message-chat-order-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 = "";
-
+ 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
new file mode 100644
index 0000000..de9b61d
--- /dev/null
+++ b/chat/templates/chat1.js
@@ -0,0 +1,75 @@
+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
new file mode 100644
index 0000000..6283706
--- /dev/null
+++ b/chat/templates/chat2.js
@@ -0,0 +1,68 @@
+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 3b91f43..f651d77 100644
--- a/chat/templates/chat_contractor.html
+++ b/chat/templates/chat_contractor.html
@@ -80,9 +80,16 @@
@@ -246,84 +253,14 @@
{% endblock %}
{% block js_block %}
- {# #}
-
+
+
+
+
{% endblock %}
diff --git a/chat/testapp.py b/chat/testapp.py
index 7de5d58..61fe46d 100644
--- a/chat/testapp.py
+++ b/chat/testapp.py
@@ -43,13 +43,25 @@ class ChatHandler(websocket.WebSocketHandler):
if 'dummy' in parsed:
return
- self.add_message(parsed)
+ print(parsed['format_type'])
+ if 'approve_stages' in parsed['format_type']:
+ self.approve_stages(parsed)
+ else:
+ self.add_message(parsed)
def on_close(self):
self.waiters.remove((self.user_id, self))
-# waiter.write_message({'msg': message, 'answer_type': 'add_contact'})
-# waiter.write_message({'msg': message, 'answer_type': 'add_order'})
+ @gen.coroutine
+ def approve_stages(self, data):
+ print(data)
+ sender_id = data['data']['sender_id']
+ recipent_id = data['data']['recipent_id']
+ order_id = data['data'].get('order_id')
+ answer_type = data['format_type']
+ waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id)
+ for waiter in waiters:
+ waiter.write_message({'msg': 'Этапы обновлены', 'answer_type': answer_type})
@gen.coroutine
def add_message(self, message_data):
diff --git a/reviews/models.py b/reviews/models.py
index 174e2c3..a4e68ba 100644
--- a/reviews/models.py
+++ b/reviews/models.py
@@ -14,11 +14,11 @@ class Review(models.Model):
type = models.CharField(max_length=30, choices=TYPE_REVIEWS, default='neutral')
text = models.TextField()
created = models.DateTimeField(default=timezone.now)
- target_customer = models.ForeignKey('users.User', related_name='reviews_by_contractor', null=True, blank=True)
- target_contractor = models.ForeignKey('users.User', related_name='reviews_by_customer', null=True, blank=True)
+ target_customer = models.ForeignKey('users.User', related_name='reviews_by_customer', null=True, blank=True)
+ target_contractor = models.ForeignKey('users.User', related_name='reviews_by_contractor', null=True, blank=True)
target_team = models.ForeignKey('users.Team', related_name='reviews_by_team', null=True, blank=True)
- from_customer = models.ForeignKey('users.User', related_name='contractor_reviews', null=True, blank=True)
- from_contractor = models.ForeignKey('users.User', related_name='customer_reviews', null=True, blank=True)
+ from_customer = models.ForeignKey('users.User', related_name='customer_reviews', null=True, blank=True)
+ from_contractor = models.ForeignKey('users.User', related_name='contractor_reviews', null=True, blank=True)
from_team = models.ForeignKey('users.Team', related_name='team_reviews', null=True, blank=True)
def __str__(self):
diff --git a/templates/partials/header.html b/templates/partials/header.html
index 1b34556..4624e77 100644
--- a/templates/partials/header.html
+++ b/templates/partials/header.html
@@ -1,5 +1,6 @@
{% load staticfiles %}
{% load thumbnail %}
+{% load user_tags %}
@@ -122,11 +123,7 @@
{% if request.user.is_contractor %}
-
-
45%
+ {% contractor_indicator request.user %}
{% endif %}
{% else %}
diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html
index 4bc6c16..706acdb 100644
--- a/users/templates/contractor_profile.html
+++ b/users/templates/contractor_profile.html
@@ -463,11 +463,11 @@
- {% for review in contractor.contractor_reviews.all %}
+ {% for review in contractor.reviews_by_contractor.all %}
- {{ review.text }}
+ {{ review.text|safe }}
diff --git a/users/templates/templatetags/contractor_indicator.html b/users/templates/templatetags/contractor_indicator.html
new file mode 100644
index 0000000..1a123d7
--- /dev/null
+++ b/users/templates/templatetags/contractor_indicator.html
@@ -0,0 +1,5 @@
+
+{{ current_indicator }}%
diff --git a/users/templatetags/__init__.py b/users/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/users/templatetags/user_tags.py b/users/templatetags/user_tags.py
index a8bf069..4df1023 100644
--- a/users/templatetags/user_tags.py
+++ b/users/templatetags/user_tags.py
@@ -1,8 +1,27 @@
+import math
from django import template
+
register = template.Library()
+@register.inclusion_tag('templatetags/contractor_indicator.html', takes_context=True)
+def contractor_indicator(context, contractor):
+ fields = ['avatar','cro','first_name','gender',
+ 'last_name', 'patronym', 'phone',
+ 'skype','website','location']
+ indicator_sum = 0
+ for f in fields:
+ if hasattr(contractor,f) and getattr(contractor, f):
+ indicator_sum += 1
+
+ current_indicator = math.ceil(math.ceil(100 / len(fields)) * indicator_sum)
+ current_indicator_px = math.ceil(current_indicator / 2)
+ return {
+ 'current_indicator': current_indicator,
+ 'current_indicator_px': current_indicator_px,
+ }
+
@register.filter('has_group')
def has_group(user, group_name):