import json from django.shortcuts import render from django.conf import settings from django.views.generic import View,CreateView from django.http import HttpResponse, Http404 from django.db.models import Q from django.contrib.auth.mixins import LoginRequiredMixin from wsgiref.util import FileWrapper from .response import JSONResponse, response_mimetype from .utils import serialize from .models import Message, Documents from projects.models import Order from wallets.models import Transaction from users.models import User, Team class DocumentCreateView(CreateView): model = Documents fields = '__all__' def form_valid(self, form): self.object = form.save() files = [serialize(self.object)] data = {'files': files} response = JSONResponse(data, mimetype=response_mimetype(self.request)) response['Content-Disposition'] = 'inline; filename=files.json' return response def form_invalid(self, form): # import code; code.interact(local=dict(globals(), **locals())) data = json.dumps(form.errors) return HttpResponse(content=data, status=400, content_type='application/json') 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.customer_projects.select_related('order').exclude(order__contractor__isnull=True, order__team__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: team_ids = [] 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() 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() orders = Order.objects.filter(Q(contractor=request.user) | Q(team_id__in=team_ids)).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') your_teams = Team.objects.filter(Q(contractors__id=request.user.pk) | Q(owner=request.user)) 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, 'your_teams': your_teams, }) 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 def download_file(request,file_name): try: document = Documents.objects.get(file=file_name) except Documents.DoesNotExist: document = None file_name = document.file response = HttpResponse(FileWrapper(file_name), content_type='application/force-download') response['Content-Disposition'] = 'attachment; filename=' + file_name.name return response