You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.6 KiB
80 lines
3.6 KiB
import json
|
|
from django.shortcuts import render
|
|
from django.views.generic import View
|
|
from django.http import HttpResponse, Http404
|
|
from django.db.models import Q
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
|
|
from .models import Message
|
|
from users.models import User
|
|
|
|
|
|
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_authenticated() and 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()
|
|
|
|
users_ids = []
|
|
for msg in customer_contacts:
|
|
a, b = msg
|
|
if a != request.user.pk:
|
|
users_ids.append(a)
|
|
if b != request.user.pk:
|
|
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))
|
|
orders = request.user.projects.select_related('order').exclude(order__contractor__isnull=True)
|
|
self.template_name = 'chat_customer.html'
|
|
return render(request, self.template_name, {'contacts_users': contacts_users,
|
|
'chat_messages': chat_messages,
|
|
'orders': orders})
|
|
else:
|
|
orders = request.user.orders.all()
|
|
contractor_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()
|
|
users_ids = []
|
|
for msg in contractor_contacts:
|
|
a, b = msg
|
|
if a != request.user.pk:
|
|
users_ids.append(a)
|
|
if b != request.user.pk:
|
|
users_ids.append(b)
|
|
if user_id:
|
|
users_ids.append(int(user_id))
|
|
contacts_users = User.objects.filter(pk__in=users_ids)
|
|
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by(
|
|
'created')
|
|
|
|
if request.user.is_owner_team():
|
|
team_orders = request.user.team.orders.all()
|
|
else:
|
|
team_orders = []
|
|
|
|
self.template_name = 'chat_contractor.html'
|
|
return render(request, self.template_name, {'orders': orders,
|
|
'contacts_users': contacts_users,
|
|
'chat_messages': chat_messages,
|
|
'team_orders': team_orders,
|
|
})
|
|
|
|
|
|
def messages_delete(request):
|
|
if request.is_ajax():
|
|
sender = request.POST.get('sender_id')
|
|
recipent = request.POST.get('recipent_id')
|
|
queryset = Message.objects.all()
|
|
# queryset = queryset.filter(Q(sender__in=[sender,recipent]),Q(recipent__in=[sender,recipent]))
|
|
# queryset.delete()
|
|
data = {'status': 'ok'}
|
|
return HttpResponse(json.dumps(data), content_type='application/json')
|
|
else:
|
|
raise Http404
|
|
|