Skip to content
Snippets Groups Projects
views.py 9.31 KiB
Newer Older
from django.contrib import messages
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
from django.contrib.auth.decorators import login_required, permission_required
from django.db.models import Sum
from django.urls import reverse
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
from django.shortcuts import render, redirect, get_object_or_404
from django.utils.translation import ugettext_lazy as _

Jonathan Weth's avatar
Jonathan Weth committed
from .models import Booking, CostCenter, Account
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
from .filters import BookingFilter
Jonathan Weth's avatar
Jonathan Weth committed
from .forms import SimpleBookingForm, CheckBookingForm, CompleteBookingForm, CostCenterForm, AccountForm
Jonathan Weth's avatar
Jonathan Weth committed

Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed

@login_required
@permission_required('fibu.request_booking')
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
def index(request):
    if request.method == 'POST':
        if 'booking-id' in request.POST:
            booking_id = request.POST['booking-id']
            booking = get_object_or_404(Booking, pk=booking_id)

Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
            if 'cancel' in request.POST:
                booking.delete()
                print('Eintrag gelöscht')
                return redirect('fibu_index')
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
            elif 'ordered' in request.POST:
                Booking.objects.filter(id=booking_id).update(status=3)
                return redirect('fibu_index')
            elif 'submit-invoice' in request.POST:
                Booking.objects.filter(id=booking_id).update(status=4)
                return redirect('fibu_index')
Jonathan Weth's avatar
Jonathan Weth committed
            form = SimpleBookingForm(instance=booking)
Jonathan Weth's avatar
Jonathan Weth committed
            form = SimpleBookingForm(request.POST)
Jonathan Weth's avatar
Jonathan Weth committed
        form = SimpleBookingForm()
    if form.is_valid():
        description = form.cleaned_data['description']
        planned_amount = form.cleaned_data['planned_amount']
        justification = form.cleaned_data['justification']
Jonathan Weth's avatar
Jonathan Weth committed
        booking = Booking(description=description, planned_amount=planned_amount, contact=request.user,
                          justification=justification)
        messages.success(request, _("The request was successfully submitted."))
        return redirect('fibu_index')

    bookings = Booking.objects.filter(contact=request.user).order_by('status')
    context = {'bookings': bookings, 'form': form}
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
    return render(request, 'fibu/index.html', context)
@login_required
@permission_required('fibu.request_booking')
Jonathan Weth's avatar
Jonathan Weth committed
def user_edit(request, pk):
    booking = get_object_or_404(Booking, pk=pk)
    form = SimpleBookingForm(instance=booking)
    if request.method == 'POST':
Jonathan Weth's avatar
Jonathan Weth committed
        form = SimpleBookingForm(request.POST, instance=booking)
        if form.is_valid():
            form.save()
Jonathan Weth's avatar
Jonathan Weth committed

            messages.success(request, _("The changes were succesfully applied."))
            return redirect(reverse('fibu_index'))
    context = {'form': form}
    return render(request, 'fibu/booking/edit.html', context)
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
@login_required
@permission_required('fibu.check_booking')
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
def check(request):
    if request.method == 'POST':
        if 'booking-id' in request.POST:
            booking_id = request.POST['booking-id']
            if 'allow' in request.POST:
                if "account" in request.POST:
                    account = request.POST['account']
                    Booking.objects.filter(id=booking_id).update(status=2, account=account)
                    messages.success(request, _("The request was accepted."))
                    messages.error(request, _("Please select a booking account to create a reqest."))
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
            elif 'deny' in request.POST:
                Booking.objects.filter(id=booking_id).update(status=1)
                messages.success(request, _("The request was rejected."))
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed

    booking_list = Booking.objects.filter(status=0).order_by('submission_date')
    bookings = BookingFilter(request.GET, queryset=booking_list)
    form = CheckBookingForm()
    return render(request, 'fibu/booking/check.html', {'filter': bookings, 'form': form})
Jonathan Weth's avatar
Jonathan Weth committed

@login_required
@permission_required('fibu.manage_booking')
def booking(request, is_archive=""):
    is_archive = is_archive == "archive"
    if is_archive:
        bookings = Booking.objects.filter(status=5).order_by('-status')
    else:
        bookings = Booking.objects.filter(status__lt=5).order_by('-status')
    context = {'bookings': bookings, 'is_archive': is_archive}
    return render(request, 'fibu/booking/index.html', context)

Jonathan Weth's avatar
Jonathan Weth committed

@login_required
@permission_required('fibu.manage_booking')
Jonathan Weth's avatar
Jonathan Weth committed
def book(request, pk):
    booking = get_object_or_404(Booking, pk=pk)
    form = CompleteBookingForm(instance=booking)
    template = 'fibu/booking/book.html'
    if request.method == 'POST':
Jonathan Weth's avatar
Jonathan Weth committed
        form = CompleteBookingForm(request.POST, request.FILES, instance=booking)
        if form.is_valid():
            form.save()
            messages.success(request, _("The changes were successfully applied."))
Jonathan Weth's avatar
Jonathan Weth committed
            return redirect(reverse('fibu_bookings'))
    context = {'form': form}
    return render(request, template, context)

Jonathan Weth's avatar
Jonathan Weth committed

@permission_required('fibu.manage_booking')
Jonathan Weth's avatar
Jonathan Weth committed
    form = CompleteBookingForm()
    template = 'fibu/booking/new.html'
    if request.method == 'POST':
Jonathan Weth's avatar
Jonathan Weth committed
        form = CompleteBookingForm(request.POST, request.FILES)
            messages.success(request, _("The booking was successfully created."))
Jonathan Weth's avatar
Jonathan Weth committed

Jonathan Weth's avatar
Jonathan Weth committed
            return redirect(reverse('fibu_bookings'))
    context = {'form': form}
    return render(request, template, context)

Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
@login_required
@permission_required('fibu.manage_costcenter')
def cost_centers(request):
    form = CostCenterForm()

Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
    if request.method == 'POST':
        if 'id' in request.POST and 'cancel' in request.POST:
            cost_center_id = request.POST['id']
Jonathan Weth's avatar
Jonathan Weth committed
            cost_center = CostCenter.objects.get(id=cost_center_id)
            cost_center.delete()
Jonathan Weth's avatar
Jonathan Weth committed

            messages.success(request, _("The cost center was successfully deleted."))

            return redirect('fibu_cost_centers')
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
        else:
            form = CostCenterForm(request.POST)

Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
    if form.is_valid():
        form.save()
        messages.success(request, _("The cost center was successfully created."))
        return redirect('fibu_cost_centers')

Jonathan Weth's avatar
Jonathan Weth committed
    cost_centers = CostCenter.objects.filter()
    context = {'cost_centers': cost_centers, 'form': form}
    return render(request, 'fibu/cost_center/index.html', context)
@permission_required('fibu.manage_costcenter')
Jonathan Weth's avatar
Jonathan Weth committed
def cost_center_edit(request, pk):
    cost_center = get_object_or_404(CostCenter, pk=pk)
    form = CostCenterForm(instance=cost_center)

        form = CostCenterForm(request.POST, instance=cost_center)

            messages.success(request, _("The changes were successfully applied."))

            return redirect(reverse('fibu_cost_centers'))

    return render(request, 'fibu/cost_center/edit.html', context)
Jonathan Weth's avatar
Jonathan Weth committed

@permission_required('fibu.manage_account')
Jonathan Weth's avatar
Jonathan Weth committed
    form = AccountForm()

Jonathan Weth's avatar
Jonathan Weth committed
        if 'account-id' in request.POST and 'cancel' in request.POST:
            account_id = request.POST['id']
            account = Account.objects.get(id=account_id)
Jonathan Weth's avatar
Jonathan Weth committed
            account.delete()
Jonathan Weth's avatar
Jonathan Weth committed

            messages.success(request, _("The booking account was successfully deleted."))
Jonathan Weth's avatar
Jonathan Weth committed
            return redirect('account')
Jonathan Weth's avatar
Jonathan Weth committed
            form = AccountForm(request.POST)

Jonathan Weth's avatar
Jonathan Weth committed
        form.save()
        messages.success(request, _("The booking account was successfully created."))
        return redirect('fibu_accounts')
Jonathan Weth's avatar
Jonathan Weth committed
    accounts = Account.objects.filter().order_by('cost_center', '-income', 'name')
    context = {'accounts': accounts, 'form': form}
    return render(request, 'fibu/account/index.html', context)


@login_required
@permission_required('fibu.manage_account')
Jonathan Weth's avatar
Jonathan Weth committed
def account_edit(request, pk):
    account = get_object_or_404(Account, pk=pk)
Jonathan Weth's avatar
Jonathan Weth committed
    form = AccountForm(instance=account)

Jonathan Weth's avatar
Jonathan Weth committed
        form = AccountForm(request.POST, instance=account)

            messages.success(request, _("The changes were successfully applied."))
Jonathan Weth's avatar
Jonathan Weth committed
    return render(request, 'fibu/account/edit.html', context)
@permission_required('fibu.manage_booking')
def reports(request):
    return render(request, 'fibu/reports/index.html')

Jonathan Weth's avatar
Jonathan Weth committed

@permission_required('fibu.manage_booking')
Jonathan Weth's avatar
Jonathan Weth committed
    cost_centers = CostCenter.objects.filter()
Jonathan Weth's avatar
Jonathan Weth committed
    cost_center_accounts = {}
Jonathan Weth's avatar
Jonathan Weth committed
    for cost_center in cost_centers:
Jonathan Weth's avatar
Jonathan Weth committed
        accounts = Account.objects.filter(cost_center=cost_center)
        # update saldo
        for account in accounts:
            saldo = Booking.objects.filter(account=account).aggregate(Sum('amount'))
            saldo = saldo['amount__sum']
                rest = account.budget
            try:
                Account.objects.filter(id=account.id).update(saldo=saldo, rest=rest)
            except:
                Account.objects.filter(id=account.id).update(saldo=0, rest=account.budget)
Jonathan Weth's avatar
Jonathan Weth committed
        cost_center_accounts[cost_center.name] = list(
Jonathan Weth's avatar
Jonathan Weth committed
            Account.objects.filter(cost_center=cost_center).order_by('-income'))
    context = {'cost_center_accounts': cost_center_accounts, 'account_rests': account_rests}
    return render(request, 'fibu/reports/expenses.html', context)