Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 7a09930

Browse files
committed
Update
1 parent 0ae0e28 commit 7a09930

File tree

2 files changed

+163
-104
lines changed

2 files changed

+163
-104
lines changed

website/adventora/templates/hotel.html

+129-104
Original file line numberDiff line numberDiff line change
@@ -88,36 +88,36 @@
8888
</style>
8989

9090
<div class="column is-full">
91-
<section class="section is-unselectable">
92-
<div class="container">
93-
<div class="swiper mySwiper" style="height: 700px; border-radius: 15px">
94-
<div class="swiper-wrapper swpmitkodidko" style="overflow: visible !important;">
95-
{% for image in hotel_images %}
96-
<div class="swiper-slide"><img src="/static/cover/hotel/{{ hotel.id }}/{{ image }}" alt="" style="width: 100%; height: 100%"></div>
97-
{% endfor %}
91+
<section class="section is-unselectable">
92+
<div class="container">
93+
<div class="swiper mySwiper" style="height: 700px; border-radius: 15px">
94+
<div class="swiper-wrapper swpmitkodidko" style="overflow: visible !important;">
95+
{% for image in hotel_images %}
96+
<div class="swiper-slide"><img src="/static/cover/hotel/{{ hotel.id }}/{{ image }}" alt="" style="width: 100%; height: 100%"></div>
97+
{% endfor %}
9898

9999

100+
</div>
101+
<div class="swiper-button-next" style="background-color:rgba(0,0,0,0.66)"></div>
102+
<div class="swiper-button-prev" style="background-color:rgba(0,0,0,0.66)"></div>
100103
</div>
101-
<div class="swiper-button-next" style="background-color:rgba(0,0,0,0.66)"></div>
102-
<div class="swiper-button-prev" style="background-color:rgba(0,0,0,0.66)"></div>
103104
</div>
104-
</div>
105-
</section>
105+
</section>
106106

107-
<script src="https://vjs.zencdn.net/8.5.2/video.min.js"></script>
108-
<script src="https://cdn.jsdelivr.net/npm/swiper@10/swiper-bundle.min.js"></script>
109-
<script>
107+
<script src="https://vjs.zencdn.net/8.5.2/video.min.js"></script>
108+
<script src="https://cdn.jsdelivr.net/npm/swiper@10/swiper-bundle.min.js"></script>
109+
<script>
110110

111-
var swiper = new Swiper(".mySwiper", {
112-
navigation: {
113-
nextEl: ".swiper-button-next",
114-
prevEl: ".swiper-button-prev",
111+
var swiper = new Swiper(".mySwiper", {
112+
navigation: {
113+
nextEl: ".swiper-button-next",
114+
prevEl: ".swiper-button-prev",
115115

116-
},
117-
loop: true,
116+
},
117+
loop: true,
118118

119-
});
120-
</script>
119+
});
120+
</script>
121121
</div>
122122

123123
<div class="column is-three-fifths card flex-column-card">
@@ -142,111 +142,136 @@
142142
</footer>
143143
</div>
144144

145-
<div class="column card flex-column-card">
146-
{% if LANGUAGE_CODE == "bg" %}
147-
<script type="text/javascript" src="https://toprentacar.bg/partner_widget?partner=adventora&channel=widget"></script>
148-
{% else %}
149-
<script type="text/javascript" src="https://toprentacar.bg/en/partner_widget?partner=adventora&channel=widget"></script>
150-
{% endif %}
151-
</div>
145+
<div class="column card flex-column-card">
146+
{% if LANGUAGE_CODE == "bg" %}
147+
<script type="text/javascript" src="https://toprentacar.bg/partner_widget?partner=adventora&channel=widget"></script>
148+
{% else %}
149+
<script type="text/javascript" src="https://toprentacar.bg/en/partner_widget?partner=adventora&channel=widget"></script>
150+
{% endif %}
151+
</div>
152152

153153

154154
</div>
155-
{# <div class="columns is-multiline is-centered is-vcentered has-text-centered">#}
156-
{# <div class="column is-one-third">#}
157-
{# d#}
158-
{# </div>#}
159-
{# <div class="column is-one-third">#}
160-
{# d#}
161-
{# </div>#}
162-
{# <div class="column is-one-third">#}
163-
{# d#}
164-
{# </div>#}
165-
{# </div>#}
155+
{# <div class="columns is-multiline is-centered is-vcentered has-text-centered">#}
156+
{# <div class="column is-one-third">#}
157+
{# d#}
158+
{# </div>#}
159+
{# <div class="column is-one-third">#}
160+
{# d#}
161+
{# </div>#}
162+
{# <div class="column is-one-third">#}
163+
{# d#}
164+
{# </div>#}
165+
{# </div>#}
166166

167167

168168
</section>
169169
<!--End of carousel box-->
170170

171171
<!--Start of list box-->
172172
<section class="section">
173-
<style>
174-
.columns-rooms {
175-
margin: 10px;
176-
border-radius: 25px;
177-
}
178-
179-
180-
</style>
181-
<div class="columns is-multiline">
182-
183-
<script>
184-
function toggleCollapse(id) {
185-
var container = document.getElementById('collapsible-container-' + id);
186-
container.classList.toggle('expanded');
173+
<style>
174+
.columns-rooms {
175+
margin: 10px;
176+
border-radius: 25px;
187177
}
188-
</script>
189-
<style>
190178

191-
</style>
192-
{% for room in rooms %}
193179

194-
<div class="column is-one-third">
195-
<style>
196-
.collapsible-container-{{ forloop.counter }} {
197-
max-height: 60px;
198-
overflow: hidden;
199-
transition: max-height 0.2s ease-out;
200-
transition: height 0.2s ease-out;
201-
}
180+
</style>
181+
<div class="columns is-multiline">
202182

203-
.collapsible-container-{{ forloop.counter }}.expanded {
204-
max-height: fit-content;
183+
<script>
184+
function toggleModal(id) {
185+
var container = document.getElementById('modal-lux-' + id);
186+
container.classList.toggle('is-active');
205187
}
206-
188+
</script>
189+
<style>
207190

208191
</style>
209-
<div class="card">
210-
<div class="card-header has-text-centered">
211-
<h1 style="margin: 10px auto;" class="title is-size-5 has-text-weight-bold">{% trans "Room" %} #{{ room.number }}</h1>
212-
</div>
213-
<div class="card-image has-img">
214-
<figure class="image is-4by3">
215-
<img src="/static/cover/room/{{ room.id }}/{{ room.id }}-0.png" style="object-fit: cover" alt="Placeholder image">
216-
</figure>
217-
</div>
218-
<div class="card-body">
219-
{{ room.description | safe }}
220-
<hr>
221-
222-
{% if room.luxuries.count > 0 %}
223-
224-
<div class="columns is-multiline collapsible-container-{{ forloop.counter }} has-text-centered" id="collapsible-container-{{ forloop.counter }}" style="margin: 0">
225-
{% for lux in room.luxuries.all %}
226-
<div class="column is-one-quarter column-cc" style="border: 1px #2f2f2f solid; border-radius: 20px; margin: 5px">
227-
<span class="icon"><i style="font-size: 20px" class="mdi {{ lux.icon }}"></i></span><small>{{ lux.name }}</small>
192+
{% for room in rooms %}
193+
194+
<div class="column is-one-third">
195+
<style>
196+
.collapsible-container-{{ forloop.counter }} {
197+
max-height: 60px;
198+
overflow: hidden;
199+
transition: max-height 0.2s ease-out;
200+
transition: height 0.2s ease-out;
201+
}
202+
203+
.collapsible-container-{{ forloop.counter }}.expanded {
204+
max-height: fit-content;
205+
}
206+
207+
208+
</style>
209+
<div class="card">
210+
<div class="card-header has-text-centered">
211+
<h1 style="margin: 10px auto;" class="title is-size-5 has-text-weight-bold">{% trans "Room" %} #{{ room.number }}</h1>
212+
</div>
213+
<div class="card-image has-img">
214+
<figure class="image is-4by3">
215+
<img src="/static/cover/room/{{ room.id }}/{{ room.id }}-0.png" style="object-fit: cover" alt="Placeholder image">
216+
</figure>
217+
</div>
218+
<div class="card-body">
219+
<div style="padding: 15px">
220+
{{ room.description | safe }}
228221
</div>
222+
<hr>
223+
224+
{% if room.luxuries.count > 0 %}
225+
226+
<div class="columns is-multiline collapsible-container-{{ forloop.counter }} has-text-centered" id="collapsible-container-{{ forloop.counter }}" style="margin: 0">
227+
{% for lux in room.luxuries.all|slice:"4" %}
228+
<div class="column is-one-quarter column-cc" style="border-radius: 20px; padding: 0">
229+
<span class="icon"><i style="font-size: 20px" class="mdi {{ lux.icon }}"></i></span><small>{{ lux.name }}</small>
230+
</div>
231+
232+
{% endfor %}
233+
</div>
234+
235+
<button class="button is-success-passive" onclick="toggleModal({{ forloop.counter }})">{% trans "View more" %}</button>
236+
237+
<div class="modal" id="modal-lux-{{ forloop.counter }}">
238+
<div class="modal-background"></div>
239+
<div class="modal-card">
240+
<header class="modal-card-head">
241+
<p class="modal-card-title">{% trans "Room" %} {{ room.number }}</p>
242+
<button class="delete" onclick="toggleModal({{ forloop.counter }})" aria-label="close"></button>
243+
</header>
244+
<section class="modal-card-body">
245+
<div class="columns is-multiline has-text-centered">
246+
{% for lux in room.luxuries.all %}
247+
<div class="column is-one-quarter column-cc" style="border-radius: 20px; padding: 10px;">
248+
<span class="icon"><i style="font-size: 20px" class="mdi {{ lux.icon }}"></i></span><small>{{ lux.name }}</small>
249+
</div>
250+
{% endfor %}
251+
</div>
252+
</section>
253+
<footer class="modal-card-foot">
254+
<button class="button" onclick="toggleModal({{ forloop.counter }})">Close</button>
255+
</footer>
256+
Room {{ room.number }} / {{ room.id }}
257+
</div>
258+
</div>
259+
260+
261+
{% endif %}
262+
<br>
263+
<br>
229264

230-
{% endfor %}
231265

232266
</div>
233-
<button class="button is-success-passive" onclick="toggleCollapse({{ forloop.counter }})">{% trans "View more" %}</button>
234-
235-
{% endif %}
236-
<br>
237-
<br>
238-
239-
240-
241-
</div>
242-
<div class="card-footer">
243-
<button style="margin: 10px auto; width: 70%; border-radius: 20px" onclick="window.location.href='/room/{{ room.id }}'"
244-
class="button is-primary">{% trans "Reserve" %}</button>
267+
<div class="card-footer">
268+
<button style="margin: 10px auto; width: 70%; border-radius: 20px" onclick="window.location.href='/room/{{ room.id }}'"
269+
class="button is-primary">{% trans "Reserve" %}</button>
270+
</div>
245271
</div>
246272
</div>
247-
</div>
248-
{% endfor %}
249-
</div>
273+
{% endfor %}
274+
</div>
250275
</section>
251276

252277
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bulma-carousel.min.js"></script>

website/home/views.py

+34
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,42 @@ def room(request, room_id):
159159
checkout = datetime.datetime.strptime(checkout, '%Y-%m-%d')
160160
nights = (checkout - checkin).days
161161

162+
checkin_timestamp = int(checkin.timestamp())
163+
checkout_timestamp = int(checkout.timestamp())
164+
162165
price = room.price * int(nights)
163166

167+
# check if room is occupied during any of the dates and days inbetween, if so, return error
168+
# filter by status "pending" or "occupied" or "checkin" or occupied=true
169+
170+
reservations = Reservation.objects.filter(room=room, status__in=['pending', 'occupied', 'checkin', 'confirmed'])
171+
for reservation in reservations:
172+
# reservation.check_in is a date, convert to datetime
173+
reservation_in = datetime.datetime.combine(reservation.checkin, datetime.datetime.min.time())
174+
reservation_out = datetime.datetime.combine(reservation.checkout, datetime.datetime.min.time())
175+
176+
reservation_in_timestamp = int(reservation_in.timestamp())
177+
reservation_out_timestamp = int(reservation_out.timestamp())
178+
179+
180+
181+
if reservation_in_timestamp <= checkin_timestamp <= reservation_out_timestamp:
182+
print("1")
183+
print(reservation_in_timestamp, checkin_timestamp, reservation_out_timestamp)
184+
messages.error(request, _('Room is already reserved for the selected dates'))
185+
return redirect('room', room_id=room_id)
186+
if reservation_in_timestamp <= checkout_timestamp <= reservation_out_timestamp:
187+
print("2")
188+
print(reservation_in_timestamp, checkout_timestamp, reservation_out_timestamp)
189+
messages.error(request, _('Room is already reserved for the selected dates'))
190+
return redirect('room', room_id=room_id)
191+
if checkin_timestamp <= reservation_in_timestamp and checkout_timestamp >= reservation_out_timestamp:
192+
print("3")
193+
print(checkin_timestamp, reservation_in_timestamp, checkout_timestamp, reservation_out_timestamp)
194+
messages.error(request, _('Room is already reserved for the selected dates'))
195+
return redirect('room', room_id=room_id)
196+
197+
164198
reservation = Reservation()
165199

166200
reservation.hotel = hotel

0 commit comments

Comments
 (0)