예제 #1
0
 def test_event_formset_valid(self):
     formset = EventFormSet(data=self.formset_data())
     self.assertTrue(formset.is_valid())
예제 #2
0
def event_admin_list(request, ev_type):

    ev_type_abbreviation = 'EV' if ev_type == 'events' else 'CL'
    ev_type_text = 'workshop' if ev_type == 'events' else 'class'

    queryset = Event.objects.filter(
        event_type__event_type=ev_type_abbreviation,
        date__gte=timezone.now()
    ).order_by('date')
    events = True if queryset.count() > 0 else False
    show_past = False

    if request.method == 'POST':
        if "past" in request.POST:
            queryset = Event.objects.filter(
                event_type__event_type=ev_type_abbreviation,
                date__lte=timezone.now()
            ).order_by('date')
            events = True if queryset.count() > 0 else False
            show_past = True
            eventformset = EventFormSet(queryset=queryset)
        elif "upcoming" in request.POST:
            queryset = queryset
            show_past = False
            eventformset = EventFormSet(queryset=queryset)
        else:
            eventformset = EventFormSet(request.POST)

            if eventformset.is_valid():
                if not eventformset.has_changed():
                    messages.info(request, "No changes were made")
                else:
                    for form in eventformset:
                        if form.has_changed():
                            if 'DELETE' in form.changed_data:
                                messages.success(
                                    request, mark_safe(
                                        '{} <strong>{}</strong> has been deleted!'.format(
                                            ev_type_text.title(), form.instance,
                                        )
                                    )
                                )
                                ActivityLog.objects.create(
                                    log='{} {} (id {}) deleted by admin user {}'.format(
                                        ev_type_text.title(), form.instance,
                                        form.instance.id, request.user.username
                                    )
                                )
                            else:
                                for field in form.changed_data:
                                    messages.success(
                                        request, mark_safe(
                                            "<strong>{}</strong> updated for "
                                            "<strong>{}</strong>".format(
                                                field.title().replace("_", " "),
                                                form.instance))
                                    )

                                    ActivityLog.objects.create(
                                        log='{} {} (id {}) updated by admin '
                                            'user {}: field_changed: '
                                            '{}'.format(
                                            ev_type_text.title(),
                                            form.instance, form.instance.id,
                                            request.user.username,
                                            field.title().replace("_", " ")
                                        )
                                    )

                            form.save()

                        for error in form.errors:
                            messages.error(request, mark_safe("{}".format(error)))
                    eventformset.save()
                return HttpResponseRedirect(
                    reverse('studioadmin:{}'.format(ev_type),)
                )
            else:
                messages.error(
                    request,
                    mark_safe(
                        "There were errors in the following fields:\n{}".format(
                            '\n'.join(
                                ["{}".format(error) for error in eventformset.errors]
                            )
                        )
                    )
                )

    else:
        eventformset = EventFormSet(queryset=queryset)

    return render(
        request, 'studioadmin/admin_events.html', {
            'eventformset': eventformset,
            'type': ev_type,
            'events': events,
            'sidenav_selection': ev_type,
            'show_past': show_past,
            }
    )
예제 #3
0
파일: events.py 프로젝트: judy2k/pipsevents
def event_admin_list(request, ev_type):

    if ev_type == 'events':
        ev_type_text = 'event'
        events = Event.objects.select_related('event_type').filter(
            event_type__event_type='EV',
            date__gte=timezone.now() - timedelta(hours=1)
        ).order_by('date')
    else:
        ev_type_text = 'class'
        events = Event.objects.select_related('event_type').filter(
            date__gte=timezone.now() - timedelta(hours=1)
        ).exclude(event_type__event_type='EV').order_by('date')

    show_past = False

    if request.method == 'POST':
        if "past" in request.POST:
            show_past = True
            events, eventformset = _get_past_events(ev_type, request)
        elif "upcoming" in request.POST:
            show_past = False
            eventformset = EventFormSet(queryset=events)
        else:
            eventformset = EventFormSet(request.POST)

            if eventformset.is_valid():
                if not eventformset.has_changed():
                    messages.info(request, "No changes were made")
                else:
                    for form in eventformset:
                        if form.has_changed():
                            if 'DELETE' in form.changed_data:
                                messages.success(
                                    request, mark_safe(
                                        '{} <strong>{}</strong> has been deleted!'.format(
                                            ev_type_text.title(), form.instance,
                                        )
                                    )
                                )
                                ActivityLog.objects.create(
                                    log='{} {} (id {}) deleted by admin user {}'.format(
                                        ev_type_text.title(), form.instance,
                                        form.instance.id, request.user.username
                                    )
                                )
                            else:
                                for field in form.changed_data:
                                    messages.success(
                                        request, mark_safe(
                                            "<strong>{}</strong> updated for "
                                            "<strong>{}</strong>".format(
                                                field.title().replace("_", " "),
                                                form.instance))
                                    )

                                    ActivityLog.objects.create(
                                        log='{} {} (id {}) updated by admin user {}: field_changed: {}'.format(
                                            ev_type_text.title(),
                                            form.instance, form.instance.id,
                                            request.user.username, field.title().replace("_", " ")
                                        )
                                    )

                            form.save()
                    eventformset.save()
                return HttpResponseRedirect(
                    reverse('studioadmin:{}'.format(ev_type),)
                )
            else:  # pragma: no cover
                # currently only boolean fields, this is left here in case of
                # future additional fields
                messages.error(
                    request,
                    mark_safe(
                        "There were errors in the following fields:\n{}".format(
                            '\n'.join(
                                [
                                    "{}".format(error)
                                    for error in eventformset.errors
                                    ]
                            )
                        )
                    )
                )

    else:
        page = request.GET.get('page')  # only past is paginated
        if page:
            show_past = True
            events, eventformset = _get_past_events(ev_type, request)
        else:
            eventformset = EventFormSet(queryset=events)

    non_deletable_events = Booking.objects.select_related('event').filter(event__in=events).distinct().values_list('event__id', flat=True)

    return TemplateResponse(
        request, 'studioadmin/admin_events.html', {
            'eventformset': eventformset,
            'type': ev_type,
            'events': events,
            'sidenav_selection': ev_type,
            'show_past': show_past,
            'non_deletable_events': non_deletable_events
            }
    )
예제 #4
0
 def test_event_formset_valid(self):
     formset = EventFormSet(data=self.formset_data())
     self.assertTrue(formset.is_valid())