#ARC-16 Fixes

remotes/origin/PR-39
Mukhtar 9 years ago
parent c0ded3c66d
commit b5b1d3e949
  1. 6
      api/views.py
  2. 18
      assets/js/chat.js
  3. 3
      assets/js/chat_contractor.js
  4. 1
      chat/chat.py
  5. 6
      chat/templates/chat_contractor.html
  6. 3
      chat/templates/chat_customer.html
  7. 8
      chat/views.py
  8. 8
      users/templates/contractor_filter.html
  9. 4
      users/templates/contractor_office.html
  10. 58
      users/templates/contractor_profile.html
  11. 3
      users/templatetags/user_tags.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

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

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

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

@ -39,7 +39,7 @@
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
{% for contact in contacts_users %}
<div class="message messd user-block" data-id="{{ contact.pk }}">
<div class="message messd user-block" id="userBlock{{ contact.pk }}" data-id="{{ contact.pk }}">
<div class="imgMess">
{% thumbnail contact.avatar "60x60" crop="center" as im %}
<img src="{{ im.url }}" alt="mess-image">
@ -235,7 +235,7 @@
<div class="messageBlock box-sizing disTab">
<p>Заказы</p>
{% for torder in team_orders %}
<div class="team-order-block orderBlock box-sizing"
<div class="team-order-block orderBlock box-sizing" id="teamOrderBlock{{ torder.pk }}"
data-team-id="{{ torder.team.pk }}" data-order-id="{{ torder.pk }}" data-id="{{ torder.pk }}">
<span class="dimovChat"></span>
<p class="titleOB">
@ -272,7 +272,7 @@
{% endfor %}
{% for yteam in your_teams %}
<div class="team-block orderBlock box-sizing" data-team-id="{{ yteam.pk }}">
<div class="team-block orderBlock box-sizing" id="teamMyBlock{{ yteam.pk }}" data-team-id="{{ yteam.pk }}">
<span class="dimovChat"></span>
<p class="titleOB">
{{ yteam }}

@ -31,7 +31,7 @@
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
{% for contact in contacts_users %}
<div class="message messd user-block" data-id="{{ contact.pk }}">
<div class="message messd user-block" id="userBlock{{ contact.pk }}" data-id="{{ contact.pk }}">
<div class="imgMess">
{% 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');

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

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

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

@ -203,6 +203,7 @@
<div class="galleryWork2 disTab -portfolios-container">
{% if False %}
{% for p in contractor.portfolios.all %}
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
@ -437,6 +438,10 @@
<input type="file" name="upload" id="upload-resume">
<p>Загрузить резюме</p>
</div>
<div class="upload2 up-l2" id="remove-resume-file" style="display:{% if contractor.contractor_resume.resume_file %}block;{% else %}none;{% endif %}">
<p style="margin:0;">Удалить резюме</p>
</div>
</form>
</div>
@ -454,10 +459,8 @@
<div id="resume-success"></div>
{% if contractor.contractor_resume.resume_file %}
<a
style="display: {% if contractor.contractor_resume.resume_file %}block{% else %}none{% endif %};"
href="{% if contractor.contractor_resume.resume_file %}{{ contractor.contractor_resume.resume_file.url }}{% endif %}"
class="download-summ">
<a style="display:block;"
href="{{ contractor.contractor_resume.resume_file.url }}" class="download-summ">
скачать резюме
</a>
{% 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 {
$('<a href="' + data.resume_file +'" class="download-summ">скачать резюме</a>').insertAfter('#resume-success');
}
$("#remove-resume-file").show();
console.log(data);
},
error: function(jqXHR){

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

Loading…
Cancel
Save