import json from django.shortcuts import render from django.conf import settings 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 projects.models import Order from wallets.models import Transaction from users.models import User, Team 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() 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) transaction = Transaction.objects.get_or_create(customer=request.user, type='reservation', complete=False) self.template_name = 'chat_customer.html' return render(request, self.template_name, {'contacts_users': contacts_users, 'chat_messages': chat_messages, 'orders': orders, 'transaction': transaction[0], 'YANDEX_MONEY': settings.YANDEX_MONEY, }) 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: 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() 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