diff --git a/biscuit/apps/fibu/forms.py b/biscuit/apps/fibu/forms.py index 473f843e0fd69307b4d7c3cf957d951d008221a0..75568d857326798a79c55bb24d10e0d8e846d01f 100644 --- a/biscuit/apps/fibu/forms.py +++ b/biscuit/apps/fibu/forms.py @@ -5,41 +5,53 @@ from datetime import datetime from material import Layout, Row, Fieldset from .models import Booking, CostCenter -class AddCostCenterForm(forms.ModelForm): - cost_center = forms.CharField(max_length=30, label='Kostenstelle') +# class AddCostCenterForm(forms.ModelForm): +# cost_center = forms.CharField(max_length=30, label='Kostenstelle') +# +# class AcquisitionForm(forms.ModelForm): +# # Cost_center choices +# def getCostCenter(): +# ''' Find all cost center''' +# cost_center = CostCenter.objects.values_list('name') +# return cost_center +# cost_center = forms.ModelChoiceField(getCostCenter()) +# #invoice_date = models.DateField() +# #invoice_number = models.CharField(max_length=20) +# #firma = models.CharField(max_length=30) +# description = models.CharField(max_length=50) +# #amount = models.DecimalField(max_digits=10, decimal_places=2) +# planned_amount = models.IntegerField() +# #submission_date = models.DateField() +# #payout_number = models.IntegerField() +# #booking_date = models.DateField() +# #maturity = models.DateField() +# #account = models.ForeignKey(to=Account.number, on_delete=models.CASCADE) +# #budget = models.ForeignKey(to=Budget.name, on_delete=models.CASCADE) +# #upload = models.FileField(upload_to='uploads/fibu/%Y/') +# +# +# # layout = Layout(Fieldset('Von', +# # Row('from_date', 'from_lesson', 'from_time'), +# # ), +# # Fieldset('Bis', +# # Row('to_date', 'to_lesson', 'to_time'), +# # ), +# # Fieldset('Grund / Vorhaben', +# # 'description'), +# # ) +# +# class Meta: +# model = Booking +# fields = ('cost_center', 'description', 'planned_amount') -class AcquisitionForm(forms.ModelForm): - # Cost_center choices - def getCostCenter(): - ''' Find all cost center''' - cost_center = CostCenter.objects.values_list('name') - return cost_center - cost_center = forms.ModelChoiceField(getCostCenter()) - #invoice_date = models.DateField() - #invoice_number = models.CharField(max_length=20) - #firma = models.CharField(max_length=30) - description = models.CharField(max_length=50) - #amount = models.DecimalField(max_digits=10, decimal_places=2) - planned_amount = models.IntegerField() - #submission_date = models.DateField() - #payout_number = models.IntegerField() - #booking_date = models.DateField() - #maturity = models.DateField() - #account = models.ForeignKey(to=Account.number, on_delete=models.CASCADE) - #budget = models.ForeignKey(to=Budget.name, on_delete=models.CASCADE) - #upload = models.FileField(upload_to='uploads/fibu/%Y/') +class MakeBookingForm(forms.ModelForm): + description = forms.CharField(label='Was soll gekauft werden?') + planned_amount = forms.IntegerField(label='Welcher Betrag ist dafür erforderlich (Euro)?') - # layout = Layout(Fieldset('Von', - # Row('from_date', 'from_lesson', 'from_time'), - # ), - # Fieldset('Bis', - # Row('to_date', 'to_lesson', 'to_time'), - # ), - # Fieldset('Grund / Vorhaben', - # 'description'), - # ) + layout = Layout(Row(Fieldset('Beschreibung', 'description'), Fieldset('Erwarteter Betrag', 'planned_amount'))) class Meta: model = Booking - fields = ('cost_center', 'description', 'planned_amount') \ No newline at end of file + fields = ('id', 'description', 'planned_amount') + diff --git a/biscuit/apps/fibu/models.py b/biscuit/apps/fibu/models.py index fad86f099b3e5f87f0c3913d8c10ea98f6c4cdf9..387232c9b6839e2bc1f53cf84871e6d7b8a9c844 100644 --- a/biscuit/apps/fibu/models.py +++ b/biscuit/apps/fibu/models.py @@ -1,4 +1,23 @@ from django.db import models +from django.contrib.auth.models import User + +class Status: + def __init__(self, name, style_class): + self.name = name + self.style_class = style_class + + def __str__(self): + return self.name + + +status_list = [ + Status(name='beantragt', style_class='red'), + Status(name='bewilligt', style_class='orange'), + Status(name='bestellt', style_class='yellow'), + Status(name='bezahlt', style_class='green'), +] + +status_choices = [(x, val.name) for x, val in enumerate(status_list)] class CostCenter(models.Model): name = models.CharField(max_length=20, primary_key=True, unique=True) @@ -22,20 +41,29 @@ class Budget(models.Model): ) class Booking(models.Model): - cost_center = models.ForeignKey(CostCenter, on_delete=models.CASCADE) - invoice_date = models.DateField() - invoice_number = models.CharField(max_length=20) - firma = models.CharField(max_length=30) +# cost_center = models.ForeignKey(CostCenter, on_delete=models.CASCADE) + contact = models.ForeignKey(User, related_name='bookings', on_delete=models.SET_NULL + , verbose_name="Erstellt von", blank=True, null=True) +# invoice_date = models.DateField() +# invoice_number = models.CharField(max_length=20) +# firma = models.CharField(max_length=30) description = models.CharField(max_length=50) - amount = models.DecimalField(max_digits=10, decimal_places=2) +# amount = models.DecimalField(max_digits=10, decimal_places=2) planned_amount = models.IntegerField() - submission_date = models.DateField() - payout_number = models.IntegerField() - booking_date = models.DateField() - maturity = models.DateField() - account = models.ForeignKey(Account, on_delete=models.CASCADE) - budget = models.ForeignKey(Budget, on_delete=models.CASCADE) - upload = models.FileField(upload_to='uploads/fibu/%Y/') +# submission_date = models.DateField() +# payout_number = models.IntegerField() +# booking_date = models.DateField() +# maturity = models.DateField() +# account = models.ForeignKey(Account, on_delete=models.CASCADE) +# budget = models.ForeignKey(Budget, on_delete=models.CASCADE) +# upload = models.FileField(upload_to='uploads/fibu/%Y/') + status = models.IntegerField(default=0, choices=status_choices, verbose_name="Status") + + + def getStatus(self): + print(self.status, self.contact, self.id) + return status_list[self.status] + class Meta: permissions = ( diff --git a/biscuit/apps/fibu/templates/fibu/booking.html b/biscuit/apps/fibu/templates/fibu/booking.html new file mode 100644 index 0000000000000000000000000000000000000000..4d6f4a67edf8beb95df08204da145b70c4f8344e --- /dev/null +++ b/biscuit/apps/fibu/templates/fibu/booking.html @@ -0,0 +1,18 @@ +{% include 'partials/header.html' %} +{% load material_form %} + +<main> + + <h4>Beschaffung</h4> + + <form method="POST"> + {% csrf_token %} + {% form form=form %} + {% endform %} + <button type="submit" class="waves-effect waves-light btn green"> + <i class="material-icons left">send</i> Antrag stellen + </button> + </form> + +</main> +{% include 'partials/footer.html' %} diff --git a/biscuit/apps/fibu/templates/fibu/index.html b/biscuit/apps/fibu/templates/fibu/index.html index 5e581cf4ce87533b22d62f137a21984cef828d17..0fccc732c786232308e835308750347a5d18c6e3 100755 --- a/biscuit/apps/fibu/templates/fibu/index.html +++ b/biscuit/apps/fibu/templates/fibu/index.html @@ -2,64 +2,41 @@ {% load material_form %} <main> -Hallo - {% comment %} <a href="{% url 'aub_apply_for' %}" class="waves-effect waves-light btn green">Neuen Antrag stellen</a> - {% block content %} +{# <a href="{% url 'fibu_make_booking' %}" class="waves-effect waves-light btn green">Neuen Antrag stellen</a>#} - <h4>Unterrichtsbefreiungen von <span class="item-text"><i class="material-icons">person</i>{{ user }}</span></h4> - <ul class="collection"> - {% for aub in aubs %} - <li class="collection-item"> + {% block content %} - <div class="row"> - <div class="col s12 m4"> - <p class="title"> - <span class="item-text"> - <i class="material-icons">access_time</i> - {{ aub.from_date }}, {{ aub.from_time }} Uhr — {{ aub.to_date }}, {{ aub.to_time }} Uhr - </span> - </p> - <p><a href="{% url 'aub_details' aub.id %}">{{ aub.description }}</a></p> - </div> - <div class="col s12 m2"> - <p> - <span class="item-text"> - <i class="material-icons">person</i> - {{ aub.created_by }} - </span> - </p> - </div> - <div class="col s12 m4"> - <p> - {% if aub.status == 0 %} - <form action="{% url 'aub_edit' aub.id %}" class="right"> - {% csrf_token %} - <button type="submit" name="edit" class="waves-effect waves-light btn-flat btn-flat-medium" title="Bearbeiten"> - <i class="material-icons center green-text">create</i> - </button> - </form> - {% endif %} - {% if aub.status == 0 or aub.status == 1 %} - <form action="" method="POST" class="right"> - {% csrf_token %} - <input type="hidden" value="{{ aub.id }}" name="aub-id"> - <button type="submit" onclick="return confirm('Wollen Sie den Antrag wirklich löschen?')" name="cancel" class="waves-effect waves-light btn-flat btn-flat-medium" title="Löschen"> - <i class="material-icons center red-text">cancel</i> - </button> - </form> - {% endif %} - </p> + <h4>Beantragungen von {{ user }}</h4> + <form method="POST" style="border-width: 5px;"> + {% csrf_token %} + {% form form=form %} + {% endform %} + <button type="submit" class="waves-effect waves-light btn green"> + <i class="material-icons left">send</i> Antrag stellen + </button> + </form> - </div> - <div class="col s12 m2"> - <p><span class="badge new {{ aub.getStatus.style_class }}">{{ aub.getStatus.name }}</span></p> - </div> - </div> - - </li> + <h5>Laufende Anträge</h5> + <table class="highlight"> + <thead> + <tr> + <th>Beschreibung</th> + <th class="flushright">Erwarteter Betrag</th> + <th>Status</th> + </tr> + </thead> + <tbody> + {% for item in bookings %} + <tr> + <td>{{ item.description }}</td> + <td class="flushright">{{ item.planned_amount }} €</td> + <td><span class="badge new {{ item.getStatus.style_class }}">{{ item.getStatus.name }}</span></td> + </tr> {% endfor %} - </ul> - {% endblock %}{% endcomment %} + </tbody> + </table> + <ul class="collection"> + {% endblock %} </main> {% include 'partials/footer.html' %} diff --git a/biscuit/apps/fibu/urls.py b/biscuit/apps/fibu/urls.py index 1db9bce5d9dad3ce18ba5da5ac5cdb61005449da..d3e5ee3cddedd46b37d17177b0ded4e70845723b 100755 --- a/biscuit/apps/fibu/urls.py +++ b/biscuit/apps/fibu/urls.py @@ -3,6 +3,7 @@ from . import views urlpatterns = [ - path('', views.index, name='booking_index'), - #path('edit/<int:id>', views.edit, name='booking_edit'), + path('', views.index, name='fibu_index'), + # path('make_booking', views.make_booking, name='fibu_make_booking'), + # path('edit/<int:id>', views.edit, name='booking_edit'), ] diff --git a/biscuit/apps/fibu/views.py b/biscuit/apps/fibu/views.py index be4ad9ed09c95057d95e425c90fefe77f395527a..b73d8fde692f36558009996bb312b27d2c8cd8e3 100644 --- a/biscuit/apps/fibu/views.py +++ b/biscuit/apps/fibu/views.py @@ -1,15 +1,40 @@ -from .models import Booking from django.contrib.auth.decorators import login_required, permission_required from django.shortcuts import render, redirect, get_object_or_404 +from .models import Booking +from .forms import MakeBookingForm + @login_required #@permission_required('fibu.view_booking') def index(request): - #items = Booking.objects.filter() - items = [1,2] + items = Booking.objects.filter() print(items) - context = { - 'bookings': items, - } +# @login_required +# @permission_required('fibu.make_booking') +# def make_booking(request): + if request.method == 'POST': + if 'booking-id' in request.POST: + booking_id = request.POST['booking-id'] + booking = Booking.objects.get(id=booking_id) + form = MakeBookingForm(instance=booking) + print('Edit-Form erstellt ############# form.is_valid:', form.is_valid()) + else: + form = MakeBookingForm(request.POST or None) + else: + form = MakeBookingForm() + if form.is_valid(): + description = form.cleaned_data['description'] + planned_amount = form.cleaned_data['planned_amount'] + booking = Booking(description=description, planned_amount=planned_amount, contact=request.user) + booking.save() + + # a = Activity(user=request.user, title="Antrag auf Unterrichtsbefreiung gestellt", + # description="Sie haben einen Antrag auf Unterrichtsbefreiung " + + # "für den Zeitraum von {} bis {} gestellt.".format( + # aub.from_date, aub.to_date), app=AubConfig.verbose_name) + # a.save() + # return redirect('fibu_make_booking') + return redirect('fibu_index') + context = {'bookings': items, 'form': form} return render(request, 'fibu/index.html', context)