+ delete categories
+ translations
+ style improvements
This commit is contained in:
Clemens-Dautermann 2018-12-27 13:40:49 +01:00
parent 51c942746b
commit a4486909df
14 changed files with 151 additions and 33 deletions

View file

@ -8,13 +8,13 @@ from django.contrib.auth.models import User
class Object(models.Model):
ammout = models.PositiveIntegerField(default=1, blank=False)
title = models.TextField(max_length=100, default=None, blank=False)
img = models.ImageField(default=None, blank=True)
img = models.ImageField(default='/images/None/nopic.svg', blank=True, upload_to='images/')
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
inventarized_date = models.DateTimeField(blank=False, null=True)
description = models.TextField(max_length=500, blank=True)
removed_date = models.DateTimeField(blank=True, default=None, null=True)
user_added = models.ForeignKey(User, on_delete=models.CASCADE, blank=False, null=True)
category = models.ForeignKey('Category', on_delete=models.CASCADE, blank=True, default=None, null=True)
category = models.ForeignKey('Category', on_delete=models.SET_NULL, blank=True, default=None, null=True)
objects = models.Manager()

View file

@ -9,7 +9,7 @@ from django.utils import timezone
@login_required
def add(request):
if request.method == 'POST':
form = ObjectForm(request.POST)
form = ObjectForm(request.POST, request.FILES)
if form.is_valid():
try:

View file

@ -5,5 +5,6 @@ import uuid
urlpatterns = [
path('', views.objlist, name='objlist'),
path('<str:orderstr>', views.objlist, name='objlist_ordered'),
path('<str:uuid_url>/delete', views.delete, name='del_obj')
path('<str:uuid_url>/delete', views.delete, name='del_obj'),
path('<str:uuid_url>/delete/category', views.deleteCategory, name='del_cat')
]

View file

@ -48,7 +48,7 @@ def objlist(request, orderstr=None):
return render(request, 'object_lister/index.html', context)
elif request.method == 'POST':
form = ObjectForm(request.POST)
form = ObjectForm(request.POST, request.FILES)
if form.is_valid():
result = re.fullmatch(uuidv4pattern, orderstr)
@ -78,3 +78,10 @@ def delete(request, uuid_url):
obj = get_object_or_404(Object, pk=uuid_url)
obj.delete()
return render(request, 'object_lister/delete.html', {'uuid': uuid_url})
@login_required
def deleteCategory(request, uuid_url):
cat = get_object_or_404(Category, pk=uuid_url)
cat.delete()
return render(request, 'object_lister/delete.html', {'uuid': uuid_url})

View file

@ -5,6 +5,9 @@ from django.contrib.auth.models import User
class SignUpForm(UserCreationForm):
username = CharField(required=True)
last_name = CharField(required=True)
first_name = CharField(required=True)
email = CharField(required=True)
class Meta:
model = User

View file

@ -112,17 +112,19 @@
.cattable {
border-collapse: collapse;
width: 50%;
margin-top: 2em;
margin-bottom: 2em;
margin: 2em auto 2em auto;
}
.cattable * {
.cattable .leftalign {
text-align: left;
}
.cattable .rightalign{
text-align: right;
}
.lower-box {
margin-top: 2em;
width: 50%;
}
.celllink, .celllink:hover, .celllink:visited, .celllink:active {
@ -149,4 +151,30 @@
.delbtn{
margin-bottom: 1em !important;
}
.delcatbtn{
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
.nodec{
list-style: none;
}
.registerformcontainer *{
margin-top: 1em;
}
.registerformcontainer input{
margin-left: 0.7em;
}
.nomarg{
margin: 2em 0 0 0 !important;
}
.pwdinfo{
border: 2px solid rgba(110, 110, 110, 0.28);
width: 50%;
}

View file

@ -42,13 +42,13 @@
</ul>
{% if user.is_authenticated %}
<ul class="nav navbar-nav navbar-right">
<li><a href="{% url 'logout' %}"><span class="glyphicon glyphicon-log-out"></span> Log out</a></li>
<li><a href="#"><span class="glyphicon glyphicon-cog"></span> Settings</a></li>
<li><a href="{% url 'logout' %}"><span class="glyphicon glyphicon-log-out"></span> Ausloggen</a></li>
<li><a href="#"><span class="glyphicon glyphicon-cog"></span> Einstellungen</a></li>
</ul>
{% else %}
<ul class="nav navbar-nav navbar-right">
<li><a href="{% url 'register' %}"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
<li><a href="{% url 'login' %}"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
<li><a href="{% url 'register' %}"><span class="glyphicon glyphicon-user"></span> Registrieren</a></li>
<li><a href="{% url 'login' %}"><span class="glyphicon glyphicon-log-in"></span> Einloggen</a></li>
</ul>
{% endif %}

View file

@ -10,7 +10,7 @@
Das Objekt <strong>{{ obj_name }}</strong> wurde inventarisiert!
</div>
{% endif %}
<form method="POST" class="post-form invform">
<form method="POST" class="post-form invform" enctype="multipart/form-data">
{% csrf_token %}
<div class="ammout-wrapper">
{{ form.ammout.errors }}
@ -27,11 +27,13 @@
<label for="{{ form.category.id_for_lable }}">Kategorie:</label>
{{ form.category }}
</div>
<!--
<div class="img-wrapper">
{{ form.img.errors }}
<label for="{{ form.img.id_for_lable }}">Bild:</label>
{{ form.img }}
</div>
-->
<div class="description-wrapper">
{{ form.description.errors }}
<label for="{{ form.description.id_for_lable }}">Beschreibung:</label>

View file

@ -14,7 +14,7 @@
<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
Abbruch.
</div>
<form method="POST" class="post-form invform">
<form method="POST" class="post-form invform" enctype="multipart/form-data">
{% csrf_token %}
<div class="ammout-wrapper">
{{ form.ammout.errors }}
@ -31,11 +31,13 @@
<label for="{{ form.category.id_for_lable }}">Kategorie:</label>
{{ form.category }}
</div>
<!--
<div class="img-wrapper">
{{ form.img.errors }}
<label for="{{ form.img.id_for_lable }}">Bild:</label>
{{ form.img }}
</div>
-->
<div class="description-wrapper">
{{ form.description.errors }}
<label for="{{ form.description.id_for_lable }}">Beschreibung:</label>

View file

@ -4,6 +4,14 @@
<body>
<div class="container shadow">
<div class="alert alert-danger alert-dismissible nodisplay" id="delalert">
<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
Kategorie wurde gelöscht.
</div>
<div class="alert alert-danger alert-dismissible nodisplay" id="abortalert">
<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
Abbruch.
</div>
<form>
{% csrf_token %}
<table class="objecttable">
@ -46,17 +54,49 @@
<div class="container shadow lower-box">
<table class="cattable">
<tr>
<th class="objecttable-head">Kategorie</th>
<th class="objecttable-head leftalign">Kategorie</th>
<th class="objecttable-head"></th>
</tr>
{% for category in categories %}
<tr class="objecttable-row">
<td class="objecttable-data">{{ category.name }}</td>
<td class="objecttable-data leftalign">{{ category.name }}</td>
<td class="objecttable-data rightalign">
<button class="btn btn-danger delcatbtn" id="{{ category.id }}" onclick="delcat(this.id)">
löschen
</button>
</td>
</tr>
{% endfor %}
</table>
<p>{{ ncats }} Kategorien insgesamt</p>
</div>
</body>
{% endblock %}
<script>
function delcat(id) {
if (confirm('Möchten sie die Kategorie {{ category.name }} wirklich löschen?')) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
window.location.href = "./"
abox = document.getElementById('delalert');
abox.style.display = "block";
}
};
xhttp.open("GET", './' + id + '/delete/category', true);
xhttp.send();
} else {
abox = document.getElementById('abortalert');
abox.style.display = "block";
}
}
</script>
{% endblock %}
</html>

View file

@ -4,8 +4,8 @@
{% block content %}
<div class="container">
<p>Logged out!</p>
<a href="{% url 'login'%}">Click here to login again.</a>
<p>Ausgelogt.</p>
<a href="{% url 'login'%}">Klicken sie hier um sich erneut einzuloggen.</a>
</div>
</body>
{% endblock %}

View file

@ -6,9 +6,9 @@
<html>
<div class="container">
<div class="container shadow">
{% if form.errors %}
<p class="error">Wrong username/password combination</p>
<p class="error">Falscher Nutzername oder falsches Passwort</p>
{% endif %}
{% if next %}
@ -19,13 +19,13 @@
<form class="form-horizontal login-form" action="{% url 'login' %}" method="post">
{% csrf_token %}
<div class="form-group">
<label class="control-label col-sm-2" for="email">Username:</label>
<label class="control-label col-sm-2" for="email">Nutzername:</label>
<div class="col-sm-10">
{{ form.username }}
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="pwd">Password:</label>
<label class="control-label col-sm-2" for="pwd">Passwort:</label>
<div class="col-sm-10">
{{ form.password }}
</div>
@ -33,9 +33,9 @@
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">Login</button>
<button type="submit" class="btn btn-primary">Einloggen</button>
<input type="hidden" name="next" value="{{ next }}">
<span class="reset"><a href="{% url 'password_reset' %}">Lost password?</a></span>
<span class="reset"><a href="{% url 'password_reset' %}">Passwort vergessen?</a></span>
</div>

View file

@ -5,20 +5,55 @@
{% block content %}
<html>
<div class="container">
<h1>registration page</h1>
<form method="post" action="{% url 'register' %}">
<div class="container shadow">
<h1>Registrieren</h1>
<form method="post" action="{% url 'register' %}" class="registerformcontainer">
{% csrf_token %}
{% if form.errors %}
<p>There are errors in the form</p>
{% endif %}
{{ form }}
<input type="submit" value="Register">
<div class="username-wrapper">
{{ form.username.errors }}
<label for="{{ form.username.id_for_lable }}">Nutzername:</label>
{{ form.username }}
</div>
<div class="first_name-wrapper">
{{ form.first_name.errors }}
<label for="{{ form.first_name.id_for_lable }}">Vorname:</label>
{{ form.first_name }}
</div>
<div class="last_name-wrapper">
{{ form.last_name.errors }}
<label for="{{ form.last_name.id_for_lable }}">Nachname:</label>
{{ form.last_name }}
</div>
<div class="email-wrapper">
{{ form.email.errors }}
<label for="{{ form.email.id_for_lable }}">E-mail:</label>
{{ form.email }}
</div>
<div class="password1-wrapper">
{{ form.password1.errors }}
<label for="{{ form.password1.id_for_lable }}">Passwort:</label>
{{ form.password1 }}
</div>
<ul class="nodec pwdinfo">
<li>Das Passwort darf nicht zu ähnlich zu Ihren anderen persönlichen Informationen sein.</li>
<li>Das Passwort muss mindestens 8 Zeichen enthalten.</li>
<li>Das Passwort darf nicht allgemein üblich sein.</li>
<li>Das Passwort darf nicht komplett aus Ziffern bestehen.</li>
</ul>
<div class="password2-wrapper">
{{ form.password2.errors }}
<label for="{{ form.password2.id_for_lable }}">Passwort bestätigen:</label>
{{ form.password2 }}
</div>
<input type="submit" value="Registrieren" class="btn btn-success nomarg">
</form>
<div>
</body>
</html>

View file

@ -3,7 +3,7 @@
{% block content%}
<body>
<div class="container">
<div class="container shadow">
<h3>Inventarium</h3>
<p>Mit diesem System können allerlei Dinge inventarisiert werden.</p>
<p>Zum Beispiel: </p>