#ARC-18 Fixes

remotes/origin/PR-39
Mukhtar 9 years ago
parent c355a09eb7
commit e0b887ee3e
  1. 15
      assets/js/chat.js
  2. 9
      assets/js/chat_contractor.js
  3. 3
      assets/js/chat_customer.js
  4. 2
      chat/serializers.py
  5. 9
      chat/templates/chat_contractor.html
  6. 6
      chat/templates/chat_customer.html
  7. 29
      chat/views.py
  8. 2
      projects/serializers.py
  9. 5
      users/models.py
  10. 3
      users/templatetags/user_tags.py

@ -563,15 +563,14 @@ function dialog (message, yesCallback, notCallback) {
var recipentId = $("#chat-order-add #recipentId").val();
var senderId = $("#chat-order-add #senderId").val();
var orderId = $("#chat-order-add #orderId").val();
if (chatMessage) {
var sendLinks = $("#document-send-order a");
var sendLinks = $("#document-send-order a");
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Входящий файл: <br> <a href="'+ $(this).attr('href') + '">'+ $(this).text() +'</a><br>';
documentLinks += 'Приложенный файл. скачать: <br> <a href="'+ $(this).attr('href') + '">'+ $(this).text() +'</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' +
'<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' +
'<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
@ -605,16 +604,18 @@ function dialog (message, yesCallback, notCallback) {
var chatMessage = $("#chat").val();
var recipentId = $("#recipentContactId").val();
var senderId = $("#senderContactId").val();
if (chatMessage) {
var sendLinks = $("#document-send-contact a");
if (chatMessage || sendLinks.length > 0) {
$("#contact-chat-form .errorEmptyMessage").hide();
var sendLinks = $("#document-send-contact a");
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Входящий файл: <br> <a href="'+ $(this).attr('href') + '">'+ $(this).text() +'</a><br>';
documentLinks += 'Приложенный файл. скачать: <br> <a href="'+ $(this).attr('href') + '">'+ $(this).text() +'</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' +
'<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' +
'<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';

@ -588,15 +588,14 @@ $(function () {
var orderId = $("#team-chat-form #orderTeamId").val();
var documentSendIds = $("#documentSendIds").val();
var teamIds = $("#team-chat-form #teamIds").val();
if (chatMessage) {
var sendLinks = $("#document-send a");
var sendLinks = $("#document-send a");
if (chatMessage || sendLinks.length > 0) {
var sendLinkIds = "";
var documentLinks = "";
var documentAttachFiles = "";
$.each(sendLinks, function (i, v) {
sendLinkIds += $(this).attr('data-id') + ';';
documentLinks += 'Входящий файл: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentLinks += 'Приложенный файл. скачать: <br> <a href="' + $(this).attr('href') + '">' + $(this).text() + '</a><br>';
documentAttachFiles += '<li style="word-break: break-all;">' +
'<a class="file-link" href="' + $(this).attr('href') + '">' + $(this).text() + '</a>' +
'<div class="remove-document" data-id="' + $(this).attr('data-id') + '" style="right:-10px;"></div></li>';
@ -622,6 +621,8 @@ $(function () {
$("#team-chat-form #chatText").val("");
$("#document-send").html("");
$("#documentSendIds").val("");
} else {
$("#team-chat-form .errorEmptyMessage").show();
}
});

@ -303,6 +303,7 @@ $(function () {
$(".new-stages-form").each(function (i, v) {
var _this = $(this);
console.log($(this).serialize());
$.ajax({
url: '/api/stages/',
type: 'POST',
@ -332,7 +333,7 @@ $(function () {
$(".update-stages-form").each(function (i, v) {
var _this = $(this);
var currentStageId = parseInt($(this).attr('data-stage-id'));
console.log($(this).serialize());
$.ajax({
url: '/api/stages/' + currentStageId + '/',
type: 'PUT',

@ -63,7 +63,7 @@ class MessageSerializer(ModelSerializer):
out = obj.text
documents = obj.documents.all()
if len(documents)>0:
documents_str = '<br>'.join(['Приложенный файл: <br><a target="_blank" href="/chat/download/' + doc.file.name + '">' + doc.file.name + '</a>' for doc in documents])
documents_str = '<br>'.join(['Приложенный файл. скачать: <br><a target="_blank" href="/chat/download/' + doc.file.name + '">' + doc.file.name + '</a>' for doc in documents])
out += '<br><br>' + documents_str
return out

@ -7,7 +7,7 @@
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<h1>Чат {{ request.user }} {{ request.user.pk }}</h1>
<h1>Чат</h1>
</div>
<div class="btnReadyBlock disTab">
@ -17,15 +17,15 @@
<ul class="nav nav-tabs nav-justified">
<li role="presentation">
<a href="#tab1" data-toggle="tab">Личные<span class="count-tab">0</span></a>
<a href="#tab1" data-toggle="tab">Личные<span class="count-tab">{{ contacts_users_count }}</span></a>
</li>
<li role="presentation">
<a href="#tab2" data-toggle="tab">Заказчики<span class="count-tab">0</span></a>
<a href="#tab2" data-toggle="tab">Заказчики<span class="count-tab">{{ orders_ms_count }}</span></a>
</li>
<li role="presentation">
<a href="#tab3" data-toggle="tab">Исполнители,Группы<span class="count-tab">0</span></a>
<a href="#tab3" data-toggle="tab">Исполнители,Группы<span class="count-tab">{{ teams_ms_count }}</span></a>
</li>
</ul>
@ -321,6 +321,7 @@
<input type="hidden" name="team_ids" id="teamIds">
<input type="hidden" name="document-send" id="documentSendIds">
<textarea id="chatText" class="chat-textarea box-sizing"></textarea>
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя отправить</p>
<div class="bunChat">
<div class="setChat box-sizing upload">
<input type="file" name="file" id="upload-document-team">

@ -7,7 +7,7 @@
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<h1>Чат {{ request.user.get_score }}</h1>
<h1>Чат</h1>
</div>
<div class="btnReadyBlock disTab">
<div class="triangle1"></div>
@ -15,10 +15,10 @@
<div class="profileTabs2">
<ul class="nav nav-tabs nav-justified">
<li role="presentation">
<a href="#tab1" data-toggle="tab">Личные<span class="count-tab">0</span></a>
<a href="#tab1" data-toggle="tab">Личные<span class="count-tab">{{ contacts_users_count }}</span></a>
</li>
<li role="presentation">
<a href="#tab2" data-toggle="tab">Исполнители<span class="count-tab">0</span>
<a href="#tab2" data-toggle="tab">Исполнители<span class="count-tab">{{ orders_ms_count }}</span>
</a>
</li>
</ul>

@ -9,7 +9,7 @@ from wsgiref.util import FileWrapper
from .response import JSONResponse, response_mimetype
from .utils import serialize
from .models import Message, Documents
from .models import Message, Documents, NewMessage
from projects.models import Order, Project
from wallets.models import Transaction
from users.models import User, Team
@ -53,16 +53,25 @@ class ChatUserView(LoginRequiredMixin, View):
users_ids.append(b)
if user_id:
users_ids.append(int(user_id))
print(users_ids)
contacts_users = User.objects.filter(pk__in=users_ids)
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk))
orders = request.user.customer_projects.select_related('order').filter(state='active').exclude(order__contractor__isnull=True, order__team__isnull=True)
order_ids = [order.order.pk for order in orders]
transaction = Transaction.objects.get_or_create(customer=request.user, type='reservation', complete=False)
self.template_name = 'chat_customer.html'
contacts_users_count = request.user.new_messages.filter(message__sender__in=users_ids,
message__order__isnull=True,
message__team__isnull=True
).count()
orders_ms_count = request.user.new_messages.filter(message__order__in=order_ids, message__team__isnull=True).count()
self.template_name = 'chat_customer.html'
return render(request, self.template_name, {'contacts_users': contacts_users,
'chat_messages': chat_messages,
'contacts_users_count': contacts_users_count,
'orders_ms_count': orders_ms_count,
'orders': orders,
'transaction': transaction[0],
'YANDEX_MONEY': settings.YANDEX_MONEY,
@ -90,17 +99,31 @@ class ChatUserView(LoginRequiredMixin, View):
users_ids.append(b)
if user_id:
users_ids.append(int(user_id))
contacts_users = User.objects.filter(pk__in=users_ids)
contacts_users_count = request.user.new_messages.filter(message__sender__in=users_ids,
message__order__isnull=True,
message__team__isnull=True
).count()
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by(
'created')
your_teams = Team.objects.filter(Q(contractors__id=request.user.pk) | Q(owner=request.user))
orders_ms_count = request.user.new_messages.filter(message__order__in=orders, message__team__isnull=True).count()
teams_ms_count = request.user.new_messages.filter(message__team__in=your_teams, message__order__isnull=True).count()
self.template_name = 'chat_contractor.html'
return render(request, self.template_name, {'orders': orders,
'contacts_users': contacts_users,
'contacts_users_count': contacts_users_count,
'orders_ms_count': orders_ms_count,
'teams_ms_count': teams_ms_count,
'chat_messages': chat_messages,
'team_orders': team_orders,
'your_teams': your_teams,
})

@ -80,7 +80,7 @@ class StageSerializer(ModelSerializer):
term = serializers.DateField(format="%d.%m.%Y", input_formats=['%d.%m.%Y',])
def validate(self, data):
if hasattr(data, 'pos') and data['pos'] > 1:
if 'pos' in data and data['pos'] > 1:
pos = data['pos'] -1
stage_last = Stage.objects.filter(order=data['order'], pos=pos)
if stage_last:

@ -5,8 +5,6 @@ from django.db import models
from django.db.models import Sum
from django.utils import timezone, formats
from mptt.models import TreeForeignKey, TreeManyToManyField
from pprint import pprint
import datetime
import pydash as _; _.map = _.map_; _.filter = _.filter_
from archilance import util
@ -216,9 +214,6 @@ class User(AbstractBaseUser, PermissionsMixin):
def has_team(self):
return self.is_contractor() and bool(util.get_related_or_none(self, 'team'))
def is_owner_profile(self, user_id):
pass
def is_owner_team(self):
return Team.objects.filter(owner=self.pk).exists()

@ -61,9 +61,10 @@ def get_new_count_message(team_pk,user=None):
count = NewMessage.objects.filter(user=user, message__team=team_pk, message__order__isnull=True).count()
return count
@register.simple_tag
def get_new_count_for_contact(contact, current_user):
count = current_user.new_messages.filter(message__sender=contact).count()
count = current_user.new_messages.filter(message__sender=contact, message__order__isnull=True, message__team__isnull=True).count()
return count

Loading…
Cancel
Save