def index(request): results = {} today = timezone.now() if request.user.is_staff: yesterday = today - datetime.timedelta(days=1) results['yesterday'] = Activity.objects.filter(activity_date=yesterday.date()) results['today'] = Activity.objects.filter(activity_date=today) context = {'results': results, 'yesterday' : yesterday, 'today': today} return render(request, 'activities/admin_dashboard.html', context) else: results['all'] = Activity.objects.filter(author__username=request.user.username) results['today'] = [item for item in results['all'] if item.activity_date == today.date()] results['last_seven_days'] = [item for item in results['all'] \ if (item.activity_date + datetime.timedelta(days=7) > today.date() \ and item.activity_date < today.date())] if request.method == "POST": form = ActivityForm(request.POST) if form.is_valid(): activity = Activity(author=request.user, description=form.cleaned_data["description"], activity_date=form.cleaned_data["activity_date"], activity_type=form.cleaned_data["activity_type"], ticket_number=form.cleaned_data["ticket_number"], hours_worked=form.cleaned_data["hours_worked"], comment=form.cleaned_data["comment"]) activity.save() messages.add_message(request, messages.SUCCESS, "Activity added successfully!") return redirect(reverse('index')) else: form = ActivityForm() context = { 'name' : request.user.username, 'results' : results, 'form' : form , 'today': today.date()} return render(request, "activities/dashboard.html", context)
def post(self, *args, **kwargs): context = {} form = ActivityForm(self.request.POST) if form.is_valid(): form.save(commit=True) context['form'] = form return self.render_to_response(context)
def index(request): results = {} today = timezone.now() if request.user.is_staff: yesterday = today - datetime.timedelta(days=1) results['yesterday'] = Activity.objects.filter( activity_date=yesterday.date()) results['today'] = Activity.objects.filter(activity_date=today) context = {'results': results, 'yesterday': yesterday, 'today': today} return render(request, 'activities/admin_dashboard.html', context) else: results['all'] = Activity.objects.filter( author__username=request.user.username) results['today'] = [ item for item in results['all'] if item.activity_date == today.date() ] results['last_seven_days'] = [item for item in results['all'] \ if (item.activity_date + datetime.timedelta(days=7) > today.date() \ and item.activity_date < today.date())] if request.method == "POST": form = ActivityForm(request.POST) if form.is_valid(): activity = Activity( author=request.user, description=form.cleaned_data["description"], activity_date=form.cleaned_data["activity_date"], activity_type=form.cleaned_data["activity_type"], ticket_number=form.cleaned_data["ticket_number"], hours_worked=form.cleaned_data["hours_worked"], comment=form.cleaned_data["comment"]) activity.save() messages.add_message(request, messages.SUCCESS, "Activity added successfully!") return redirect(reverse('index')) else: form = ActivityForm() context = { 'name': request.user.username, 'results': results, 'form': form, 'today': today.date() } return render(request, "activities/dashboard.html", context)
def create_booking(request, activity_id): activity = Activity.objects.get(pk=activity_id) features = activity.feature_set.all() prices = activity.price form = ActivityForm(request.POST, features=features, activity=activity) if not form.is_valid(): return render(request, 'activities/main.html', {'form': form, 'prices': prices}) user = request.user adults = int(request.POST['adults']) youths = int(request.POST['youths']) children = int(request.POST['children']) students = int(request.POST['students']) seniors = int(request.POST['seniors']) amount = adults*prices.adult + youths*prices.youth + children*prices.child + \ students*prices.student + seniors*prices.senior dateStrings = request.POST['date'].split("/") month = dateStrings[0] day = dateStrings[1] year = dateStrings[2] date_time = datetime.date(int(year), int(month), int(day)) booking = Booking.objects.create(user=user, activity=activity, amount=amount, activity_date=date_time) activity.purchases += 1 activity.save() peoples = People.objects.create(label=activity.label, booking=booking, adult=adults, youth=youths, child=children, student=students, senior=seniors) i = 1 for feature in features: option = feature.featureoption_set.get(option=request.POST['feature' + str(i)]) BookingOption.objects.create(booking=booking, feature_option=option) i = i + 1 return HttpResponseRedirect(reverse('bookings:booking', args=(booking.pk,)))
def edit(request, activity_id): activity = get_object_or_404(Activity, pk=activity_id, is_deleted=False) if not clubs.utils.can_edit_activity(request.user, activity): raise PermissionDenied user_coordination = clubs.utils.get_user_coordination_and_deputyships(request.user) user_club = user_coordination.first() if request.method == 'POST': attachment_formset = AttachmentFormSet(request.POST, request.FILES, instance=activity) item_request_formset = ItemRequestFormSet(request.POST, instance=activity) if request.user.has_perm('activities.directly_add_activity'): modified_activity = DirectActivityForm(request.POST, instance=activity) elif not activity.is_editable and \ clubs.utils.has_coordination_to_activity(request.user, activity): modified_activity = DisabledActivityForm(request.POST, instance=activity) item_request_formset = None elif activity.primary_club.possible_parents.exists(): modified_activity = ReviewerActivityForm(request.POST, instance=activity) modified_activity.fields['chosen_reviewer_club'].queryset = activity.primary_club.possible_parents.all() else: modified_activity = ActivityForm(request.POST, instance=activity) # Should check that edits are valid before saving if modified_activity.is_valid() and \ attachment_formset.is_valid() and \ (not item_request_formset or item_request_formset and item_request_formset.is_valid()): modified_activity.save() if activity.is_editable: item_request_formset.save() # Handle attachments attachments = attachment_formset.save(commit=False) for changed_attachment, fields in attachment_formset.changed_objects: changed_attachment.save() for new_attachment in attachment_formset.new_objects: # Just in case an attachment was uploaded by a user # other than the original activity submitter, we need # to document that. new_attachment.submitter = request.user new_attachment.save() for deleted_attachment in attachment_formset.deleted_objects: deleted_attachment.delete() # If the choesn reviewer club was changed, the new one # should be the assignee (i.e. reset the stage), send them # a notification, and no notification should be sent to # that pending review club. Otherwise, if the edit has # been done in response to a review, send a notification # email to the pending review club. if 'chosen_reviewer_club' in modified_activity.changed_data: chosen_reviewer_club = modified_activity.cleaned_data['chosen_reviewer_club'] activity.assignee = chosen_reviewer_club show_activity_url = reverse('activities:show', args=(activity.pk,)) full_url = request.build_absolute_uri(show_activity_url) email_context = {'activity': activity, 'full_url': full_url, 'reviewer_club': chosen_reviewer_club} if chosen_reviewer_club.coordinator and \ chosen_reviewer_club.coordinator.email: mail.send([chosen_reviewer_club.coordinator.email], template="activity_submitted", context=email_context) elif activity.assignee == activity.primary_club: pending_review = activity.review_set.filter(is_approved=None).first() activity.assignee = pending_review.reviewer_club activity.save() review_url = reverse('activities:review', args=(activity_id, pending_review.reviewer_club.pk)) review_full_url = request.build_absolute_uri(review_url) email_context = {'activity': activity, 'pending_review': pending_review, 'full_url': review_full_url} mail.send([pending_review.reviewer.email], template="activity_edited_to_reviewer", context=email_context) return HttpResponseRedirect(reverse('activities:show', args=(activity.pk, ))) else: context = {'form': modified_activity, 'user_club': user_club, 'activity_id': activity_id, 'attachment_formset': attachment_formset, 'item_request_formset': item_request_formset, 'edit': True} return render(request, 'activities/new.html', context) else: attachment_formset = AttachmentFormSet(instance=activity) item_request_formset = ItemRequestFormSet(instance=activity) # There are different activity forms depending on what # permission the user has. Presidency group members # (i.e. with directly_add_activity) can add activities # directly without waiting for the approval of the deanship. # They can also (with change_activity) edit activities # regardless of their is_editable value. if request.user.has_perm('activities.directly_add_activity'): form = DirectActivityForm(instance=activity) elif not activity.is_editable and \ clubs.utils.has_coordination_to_activity(request.user, activity): form = DisabledActivityForm(instance=activity) item_request_formset = DisabledItemRequestFormSet(instance=activity) elif activity.primary_club.possible_parents.exists(): form = ReviewerActivityForm(instance=activity) form.fields['chosen_reviewer_club'].queryset = activity.primary_club.possible_parents.all() else: form = ActivityForm(instance=activity) context = {'form': form, 'activity_id': activity_id, 'user_club': user_club, 'activity': activity, 'edit': True, 'attachment_formset': attachment_formset, 'item_request_formset': item_request_formset} return render(request, 'activities/new.html', context)
def create(request): # --- Permission checks --- # (1) Check if the user is a coordinator # To check permissions, rather than using the # @permission_required('activities.add_activity') decorator, it is # more dynamic to check whether the user is a coordinator of any # club, or has the permission to add activities (i.e. part of the # presidency group) if not request.user.has_perm("activities.add_activity") and \ not clubs.utils.can_submit_activities(request.user): raise PermissionDenied # (2) Check if the user's club has no more than 3 overdue # follow-up reports. If any club coordinated by the user exceeds # the 3-report threshold, prevent new activity submission (again # in reality the user will only coordinate one club) user_coordination = clubs.utils.get_user_coordination_and_deputyships(request.user) if any([not club.can_skip_followup_reports and club.get_overdue_report_count() > media.utils.MAX_OVERDUE_REPORTS for club in user_coordination]): raise PermissionDenied if user_coordination.exists(): user_club = user_coordination.first() if request.method == 'POST': # DirectActivityForm get to choose what club to submit the # activity under. Normal users shouldn't. can_directly_add = request.user.has_perm('activities.directly_add_activity') attachment_formset = AttachmentFormSet(request.POST, request.FILES) item_request_formset = ItemRequestFormSet(request.POST) if can_directly_add: activity = Activity(submitter=request.user) form = DirectActivityForm(request.POST, instance=activity) else: activity = Activity(submitter=request.user, primary_club=user_club) if user_club.possible_parents.exists(): # If there are multiple possible parents, all the user to choose. form = ReviewerActivityForm(request.POST, instance=activity) form.fields['chosen_reviewer_club'].queryset = user_club.possible_parents.all() else: form = ActivityForm(request.POST, instance=activity) if form.is_valid() and attachment_formset.is_valid() and item_request_formset.is_valid(): form_object = form.save() attachment_formset.instance = form_object item_request_formset.instance = form_object attachments = attachment_formset.save(commit=False) for attachment in attachments: attachment.submitter = request.user attachment.save() item_request_formset.save() # If the user can directly add activities, make the # activity automatically approved. Otherwise, email the # reviewing parent. if can_directly_add: form_object.is_approved = True form_object.assignee = None else: if form.cleaned_data.get('chosen_reviewer_club'): reviewing_parent = form.cleaned_data['chosen_reviewer_club'] else: reviewing_parent = form_object.primary_club.get_next_activity_reviewing_parent() if not reviewing_parent: form_object.is_approved = True form_object.assignee = None else: form_object.is_approved = None form_object.assignee = reviewing_parent show_activity_url = reverse('activities:show', args=(form_object.pk,)) full_url = request.build_absolute_uri(show_activity_url) email_context = {'activity': form_object, 'full_url': full_url, 'reviewer_club': reviewing_parent} if reviewing_parent.coordinator and \ reviewing_parent.coordinator.email: mail.send([reviewing_parent.coordinator.email], template="activity_submitted", context=email_context) form_object.save() return HttpResponseRedirect(reverse('activities:list')) else: context = {'form': form, 'attachment_formset': attachment_formset, 'item_request_formset': item_request_formset} return render(request, 'activities/new.html', context) elif request.method == 'GET': context = {'attachment_formset': AttachmentFormSet(), 'item_request_formset': ItemRequestFormSet()} if request.user.has_perm("activities.directly_add_activity"): form = DirectActivityForm() else: if user_club.possible_parents.exists(): form = ReviewerActivityForm() form.fields['chosen_reviewer_club'].queryset = user_club.possible_parents.all() else: form = ActivityForm() context['user_club'] = user_club context['form'] = form return render(request, 'activities/new.html', context)