paginacja, popup przy dacie, zachowanie danych przy zlym formularzu
This commit is contained in:
parent
7f0efb044e
commit
e3bb9dd669
BIN
hotel/db.sqlite3
BIN
hotel/db.sqlite3
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +1,6 @@
|
||||
from django.forms import ModelForm
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from .models import *
|
||||
from django import forms
|
||||
|
||||
|
||||
class ClientForm(ModelForm):
|
||||
@ -13,3 +12,5 @@ class ClientForm(ModelForm):
|
||||
'name': _('Imię '),
|
||||
'surname': _('Nazwisko ')
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
from django.db import models
|
||||
from django.core.validators import MinValueValidator
|
||||
from django.core.validators import MinValueValidator, RegexValidator
|
||||
|
||||
|
||||
|
||||
class RoomType(models.Model):
|
||||
@ -30,7 +31,9 @@ class Room(models.Model):
|
||||
|
||||
|
||||
class Client(models.Model):
|
||||
id_number = models.CharField(max_length=9, primary_key=True)
|
||||
id_number = models.CharField(max_length=9,
|
||||
primary_key=True)
|
||||
|
||||
name = models.CharField(max_length=40)
|
||||
surname = models.CharField(max_length=40)
|
||||
|
||||
@ -38,8 +41,10 @@ class Client(models.Model):
|
||||
return self.name + self.surname
|
||||
|
||||
|
||||
|
||||
class Reservation(models.Model):
|
||||
room_number = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
client_id = models.ForeignKey(Client, on_delete=models.CASCADE)
|
||||
begin_date = models.DateField()
|
||||
end_date = models.DateField()
|
||||
|
||||
|
@ -17,9 +17,37 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$( function() {
|
||||
$( ".datepicker" ).datepicker({ dateFormat: 'dd-mm-yy' }).val();
|
||||
|
||||
$( ".dateform" ).submit(function(event){
|
||||
|
||||
var begindate = $(this).find('input[name=begindate]').val();
|
||||
var enddate = $(this).find('input[name=enddate]').val();
|
||||
var beginpop = $(this).find('[name=beginPopup]');
|
||||
var endpop = $(this).find('[name=endPopup]');
|
||||
beginpop.addClass('popup')
|
||||
var today = $.datepicker.formatDate('dd-mm-yy', new Date());
|
||||
|
||||
if (begindate.getDate() < today.getDate()){
|
||||
alert('Data początkowa jest z przeszłości');
|
||||
return false;
|
||||
}
|
||||
if (enddate.getDate() < today.getDate()){
|
||||
alert('Data końcowa jest z przeszłości');
|
||||
return false;
|
||||
}
|
||||
if (begindate.getDate() > enddate.getDate()){
|
||||
alert('Data końcowa jest przed początkową');
|
||||
return false;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
} );
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onLoad="changeBackground(imageUrl = localStorage.backgroundImage)">
|
||||
@ -42,12 +70,12 @@
|
||||
<td>{{ room.price }} zł</td>
|
||||
<td>
|
||||
|
||||
<form action="{% url 'reservation' %}" method="POST">
|
||||
<form action="{% url 'reservation' %}" class="dateform" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="room" value="{{ room.room_number }}">
|
||||
<div class="button-box" >
|
||||
Od: <input type="text" class="datepicker" name="begindate" size="3">
|
||||
Do: <input type="text" class="datepicker" name="enddate" size="3">
|
||||
Od: <input type="text" class="datepicker" name="begindate" size="3" required>
|
||||
Do: <input type="text" class="datepicker" name="enddate" size="3" required>
|
||||
<button>Rezerwuj</button>
|
||||
</div>
|
||||
</form>
|
||||
@ -58,6 +86,19 @@
|
||||
</table>
|
||||
<br><br>
|
||||
<center>
|
||||
{% if firstpage == False %}
|
||||
<a href="{% url 'indexpage' currentpage|add:'-1' %}"><button>Poprzednia strona</button></a>
|
||||
{% endif %}
|
||||
|
||||
{% for p in pages %}
|
||||
<a href="{% url 'indexpage' p %}">{{ p }}</a>
|
||||
{% endfor %}
|
||||
|
||||
{% if lastpage == False %}
|
||||
<a href="{% url 'indexpage' currentpage|add:'+1' %}"><button>Następna strona</button></a>
|
||||
{% endif %}
|
||||
|
||||
<br />
|
||||
<table id="images">
|
||||
<th><input type="image" src="static/images/background1.jpg" height="150px" width="250px" onClick="changeBackground(imageUrl='static/images/background1.jpg')"/></th>
|
||||
<th><input type="image" src="static/images/background2.jpg" height="150px" width="250px" onClick="changeBackground(imageUrl='static/images/background2.jpg')"/></th>
|
||||
|
@ -4,5 +4,6 @@ from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.index, name='index'),
|
||||
path('<int:page>', views.index, name='indexpage'),
|
||||
path('reservation', views.reservation, name='reservation')
|
||||
]
|
@ -4,30 +4,41 @@ from django.shortcuts import get_object_or_404, render
|
||||
from .models import *
|
||||
from .forms import *
|
||||
from django.db.models import Q
|
||||
import re
|
||||
import datetime
|
||||
import math
|
||||
import re
|
||||
|
||||
# Create your views here.
|
||||
|
||||
|
||||
def index(request):
|
||||
def index(request, page=1):
|
||||
first_page, last_page = False, False
|
||||
if page == 1:
|
||||
first_page = True
|
||||
|
||||
rooms = Room.objects.all()
|
||||
rooms = rooms.order_by('room_type', 'room_number')
|
||||
template = loader.get_template('index.html')
|
||||
|
||||
return HttpResponse(template.render({'rooms': rooms}, request))
|
||||
if page*10 >= len(rooms):
|
||||
last_page = True
|
||||
|
||||
max_pages = math.ceil(len(rooms)/10)
|
||||
|
||||
rooms = rooms[10*(page-1):10*page]
|
||||
template = loader.get_template('index.html')
|
||||
print (first_page,last_page)
|
||||
return HttpResponse(template.render({'rooms': rooms,
|
||||
'firstpage': first_page,
|
||||
'lastpage': last_page,
|
||||
'pages': range(1,max_pages+1),
|
||||
'currentpage': page}, request))
|
||||
|
||||
|
||||
def reservation(request):
|
||||
room_number, begin_date, end_date = request.POST['room'], request.POST['begindate'], request.POST['enddate']
|
||||
try:
|
||||
begin_datetime = datetime.datetime.strptime(begin_date, "%d-%m-%Y")
|
||||
end_datetime = datetime.datetime.strptime(end_date, "%d-%m-%Y")
|
||||
except:
|
||||
return HttpResponse(loader.get_template('error.html').render({'error': "Błąd przy datach"}, request))
|
||||
if begin_datetime == '' or end_datetime == '' or end_datetime < begin_datetime or begin_datetime < datetime.datetime.today() or end_datetime < datetime.datetime.today():
|
||||
return HttpResponse(loader.get_template('error.html').render({'error': "Błąd przy datach"}, request))
|
||||
|
||||
begin_datetime = datetime.datetime.strptime(begin_date, "%d-%m-%Y")
|
||||
end_datetime = datetime.datetime.strptime(end_date, "%d-%m-%Y")
|
||||
clientform = {}
|
||||
template = loader.get_template('reservation.html')
|
||||
error = ""
|
||||
reservation = Reservation.objects.filter(room_number=room_number).filter(Q(begin_date__range=(begin_datetime, end_datetime)) | Q(end_date__range=(begin_datetime, end_datetime))).first()
|
||||
@ -37,31 +48,42 @@ def reservation(request):
|
||||
|
||||
else:
|
||||
if request.method == "POST":
|
||||
|
||||
try:
|
||||
client_id = request.POST['id_number']
|
||||
|
||||
if check(client_id):
|
||||
if Client.objects.filter(id_number=client_id).first() is None:
|
||||
client = ClientForm(request.POST)
|
||||
if Client.objects.filter(id_number=client_id).first() is None:
|
||||
|
||||
client = ClientForm(request.POST)
|
||||
if client.is_valid():
|
||||
id_number = client.cleaned_data['id_number']
|
||||
clientform = {'id_number': client.cleaned_data['id_number'],
|
||||
'name': client.cleaned_data['name'],
|
||||
'surname': client.cleaned_data['surname']}
|
||||
if check(id_number):
|
||||
client.save()
|
||||
|
||||
r = Reservation()
|
||||
r.room_number = get_object_or_404(Room, room_number=room_number)
|
||||
r.client_id = get_object_or_404(Client, id_number=client_id)
|
||||
r.begin_date = begin_date
|
||||
r.end_date = end_date
|
||||
r.save()
|
||||
r = Reservation()
|
||||
r.room_number = get_object_or_404(Room, room_number=room_number)
|
||||
r.client_id = get_object_or_404(Client, id_number=client_id)
|
||||
r.begin_date = begin_date
|
||||
r.end_date = end_date
|
||||
r.save()
|
||||
|
||||
status = "Pokój " + str(room_number) + " został pomyślnie zarejestrowany"
|
||||
return HttpResponse(template.render({'status': status}, request))
|
||||
|
||||
error = "Numer dowodu nieprawidłowy"
|
||||
status = "Pokój " + str(room_number) + " został pomyślnie zarejestrowany"
|
||||
return HttpResponse(template.render({'status': status}, request))
|
||||
else:
|
||||
error = "Zły numer dowodu"
|
||||
except:
|
||||
pass
|
||||
form = ClientForm()
|
||||
template = loader.get_template('form.html')
|
||||
return HttpResponse(template.render({'form': form, 'error': error, 'room_number': room_number, 'begin_date': begin_date, 'end_date': end_date}, request))
|
||||
|
||||
form = ClientForm(initial=clientform)
|
||||
template = loader.get_template('form.html')
|
||||
return HttpResponse(template.render({'form': form,
|
||||
'error': error,
|
||||
'room_number': room_number,
|
||||
'begin_date': begin_date,
|
||||
'end_date': end_date}, request))
|
||||
|
||||
def check(numer):
|
||||
pattern = re.compile(r'[A-Z][A-Z][A-Z]\d\d\d\d\d\d')
|
||||
@ -70,3 +92,4 @@ def check(numer):
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user