From c52d296305a0ca6b25c93ce42996694172cab0a2 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Mon, 29 Aug 2016 11:30:15 +0300 Subject: [PATCH] #ARC-18 Fix upload documents for customer --- api/views.py | 11 ++++ assets/js/chat.js | 66 +++++++++++++++++----- chat/migrations/0008_documents_created.py | 21 +++++++ chat/migrations/0009_auto_20160829_1120.py | 20 +++++++ chat/models.py | 1 + chat/serializers.py | 2 + chat/templates/chat_customer.html | 60 +++++++++++++++----- chat/views.py | 1 - 8 files changed, 155 insertions(+), 27 deletions(-) create mode 100644 chat/migrations/0008_documents_created.py create mode 100644 chat/migrations/0009_auto_20160829_1120.py diff --git a/api/views.py b/api/views.py index a998e92..4ebd8d6 100755 --- a/api/views.py +++ b/api/views.py @@ -64,6 +64,17 @@ class DocumentViewSet(ModelViewSet): # filter_class = DocumentsFilterSet # permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + def get_queryset(self): + queryset = Documents.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 ProjectViewSet(ModelViewSet): queryset = Project.objects.all() diff --git a/assets/js/chat.js b/assets/js/chat.js index 123ec42..047012e 100644 --- a/assets/js/chat.js +++ b/assets/js/chat.js @@ -101,12 +101,9 @@ function csrfSafeMethod(method) { var socket = new SocketHandler(); var csrftoken = getCookie('csrftoken'); $(function () { - - var currentHash = URI(location.href).hash(); - console.log(currentHash); - if (currentHash.indexOf("#order") == 0) { + if (currentHash.indexOf("#order") == 0) { var ordHashId = currentHash.replace("#order", ""); setTimeout(function () { $("#orderBlock" + ordHashId).trigger('click'); @@ -177,7 +174,6 @@ $(function () { }); }); - // Добавление сообщения для заказа. $('#order-chat-add-message').on('click', function (e) { e.preventDefault(); @@ -255,18 +251,17 @@ $(function () { }); }); - - - + $("#upload-document-order").bind('fileuploadsubmit', function(e, data){ + data.formData = { + sender: $("#chat-order-add #senderId").val(), + recipent: $("#chat-order-add #recipentId").val(), + order: $("#chat-order-add #orderId").val(), + } + }); //Загрузка документов $('#upload-document-order').fileupload({ url: '/chat/create/', - formData: { - sender: $("#chat-order-add #senderId").val(), - recipent: $("#chat-order-add #recipentId").val(), - order: $("#chat-order-add #orderId").val(), - }, crossDomain: false, beforeSend: function (xhr, settings) { $('#progress .progress-bar').css( @@ -297,6 +292,51 @@ $(function () { progress + '%' ); } + }).prop('disabled', !$.support.fileInput) + .parent().addClass($.support.fileInput ? undefined : 'disabled'); //Загрузка документов + + + + $("#upload-document-contact").bind('fileuploadsubmit', function(e, data){ + data.formData = { + sender: $("#contact-chat-form #senderContactId").val(), + recipent: $("#contact-chat-form #recipentContactId").val(), + } + + }); + + + + $('#upload-document-contact').fileupload({ + url: '/chat/create/', + crossDomain: false, + beforeSend: function (xhr, settings) { + console.log(this.formData); + $('#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 htmlImg = '

' + file.name + '

'; + var document_send = $(htmlImg).appendTo("#document-send-contact"); + }); + }, + fail: function (e) { + console.log(e); + }, + 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'); diff --git a/chat/migrations/0008_documents_created.py b/chat/migrations/0008_documents_created.py new file mode 100644 index 0000000..e939141 --- /dev/null +++ b/chat/migrations/0008_documents_created.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-29 01:00 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('chat', '0007_auto_20160826_1458'), + ] + + operations = [ + migrations.AddField( + model_name='documents', + name='created', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/chat/migrations/0009_auto_20160829_1120.py b/chat/migrations/0009_auto_20160829_1120.py new file mode 100644 index 0000000..f21eb4f --- /dev/null +++ b/chat/migrations/0009_auto_20160829_1120.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-29 08:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('chat', '0008_documents_created'), + ] + + operations = [ + migrations.AlterField( + model_name='documents', + name='created', + field=models.DateTimeField(auto_now_add=True), + ), + ] diff --git a/chat/models.py b/chat/models.py index dd7f79a..5cc9468 100644 --- a/chat/models.py +++ b/chat/models.py @@ -45,6 +45,7 @@ class Documents(models.Model): team = models.ForeignKey(Team, related_name='documents', null=True, blank=True) sender = models.ForeignKey(User, related_name='sender_documents') recipent = models.ForeignKey(User, related_name='recipent_documents', null=True, blank=True) + created = models.DateTimeField(auto_now_add=True) def __str__(self): return self.file.url diff --git a/chat/serializers.py b/chat/serializers.py index e4d8467..6cb8c06 100644 --- a/chat/serializers.py +++ b/chat/serializers.py @@ -4,6 +4,7 @@ from rest_framework.serializers import ModelSerializer from .models import Message, Notes, Documents from users.serializers import UserSerializer + class DocumentsSerializer(ModelSerializer): class Meta: @@ -18,6 +19,7 @@ class DocumentsSerializer(ModelSerializer): ) + class MessageSerializer(ModelSerializer): sender = UserSerializer() recipent = UserSerializer() diff --git a/chat/templates/chat_customer.html b/chat/templates/chat_customer.html index e4c6818..25c510c 100644 --- a/chat/templates/chat_customer.html +++ b/chat/templates/chat_customer.html @@ -65,25 +65,32 @@
- - + + +
-
-

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

- - Не более 10 файлов с общим объемом 500мб - +
+ +

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

- - отправить - +
+ отправить
+
+
+

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

+
    +
+{# #} +{# Распечатать с помощью ресурса#} +{# #} +
@@ -619,7 +626,7 @@ // Вытащить сообщения для конактов $('.user-block').on('click', function () { var userId = $(this).attr('data-id'); - $("#contact-chat-form #recipentId").val(userId); + $("#contact-chat-form #recipentContactId").val(userId); $("#add-form-contractor-note #recipentNoteContractor").val(userId); $('.user-block').each(function () { @@ -628,7 +635,33 @@ $(this).addClass('mesAct'); var inbox = document.getElementById('message-chat-space'); + var docList = document.getElementById('documentSpace'); inbox.innerHTML = ''; + docList.innerHTML = ''; + + $.ajax({ + url:'/api/documents', + type: 'GET', + data:{ + csrfmiddlewaretoken: csrftoken, + 'operand': 'in', + 'sender_id': currentChatUser, + 'recipent_id': userId + }, + dataType: 'json', + + success: function (json){ + console.log(json); + + $.each(json.results, function (i, v) { + docList.innerHTML += '
  • '+ v.file+'
  • '; + }); + }, + error: function(e){ + console.log(e); + } + }); + $.ajax({ url: '/api/message', type: 'GET', @@ -659,8 +692,8 @@ $('#contact-chat-add-message').on('click', function (e) { e.preventDefault(); var chatMessage = $("#chat").val(); - var recipentId = $("#recipentId").val(); - var senderId = $("#senderId").val(); + var recipentId = $("#recipentContactId").val(); + var senderId = $("#senderContactId").val(); socket.add_contact_message({ "format_type": "add_message_contact", @@ -672,6 +705,7 @@ }); $("#chat").val(""); + $("#document-send-contact").html(""); }); diff --git a/chat/views.py b/chat/views.py index 9d5c090..dedf1be 100644 --- a/chat/views.py +++ b/chat/views.py @@ -19,7 +19,6 @@ class DocumentCreateView(CreateView): fields = '__all__' def form_valid(self, form): - # import code; code.interact(local=dict(globals(), **locals())) self.object = form.save() files = [serialize(self.object)] data = {'files': files}