From b5b1d3e949b7870b5b48a64db472df640f9c33f6 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Fri, 9 Sep 2016 15:54:37 +0300 Subject: [PATCH] #ARC-16 Fixes --- api/views.py | 6 ++- assets/js/chat.js | 18 +++++++- assets/js/chat_contractor.js | 3 ++ chat/chat.py | 1 + chat/templates/chat_contractor.html | 6 +-- chat/templates/chat_customer.html | 3 +- chat/views.py | 8 ++-- users/templates/contractor_filter.html | 8 ++-- users/templates/contractor_office.html | 4 +- users/templates/contractor_profile.html | 58 +++++++++++++++++++------ users/templatetags/user_tags.py | 3 ++ 11 files changed, 88 insertions(+), 30 deletions(-) diff --git a/api/views.py b/api/views.py index 0ce545b..a05e91a 100755 --- a/api/views.py +++ b/api/views.py @@ -1,5 +1,5 @@ from django.conf import settings -from django.db.models import Q +from django.db.models import Q, F from rest_framework import permissions from rest_framework.pagination import PageNumberPagination from rest_framework.viewsets import ModelViewSet @@ -124,7 +124,9 @@ class MessageViewSet(ModelViewSet): 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])).filter(order__isnull=True).order_by('created') + queryset = queryset.filter(Q(sender__in=[sender_id,recipent_id]),Q(recipent__in=[sender_id,recipent_id])).\ + filter(order__isnull=True).\ + filter(~Q(sender=F('recipent'))).order_by('created') return queryset diff --git a/assets/js/chat.js b/assets/js/chat.js index 744d209..0d5dbda 100644 --- a/assets/js/chat.js +++ b/assets/js/chat.js @@ -100,14 +100,29 @@ $(function () { $("#orderBlock" + ordHashId).trigger('click'); $("a[href='#tab2']").trigger('click'); }, 100); - } else if (currentHash.indexOf("#team") == 0) { + } else if(currentHash.indexOf("#user") == 0){ + var userHashId = currentHash.replace("#user", ""); + setTimeout(function () { + $("#userBlock" + userHashId).trigger('click'); + //$("a[href='#tab1']").trigger('click'); + }, 100); + } else if (currentHash.indexOf("#teamorder") == 0) { + var teamHashId = currentHash.replace("#teamorder", ""); + $("#teamOrderBlock" + teamHashId).trigger('click'); + $("a[href='#tab3']").trigger('click'); + } else if (currentHash.indexOf("#myteam") == 0){ + var teamHashId = currentHash.replace("#myteam", ""); + $("#teamMyBlock" + teamHashId).trigger('click'); + $("a[href='#tab3']").trigger('click'); } else { setTimeout(function () { $(".user-block").first().trigger('click'); + location.hash = ''; }, 10); setTimeout(function () { $(".order-block").first().trigger('click'); + location.hash = ''; }, 500); } // Информация о заказе @@ -231,6 +246,7 @@ $(function () { // Вытащить сообщения для конактов $('.user-block').on('click', function () { var contactId = $(this).attr('data-id'); + location.hash = '#user' + contactId; $("#contact-chat-form #recipentContactId").val(contactId); $("#add-form-contractor-note #recipentNoteContractor").val(contactId); diff --git a/assets/js/chat_contractor.js b/assets/js/chat_contractor.js index a1c0b8d..4602b75 100644 --- a/assets/js/chat_contractor.js +++ b/assets/js/chat_contractor.js @@ -142,6 +142,7 @@ $(function () { $(this).addClass('orAct'); var teamId = $(this).attr('data-team-id'); + location.hash = '#teamorder' + teamId; var orderId = $(this).attr('data-order-id'); $("#team-chat-form #teamId").val(teamId); $("#team-chat-form #orderTeamId").val(orderId); @@ -229,6 +230,7 @@ $(function () { docList.innerHTML = ''; var teamId = $(this).attr('data-team-id'); + location.hash = '#myteam' + teamId; $("#team-chat-form #teamId").val(teamId); $("#add-form-team-note #teamNote").val(teamId); $("#team-chat-form #orderTeamId").val(""); @@ -301,6 +303,7 @@ $(function () { }); $(this).addClass('orAct'); var orderId = $(this).attr('data-id'); + location.hash = '#order' + orderId; var recipentId = $(this).attr('data-recipent-id'); var projectId = $(this).attr('data-project-id'); diff --git a/chat/chat.py b/chat/chat.py index c3d2f4a..4b79f5d 100644 --- a/chat/chat.py +++ b/chat/chat.py @@ -54,6 +54,7 @@ class ChatHandler(websocket.WebSocketHandler): @gen.coroutine def add_message(self, message_data): + sender_id = message_data['data']['sender_id'] recipent_id = message_data['data']['recipent_id'] order_id = message_data['data'].get('order_id', None) diff --git a/chat/templates/chat_contractor.html b/chat/templates/chat_contractor.html index 4e15818..3084f02 100644 --- a/chat/templates/chat_contractor.html +++ b/chat/templates/chat_contractor.html @@ -39,7 +39,7 @@

Контакты

{% for contact in contacts_users %} -
+
{% thumbnail contact.avatar "60x60" crop="center" as im %} mess-image @@ -235,7 +235,7 @@

Заказы

{% for torder in team_orders %} -

@@ -272,7 +272,7 @@ {% endfor %} {% for yteam in your_teams %} -

+

{{ yteam }} diff --git a/chat/templates/chat_customer.html b/chat/templates/chat_customer.html index ab648f3..6ed4007 100644 --- a/chat/templates/chat_customer.html +++ b/chat/templates/chat_customer.html @@ -31,7 +31,7 @@

Контакты

{% for contact in contacts_users %} -
+
{% if contact.avatar %} {% thumbnail contact.avatar "60x60" crop="center" as im %} @@ -664,6 +664,7 @@ $(this).addClass('orAct'); var orderId = $(this).attr('data-id'); + location.hash = '#order' + orderId; var projectId = $(this).attr('data-project-id'); var recipentId = $(this).attr('data-recipent-id'); var secureOrder = $(this).attr('data-secure-deal'); diff --git a/chat/views.py b/chat/views.py index 6ffe399..67e6829 100644 --- a/chat/views.py +++ b/chat/views.py @@ -37,11 +37,12 @@ class ChatUserView(LoginRequiredMixin, View): template_name = '' def get(self, request, *args, **kwargs): - # import code; code.interact(local=dict(globals(), **locals())) user_id = request.GET.get('user_id',None) if request.user.is_customer(): customer_contacts = Message.objects.values_list('sender_id', 'recipent_id'). \ - filter(Q(recipent_id=request.user.pk) | Q(sender_id=request.user.pk)).filter(Q(team_id=None)).distinct() + filter(Q(recipent_id=request.user.pk) | Q(sender_id=request.user.pk)).\ + filter(Q(team_id=None)).\ + filter(is_delete=False).distinct() users_ids = [] for msg in customer_contacts: @@ -52,7 +53,6 @@ class ChatUserView(LoginRequiredMixin, View): users_ids.append(b) if user_id: users_ids.append(int(user_id)) - # import code; code.interact(local=dict(globals(), **locals())) contacts_users = User.objects.filter(pk__in=users_ids) chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)) @@ -70,7 +70,7 @@ class ChatUserView(LoginRequiredMixin, View): if request.user.is_owner_team(): team_ids.append(request.user.team.pk) team_orders = request.user.team.orders.all() - teams = Team.objects.filter(contractors__id=request.user.pk).all() + # teams = Team.objects.filter(contractors__id=request.user.pk).all() else: 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() diff --git a/users/templates/contractor_filter.html b/users/templates/contractor_filter.html index c3e4afe..359e63c 100644 --- a/users/templates/contractor_filter.html +++ b/users/templates/contractor_filter.html @@ -451,8 +451,8 @@ format_type: 'add_message_contact', data: { - sender_id: customerId, - recipent_id: contractorId, + sender_id: String(customerId), + recipent_id: String(contractorId), chat_message: msg, }, }) @@ -472,8 +472,8 @@ format_type: 'add_message_contact', data: { - sender_id: customerId, - recipent_id: contractorId, + sender_id: String(customerId), + recipent_id: String(contractorId), chat_message: msg, }, }) diff --git a/users/templates/contractor_office.html b/users/templates/contractor_office.html index bc3e9d5..52d5b27 100644 --- a/users/templates/contractor_office.html +++ b/users/templates/contractor_office.html @@ -347,8 +347,8 @@ format_type: 'add_message_contact', data: { - sender_id: {{ request.user.pk }}, - recipent_id: $contractorSelect.select2('val'), + sender_id: '{{ request.user.pk }}', + recipent_id: String($contractorSelect.select2('val')), chat_message: 'Приглашаю в группу http://{{ request.get_host }}{% url 'users:team-profile' pk=request.user.team.pk %}', }, }) diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html index 5a9a704..7694eff 100644 --- a/users/templates/contractor_profile.html +++ b/users/templates/contractor_profile.html @@ -203,6 +203,7 @@
{% if False %} + {% for p in contractor.portfolios.all %}
@@ -437,6 +438,10 @@

Загрузить резюме

+ +
+

Удалить резюме

+
@@ -454,10 +459,8 @@
{% if contractor.contractor_resume.resume_file %} - + скачать резюме {% endif %} @@ -692,7 +695,7 @@ var portfUrl = new URI('/api/portfolios/') var workSellUrl = new URI('/api/work-sells/') - var pageSize = 3 + var pageSize = 1 function loadMorePortfolios() { var query = portfUrl.query(true) @@ -789,8 +792,8 @@ format_type: 'add_message_contact', data: { - sender_id: {{ request.user.pk }}, - recipent_id: {{ contractor.pk }}, + sender_id: '{{ request.user.pk }}', + recipent_id: '{{ contractor.pk }}', chat_message: 'Приглашаю в группу http://{{ request.get_host }}{% url 'users:team-profile' pk=request.user.team.pk %}', }, }) @@ -843,8 +846,8 @@ format_type: 'add_message_contact', data: { - sender_id: customerId, - recipent_id: contractorId, + sender_id: String(customerId), + recipent_id: String(contractorId), chat_message: msg, }, }) @@ -983,13 +986,36 @@ }); var url = '/work_sell/basic/'; var csrftoken = $.cookie('csrftoken'); + + $("body").on("click","#remove-resume-file", function(e) { + e.preventDefault(); + var _this = $(this); + $.ajax({ + url:'/api/contractorresume/{{ contractor.contractor_resume.pk }}/', + method:'PUT', + beforeSend: function (xhr) { + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); + }, + data: {resume_file: null}, + cache: false, + dataType: 'json', + success: function(data){ + $("#resume-success").html("Файл для резюме удален!"); + $(_this).css('display','none'); + $('.download-summ').css('display','none'); + + console.log(data); + }, + error: function(jqXHR){ + console.log(jqXHR); + } + }); + }); $("#upload-resume").on('change',function(e){ $("#resume-success").html(""); - var formData = new FormData($(this).closest("form")); + var formData = new FormData(); formData.append('resume_file', e.target.files[0]); - console.log(formData); - console.log(e.target.files[0]); $.ajax({ url:'/api/contractorresume/{{ contractor.contractor_resume.pk }}/', method:'PUT', @@ -1003,7 +1029,13 @@ contentType: false, success: function(data){ $("#resume-success").html("Файл для резюме успешно загружен!"); - $(".download-summ").css('display','block').attr('href',data.resume_file); + var downloadSumm = $(".download-summ"); + if(downloadSumm.length>0){ + downloadSumm.css('display','block').attr('href',data.resume_file); + }else { + $('скачать резюме').insertAfter('#resume-success'); + } + $("#remove-resume-file").show(); console.log(data); }, error: function(jqXHR){ diff --git a/users/templatetags/user_tags.py b/users/templatetags/user_tags.py index f0a2289..5fd2b7f 100644 --- a/users/templatetags/user_tags.py +++ b/users/templatetags/user_tags.py @@ -27,3 +27,6 @@ def contractor_indicator(context, contractor): def has_group(user, group_name): groups = user.groups.all().values_list('name', flat=True) return True if group_name in groups else False + +def count_new_message(user): + pass