Example #1
0
 def create_visit(self,
                  product,
                  start=datetime.utcnow(),
                  end=datetime.utcnow() + timedelta(hours=1),
                  workflow_status=Visit.WORKFLOW_STATUS_BEING_PLANNED):
     visit = Visit(workflow_status=workflow_status)
     visit.save()
     eventtime = EventTime(product=product,
                           visit=visit,
                           start=pytz.utc.localize(start),
                           end=pytz.utc.localize(end))
     eventtime.save()
     return visit
    def lists_for_teachers(self):
        unit_qs = self.request.user.userprofile.get_unit_queryset()
        profile = self.request.user.userprofile

        return [
            {
                'color': self.HEADING_BLUE,
                'type': 'Product',
                'title': {
                    'text': _(u'Mine tilbud'),
                    'link': reverse('search') + '?u=-3'
                },
                'queryset': Product.objects.filter(
                    eventtime__visit=profile.potentially_assigned_visits
                ).distinct().order_by("title"),
            },
            {
                'color': self.HEADING_RED,
                'type': 'Visit',
                'title': ungettext_lazy(
                    u"%(count)d besøg der mangler undervisere",
                    u"%(count)d besøg der mangler undervisere",
                    'count'
                ),
                'queryset': Visit.unit_filter(
                    profile.can_be_assigned_to_qs, unit_qs
                ).order_by(
                    'eventtime__start', 'eventtime__end'
                )
            },
            {
                'color': self.HEADING_GREEN,
                'type': 'Visit',
                'title': ungettext_lazy(
                    u"%(count)d besøg hvor jeg er underviser",
                    u"%(count)d besøg hvor jeg er underviser",
                    'count'
                ),
                'queryset': self.sort_vo_queryset(
                    Visit.unit_filter(
                        profile.all_assigned_visits(),
                        unit_qs
                    )
                )
            }
        ]
    def get_context_data(self, **kwargs):
        context = {'lists': []}

        context['lists'].extend(self.lists_by_role())
        context['thisurl'] = reverse('user_profile')

        unit_qs = self.request.user.userprofile.get_unit_queryset()

        today_qs = Visit.get_todays_visits().filter(
            eventtime__product__organizationalunit=unit_qs
        )
        recent_qs = Visit.get_recently_held().filter(
            eventtime__product__organizationalunit=unit_qs
        )

        context['lists'].extend([{
            'color': self.HEADING_GREEN,
            'type': 'Visit',
            'title': ungettext_lazy(
                u'%(count)d senest afviklet besøg',
                u'%(count)d seneste afviklede besøg',
                'count'
            ) % {'count': recent_qs.count()},
            'queryset': recent_qs,
            'limit': 10,
            'limited_qs': recent_qs[:10],
            'button': {
                'text': _(u'Søg i alle'),
                'link': reverse('visit-customlist') + "?type=%s" %
                VisitCustomListView.TYPE_LATEST_COMPLETED
            }
        }, {
            'color': self.HEADING_BLUE,
            'type': 'Visit',
            'title': ungettext_lazy(
                u'%(count)d dagens besøg',
                u'%(count)d dagens besøg',
                'count'
            ) % {'count': today_qs.count()},
            'queryset': today_qs,
            'limit': 10,
            'limited_qs': today_qs[:10],
            'button': {
                'text': _(u'Søg i alle'),
                'link': reverse('visit-customlist') + "?type=%s" %
                VisitCustomListView.TYPE_TODAY
            }
        }])

        context['is_editor'] = self.request.user.userprofile.has_edit_role()

        for list in context['lists']:
            if 'title' in list:
                if type(list['title']) == dict:
                    if isinstance(list['title']['text'], Promise):
                        list['title']['text'] = \
                            list['title']['text'] % \
                            {'count': list['queryset'].count()}
                elif isinstance(list['title'], Promise):
                    list['title'] = list['title'] % \
                        {'count': list['queryset'].count()}

        context.update(**kwargs)
        return super(ProfileView, self).get_context_data(**context)
    def lists_for_editors(self):
        visitlist = {
            'color': self.HEADING_BLUE,
            'type': 'Product',
            'title': {
                'text': ungettext_lazy(
                    u'%(count)d tilbud i min enhed',
                    u'%(count)d tilbud i min enhed',
                    'count'
                ),
                'link': reverse('search') + '?u=-3'
            },
            'queryset': Product.objects.filter(
                organizationalunit=self.request.user
                .userprofile.get_unit_queryset()
            ).order_by("-statistics__created_time"),
        }

        if visitlist['queryset'].count() > 10:
            visitlist['limited_qs'] = visitlist['queryset'][:10]
            visitlist['button'] = {
                'text': _(u'Søg i alle'),
                'link': reverse('search') + '?u=-3'
            }

        unit_qs = self.request.user.userprofile.get_unit_queryset()

        unplanned = {
            'color': self.HEADING_RED,
            'type': 'Visit',
            'title': ungettext_lazy(
                u"%(count)d besøg under planlægning",
                u"%(count)d besøg under planlægning",
                'count'
            ),
            'queryset': self.sort_vo_queryset(
                Visit.unit_filter(
                    Visit.being_planned_queryset(
                        is_multi_sub=False
                    ),
                    unit_qs
                ).annotate(num_participants=(
                    Coalesce(Count("bookings__booker__pk"), 0) +
                    Coalesce(
                        Sum("bookings__booker__attendee_count"),
                        0
                    )
                )).filter(num_participants__gte=1)
                # See also VisitSearchView.filter_by_participants
            )
        }
        if unplanned['queryset'].count() > 10:
            unplanned['limited_qs'] = unplanned['queryset'][:10]
            unplanned['button'] = {
                'text': _(u'Søg i alle'),
                'link': reverse('visit-search') + '?u=-3&w=-1&go=1&p_min=1'
            }

        planned = {
            'color': self.HEADING_GREEN,
            'type': 'Visit',
            'title': ungettext_lazy(
                u"%(count)d planlagt besøg",
                u"%(count)d planlagte besøg",
                'count'
            ),
            'queryset': self.sort_vo_queryset(
                Visit.unit_filter(
                    Visit.planned_queryset(
                        is_multi_sub=False
                    ),
                    unit_qs
                )
            )
        }
        if planned['queryset'].count() > 10:
            planned['limited_qs'] = planned['queryset'][:10]
            planned['button'] = {
                'text': _(u'Søg i alle'),
                'link': reverse('visit-search') + '?u=-3&w=-2&go=1'
            }

        return [visitlist, unplanned, planned]