123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from django.shortcuts import get_object_or_404, render, redirect
- from django.contrib.auth.decorators import login_required
- from django.contrib import messages
- from django.http import HttpResponseForbidden
- from django.core.urlresolvers import reverse
- from django.utils import timezone
- from .forms import LoanDeclareForm, LoanTransferForm, LoanReturnForm
- from .models import Item, Loan
- @login_required
- def item_list(request):
- items = Item.objects.all().order_by('storage', 'type', 'designation')
- # FIXME: suboptimal
- items = [i for i in items.filter() if i.is_available()]
- return render(request, 'hardware_provisioning/item_list.html', {
- 'items': items,
- })
- @login_required
- def item_borrow(request, pk):
- item = get_object_or_404(Item, pk=pk)
- if not item.is_available():
- return HttpResponseForbidden('Item non disponible')
- if request.method == 'POST':
- form = LoanDeclareForm(request.POST)
- if form.is_valid():
- loan = Loan.objects.create(
- item=item,
- loan_date=timezone.now(),
- loan_date_end=form.cleaned_data['loan_date_end'],
- user=request.user,
- )
- messages.success(
- request, "Emprunt de {} ({}) enregistré".format(
- item.designation, item.type))
- if not loan.loan_date_end:
- messages.warning(
- request,
- "N'oubliez pas de notifier le retour de l'objet le temps venu")
- return redirect(reverse('hardware_provisioning:loan-list'))
- else:
- form = LoanDeclareForm()
- return render(request, 'hardware_provisioning/item_borrow.html', {
- 'item': item,
- 'form': form,
- })
- @login_required
- def loan_return(request, pk):
- loan = get_object_or_404(Loan, pk=pk)
- if not loan.user_can_close(request.user):
- return HttpResponseForbidden('Non autorisé')
- if request.method == 'POST':
- form = LoanReturnForm(request.POST)
- if form.is_valid():
- messages.success(
- request,
- 'Le matériel {} a été marqué comme rendu'.format(
- loan.item))
- loan.item.give_back(form.cleaned_data['storage'])
- return redirect(reverse('hardware_provisioning:loan-list'))
- else:
- form = LoanReturnForm()
- return render(request, 'hardware_provisioning/return.html', {
- 'loan': loan,
- 'form': form,
- })
- @login_required
- def loan_transfer(request, pk):
- """ Transfer something loaned to another member
- """
- old_loan = get_object_or_404(Loan, pk=pk)
- if not old_loan.user_can_close(request.user):
- return HttpResponseForbidden()
- if request.method == 'POST':
- form = LoanTransferForm(request.POST)
- if form.is_valid():
- old_loan.item.give_back()
- Loan.objects.create(
- user=form.cleaned_data['target_user'],
- loan_date=timezone.now(),
- item=old_loan.item)
- messages.success(
- request,
- "Le matériel {} a été transféré à l'adhérent \"{}\"".format(
- old_loan.item,
- form.data['target_user']))
- return redirect(reverse('hardware_provisioning:loan-list'))
- else:
- form = LoanTransferForm()
- return render(request, 'hardware_provisioning/transfer.html', {
- 'form': form,
- 'loan': old_loan,
- })
- @login_required
- def loan_list(request):
- view = 'old' if 'old' in request.GET else ''
- if view == 'old':
- loans = request.user.loans.finished().order_by('-loan_date_end')
- else:
- loans = request.user.loans.running()
- return render(request, 'hardware_provisioning/list.html', {
- 'loans': loans,
- 'view': view,
- })
- @login_required
- def loan_detail(request, pk):
- return render(request, 'hardware_provisioning/detail.html', {})
|