104 lines
4.1 KiB
Python
104 lines
4.1 KiB
Python
from django.http import HttpResponse
|
|
from django.template import loader
|
|
from django.shortcuts import get_object_or_404, render
|
|
from .models import *
|
|
from .forms import *
|
|
from django.db.models import Q
|
|
import datetime
|
|
import math
|
|
import re
|
|
|
|
# Create your views here.
|
|
|
|
|
|
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')
|
|
|
|
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')
|
|
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']
|
|
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()
|
|
if not reservation is None:
|
|
status = "Pokój " + str(room_number) + " jest zajęty"
|
|
return HttpResponse(template.render({'status': status}, request))
|
|
|
|
else:
|
|
if request.method == "POST":
|
|
begin = datetime.datetime.strptime(begin_date, "%d-%m-%Y")
|
|
end = datetime.datetime.strptime(end_date, "%d-%m-%Y")
|
|
client_id = request.POST.get('id_number', False)
|
|
if client_id:
|
|
|
|
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):
|
|
if Client.objects.filter(id_number=client_id).first() is None:
|
|
client.save()
|
|
else:
|
|
error = "Zły numer dowodu"
|
|
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))
|
|
|
|
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
|
|
r.end_date = end
|
|
r.save()
|
|
|
|
status = "Pokój " + str(room_number) + " został pomyślnie zarezerwowany"
|
|
|
|
return HttpResponse(template.render({'status': status}, request))
|
|
|
|
else:
|
|
pass
|
|
|
|
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')
|
|
|
|
return pattern.match(numer)
|
|
|
|
|
|
|
|
|