Commit 8cde917a3c9f0e8932f2e435b9e88a0da28deb5c

Authored by Gustavo
1 parent cc5c45e4

Included reports and send message views for webconference

Showing 1 changed file with 178 additions and 0 deletions   Show diff stats
webconference/views.py
... ... @@ -6,6 +6,18 @@ from django.utils.translation import ugettext_lazy as _
6 6 from django.contrib.auth.mixins import LoginRequiredMixin
7 7 from django.http import JsonResponse
8 8  
  9 +from webpage.forms import FormModalMessage
  10 +from chat.models import Conversation, TalkMessages, ChatVisualizations
  11 +import textwrap
  12 +import json
  13 +from channels import Group
  14 +import datetime
  15 +from users.models import User
  16 +from django.utils.html import strip_tags
  17 +from django.template.loader import render_to_string
  18 +from django.utils import formats
  19 +from subjects.models import Subject
  20 +
9 21 from amadeus.permissions import has_subject_permissions, has_resource_permissions
10 22  
11 23 import time
... ... @@ -533,3 +545,169 @@ class ConferenceSettings(braces_mixins.LoginRequiredMixin, braces_mixins.Staffus
533 545 context['title'] = _('Web Conference Settings')
534 546  
535 547 return context
  548 +class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView):
  549 + log_component = 'resources'
  550 + log_action = 'view_statistics'
  551 + log_resource = 'webconference'
  552 + log_context = {}
  553 +
  554 + login_url = reverse_lazy("users:login")
  555 + redirect_field_name = 'next'
  556 + model = Webconference
  557 + template_name = 'webconference/relatorios.html'
  558 +
  559 + def dispatch(self, request, *args, **kwargs):
  560 + slug = self.kwargs.get('slug', '')
  561 + webconference = get_object_or_404(Webconference, slug = slug)
  562 +
  563 + if not has_subject_permissions(request.user, webconference.topic.subject):
  564 + return redirect(reverse_lazy('subjects:home'))
  565 +
  566 + return super(StatisticsView, self).dispatch(request, *args, **kwargs)
  567 +
  568 + def get_context_data(self, **kwargs):
  569 + context = super(StatisticsView, self).get_context_data(**kwargs)
  570 +
  571 + self.log_context['category_id'] = self.object.topic.subject.category.id
  572 + self.log_context['category_name'] = self.object.topic.subject.category.name
  573 + self.log_context['category_slug'] = self.object.topic.subject.category.slug
  574 + self.log_context['subject_id'] = self.object.topic.subject.id
  575 + self.log_context['subject_name'] = self.object.topic.subject.name
  576 + self.log_context['subject_slug'] = self.object.topic.subject.slug
  577 + self.log_context['topic_id'] = self.object.topic.id
  578 + self.log_context['topic_name'] = self.object.topic.name
  579 + self.log_context['topic_slug'] = self.object.topic.slug
  580 + self.log_context['webconference_id'] = self.object.id
  581 + self.log_context['webconference_name'] = self.object.name
  582 + self.log_context['webconference_slug'] = self.object.slug
  583 +
  584 + super(StatisticsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  585 +
  586 +
  587 + context['title'] = _('Webconference Reports')
  588 +
  589 + slug = self.kwargs.get('slug')
  590 + webconference = get_object_or_404(Webconference, slug = slug)
  591 +
  592 + date_format = "%d/%m/%Y %H:%M" if self.request.GET.get('language','') == 'pt-br' else "%m/%d/%Y %I:%M %p"
  593 + if self.request.GET.get('language','') == "":
  594 + start_date = datetime.datetime.now() - datetime.timedelta(30)
  595 + end_date = datetime.datetime.now()
  596 + else :
  597 + start_date = datetime.datetime.strptime(self.request.GET.get('init_date',''),date_format)
  598 + end_date = datetime.datetime.strptime(self.request.GET.get('end_date',''),date_format)
  599 + context["init_date"] = start_date
  600 + context["end_date"] = end_date
  601 + alunos = webconference.students.all()
  602 + if webconference.all_students :
  603 + alunos = webconference.topic.subject.students.all()
  604 +
  605 + vis_ou = Log.objects.filter(context__contains={'webconference_id':webconference.id},resource="webconference",action="view",user_email__in=(aluno.email for aluno in alunos), datetime__range=(start_date,end_date + datetime.timedelta(minutes = 1)))
  606 + did,n_did,history = str(_("Realized")),str(_("Unrealized")),str(_("Historic"))
  607 + re = []
  608 + data_n_did,data_history = [],[]
  609 + json_n_did, json_history = {},{}
  610 +
  611 + for log_al in vis_ou.order_by("datetime"):
  612 + data_history.append([str(alunos.get(email=log_al.user_email)),
  613 + ", ".join([str(x) for x in webconference.topic.subject.group_subject.filter(participants__email=log_al.user_email)]),
  614 + log_al.action,log_al.datetime])
  615 +
  616 + json_history["data"] = data_history
  617 +
  618 + not_view = alunos.exclude(email__in=[log.user_email for log in vis_ou.distinct("user_email")])
  619 + index = 0
  620 + for alun in not_view:
  621 + data_n_did.append([index,str(alun),", ".join([str(x) for x in webconference.topic.subject.group_subject.filter(participants__email=alun.email)]),str(_('View')), str(alun.email)])
  622 + index += 1
  623 + json_n_did["data"] = data_n_did
  624 +
  625 +
  626 + context["json_n_did"] = json_n_did
  627 + context["json_history"] = json_history
  628 + c_visualizou = vis_ou.distinct("user_email").count()
  629 + column_view = str(_('View'))
  630 + re.append([str(_('File link')),did,n_did])
  631 + re.append([column_view,c_visualizou, alunos.count() - c_visualizou])
  632 + context['topic'] = webconference.topic
  633 + context['subject'] = webconference.topic.subject
  634 + context['db_data'] = re
  635 + context['title_chart'] = _('Actions about resource')
  636 + context['title_vAxis'] = _('Quantity')
  637 + context['view'] = column_view
  638 + context["n_did_table"] = n_did
  639 + context["did_table"] = did
  640 + context["history_table"] = history
  641 + return context
  642 +
  643 +from django.http import HttpResponse #used to send HTTP 404 error to ajax
  644 +
  645 +class SendMessage(LoginRequiredMixin, LogMixin, generic.edit.FormView):
  646 + log_component = 'resources'
  647 + log_action = 'send'
  648 + log_resource = 'webconference'
  649 + log_context = {}
  650 +
  651 + login_url = reverse_lazy("users:login")
  652 + redirect_field_name = 'next'
  653 +
  654 + template_name = 'webconference/send_message.html'
  655 + form_class = FormModalMessage
  656 +
  657 + def dispatch(self, request, *args, **kwargs):
  658 + slug = self.kwargs.get('slug', '')
  659 + webconference = get_object_or_404(Webconference, slug = slug)
  660 + self.webconference = webconference
  661 +
  662 + if not has_subject_permissions(request.user, webconference.topic.subject):
  663 + return redirect(reverse_lazy('subjects:home'))
  664 +
  665 + return super(SendMessage, self).dispatch(request, *args, **kwargs)
  666 +
  667 + def form_valid(self, form):
  668 + message = form.cleaned_data.get('comment')
  669 + image = form.cleaned_data.get("image")
  670 + users = (self.request.POST.get('users[]','')).split(",")
  671 + user = self.request.user
  672 + subject = self.webconference.topic.subject
  673 +
  674 + if (users[0] is not ''):
  675 + for u in users:
  676 + to_user = User.objects.get(email=u)
  677 + talk, create = Conversation.objects.get_or_create(user_one=user,user_two=to_user)
  678 + created = TalkMessages.objects.create(text=message,talk=talk,user=user,subject=subject,image=image)
  679 +
  680 + simple_notify = textwrap.shorten(strip_tags(message), width = 30, placeholder = "...")
  681 +
  682 + if image is not '':
  683 + simple_notify += " ".join(_("[Photo]"))
  684 +
  685 + notification = {
  686 + "type": "chat",
  687 + "subtype": "subject",
  688 + "space": subject.slug,
  689 + "user_icon": created.user.image_url,
  690 + "notify_title": str(created.user),
  691 + "simple_notify": simple_notify,
  692 + "view_url": reverse("chat:view_message", args = (created.id, ), kwargs = {}),
  693 + "complete": render_to_string("chat/_message.html", {"talk_msg": created}, self.request),
  694 + "container": "chat-" + str(created.user.id),
  695 + "last_date": _("Last message in %s")%(formats.date_format(created.create_date, "SHORT_DATETIME_FORMAT"))
  696 + }
  697 +
  698 + notification = json.dumps(notification)
  699 +
  700 + Group("user-%s" % to_user.id).send({'text': notification})
  701 +
  702 + ChatVisualizations.objects.create(viewed = False, message = created, user = to_user)
  703 +
  704 + success = str(_('The message was successfull sent!'))
  705 + return JsonResponse({"message":success})
  706 + erro = HttpResponse(str(_("No user selected!")))
  707 + erro.status_code = 404
  708 + return erro
  709 +
  710 + def get_context_data(self, **kwargs):
  711 + context = super(SendMessage,self).get_context_data()
  712 + context["webconference"] = get_object_or_404(Webconference, slug=self.kwargs.get('slug', ''))
  713 + return context
... ...