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.forms import ModelForm
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from .models import *
|
from .models import *
|
||||||
from django import forms
|
|
||||||
|
|
||||||
|
|
||||||
class ClientForm(ModelForm):
|
class ClientForm(ModelForm):
|
||||||
@ -13,3 +12,5 @@ class ClientForm(ModelForm):
|
|||||||
'name': _('Imię '),
|
'name': _('Imię '),
|
||||||
'surname': _('Nazwisko ')
|
'surname': _('Nazwisko ')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.validators import MinValueValidator
|
from django.core.validators import MinValueValidator, RegexValidator
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RoomType(models.Model):
|
class RoomType(models.Model):
|
||||||
@ -30,7 +31,9 @@ class Room(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class Client(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)
|
name = models.CharField(max_length=40)
|
||||||
surname = models.CharField(max_length=40)
|
surname = models.CharField(max_length=40)
|
||||||
|
|
||||||
@ -38,8 +41,10 @@ class Client(models.Model):
|
|||||||
return self.name + self.surname
|
return self.name + self.surname
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Reservation(models.Model):
|
class Reservation(models.Model):
|
||||||
room_number = models.ForeignKey(Room, on_delete=models.CASCADE)
|
room_number = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||||
client_id = models.ForeignKey(Client, on_delete=models.CASCADE)
|
client_id = models.ForeignKey(Client, on_delete=models.CASCADE)
|
||||||
begin_date = models.DateField()
|
begin_date = models.DateField()
|
||||||
end_date = models.DateField()
|
end_date = models.DateField()
|
||||||
|
|
||||||
|
@ -17,9 +17,37 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$( function() {
|
$( function() {
|
||||||
$( ".datepicker" ).datepicker({ dateFormat: 'dd-mm-yy' }).val();
|
$( ".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>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body onLoad="changeBackground(imageUrl = localStorage.backgroundImage)">
|
<body onLoad="changeBackground(imageUrl = localStorage.backgroundImage)">
|
||||||
@ -42,12 +70,12 @@
|
|||||||
<td>{{ room.price }} zł</td>
|
<td>{{ room.price }} zł</td>
|
||||||
<td>
|
<td>
|
||||||
|
|
||||||
<form action="{% url 'reservation' %}" method="POST">
|
<form action="{% url 'reservation' %}" class="dateform" method="POST">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="room" value="{{ room.room_number }}">
|
<input type="hidden" name="room" value="{{ room.room_number }}">
|
||||||
<div class="button-box" >
|
<div class="button-box" >
|
||||||
Od: <input type="text" class="datepicker" name="begindate" size="3">
|
Od: <input type="text" class="datepicker" name="begindate" size="3" required>
|
||||||
Do: <input type="text" class="datepicker" name="enddate" size="3">
|
Do: <input type="text" class="datepicker" name="enddate" size="3" required>
|
||||||
<button>Rezerwuj</button>
|
<button>Rezerwuj</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -58,6 +86,19 @@
|
|||||||
</table>
|
</table>
|
||||||
<br><br>
|
<br><br>
|
||||||
<center>
|
<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">
|
<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/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>
|
<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 = [
|
urlpatterns = [
|
||||||
path('', views.index, name='index'),
|
path('', views.index, name='index'),
|
||||||
|
path('<int:page>', views.index, name='indexpage'),
|
||||||
path('reservation', views.reservation, name='reservation')
|
path('reservation', views.reservation, name='reservation')
|
||||||
]
|
]
|
@ -4,30 +4,41 @@ from django.shortcuts import get_object_or_404, render
|
|||||||
from .models import *
|
from .models import *
|
||||||
from .forms import *
|
from .forms import *
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
import re
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import math
|
||||||
|
import re
|
||||||
|
|
||||||
# Create your views here.
|
# 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 = Room.objects.all()
|
||||||
rooms = rooms.order_by('room_type', 'room_number')
|
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):
|
def reservation(request):
|
||||||
room_number, begin_date, end_date = request.POST['room'], request.POST['begindate'], request.POST['enddate']
|
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")
|
||||||
begin_datetime = datetime.datetime.strptime(begin_date, "%d-%m-%Y")
|
end_datetime = datetime.datetime.strptime(end_date, "%d-%m-%Y")
|
||||||
end_datetime = datetime.datetime.strptime(end_date, "%d-%m-%Y")
|
clientform = {}
|
||||||
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))
|
|
||||||
|
|
||||||
template = loader.get_template('reservation.html')
|
template = loader.get_template('reservation.html')
|
||||||
error = ""
|
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()
|
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:
|
else:
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
|
||||||
try:
|
try:
|
||||||
client_id = request.POST['id_number']
|
client_id = request.POST['id_number']
|
||||||
|
|
||||||
if check(client_id):
|
if Client.objects.filter(id_number=client_id).first() is None:
|
||||||
if Client.objects.filter(id_number=client_id).first() is None:
|
|
||||||
client = ClientForm(request.POST)
|
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()
|
client.save()
|
||||||
|
|
||||||
r = Reservation()
|
r = Reservation()
|
||||||
r.room_number = get_object_or_404(Room, room_number=room_number)
|
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.client_id = get_object_or_404(Client, id_number=client_id)
|
||||||
r.begin_date = begin_date
|
r.begin_date = begin_date
|
||||||
r.end_date = end_date
|
r.end_date = end_date
|
||||||
r.save()
|
r.save()
|
||||||
|
|
||||||
status = "Pokój " + str(room_number) + " został pomyślnie zarejestrowany"
|
status = "Pokój " + str(room_number) + " został pomyślnie zarejestrowany"
|
||||||
return HttpResponse(template.render({'status': status}, request))
|
return HttpResponse(template.render({'status': status}, request))
|
||||||
|
else:
|
||||||
error = "Numer dowodu nieprawidłowy"
|
error = "Zły numer dowodu"
|
||||||
except:
|
except:
|
||||||
pass
|
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):
|
def check(numer):
|
||||||
pattern = re.compile(r'[A-Z][A-Z][A-Z]\d\d\d\d\d\d')
|
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