alion
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
from django.contrib import admin
|
||||
from .models import Room, Booking
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(Room)
|
||||
@admin.register(Booking)
|
||||
class BookingAdmin(admin.ModelAdmin):
|
||||
list_display = ('accept','surname', 'name', 'category', 'room', 'check_in', 'check_out', 'telephone', 'email', 'final_price')
|
||||
list_filter = ("category", "room")
|
||||
search_fields = ("accept__startswith", "category__startswith" , "name__startswith", "surname__startswith", 'room__startswith')
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AlionAppConfig(AppConfig):
|
||||
name = 'alion_app'
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import datetime
|
||||
from alion_app.models import Room, Booking
|
||||
|
||||
def check_availability(room, check_in, check_out):
|
||||
avail_list = []
|
||||
reservations_list = Booking.objects.filter(room=room)
|
||||
for reservation in reservations_list:
|
||||
if reservation.check_in > check_out or reservation.check_out < check_in:
|
||||
avail_list.append(True)
|
||||
else:
|
||||
avail_list.append(False)
|
||||
return all(avail_list)
|
||||
|
||||
|
||||
def get_number_of_bookings(start_date, end_date):
|
||||
pass
|
||||
@@ -0,0 +1,118 @@
|
||||
from captcha.fields import CaptchaField
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import Submit, Layout, Div, Field, HTML, ButtonHolder
|
||||
import floppyforms as forms
|
||||
from django.forms import HiddenInput
|
||||
|
||||
from alion_app.models import Room, Booking
|
||||
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
name = forms.CharField(required=True)
|
||||
email = forms.EmailField(required=True)
|
||||
subject = forms.CharField(required=True)
|
||||
message = forms.CharField(widget=forms.Textarea)
|
||||
captcha = CaptchaField()
|
||||
|
||||
def __init__(self, *arg, **kwarg):
|
||||
super(ContactForm, self).__init__(*arg, **kwarg)
|
||||
self.helper = FormHelper()
|
||||
self.fields['name'].label = ''
|
||||
self.fields['email'].label = 'email'
|
||||
self.fields['subject'].label = ''
|
||||
self.fields['message'].label = ''
|
||||
self.helper.layout = Layout(
|
||||
Div(
|
||||
HTML('{% load i18n %}{% trans "Όνομα:" %}'),
|
||||
Field('name'),
|
||||
Field('email'),
|
||||
HTML('{% load i18n %}{% trans "Θέμα:" %}'),
|
||||
Field('subject'),
|
||||
HTML('{% load i18n %}{% trans "Μήνυμα:" %}'),
|
||||
Field('message'),
|
||||
Field('captcha'),
|
||||
HTML("<br>"),
|
||||
ButtonHolder(Submit('submit', '{% load i18n %}{% trans "Αποστολή" %}')),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class AvailabilityForm(forms.Form):
|
||||
check_in = forms.DateField(
|
||||
required=True,
|
||||
input_formats=["%d-%m-%Y"],
|
||||
widget=forms.DateTimeInput(attrs={'type': 'text', 'id': 'check_in', 'class': 'form-control text-left mr-2'}))
|
||||
check_out = forms.DateField(
|
||||
required=True,
|
||||
input_formats=["%d-%m-%Y"],
|
||||
widget=forms.DateTimeInput(attrs={'type': 'text', 'id': 'check_out', 'class': 'form-control text-left ml-2'}))
|
||||
room_category = forms.ChoiceField(
|
||||
required=True,
|
||||
choices=Room.ROOM_CATEGORIES)
|
||||
|
||||
class BookRequestForm(forms.Form):
|
||||
check_in = forms.DateField(
|
||||
required=True,
|
||||
input_formats=["%d-%m-%Y"],
|
||||
widget=forms.DateTimeInput(attrs={'type': 'text', 'id': 'check_in', 'class': 'text-left mr-2', 'readonly': 'readonly' }))
|
||||
check_out = forms.DateField(
|
||||
required=True,
|
||||
input_formats=["%d-%m-%Y"],
|
||||
widget=forms.DateTimeInput(attrs={'type': 'text', 'id': 'check_out', 'class': 'text-left ml-2', 'readonly': 'readonly' }))
|
||||
#room_category = forms.CheckboxInput(attrs={'type': 'text', 'readonly': 'readonly'})
|
||||
room_category = forms.ChoiceField(
|
||||
choices=Room.ROOM_CATEGORIES,)
|
||||
|
||||
name = forms.CharField()
|
||||
surname = forms.CharField()
|
||||
telephone = forms.CharField()
|
||||
email = forms.EmailField(required=False)
|
||||
info = forms.CharField(widget=forms.Textarea, required=False)
|
||||
captcha = CaptchaField()
|
||||
|
||||
|
||||
def __init__(self, *arg, **kwarg):
|
||||
super(BookRequestForm, self).__init__(*arg, **kwarg)
|
||||
self.helper = FormHelper()
|
||||
self.fields['name'].label = ''
|
||||
self.fields['surname'].label = ''
|
||||
self.fields['telephone'].label = ''
|
||||
self.fields['info'].label = ''
|
||||
self.helper.layout = Layout(
|
||||
Div(
|
||||
HTML('{% load i18n %}{% trans "Όνομα:" %}'),
|
||||
Field('name'),
|
||||
HTML('{% load i18n %}{% trans "Επώνυμο:" %}'),
|
||||
Field('surname'),
|
||||
HTML('{% load i18n %}{% trans "Τηλέφωνο:" %}'),
|
||||
Field('telephone'),
|
||||
HTML('{% load i18n %}{% trans "Πληροφορίες:" %}'),
|
||||
Field('info'),
|
||||
Field('captcha'),
|
||||
HTML("<br>"),
|
||||
ButtonHolder(Submit('submit', '{% load i18n %}{% trans "Αποθήκευση" %}')),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class EditBooking(forms.Form):
|
||||
name = forms.CharField()
|
||||
surname = forms.CharField()
|
||||
telephone = forms.CharField()
|
||||
email = forms.EmailField(required=False)
|
||||
|
||||
room_category = forms.ChoiceField(
|
||||
choices=Room.ROOM_CATEGORIES,)
|
||||
check_in = forms.DateField(
|
||||
required=True,
|
||||
input_formats=["%d-%m-%Y"],
|
||||
widget=forms.DateTimeInput(attrs={'type': 'text', 'id': 'check_in', 'class': 'text-left mr-2', 'readonly': 'readonly' }))
|
||||
check_out = forms.DateField(
|
||||
required=True,
|
||||
input_formats=["%d-%m-%Y"],
|
||||
widget=forms.DateTimeInput(attrs={'type': 'text', 'id': 'check_out', 'class': 'text-left ml-2', 'readonly': 'readonly' }))
|
||||
final_price = forms.FloatField()
|
||||
info = forms.CharField(widget=forms.Textarea, required=False)
|
||||
accept = forms.ChoiceField(choices=Booking.ACCEPT_OPTION)
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-06-04 17:37+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: alion_app/models.py:23
|
||||
msgid "Δίκλινο"
|
||||
msgstr ""
|
||||
|
||||
#: alion_app/models.py:24
|
||||
msgid "Τρίκλινο"
|
||||
msgstr ""
|
||||
|
||||
#: alion_app/models.py:25
|
||||
msgid "Μεζονέτα"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,32 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-06-04 17:10+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
||||
"2:1));\n"
|
||||
|
||||
#: alion_app/models.py:23
|
||||
msgid "Δίκλινο"
|
||||
msgstr ""
|
||||
|
||||
#: alion_app/models.py:24
|
||||
msgid "Τρίκλινο"
|
||||
msgstr ""
|
||||
|
||||
#: alion_app/models.py:25
|
||||
msgid "Μεζονέτα"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 07:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Reservation',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=200)),
|
||||
('start_date', models.CharField(max_length=20)),
|
||||
('end_date', models.CharField(max_length=20)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Room',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('number', models.IntegerField()),
|
||||
('category', models.CharField(choices=[('DBL', 'Double'), ('TRL', 'Triple'), ('VLA', 'Villa')], max_length=3)),
|
||||
('beds', models.IntegerField()),
|
||||
('capacity', models.IntegerField()),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 07:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='room',
|
||||
name='price',
|
||||
field=models.FloatField(default=99),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('DBL', 'Δίκλινο'), ('TRL', 'Τρίκλινο'), ('VLA', 'Μεζονέτα')], max_length=3),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 08:40
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0002_auto_20210321_0956'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Reservations',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=20)),
|
||||
('surname', models.CharField(max_length=20)),
|
||||
('telephone', models.IntegerField()),
|
||||
('email', models.CharField(max_length=20)),
|
||||
('check_in', models.DateTimeField()),
|
||||
('check_out', models.DateTimeField()),
|
||||
('room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='alion_app.room')),
|
||||
],
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Reservation',
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 08:54
|
||||
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0003_auto_20210321_1040'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='reservations',
|
||||
name='email',
|
||||
field=models.EmailField(max_length=40),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='reservations',
|
||||
name='telephone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 08:55
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0004_auto_20210321_1054'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameModel(
|
||||
old_name='Reservations',
|
||||
new_name='Reservation',
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 09:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0005_auto_20210321_1055'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], max_length=3),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-21 11:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0006_auto_20210321_1105'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RoomCategory',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('category', models.CharField(max_length=50)),
|
||||
('rate', models.FloatField()),
|
||||
],
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='Reservation',
|
||||
new_name='Booking',
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-22 16:34
|
||||
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0007_auto_20210321_1338'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='BookingRequest',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=20)),
|
||||
('surname', models.CharField(max_length=20)),
|
||||
('telephone', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None)),
|
||||
('email', models.EmailField(max_length=40)),
|
||||
('category', models.CharField(max_length=20)),
|
||||
('check_in', models.DateTimeField()),
|
||||
('check_out', models.DateTimeField()),
|
||||
('info', models.CharField(max_length=256)),
|
||||
],
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='RoomCategory',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='price',
|
||||
field=models.FloatField(default=100),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,34 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-22 16:46
|
||||
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0008_auto_20210322_1834'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='booking',
|
||||
name='price',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='final_price',
|
||||
field=models.FloatField(blank=True, default=165),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bookingrequest',
|
||||
name='info',
|
||||
field=models.CharField(blank=True, max_length=256),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bookingrequest',
|
||||
name='telephone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-23 08:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0009_auto_20210322_1846'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='BookingRequest',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='category',
|
||||
field=models.CharField(default=1, max_length=40, verbose_name=(('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα'))),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='info',
|
||||
field=models.CharField(blank=True, max_length=512),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='check_in',
|
||||
field=models.DateField(),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='check_out',
|
||||
field=models.DateField(),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-23 08:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0010_auto_20210323_1022'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='booking',
|
||||
name='category',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='info',
|
||||
field=models.TextField(blank=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-23 08:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0011_auto_20210323_1042'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='accept',
|
||||
field=models.CharField(choices=[('NΑΙ', 'ΝΑΙ'), ('ΟΧΙ', 'ΟΧΙ')], default='ΝΑΙ', max_length=3),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], default='MEZ', max_length=3),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-23 15:13
|
||||
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0012_auto_20210323_1043'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='email',
|
||||
field=models.EmailField(blank=True, max_length=40),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='telephone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-24 07:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0013_auto_20210323_1713'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='accept',
|
||||
field=models.CharField(choices=[('NΑΙ', 'ΝΑΙ'), ('ΟΧΙ', 'ΟΧΙ')], default=None, max_length=3),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], default=None, max_length=3),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-24 10:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0014_auto_20210324_0918'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='email',
|
||||
field=models.EmailField(blank=True, max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='name',
|
||||
field=models.CharField(max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='surname',
|
||||
field=models.CharField(max_length=50),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-24 10:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0015_auto_20210324_1223'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='accept',
|
||||
field=models.CharField(choices=[('NΑΙ', 'ΝΑΙ'), ('ΟΧΙ', 'ΟΧΙ'), ('ΝΕΟ', 'ΝΕΟ')], default=None, max_length=3),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-26 15:52
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0016_auto_20210324_1236'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, default='2021-03-26 17:51'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-27 07:58
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0017_booking_created_at'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='booking',
|
||||
name='country',
|
||||
field=models.CharField(blank=True, choices=[('AUT', 'Αυστρία'), ('BEL', 'Βέλγιο'), ('BGR', 'Βουλγαρία'), ('CHN', 'Κίνα'), ('CYP', 'Κύπρος'), ('CZE', 'Τσεχία'), ('DEU', 'Γερμανία'), ('DNK', 'Δανία'), ('ESP', 'Ισπανία'), ('EST', 'Εστονία'), ('FIN', 'Φιλανδία'), ('FRA', 'Γαλλία'), ('GBR', 'Αγγλία'), ('GRC', 'Ελλάδα'), ('HRV', 'Κροατία'), ('HUN', 'Ουγγαρία'), ('IRL', 'Ιρλανδία'), ('ITA', 'Ιταλία'), ('LTU', 'Λιθουανία'), ('LUX', 'Λουξεμβούργο'), ('LVA', 'Λετονία'), ('MLT', 'Μάλτα'), ('NLD', 'Ολλανδία'), ('POL', 'Πολωνία'), ('PRT', 'Πορτογαλία'), ('ROU', 'Ρουμανία'), ('RUS', 'Ρωσία'), ('SVK', 'Σλοβακία'), ('SVN', 'Σλοβενία'), ('SWE', 'Σουηδία'), ('TUR', 'Τουρκία')], max_length=3),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,59 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-29 06:36
|
||||
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0018_booking_country'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='accept',
|
||||
field=models.CharField(choices=[('NΑΙ', 'ΝΑΙ'), ('ΟΧΙ', 'ΟΧΙ'), ('ΝΕΟ', 'ΝΕΟ')], default=None, max_length=3, verbose_name='Accept'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], default=None, max_length=3, verbose_name='Category'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='country',
|
||||
field=models.CharField(blank=True, choices=[('AUT', 'Αυστρία'), ('BEL', 'Βέλγιο'), ('BGR', 'Βουλγαρία'), ('CHN', 'Κίνα'), ('CYP', 'Κύπρος'), ('CZE', 'Τσεχία'), ('DEU', 'Γερμανία'), ('DNK', 'Δανία'), ('ESP', 'Ισπανία'), ('EST', 'Εστονία'), ('FIN', 'Φιλανδία'), ('FRA', 'Γαλλία'), ('GBR', 'Αγγλία'), ('GRC', 'Ελλάδα'), ('HRV', 'Κροατία'), ('HUN', 'Ουγγαρία'), ('IRL', 'Ιρλανδία'), ('ITA', 'Ιταλία'), ('LTU', 'Λιθουανία'), ('LUX', 'Λουξεμβούργο'), ('LVA', 'Λετονία'), ('MLT', 'Μάλτα'), ('NLD', 'Ολλανδία'), ('POL', 'Πολωνία'), ('PRT', 'Πορτογαλία'), ('ROU', 'Ρουμανία'), ('RUS', 'Ρωσία'), ('SVK', 'Σλοβακία'), ('SVN', 'Σλοβενία'), ('SWE', 'Σουηδία'), ('TUR', 'Τουρκία')], max_length=3, verbose_name='Country'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Created At'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='final_price',
|
||||
field=models.FloatField(blank=True, verbose_name='Final Price'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='info',
|
||||
field=models.TextField(blank=True, verbose_name='Info'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='name',
|
||||
field=models.CharField(max_length=50, verbose_name='Name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='surname',
|
||||
field=models.CharField(max_length=50, verbose_name='Surname'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='telephone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None, verbose_name='Telephone'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,38 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-29 06:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0019_auto_20210329_0936'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='beds',
|
||||
field=models.IntegerField(verbose_name='Beds'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='capacity',
|
||||
field=models.IntegerField(verbose_name='Capacity'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], max_length=3, verbose_name='Category'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='number',
|
||||
field=models.IntegerField(verbose_name='Number'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='price',
|
||||
field=models.FloatField(verbose_name='Price'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,84 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-29 06:49
|
||||
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('alion_app', '0020_auto_20210329_0937'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='accept',
|
||||
field=models.CharField(choices=[('NΑΙ', 'ΝΑΙ'), ('ΟΧΙ', 'ΟΧΙ'), ('ΝΕΟ', 'ΝΕΟ')], default=None, max_length=3),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], default=None, max_length=3),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='country',
|
||||
field=models.CharField(blank=True, choices=[('AUT', 'Αυστρία'), ('BEL', 'Βέλγιο'), ('BGR', 'Βουλγαρία'), ('CHN', 'Κίνα'), ('CYP', 'Κύπρος'), ('CZE', 'Τσεχία'), ('DEU', 'Γερμανία'), ('DNK', 'Δανία'), ('ESP', 'Ισπανία'), ('EST', 'Εστονία'), ('FIN', 'Φιλανδία'), ('FRA', 'Γαλλία'), ('GBR', 'Αγγλία'), ('GRC', 'Ελλάδα'), ('HRV', 'Κροατία'), ('HUN', 'Ουγγαρία'), ('IRL', 'Ιρλανδία'), ('ITA', 'Ιταλία'), ('LTU', 'Λιθουανία'), ('LUX', 'Λουξεμβούργο'), ('LVA', 'Λετονία'), ('MLT', 'Μάλτα'), ('NLD', 'Ολλανδία'), ('POL', 'Πολωνία'), ('PRT', 'Πορτογαλία'), ('ROU', 'Ρουμανία'), ('RUS', 'Ρωσία'), ('SVK', 'Σλοβακία'), ('SVN', 'Σλοβενία'), ('SWE', 'Σουηδία'), ('TUR', 'Τουρκία')], max_length=3),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='final_price',
|
||||
field=models.FloatField(blank=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='info',
|
||||
field=models.TextField(blank=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='name',
|
||||
field=models.CharField(max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='surname',
|
||||
field=models.CharField(max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='booking',
|
||||
name='telephone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='beds',
|
||||
field=models.IntegerField(),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='capacity',
|
||||
field=models.IntegerField(),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('ΔΙΚ', 'Δίκλινο'), ('ΤΡΙ', 'Τρίκλινο'), ('ΜΕΖ', 'Μεζονέτα')], max_length=3),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='number',
|
||||
field=models.IntegerField(),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='room',
|
||||
name='price',
|
||||
field=models.FloatField(),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,78 @@
|
||||
from django.db import models
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class Room(models.Model):
|
||||
ROOM_CATEGORIES = (
|
||||
('ΔΙΚ', 'Δίκλινο'),
|
||||
('ΤΡΙ', 'Τρίκλινο'),
|
||||
('ΜΕΖ', 'Μεζονέτα'),
|
||||
)
|
||||
number = models.IntegerField()
|
||||
category = models.CharField(max_length=3, choices=ROOM_CATEGORIES)
|
||||
beds = models.IntegerField()
|
||||
capacity = models.IntegerField()
|
||||
price = models.FloatField()
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.number}-{self.category} με {self.beds} κρεβάτια για {self.capacity} άτομα.'
|
||||
|
||||
class Booking(models.Model):
|
||||
ROOM_CATEGORIES = (
|
||||
('ΔΙΚ', _('Δίκλινο')),
|
||||
('ΤΡΙ', _('Τρίκλινο')),
|
||||
('ΜΕΖ', _('Μεζονέτα')),
|
||||
)
|
||||
ACCEPT_OPTION = (
|
||||
('NΑΙ', 'ΝΑΙ'),
|
||||
('ΟΧΙ', 'ΟΧΙ'),
|
||||
('ΝΕΟ', 'ΝΕΟ'),
|
||||
)
|
||||
COUNTRY = (
|
||||
('AUT', 'Αυστρία'),
|
||||
('BEL', 'Βέλγιο'),
|
||||
('BGR', 'Βουλγαρία'),
|
||||
('CHN', 'Κίνα'),
|
||||
('CYP', 'Κύπρος'),
|
||||
('CZE', 'Τσεχία'),
|
||||
('DEU', 'Γερμανία'),
|
||||
('DNK', 'Δανία'),
|
||||
('ESP', 'Ισπανία'),
|
||||
('EST', 'Εστονία'),
|
||||
('FIN', 'Φιλανδία'),
|
||||
('FRA', 'Γαλλία'),
|
||||
('GBR', 'Αγγλία'),
|
||||
('GRC', 'Ελλάδα'),
|
||||
('HRV', 'Κροατία'),
|
||||
('HUN', 'Ουγγαρία'),
|
||||
('IRL', 'Ιρλανδία'),
|
||||
('ITA', 'Ιταλία'),
|
||||
('LTU', 'Λιθουανία'),
|
||||
('LUX', 'Λουξεμβούργο'),
|
||||
('LVA', 'Λετονία'),
|
||||
('MLT', 'Μάλτα'),
|
||||
('NLD', 'Ολλανδία'),
|
||||
('POL', 'Πολωνία'),
|
||||
('PRT', 'Πορτογαλία'),
|
||||
('ROU', 'Ρουμανία'),
|
||||
('RUS', 'Ρωσία'),
|
||||
('SVK', 'Σλοβακία'),
|
||||
('SVN', 'Σλοβενία'),
|
||||
('SWE', 'Σουηδία'),
|
||||
('TUR', 'Τουρκία'),
|
||||
)
|
||||
name = models.CharField(max_length=50)
|
||||
surname = models.CharField(max_length=50)
|
||||
telephone = PhoneNumberField()
|
||||
email = models.EmailField(blank=True, max_length=50)
|
||||
category = models.CharField(max_length=3, choices=ROOM_CATEGORIES, default=None)
|
||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
check_in = models.DateField()
|
||||
check_out = models.DateField()
|
||||
final_price = models.FloatField(blank=True)
|
||||
country = models.CharField(max_length=3, choices=COUNTRY, blank=True)
|
||||
info = models.TextField(blank=True)
|
||||
accept = models.CharField(max_length=3, choices=ACCEPT_OPTION, default=None)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.template.defaulttags import register
|
||||
|
||||
|
||||
@register.filter
|
||||
def get_item(dictionary, key):
|
||||
return dictionary.get(key)
|
||||
@@ -0,0 +1,69 @@
|
||||
from django import template
|
||||
from django.utils import translation
|
||||
from django.conf import settings
|
||||
import flag
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter
|
||||
def get_language_info_list_ex(request):
|
||||
"""
|
||||
Sample result:
|
||||
|
||||
[{'bidi': False,
|
||||
'code': 'en',
|
||||
'flag': '🇬🇧',
|
||||
'is_current': False,
|
||||
'name': 'English',
|
||||
'name_local': 'English',
|
||||
'name_translated': 'Inglese'},
|
||||
{'bidi': False,
|
||||
'code': 'it',
|
||||
'flag': '🇮🇹',
|
||||
'is_current': True,
|
||||
'name': 'Italian',
|
||||
'name_local': 'italiano',
|
||||
'name_translated': 'Italiano'},
|
||||
{'bidi': False,
|
||||
'code': 'es',
|
||||
'flag': '🇪🇸',
|
||||
'is_current': False,
|
||||
'name': 'Spanish',
|
||||
'name_local': 'español',
|
||||
'name_translated': 'Spagnolo'}]
|
||||
"""
|
||||
data = []
|
||||
|
||||
|
||||
# From django.templatetags.i18n.GetLanguageInfoListNode
|
||||
def get_language_info(language):
|
||||
# ``language`` is either a language code string or a sequence
|
||||
# with the language code as its first item
|
||||
if len(language[0]) > 1:
|
||||
return translation.get_language_info(language[0])
|
||||
else:
|
||||
return translation.get_language_info(str(language))
|
||||
|
||||
flag_map = {
|
||||
'en': 'gb',
|
||||
}
|
||||
|
||||
# Es: 'es'
|
||||
current_language = translation.get_language()
|
||||
|
||||
# Es: [('en', 'Inglés'), ('it', 'Italiano'), ('es', 'Español')]
|
||||
#languages = [(k, translation.gettext(v)) for k, v in settings.LANGUAGES]
|
||||
for language in settings.LANGUAGES:
|
||||
# Es: {'bidi': False, 'code': 'es', 'name': 'Spanish', 'name_local': 'español', 'name_translated': 'Español'}
|
||||
info = get_language_info(language)
|
||||
|
||||
code = info['code']
|
||||
info['is_current'] = (code == current_language)
|
||||
|
||||
# This requires emoji-country-flag Python package
|
||||
info['flag'] = flag.flag(flag_map.get(code, code))
|
||||
data.append(info)
|
||||
|
||||
return data
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,23 @@
|
||||
from django.contrib.staticfiles.storage import staticfiles_storage
|
||||
from django.urls import path
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
from .views import IndexPageView, AboutPageView, VillasPageView, RoomsPageView, ContactPageView, DoubleRoomsPageView, \
|
||||
TripleRoomsPageView, BookingFormView, DashboardPageView, LocationPageView # , AvailFormView
|
||||
|
||||
app_name = 'alion_app'
|
||||
|
||||
urlpatterns = [
|
||||
path('', IndexPageView.as_view(), name='index'),
|
||||
path('villas', VillasPageView.as_view(), name='villas'),
|
||||
path('rooms', RoomsPageView.as_view(), name='rooms'),
|
||||
path('double', DoubleRoomsPageView.as_view(), name='double'),
|
||||
path('triple', TripleRoomsPageView.as_view(), name='triple'),
|
||||
path('about', AboutPageView.as_view(), name='about'),
|
||||
path('contact', ContactPageView.as_view(), name='contact'),
|
||||
path('location', LocationPageView.as_view(), name='location'),
|
||||
#path('check', AvailFormView.as_view(), name='check'),
|
||||
path('book', BookingFormView.as_view(), name='book'),
|
||||
path('favicon.ico', RedirectView.as_view(url=staticfiles_storage.url('images/favicon.ico'))),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,432 @@
|
||||
# Create your views here.
|
||||
|
||||
import datetime
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.core.mail import send_mail
|
||||
from django.http import HttpResponse
|
||||
from django.views.generic import TemplateView, FormView, UpdateView, CreateView
|
||||
from django.shortcuts import render, redirect
|
||||
from .booking_functions.availability import check_availability, calculate_price
|
||||
from .forms import ContactForm, AvailabilityForm, BookRequestForm, EditBooking
|
||||
from .models import Room, Booking, Pricing
|
||||
#from datetime import datetime
|
||||
|
||||
def date_range(start, end, intv):
|
||||
diff = (end - start) / intv
|
||||
for i in range(intv):
|
||||
yield start + diff * i
|
||||
yield end
|
||||
|
||||
|
||||
def get_range_data(date_pre, date_post, data_dict, operation, partitions):
|
||||
l_range = list(date_range(date_pre, date_post, partitions))
|
||||
d_range = {}
|
||||
for i in range(len(l_range)):
|
||||
try:
|
||||
d_range[l_range[i], l_range[i + 1]] = 0
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
for k in data_dict.keys():
|
||||
for r in d_range.keys():
|
||||
if r[0] <= data_dict[k].check_in <= r[1]:
|
||||
if operation == 'bookings':
|
||||
d_range[r] += 1
|
||||
if operation == 'income':
|
||||
d_range[r] += data_dict[k].final_price
|
||||
return d_range
|
||||
|
||||
|
||||
def get_statistics(stats_type):
|
||||
date_look = datetime.date.today()
|
||||
date_look_pre_week = date_look - datetime.timedelta(days=7)
|
||||
date_look_pre_month = date_look - datetime.timedelta(days=31)
|
||||
date_look_pre_3months = date_look - datetime.timedelta(days=93)
|
||||
date_look_pre_6months = date_look - datetime.timedelta(days=186)
|
||||
date_look_pre_year = date_look - datetime.timedelta(days=365)
|
||||
bookings = Booking.objects.all()
|
||||
|
||||
bookings_week = {b.id: b for b in
|
||||
bookings.filter(check_in__range=[date_look_pre_week, date_look]).filter(accept='NΑΙ')}
|
||||
bookings_month = {b.id: b for b in
|
||||
bookings.filter(check_in__range=[date_look_pre_month, date_look]).filter(accept='NΑΙ')}
|
||||
bookings_3months = {b.id: b for b in
|
||||
bookings.filter(check_in__range=[date_look_pre_3months, date_look]).filter(accept='NΑΙ')}
|
||||
bookings_6months = {b.id: b for b in
|
||||
bookings.filter(check_in__range=[date_look_pre_6months, date_look]).filter(accept='NΑΙ')}
|
||||
bookings_year = {b.id: b for b in
|
||||
bookings.filter(check_in__range=[date_look_pre_year, date_look]).filter(accept='NΑΙ')}
|
||||
|
||||
d_range_week = get_range_data(date_look_pre_week, date_look, bookings_week, operation=stats_type, partitions=7)
|
||||
d_range_month = get_range_data(date_look_pre_month, date_look, bookings_month, operation=stats_type, partitions=10)
|
||||
d_range_3months = get_range_data(date_look_pre_3months, date_look, bookings_3months, operation=stats_type,
|
||||
partitions=6)
|
||||
d_range_6months = get_range_data(date_look_pre_6months, date_look, bookings_6months, operation=stats_type,
|
||||
partitions=6)
|
||||
d_range_year = get_range_data(date_look_pre_year, date_look, bookings_year, operation=stats_type, partitions=12)
|
||||
|
||||
data = {}
|
||||
data["week_labels"] = ','.join(
|
||||
['{}-{}'.format(i[0].strftime("%d/%m"), i[1].strftime("%d/%m")) for i in d_range_week.keys()])
|
||||
data["week_values"] = ','.join([str(i) for i in d_range_week.values()])
|
||||
data["month_labels"] = ','.join(
|
||||
['{}-{}'.format(i[0].strftime("%d/%m"), i[1].strftime("%d/%m")) for i in d_range_month.keys()])
|
||||
data["month_values"] = ','.join([str(i) for i in d_range_month.values()])
|
||||
data["three_months_labels"] = ','.join(
|
||||
['{}-{}'.format(i[0].strftime("%d/%m"), i[1].strftime("%d/%m")) for i in d_range_3months.keys()])
|
||||
data["three_months_values"] = ','.join([str(i) for i in d_range_3months.values()])
|
||||
data["six_months_labels"] = ','.join(
|
||||
['{}-{}'.format(i[0].strftime("%d/%m"), i[1].strftime("%d/%m")) for i in d_range_6months.keys()])
|
||||
data["six_months_values"] = ','.join([str(i) for i in d_range_6months.values()])
|
||||
data["year_labels"] = ','.join(
|
||||
['{}-{}'.format(i[0].strftime("%d/%m"), i[1].strftime("%d/%m")) for i in d_range_year.keys()])
|
||||
data["year_values"] = ','.join([str(i) for i in d_range_year.values()])
|
||||
data["active_page"] = 'statistics'
|
||||
return data
|
||||
|
||||
|
||||
class IndexPageView(TemplateView):
|
||||
template_name = "index.html"
|
||||
# return HttpResponse(settings.LOCALE_PATHS)
|
||||
|
||||
|
||||
class VillasPageView(TemplateView):
|
||||
template_name = "villas.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(VillasPageView, self).get_context_data(**kwargs)
|
||||
m1_price = Pricing.objects.filter(season_start__lte=datetime.date.today(),
|
||||
season_end__gte=datetime.date.today(), category__exact="ΜΕΖ1")
|
||||
m2_price = Pricing.objects.filter(season_start__lte=datetime.date.today(),
|
||||
season_end__gte=datetime.date.today(), category__exact="ΜΕΖ2")
|
||||
context['m1_price'] = m1_price[0].price
|
||||
context['m2_price'] = m2_price[0].price
|
||||
return context
|
||||
|
||||
|
||||
class RoomsPageView(TemplateView):
|
||||
template_name = "rooms.html"
|
||||
|
||||
|
||||
class DoubleRoomsPageView(TemplateView):
|
||||
template_name = "double.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(DoubleRoomsPageView, self).get_context_data(**kwargs)
|
||||
curr_price = Pricing.objects.filter(season_start__lte=datetime.date.today(),
|
||||
season_end__gte=datetime.date.today(), category__exact="ΔΙΚ")
|
||||
try:
|
||||
context['price'] = curr_price[0].price
|
||||
except IndexError:
|
||||
context['price'] = ''
|
||||
return context
|
||||
|
||||
|
||||
class TripleRoomsPageView(TemplateView):
|
||||
template_name = "triple.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(TripleRoomsPageView, self).get_context_data(**kwargs)
|
||||
t1_price = Pricing.objects.filter(season_start__lte=datetime.date.today(),
|
||||
season_end__gte=datetime.date.today(), category__exact="ΤΡΙ1")
|
||||
t2_price = Pricing.objects.filter(season_start__lte=datetime.date.today(),
|
||||
season_end__gte=datetime.date.today(), category__exact="ΤΡΙ2")
|
||||
t3_price = Pricing.objects.filter(season_start__lte=datetime.date.today(),
|
||||
season_end__gte=datetime.date.today(), category__exact="ΤΡΙ3")
|
||||
try:
|
||||
context['t1_price'] = t1_price[0].price
|
||||
except IndexError:
|
||||
context['t1_price'] = ''
|
||||
try:
|
||||
context['t2_price'] = t2_price[0].price
|
||||
except IndexError:
|
||||
context['t1_price'] = ''
|
||||
try:
|
||||
context['t3_price'] = t3_price[0].price
|
||||
except IndexError:
|
||||
context['t1_price'] = ''
|
||||
return context
|
||||
|
||||
|
||||
class AboutPageView(TemplateView):
|
||||
template_name = "about.html"
|
||||
|
||||
|
||||
class LocationPageView(TemplateView):
|
||||
template_name = "location.html"
|
||||
|
||||
|
||||
class ContactPageView(FormView):
|
||||
form_class = ContactForm
|
||||
template_name = "contact.html"
|
||||
success_url = 'contact'
|
||||
|
||||
def form_valid(self, form):
|
||||
message = "{name} / {email} said: ".format(
|
||||
name=form.cleaned_data.get('name'),
|
||||
email=form.cleaned_data.get('email'))
|
||||
message += "\n\n{0}".format(form.cleaned_data.get('message'))
|
||||
send_mail(
|
||||
subject=form.cleaned_data.get('subject').strip(),
|
||||
message=message,
|
||||
from_email='contact-form@alion.gr',
|
||||
recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
|
||||
)
|
||||
return super(ContactPageView, self).form_valid(form)
|
||||
|
||||
|
||||
class FavailFormView(FormView):
|
||||
form_class = AvailabilityForm
|
||||
template_name = "book.html"
|
||||
success_url = 'book_dates'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
return context
|
||||
|
||||
def post(self, request, context_dict={}, *args, **kwargs):
|
||||
form = AvailabilityForm(request.POST)
|
||||
if form.is_valid():
|
||||
category = form.cleaned_data['room_category']
|
||||
room_list = Room.objects.filter(category=category)
|
||||
data = form.cleaned_data
|
||||
available_rooms = []
|
||||
for room in room_list:
|
||||
if check_availability(room, data['check_in'], data['check_out']):
|
||||
available_rooms.append(room)
|
||||
if len(available_rooms) > 0:
|
||||
total_price = calculate_price(data['check_in'], data['check_out'], category)
|
||||
avail_msg = 'There are available rooms from {} to {}'.format(data['check_in'].strftime("%d/%m/%Y"), data['check_out'].strftime("%d/%m/%Y"))
|
||||
context_dict.update({"available": True,
|
||||
"booking": True,
|
||||
'check_in': data['check_in'],
|
||||
'check_out': data['check_out'],
|
||||
'room_category': data['room_category'],
|
||||
'anchor': 'fa',
|
||||
'avail_msg': avail_msg,
|
||||
})
|
||||
request.session['check_in'] = str(data['check_in'])
|
||||
request.session['check_out'] = str(data['check_out'])
|
||||
request.session['room_category'] = str(data['room_category'])
|
||||
request.session['anchor'] = 'fa'
|
||||
request.session['avail_msg'] = avail_msg
|
||||
request.session['total_price'] = total_price
|
||||
return redirect('alion_app:book_dates')
|
||||
else:
|
||||
messages.error(request, 'No available rooms')
|
||||
|
||||
|
||||
class BookingFormView(FormView):
|
||||
form_class = BookRequestForm
|
||||
template_name = "book_dates.html"
|
||||
success_url = 'book_success'
|
||||
|
||||
def get(self, request, context_dict={}, *args, **kwargs):
|
||||
context_dict.update({"available": True,
|
||||
"booking": True,
|
||||
'check_in': request.session['check_in'],
|
||||
'check_out': request.session['check_out'],
|
||||
'room_category': request.session['room_category'],
|
||||
'anchor': request.session['anchor'],
|
||||
'avail_msg': request.session['avail_msg'],
|
||||
'total_price': request.session['total_price'],
|
||||
'form': BookRequestForm()
|
||||
})
|
||||
return render(request, "book_dates.html", context_dict)
|
||||
|
||||
def post(self, request, context_dict={}, *args, **kwargs):
|
||||
form = BookRequestForm(request.POST)
|
||||
check_in = datetime.datetime.strptime(request.session['check_in'], '%Y-%m-%d')
|
||||
check_out = datetime.datetime.strptime(request.session['check_out'], '%Y-%m-%d')
|
||||
context_dict.update({'check_in': check_in,
|
||||
'check_out': check_out,
|
||||
'room_category': request.session['room_category'],
|
||||
'anchor': request.session['anchor'],
|
||||
'avail_msg': request.session['avail_msg'],
|
||||
'total_price': request.session['total_price'],
|
||||
'form': form
|
||||
})
|
||||
if form.is_valid():
|
||||
data = form.cleaned_data
|
||||
booking = Booking.objects.create(
|
||||
name=data['name'],
|
||||
surname=data['surname'],
|
||||
telephone=data['telephone'],
|
||||
email=data['email'],
|
||||
category=context_dict['room_category'],
|
||||
room=Room.objects.get(number='001'),
|
||||
check_in=context_dict['check_in'],
|
||||
check_out=context_dict['check_out'],
|
||||
final_price=context_dict['total_price'],
|
||||
info=data['info'],
|
||||
accept='ΝΕΟ',
|
||||
)
|
||||
booking.save()
|
||||
message = "{} - from {} until {}\n\nTotal Price {}\n\nInfo:{}\n{} {}\ntel:{}\nemail:{}\n\nAdmin Link: http://127.0.0.1:8000/dx/{}/update".format(context_dict['room_category'], context_dict['check_in'], context_dict['check_out'], context_dict['total_price'], data['info'], data['name'], data['surname'], data['telephone'], data['email'], booking.id)
|
||||
send_mail(
|
||||
subject="Booking Request {} {}".format(data['name'], data['surname']),
|
||||
message=message,
|
||||
from_email='booking-form@alion.gr',
|
||||
recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
|
||||
)
|
||||
|
||||
return render(request, "book_success.html", context=context_dict)
|
||||
else:
|
||||
messages.error(request, form.errors)
|
||||
return render(request, "book_dates.html", context=context_dict)
|
||||
|
||||
|
||||
class RoomAvailabilityFormView(FormView):
|
||||
form_class = AvailabilityForm
|
||||
template_name = "diaxeirisi/Dashboard.Rooms.Availability.html"
|
||||
success_url = '/dx/room_availability'
|
||||
|
||||
def post(self, request, context_dict={}, *args, **kwargs):
|
||||
form = AvailabilityForm(request.POST)
|
||||
if form.is_valid():
|
||||
category = form.cleaned_data['room_category']
|
||||
room_list = Room.objects.filter(category=category)
|
||||
data = form.cleaned_data
|
||||
available_rooms = []
|
||||
for room in room_list:
|
||||
if check_availability(room, data['check_in'], data['check_out']):
|
||||
available_rooms.append(room)
|
||||
if len(available_rooms) > 0:
|
||||
context_dict.update({"form": form,
|
||||
'available_rooms': available_rooms,
|
||||
'RoomObj': available_rooms
|
||||
})
|
||||
return render(request, "diaxeirisi/Dashboard.Rooms.Availability.html", context=context_dict)
|
||||
|
||||
|
||||
class DashboardPageView(LoginRequiredMixin, TemplateView):
|
||||
form_class = EditBooking
|
||||
template_name = "diaxeirisi/Dashboard.Default.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["BookingObj"] = Booking.objects.all()
|
||||
context["active_page"] = 'dashboard'
|
||||
return context
|
||||
|
||||
|
||||
class RoomsDXPageView(LoginRequiredMixin, TemplateView):
|
||||
template_name = "diaxeirisi/Dashboard.Rooms.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["RoomObj"] = Room.objects.all()
|
||||
date_look = datetime.date.today()
|
||||
date_look_pre = date_look - datetime.timedelta(days=30)
|
||||
booked = {}
|
||||
for i in Booking.objects.filter(check_in__range=[date_look_pre, date_look]):
|
||||
if i.check_in <= date_look < i.check_out:
|
||||
booked[i.room.id] = {'b_id': i.id, 'b_name': i.name, 'b_surname': i.surname}
|
||||
context["Booked"] = booked
|
||||
context["active_page"] = 'rooms'
|
||||
return context
|
||||
|
||||
|
||||
class EditBookingView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = Booking
|
||||
success_url = '/dx'
|
||||
success_message = 'Οι αλλαγές αποθηκεύτηκαν.'
|
||||
template_name = "diaxeirisi/edit_booking.html"
|
||||
fields = [
|
||||
"name",
|
||||
"surname",
|
||||
"telephone",
|
||||
"email",
|
||||
"category",
|
||||
"room",
|
||||
"check_in",
|
||||
"check_out",
|
||||
"final_price",
|
||||
"country",
|
||||
"info",
|
||||
"accept"
|
||||
]
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
category = context["object"].category
|
||||
room_list = Room.objects.filter(category=category)
|
||||
available_rooms = []
|
||||
for room in room_list:
|
||||
if check_availability(room, context["object"].check_in, context["object"].check_out):
|
||||
available_rooms.append(room)
|
||||
context["AvailRooms"] = available_rooms
|
||||
return context
|
||||
|
||||
|
||||
class CreateBooking(LoginRequiredMixin, SuccessMessageMixin, CreateView):
|
||||
model = Booking
|
||||
success_url = '/dx'
|
||||
success_message = 'H Κράτηση Δημιουργήθηκε.'
|
||||
template_name = "diaxeirisi/create_booking.html"
|
||||
fields = [
|
||||
"name",
|
||||
"surname",
|
||||
"telephone",
|
||||
"email",
|
||||
"category",
|
||||
"room",
|
||||
"check_in",
|
||||
"check_out",
|
||||
"final_price",
|
||||
"country",
|
||||
"info",
|
||||
"accept"
|
||||
]
|
||||
|
||||
|
||||
class EditRoomView(LoginRequiredMixin, UpdateView):
|
||||
model = Room
|
||||
template_name = "diaxeirisi/edit_room.html"
|
||||
fields = [
|
||||
"number",
|
||||
"category",
|
||||
"beds",
|
||||
"capacity",
|
||||
]
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
return context
|
||||
|
||||
|
||||
class CreateRoom(LoginRequiredMixin, SuccessMessageMixin, CreateView):
|
||||
model = Room
|
||||
success_url = '/dx/create_room'
|
||||
success_message = 'Οι αλλαγές αποθηκεύτηκαν.'
|
||||
template_name = "diaxeirisi/create_room.html"
|
||||
fields = [
|
||||
"number",
|
||||
"category",
|
||||
"beds",
|
||||
"capacity",
|
||||
]
|
||||
|
||||
|
||||
class StatisticsPageView(LoginRequiredMixin, TemplateView):
|
||||
template_name = "diaxeirisi/Dashboard.Statistics.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
stats = get_statistics('bookings')
|
||||
context.update(stats)
|
||||
return context
|
||||
|
||||
|
||||
class StatisticsIncomePageView(LoginRequiredMixin, TemplateView):
|
||||
template_name = "diaxeirisi/Dashboard.Statistics.Income.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
stats = get_statistics('income')
|
||||
context.update(stats)
|
||||
return context
|
||||
Reference in New Issue
Block a user