From 6a57f533b6e4137518737549dbf3be9ded9fd3c2 Mon Sep 17 00:00:00 2001
From: l3-washbrook <luke2.washbrook@live.uwe.ac.uk>
Date: Fri, 5 May 2023 12:03:58 +0100
Subject: [PATCH 1/6] re added booking cancelations

---
 ...rvation_cancellation_requested_and_more.py |  23 +++++++++++++
 uwe-flix/booking/models.py                    |   3 +-
 uwe-flix/booking/templates/view_bookings.html |  19 ++++++++---
 uwe-flix/booking/views.py                     |   4 +++
 .../cinema/manage_cancellations.html          |   5 +++
 uwe-flix/cinema/views.py                      |  32 +++++++++++++-----
 uwe-flix/db.sqlite3                           | Bin 319488 -> 319488 bytes
 7 files changed, 71 insertions(+), 15 deletions(-)
 create mode 100644 uwe-flix/booking/migrations/0011_reservation_cancellation_requested_and_more.py

diff --git a/uwe-flix/booking/migrations/0011_reservation_cancellation_requested_and_more.py b/uwe-flix/booking/migrations/0011_reservation_cancellation_requested_and_more.py
new file mode 100644
index 00000000..08180ac9
--- /dev/null
+++ b/uwe-flix/booking/migrations/0011_reservation_cancellation_requested_and_more.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.1.5 on 2023-05-05 10:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('booking', '0010_alter_reservation_adult_quantity_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='reservation',
+            name='cancellation_requested',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AlterField(
+            model_name='reservation',
+            name='cancelled',
+            field=models.BooleanField(blank=True, default=None, null=True),
+        ),
+    ]
diff --git a/uwe-flix/booking/models.py b/uwe-flix/booking/models.py
index f390b1a6..a696c4e8 100644
--- a/uwe-flix/booking/models.py
+++ b/uwe-flix/booking/models.py
@@ -14,7 +14,8 @@ class Reservation(models.Model):
     child_quantity = models.IntegerField(default=0)
     booking_cost = models.FloatField()
     reservee = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='reservees', default=None)
-    cancelled = models.BooleanField(default=False, blank=False, null=False)
+    cancellation_requested = models.BooleanField(default=False, blank=False, null=False)
+    cancelled = models.BooleanField(default=None, blank=True, null=True)
     reservee_email = models.EmailField(blank=True, null=True)
 
 class Cancelation(models.Model):
diff --git a/uwe-flix/booking/templates/view_bookings.html b/uwe-flix/booking/templates/view_bookings.html
index 371b50b8..5c67eccb 100644
--- a/uwe-flix/booking/templates/view_bookings.html
+++ b/uwe-flix/booking/templates/view_bookings.html
@@ -26,11 +26,20 @@
               <td>{{ book.adult_quantity }}</td>
               <td>{{ book.child_quantity }}</td>
               <td>{{ book.student_quantity }}</td>
-              <td>
-                <a href="{% url 'request_cancelation' pk=book.pk %}"
-                class="btn btn-danger"> 
-                Cancel 
-            </a>
+              {% if book.cancellation_requested == False and book.cancelled == None %}
+                <td>
+                  <a href="{% url 'request_cancelation' pk=book.pk %}" class="btn btn-danger"> 
+                  Cancel 
+                  </a>
+                </td>
+              {% elif book.cancellation_requested == True and book.cancelled == None %}
+                <td> Requested </td>
+              {% elif book.cancellation_requested == True and book.cancelled == True %}
+                <td> Approved </td>
+              {% else %}
+                <td> Denied </td>
+              {% endif %}
+
             
             </td>
           </tr>
diff --git a/uwe-flix/booking/views.py b/uwe-flix/booking/views.py
index 1f6d84d2..63b288d9 100644
--- a/uwe-flix/booking/views.py
+++ b/uwe-flix/booking/views.py
@@ -195,6 +195,10 @@ def make_club_booking(request, pk):
 
 def request_cancelation(request, pk):
     reservation = Reservation.objects.get(id=pk)
+
+    reservation.cancellation_requested = True
+    reservation.save()
+
     cancelation = Cancelation(reservation=reservation)
 
     cancelation.save()
diff --git a/uwe-flix/cinema/templates/cinema/manage_cancellations.html b/uwe-flix/cinema/templates/cinema/manage_cancellations.html
index 0305206b..ac43fdb4 100644
--- a/uwe-flix/cinema/templates/cinema/manage_cancellations.html
+++ b/uwe-flix/cinema/templates/cinema/manage_cancellations.html
@@ -19,6 +19,7 @@
             <td>{{ cancellation.reservation.booking_cost }}</td>
             <td>{{ cancellation.approved }}</td>
             <td>
+              {% if cancellation.approved == None %}
                 <a
                   href="{% url 'approve_cancellation' pk=cancellation.pk %}"
                   class="btn btn-primary"
@@ -29,6 +30,10 @@
                   class="btn btn-danger"
                   >Disapprove</a
                 >
+                {% else %}
+                None Required
+                {% endif %}
+
             </td>
         </tr>
         
diff --git a/uwe-flix/cinema/views.py b/uwe-flix/cinema/views.py
index e655a412..6f8b4007 100644
--- a/uwe-flix/cinema/views.py
+++ b/uwe-flix/cinema/views.py
@@ -2,7 +2,7 @@ from django.shortcuts import render, redirect, get_object_or_404
 from django.contrib import messages
 from .forms import ScreenForm, ShowingForm, FilmForm, CinemaForm, TicketForm
 from .models import Screen, Cinema, Film, Showing, Ticket
-from booking.models import Cancelation
+from booking.models import Cancelation,Reservation
 from authentication.models import User
 from utils.custom_decorators import get_user_permissions, is_in_group
 from datetime import datetime
@@ -345,34 +345,48 @@ def bookings_list(request):
 
 def approve_cancellation(request, pk):
     """
-    Handle a user disabling a user account via the user management page.
+    Handle a cinema manager approving a user cancellation via the cancellation management page.
     
     Returns:
-        A redirect to the user management page.
+        A redirect to the cancellation management page.
     """
     perms = get_user_permissions(request)
     if perms == '0' or perms == '1':
         return redirect('no_access')
     
-    booking = get_object_or_404(Cancelation, pk=pk)
-    booking.approved = True
+    cancellation = get_object_or_404(Cancelation, pk=pk)
+    cancellation.approved = True
+    cancellation.save()
+
+    booking = get_object_or_404(Reservation, pk=cancellation.reservation.pk)
+    booking.cancelled = True
     booking.save()
+
+    booking.reservee.account.balance = float(booking.reservee.account.balance) + booking.booking_cost
+    booking.reservee.account.save()
+
+    
     return redirect('cancellation_management')
 
 def disapprove_cancellation(request, pk):
     """
-    Handle a user disabling a user account via the user management page.
+    Handle a cinema manager disapproving a user cancellation via the cancellation management page.
     
     Returns:
-        A redirect to the user management page.
+        A redirect to the cancellation management page.
     """
     perms = get_user_permissions(request)
     if perms == '0' or perms == '1':
         return redirect('no_access')
     
-    booking = get_object_or_404(Cancelation, pk=pk)
-    booking.approved = False
+    cancellation = get_object_or_404(Cancelation, pk=pk)
+    cancellation.approved = False
+    cancellation.save()
+
+    booking = get_object_or_404(Reservation, pk=cancellation.reservation.pk)
+    booking.cancelled = False
     booking.save()
+
     return redirect('cancellation_management')
 
 def delete_showing(request, pk):
diff --git a/uwe-flix/db.sqlite3 b/uwe-flix/db.sqlite3
index 8aa119331c13e8ef08eb9bcdc8aa0cb9938fa38d..46d849321302ae210be4e2167467bf2cbc1f94f8 100644
GIT binary patch
delta 2675
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

delta 2406
zcmai0du&@*8NZL?_{OpCaq6aNlBV&prcD@j?!#{=i4(U8v7I;%cS)z!as1B1cKk@(
zR3XW_uK$!atJ%)>$F!AcXv-+uF!Unm9|gn&|F9w<1}Itzf@)<#f)0Vym6mhuunv@J
zK04pey6619?|ct^=d51StzOfuH`Ue<1Tl!G8&49?e?R+0QBgw}1N+_yf3v0ikQUxz
z53${F4*m#w*&Fa{?7Qq)_!xVS{Vp4azlL@2RrV76Rp}9KQ=?$ViDm}<I1TnH>M2?z
z5jjEWie1J=^0&p~MuTEc6D=~ub4H0|imp!I?p@WPL^3iL4CE4_nMiJr5ig@l%RpDB
zQ_uz`JRMBNQh{K2E|Cn(reekGot>~x1Ji_(-K3!!{sI1^#Bv+#flkGADxM6KMKBaf
z<&!z=jzB7TMfXb?>=r=;i<@8JKr>lI6t!KGb@+>(WXw9nXf7X)By)kWNH$kI({;GL
znXV#8M${=PcDH3k=~$1enc7}1{iUmMa$gnPBH&&4clb~E5&SdUf>$4m60g6hELFY!
zo>D~^G}vOh8qlS!x7w})LQ4=xyGo8B{VK^w;Z^bstj9a*nJO%683mR#427kFxw1}z
zRYqn&5A-0tmO3DDTB-!w2x7lViTCVP$*f%}nWa_%EUQ$s3Pah9UQZoBoSxb(3n01l
z)XT6LQ<*ZgY;afEpqeRD8TtxG0d3`s`fi!rEt9)tayRw9h9=0H=-Y0p1E~io)gz*b
z=W(>(ggmJsNvAj(Pc0^rF@0)kIugq1+eLKOOEs)m&7#GM_obn|ypJD=WFwh{U@nnL
ze!7?MpjC{(38H}$4T4F}3l4#I2v(!jWEQOgrt{l$VJEuqP`Y^BCfMvaBDc5s;!b?=
z;e4LAnK8YD=}%xUKWiRc7^DuaRP;q6txqm5KlvFaL_KeIm@E!6c0v#ZPCkSe+N&S?
zKP{ieK<IelRBJFCj)Yqs`cpeA<7`HY)o!r~a+U%7kbqLPkNN~|7uF=zf?6giM(UiT
zekd2#Ub!@Ma(Y=Bi)y*Dz%yy;`RhPYUo%axzgMqozF#w~a#ib<pH%%u@eVkL%Qpk0
z^ErAQd_k~3)ygWor$?P!su0dD@s|AJEGJkOt=4Fkx5oHr!k(Bi2W>fYZ-FkY#OG6-
zW2WHoEZTawnN)vtFxTHxhz&=b^CPiAKGRoN3PwgodZ#>nqenvvi<Oj{3_Ok&?=bTY
zjx+Km-fF`cKj=N}cM4WMp0&rPOzC(w5sA!+LRjFI%vS3{(862h%*Mz-;n=h{JG7W^
z4v(xv4M%gMM{GT_=}>+lG}Y_%di~RW&K(imhM_<(?OX_pN#9U(Vs0Xr8Sl$Py`uw#
zfut!ko(|iF{QdTVFzk!^r!qcoh|iDrMjp?f{OX_(IW7z&%~4liET5VWhZkI9@tNL&
zxj!NJhT_xC376l=x%&jqN-X5b4tkFCjax?&>BU~Z%b!e|1{OVwqcgK&JP_?!3b`G8
zIzN?lJ1jF3Ctayy7LRqj-_U=|?dC^@1Nr<s7aQ=UobDrePd?S}AD_1wVwEtN4ZKay
zTO6X`-~}Tm@;0mZ)T0WV9=~&%UrO6;QsESR4(tVRj)0r+BJSQ2l-PS^+=QFBTQ9Ka
z;(7YHBcGQ}78gp}=LH|lUZ7u~0X!oq*XaQ$?vO`8R@CzF^Gi>^O#cp&chHHq=u70C
zD{s?)Q<Zz(`w$O_y+MBfTd|Ja1lfo|LsVm_BuMJNeGYyg4~hL7{YS{*HEp9@>8f%M
zr8G5f6IIps2^eEv(cG@Sull9>1at7gz_o5sO2?GoHi_O;f@Y*-09zb>!>4xD)Dmll
zolIR_LkGIdg685c-q1<+tHJk3)pzg;!E`h<b;&FH&{;L;MSoI*9&|zt{)K+Pf?CwB
z!r#uQz<~6z2DFk|T;L{$8FvKEC|WF>h}t07!q>=U0^Wev;4OF=->M(OZ#@{L+U^O6
zPPTykdy>IeB%{V|g$5$gsC;)HpA`+#<rXmGQ)xcbd|6$j?oxln-n>iJ;Qxn|^@k6W
zXD86rG`ItqFOjWEESi<|1_OCox|;!A3fvP&HR>vWQDn}7Jo<SS96%dc&?Fr_3A{8|
zYg=nVEz96F#ajDXqY?!z^ig!P0D?77?_O(A){7!}c1U_}8GM~Y%NejAeYAqTw%BPM
zdVK{nq45l8eY8Wq{nY9W0{#>(Ll@k|US(%lgXWgzRn6lXQoR97QtK+<)Z;WsvBZm2
zWq6?ir~=Pd;JFHXqXNYWT&%#e6<Dvpg$kT6gS2rDoX|0Fiv1bet$9t-z5@Qysg?^2
v{|@2VfWy2B(fSr>@5j%L|GD-XD|fzTrzb%peo^4(f=1yiKT|4l`wj9Rlptr7

-- 
GitLab


From 6c1c1277ef33ab428b37a36470292b4d9b9dde0b Mon Sep 17 00:00:00 2001
From: l3-washbrook <luke2.washbrook@live.uwe.ac.uk>
Date: Fri, 5 May 2023 12:12:31 +0100
Subject: [PATCH 2/6] fixed payment topup

---
 uwe-flix/accounts/views.py |   2 +-
 uwe-flix/db.sqlite3        | Bin 319488 -> 319488 bytes
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/uwe-flix/accounts/views.py b/uwe-flix/accounts/views.py
index 4f0fdddd..b239cfbc 100644
--- a/uwe-flix/accounts/views.py
+++ b/uwe-flix/accounts/views.py
@@ -275,7 +275,7 @@ def top_up_request(request, pk, account, amount):
     serializer = TopUpStripeInformationSerializer(topup_item)
 
     response = requests.post(
-        "http://localhost:8000/api/top_up_create_checkout_session/",
+        "http://localhost:8001/api/top_up_create_checkout_session/",
         json=serializer.data,
     )
     response_dict = response.json()
diff --git a/uwe-flix/db.sqlite3 b/uwe-flix/db.sqlite3
index 46d849321302ae210be4e2167467bf2cbc1f94f8..a28f5fa2a73cea4467e7d3c5f292f49dab50b0f7 100644
GIT binary patch
delta 509
zcmZoTAlz_3c!D&e`$QRMM)!>gYxNl~Z00lA&Tq}f$YCtZnwXNCnWx9h#=yvAY{<&6
z6wHr@lF7;WrFkXErN!}ng+@uKj-kOumAOG40Zk5V4vcLMOxqloSqvoD*?%zb-Qt<R
zyOleO%Y{>p{Ri7M){QJZn++9;Shn|-FlRAqG%0hi`Zk9;W|kTjm=~v)q?#G$mL?^p
zCzh0@nUou(7-yH58kLrnPS2@g-sa(xX_aY^lxN{qks9b4o|xkqnw;)kT$WQ}6k%Fa
zR^T7x9u}&bZIEW3?`2-%YGhz!tZQJZYiOxpXlMmQCPsP|1_lNehSTLLneTacJ6V<a
z<~pVZIfo{D6`A<uS%&$VRr<Jldqt%i>be_O7&{dQ#2Z&uW%y+lIii_nU}a#gXJBb=
zYHGCIrHc6gs{}jWKL&nf{yY30{FC_p@#pey2f{o2cQz{;l<`fU)W=+)NXVBQ)0O*~
zA2PG^Yiwtqz^u)0fz9z8a?Fm5xLv~zlAaz=%`COOWj^z?d>)9$%`Ht0EDW}*@w42z
F002cgmYx6r

delta 512
zcmZoTAlz_3c!D&e!$cWpMu&|FYxNl)Z00lA&TlQp$YCtZnwXNCnHLWwlU1477#P`&
z<v<i8P}UJuIyt{IuO!6DrOBbqfw9ejX`2Hxi-80iryK*{EuIOyTe-8iTsY;}f3sa<
z-N@3j*-)W~WqV%<a~89<rI~4y5<jbNbFgEQMNxr?c~(+hlCeo@p<!ZDepX&dc9L06
zWl5!xnPKwue`U;@J@U=Uovr-J0`g5=bRBc60&=T@oIT9^i<A8`JyIfqfnt$<<>oma
zA%41PMgArRMg~U4x&|h?#s&(87FLGlRz?PT76!(a)8#6e?|HbGTa|>SMHYvoI)$5g
z7MGYshUXiF200qX2c)|B8hVF@7grXhR>dcpn7S2MK+H1LHMCSPG_*1>vNEyMGqNx;
zGcwrjQpJ3LRf3IQnSo!K{|>(g|0Mog{_S9VhyTuIMT0WF>67}H3ls_Yl7G5#Kl4Lo
zHh%Z*>=T%^`7JP=Ze+<X$Lz?6+coSU>FEL0%u?H1<}**r=Ycxa+}zB}Y`Ypi%dHCl
D;YE`6

-- 
GitLab


From 939f7c0da8cff50ddd49d8440a7589436c26f6ea Mon Sep 17 00:00:00 2001
From: l3-washbrook <luke2.washbrook@live.uwe.ac.uk>
Date: Fri, 5 May 2023 13:50:19 +0100
Subject: [PATCH 3/6] added film descriptions to index and booking page and
 removed make_booking form menu

---
 uwe-flix/booking/templates/make_booking.html |  33 ++++++++++++++-----
 uwe-flix/booking/urls.py                     |   1 -
 uwe-flix/booking/views.py                    |  13 +++++---
 uwe-flix/db.sqlite3                          | Bin 319488 -> 319488 bytes
 uwe-flix/templates/base.html                 |   8 ++---
 uwe-flix/utils/templates/utils/index.html    |   4 +--
 6 files changed, 37 insertions(+), 22 deletions(-)

diff --git a/uwe-flix/booking/templates/make_booking.html b/uwe-flix/booking/templates/make_booking.html
index 611af56e..7f40d4e5 100644
--- a/uwe-flix/booking/templates/make_booking.html
+++ b/uwe-flix/booking/templates/make_booking.html
@@ -2,15 +2,30 @@
 
 <div class="container mt-4">
   <h1>Make Booking</h1>
+  <h2>{{ showing }} ({{showing.film.rating}})</h2>
+  <p>{{ showing.film.description }}</p>
 </div>
 
-<form action="" method="POST">
-  {% csrf_token %} {% if error_message %}
-  <div class="alert alert-danger" role="alert">
-    {{error_message}}
-  </div>
-  {% endif %}
-  {{ form.as_p }}
-  <input type="submit" class="btn btn-primary" />
-</form>
+<form method="post" action="{% url 'make_specific_booking' showing.pk %}" class="form">
+    {% csrf_token %}
+
+    <input type = "hidden" name = "showing" value = "{{ showing.pk }}" />
+    
+    <div class="form-group">
+      <label for="length">Adult Tickets:</label>
+      <input type="number" class="form-control" id="adult_quantity" name="adult_quantity" required>
+    </div>
+
+    <div class="form-group">
+      <label for="length">Student Tickets:</label>
+      <input type="number" class="form-control" id="student_quantity" name="student_quantity" required>
+    </div>
+
+    <div class="form-group">
+      <label for="length">Student Tickets:</label>
+      <input type="number" class="form-control" id="child_quantity" name="child_quantity" required>
+    </div>
+
+    <button type="submit" class="btn btn-primary">Make Booking</button>
+  </form>
 {% endblock %}
diff --git a/uwe-flix/booking/urls.py b/uwe-flix/booking/urls.py
index 8e66b564..c138b4e1 100644
--- a/uwe-flix/booking/urls.py
+++ b/uwe-flix/booking/urls.py
@@ -4,7 +4,6 @@ from . import views
 from django.contrib.staticfiles.urls import staticfiles_urlpatterns
 
 urlpatterns = [
-    path('make_booking/', views.make_booking, name="make_booking"),
     path('make_booking/<str:pk>', views.make_booking, name="make_specific_booking"),
     path('view_bookings/', views.view_bookings, name="view_bookings"),
     path('request_cancelation/<str:pk>', views.request_cancelation, name="request_cancelation"),
diff --git a/uwe-flix/booking/views.py b/uwe-flix/booking/views.py
index 63b288d9..2a7a9d26 100644
--- a/uwe-flix/booking/views.py
+++ b/uwe-flix/booking/views.py
@@ -22,11 +22,11 @@ class StripeInformation(object):
         self.quantity = quantity
 
 #View to create a booking
-def make_booking(request, pk=None):
+def make_booking(request, pk):
+    showing = Showing.objects.get(id = pk)
     perms = get_user_permissions(request)
     form = ReservationForm(user=request.user)
-    if pk:
-        form.fields['showing'].initial = Showing.objects.get(id = pk)
+    form.fields['showing'].initial = Showing.objects.get(id = pk)
     
     # If the submit button is pressed
     if request.method == 'POST':
@@ -34,8 +34,10 @@ def make_booking(request, pk=None):
 
         # Create a temp form to get the selected showing
         form = ReservationForm(request.POST, user=user)
-
+        form.fields['showing'].initial = Showing.objects.get(id = pk)
+        print(form.data)
         if form.is_valid():
+            print("here2")
             reservation = form.save(commit=False)
             print(reservation.student_quantity)
 
@@ -183,10 +185,13 @@ def make_booking(request, pk=None):
                     'error_message': "The start time for that showing has elapsed. Please select a different showing."
                 }
                 return render(request, 'make_booking.html', context)
+
     context = {
         'form': form,
         'perms': perms,
+        'showing':showing,
     }
+
     return render(request, 'make_booking.html', context)
 
 
diff --git a/uwe-flix/db.sqlite3 b/uwe-flix/db.sqlite3
index a28f5fa2a73cea4467e7d3c5f292f49dab50b0f7..3e0b71547065685bfcaf080e5a7e2cfa90abb50b 100644
GIT binary patch
delta 1386
zcmai!TWB0r7=Y)pmux3HCl?a1iT0FWOr+V)WbX@-Y_qvF*`#qd*<>julby-V?CkFB
z&dlB_l8^{uk)~E<-ZX-OFIH=4r-%;$LB*ohK3KG^g$k1RP$4K31#vR5-YE3^hjaM<
zIn4K8&iPlinpd`(&$gi_Uv3{jPhMD<a<w>{I`M8aCFHprGq3PcMaZX#%}-no6t%x{
z_2^UR*PA4zgI0jnxtl$>4MFYhp1loq)7G)I8-4nXKD4{P$qud~;CJvV_!;bgAHXee
zU29lDCv<iNRX~#!M^TI2Ty5rR)pyp>wyjnxxPyS-z%Sq~*ammN=lilr!_#*Ctps+g
z4s#OP_B_^pAFyL0{sJsukLX7iuy^(Wgb5%_0AT<mtgYeyfG>b4n~nXKfOd5qYcfyc
zgucCwwKp`_h%y3F<fmlV`L+`w${O6jA{w=U)$8mA)<hg!vpXHgAuCvIT;pOYBf|tE
zD+v1jhhJ&8&tp$6PsYREi3~3oyP8ZyspJ4fMH3VJc$^oarv}wzWJsKhi@lTaX*wA>
zF3yUBwOMhfm>Ooeso9xYG#>U$L`La}_*B(3KSR&QX5AF!$`sP$C6R+Mu~uQSA}7O)
zB;*yiB*`gGffYgJAp?(d%d7y$@<N(dj~IGNN{KaC5VDe~CL~D|I1Vy-7OE8qva%$w
z3RESiFl7#^JO|TEmZ{d@k}Ty+eK1!LWbO%rAjw&_hvgJimTJZofs2f)W;v*+j4DX^
zBe22?hC0Gz6$u)jxLiTqJ7)Y`=9E;4gC}GmZ}_UfaZX_VA>?X`%E^LMQecFUjWA{y
zmXlqV-o?<5+Z=}wyX_iEepi3id6CE*h}iGhuGzk^Ua-7mToKu#pHcA$*0tK<utwLW
z!(uiqi#%Ois`@H^*<UQ@yuAg%8(fscfUm+7HCV+jj+W$d=;>O_H<=t%=Q4aOIUS{9
zW7V=yqE&w_Q7(?9RZol>3e2(mT)@*y^}2f~Zx0=WbZ^KL3{h?u9dP?;zkaWRccR@0
zf}oE_*J9y7-k&bA0dKif3}y=%p)C5SipZzb67MT7`aIgL=kOPnRfi>7d#J0Nn+nl|
z(w?uLgfLDoWr73#p$I#COd2c9_~}umJm+Q$lgZ-f;_xsdEROdS=;#A|^?UrZZ?(f_
zrpT{HPvIX~n{R><aE|-~<Uj||4Y>(!ZXTw}q;~EM{@US(CDNgdtm9W4U0@hE$e+k7
z#&i0B)V_Qjf3f+$DRMl9hf(dsv-m;n`8V*DRx7!S7*G6F@C@i8cgaWh#USrGwfgh;
zk3J7^0C5|=1*@y8yB`hZgS0zDQO0!Q|2BF<6m1xhyL#7qc;9@Z*Q`*$D3U8c1t>bG
zRY}VR`L|2{;9k`_f#v%xqn%U`qf>ngJ_DD*o8UC47(p-~+-N6^-nKW8I>bU?7}nEb
c+cP;F4!ddU_pKNuN01il1I^my+m?|(0ojY2rT_o{

delta 1023
zcmah|Uuaup6#xF*<lfun-qR&orR~b?3S9~|e#uRmC7``&s|njWx{Y?S2eUM-NxCI<
z`Lq5JF>LyvNIN^_Lmylp9Qfj727CKvMRa3B>60*9^+lvnP!I=2LHx3H50ioC2ZxUz
z=lsrhzVDpsx~IDCx!8{5Z*>ge__b3<eUG}_J+v36bA_pVDp|_T%;pN2rrK9N6=Uhr
z#*<IsjhfDEXw|V|dK{_Ae6HZ5PK1f+cc3d5HV5p@0o-f3B&Z|!8}7jGQ0GP!4|7(<
zE%sy;m%xn>>Qy>~?^fD{->W=s*OzendaDH62>yaU;WyZZoA*)k8*j+=2Pep&LgXgC
zog^LZUH$sq3OWebt*6N6;C@0Ciu)De_Q?%xC$j4^q`l=q?XO`MwLR7<@Qo$nc6Jd>
zB-q<aq@zW5h%==1>v~MPq9Jaq5YfR3(e23<;%>fV89%*3Kg3v7Wkp3Au`EmEHjFL{
z@*ZpTSMO4SeEDHy7Ap!C`6{)dJ4b(gt#eI89^WMuhxP3IyTaZR<kJr!_ltkJmoGxC
zO;cD<gg)|La`hvEzi2$OEbk!wJJ&_+)8^@>VYO4<aenK#CcP=1w<y_*Wjah;fe>To
z_q8}iE*y{X?-!}TZ&zrI6|>Xh(PswZ<*75H!R)a@?!fGe@sUbmq3`s`@lyV5;JJyJ
ziTn#^`%9tpSTd2}+GYBfy)#RDu=jkoEab*wK^9J#nNTG&9S)nRg;XYxnv0mhiA-s>
zm@iLexG_gp6Nd()=SK3esbfQ9>4U}KkwRpAq<{W!{LsOZ8Gm2goHGYYqe*jqA$ufO
zj0IT0>|>!mf5h<nqka};VIPZxL!p2@yg<Knc)DQ=60ofQ19`9owqUE)#m?z`d6B-;
z^?z5Ad18s)QsdwSRsTi5C5Gh_oqzK_eckh5HMx_<Fdu!1w((al)2f&?FA~%HHarhr
zeeZpU%719wb(Q|CF?0tZ+-zdiBnqdWkzU*TF&#+mF%8j0Fc4)y(MY79h54K=t>~hh
zU(mjAB*YFdy9cBn*2RvkA*jP`xB+Y8YE|&INlv6FA#JFbOP`)98$)L*6GkeXo~abd
RZH+ZmOs%oBeC<am@h@5d5<dU{

diff --git a/uwe-flix/templates/base.html b/uwe-flix/templates/base.html
index 7028db60..d909df7f 100644
--- a/uwe-flix/templates/base.html
+++ b/uwe-flix/templates/base.html
@@ -55,16 +55,12 @@
             </a>
             <div class="dropdown-menu" aria-labelledby="navbarDropdown">
               {% if not perms == '1' %}
-              <a class="dropdown-item" href="{% url 'make_booking' %}"
-                >Book Tickets</a
-              >
+
               <a class="dropdown-item" href="{% url 'view_bookings' %}"
                 >View Tickets</a
               >
               {% endif %} {% if perms == '1' or perms == '4' %}
-              <a class="dropdown-item" href="{% url 'make_booking' %}"
-                >Book Club Tickets</a
-              >
+
               <a class="dropdown-item" href="{% url 'view_bookings' %}"
                 >View Club Tickets</a
               >
diff --git a/uwe-flix/utils/templates/utils/index.html b/uwe-flix/utils/templates/utils/index.html
index b044161f..0f0de5dd 100644
--- a/uwe-flix/utils/templates/utils/index.html
+++ b/uwe-flix/utils/templates/utils/index.html
@@ -33,8 +33,8 @@
         />
         {% endif %}
         <div class="card-body">
-          <h5 class="card-title">{{ film.title }}</h5>
-          <p class="card-text">{{ film.overview }}</p>
+          <h5 class="card-title">{{ film.title }} ({{film.rating}})</h5>
+          <p class="card-text">"{{ film.description|slice:":100" }}"...</p>
           {% if perms >= 2 %}
           <a href="{% url 'update_film' pk=film.id %}" class="btn btn-primary"
             >Edit</a
-- 
GitLab


From 9f108256ff151ecab20e532f026d863e19bbb6d9 Mon Sep 17 00:00:00 2001
From: l3-washbrook <luke2.washbrook@live.uwe.ac.uk>
Date: Fri, 5 May 2023 16:03:25 +0100
Subject: [PATCH 4/6] updated with main

---
 uwe-flix/db.sqlite3 | Bin 319488 -> 319488 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/uwe-flix/db.sqlite3 b/uwe-flix/db.sqlite3
index 74ee6c91b1fdf90897f3ffaa23bfb711985ab110..42ff28d8c57d78f25e57f6269a682bf6dfef40aa 100644
GIT binary patch
delta 1280
zcmcIkTWB0r7@o`CrrDXZ+hWD0(bEmq+9d1DUb2^m#wF1<sY{cfO`3<MliAtK>}6&;
zGrQ}=hlIqYAkxI9GA~l|U>~HY)X>gL!6;}UP$_-LLs=;FDT0U=A3`YNnOG$lp-*y#
zf%DJ*o&Wp3`TsMsx^HH6-(o9%^`nEm_|+TdhN91f_8ul*#RXXrtNgejsSR0~q*s23
z9>Wj%n0bu3&CG)}rU~+(19UK7|GieiuNRr6`C}JxZHeib@L(7=HfQ!+G<$Hz>>(CI
z`~6@Y16$yC@C(=gkH9);f;F(V!od&x&SxV;ED-dPI8M{<I}~&tjS~_0Z%`A#?t;6h
z*ezh+TOfR1H=A6#{jkm1Tp*~>^Yk^$M{Qw1VD2zE8f&RjThs;Wf(@66KAT-80#0F>
zI7Cg;*YMx4R&SV|JJ~C#nkMQPKG<;?<I+#J&=e~b1DcWuWyKT~LxhH@>K0UsFwg5{
z7<rl)fx{wS=!871h?AmH;8BjC%T-z7E3hG{u%WA_2qoEovsQ?5i_V6_yUN<RABm&(
zPhSwD)Bhs_zGkWuvO1~rnq(n%as|l}^*Z{=NI;2~E6_M6x_SjyH`H|5P?ab=f!I%|
zYPl0e-qh9Vwk`dNAs56*C#-3z;+`c)+wr1YsX{lOH$>!1gE!F86QW^u8OTymk2>}1
z#A}4xBA+;)Bf;ObQZHeC-+i2U5L~2hwv_ht`8R#{ee2#Eo)1xj=pN^iN%j#(X4@%m
ze(s%|te-bCVyVnqB`IFC48hc5LXEYi8fL=e8dV#<OWy3SE2V60EG1WR@qrWE<Z+2F
z@&iKyB`bY?q_2{*5@)&#LVeKWhH_?Cu^eM#@h&#m#bqED&nD8@L@F9*lj-h^v)LeD
z!4Y5lWxL%XuTPtlCvQEIg&1eEoK|ybye%00{9Ccin4BC-kB;}&M@D$PcDgn?_=aYc
zPo5esaEdU@4|Cd?|DqAgu;~;#+wR*|pK|h3<hNc1v@?HzDsa$hf+m`YI%8kHM1BmP
zWsh@wf!rGk@03WrNak>R@ICT?{r;!q%zi%_bu^w=z*%sFdF&27)5f%|9AY2ScJNDb
zYC1vh!Qwa`Cjx=MPRhw_BAI1bn%o&oWfR>fh;1c;yHRX6<PzvBdP4u8++Z>rcjE}v
zvI}K<zapQ!0G?o8uz`V1bgTRden$7ohHJ&P8Q%l@;WuQP+hv|xtK@-G!N2szGU;?G
L<{So|2lxI2=N*k&

delta 831
zcmb7?T}YEr7{}jp&c0r^o#O`ye!nWH6<hE2?)$>Iw(_IqT4?D_rdxB<=ESXSE-1@T
zh}4zEdzlw?5t3m;-<u!_Di9*Cx)34Ql@}2uK|`W?RrJEH;?Fre9QZxY|2fYywo){<
zQj{(OQ}@fAU~2KQS9?TVSci@RUuft`xVI-7j3h!s{mRTcZ6hd`;|Yok<5zfstl|yg
zCdcv1ePs%o0(f?!aT26wvAs`H31rlG%sv^j10iOI>HK0T$x>vS{2*V+Cdrc3J!N#v
zUAge&BGfBX6h$4Qm1LVzDQF?v18bPW&<C<BvDh-<*JhwhrGZ4m>LC_yAv*)B@{7bs
zri@d>hu>p|`l*^y#(8EAx_EXDss#TWtfn(f%y%Hf=ivz`xmBW62+y9wt~X^ODVOH}
zURR~nOUi*fmpn&T$v#OJCHF+1BNAachFq|Lt^#%L@lHn|8T7|Z1L5A#ppLy7<N~pX
zDH$+Y%$z?J)elE_CW)3><36v=WA-FR1}$fd%`Trw?{Kzvx%)cU7H7g?F?%}VEoL?v
z=y1AxhSU9eR?lfzqef?CbexSd+gOv9Wm%oYBIFXN9!PH2&{Dp36wUMg8%QIj57|8D
zgW={#Yg^RocDHw&H3U<wMsxSc(6H4TZR_cdk6JoIuJE-BzRpwsq}Lm?M$Tg5tb!|r
zR;3vKCSf9wTJda<4e_Vrn13*h9`W^~h!L7+P+@+7=;{EYE0F{6=dPnt{?21GRxHI^
zlsMXl<PvGXTexCRnQC@R&8rqr>LyG5p(v2x0N^04Q0yDhn;D(SW-!=TRtgV2nrz%2
z<@is^pv<Fo5ye3v{^J6Y@_8@N&yt-*A)6HWMRMX=ej{JR#T0wq?fNa@Kfgv55(pr*
Yyn;$Ss-007wN|T9XJv&tB3WPi3x)OR8vp<R

-- 
GitLab


From 9d5a613ec06b958882aafbcded216e5ca43059ba Mon Sep 17 00:00:00 2001
From: l3-washbrook <luke2.washbrook@live.uwe.ac.uk>
Date: Fri, 5 May 2023 17:23:28 +0100
Subject: [PATCH 5/6] Removing redundant code and adding comments

---
 uwe-flix/booking/models.py                    |   3 +-
 uwe-flix/booking/templates/make_booking.html  |   6 ++--
 uwe-flix/booking/views.py                     |   6 ++--
 .../templates/cinema/film_showings.html       |  26 ------------------
 uwe-flix/cinema/urls.py                       |   1 -
 uwe-flix/cinema/views.py                      |  12 --------
 uwe-flix/db.sqlite3                           | Bin 319488 -> 319488 bytes
 7 files changed, 7 insertions(+), 47 deletions(-)
 delete mode 100644 uwe-flix/cinema/templates/cinema/film_showings.html

diff --git a/uwe-flix/booking/models.py b/uwe-flix/booking/models.py
index a696c4e8..6a6ff119 100644
--- a/uwe-flix/booking/models.py
+++ b/uwe-flix/booking/models.py
@@ -5,7 +5,7 @@ from django.conf import settings
 
 # Create your models here.
 
-
+#Model for reservations
 class Reservation(models.Model):
     id = models.AutoField(primary_key=True)
     showing = models.ForeignKey(Showing, on_delete=models.CASCADE, related_name='showings')
@@ -18,6 +18,7 @@ class Reservation(models.Model):
     cancelled = models.BooleanField(default=None, blank=True, null=True)
     reservee_email = models.EmailField(blank=True, null=True)
 
+#Model for cancelations
 class Cancelation(models.Model):
     id = models.AutoField(primary_key=True)
     reservation = models.ForeignKey(Reservation, on_delete=models.CASCADE,related_name='reservation')
diff --git a/uwe-flix/booking/templates/make_booking.html b/uwe-flix/booking/templates/make_booking.html
index 503d2718..41e19c80 100644
--- a/uwe-flix/booking/templates/make_booking.html
+++ b/uwe-flix/booking/templates/make_booking.html
@@ -14,7 +14,7 @@
     {% if not user.is_rep %}
       <div class="form-group">
         <label for="length">Adult Tickets:</label>
-        <input type="number" class="form-control" id="adult_quantity" name="adult_quantity" required>
+        <input type="number" class="form-control" id="adult_quantity" name="adult_quantity" min="0" required>
       </div>
     {% else %}
       <input type = "hidden" class="form-control" id="adult_quantity" name="adult_quantity" value = "0"/>
@@ -23,7 +23,7 @@
     {% if not user.is_rep %}
       <div class="form-group">
         <label for="length">Student Tickets:</label>
-        <input type="number" class="form-control" id="student_quantity" name="student_quantity" required>
+        <input type="number" class="form-control" id="student_quantity" name="student_quantity" min="0" required>
       </div>
     
     {% else %}
@@ -36,7 +36,7 @@
     {% if not user.is_rep %}
       <div class="form-group">
         <label for="length">Child Tickets:</label>
-        <input type="number" class="form-control" id="child_quantity" name="child_quantity" required>
+        <input type="number" class="form-control" id="child_quantity" name="child_quantity" min="0" required>
       </div>
 
     {% else %}
diff --git a/uwe-flix/booking/views.py b/uwe-flix/booking/views.py
index 567e1c98..032d7df7 100644
--- a/uwe-flix/booking/views.py
+++ b/uwe-flix/booking/views.py
@@ -202,11 +202,9 @@ def make_booking(request, pk):
 
     return render(request, 'make_booking.html', context)
 
-
-def make_club_booking(request, pk):
-    return render(request, 'make_club_booking.html')
-
+#View to request a cancellation
 def request_cancelation(request, pk):
+    #Upon request, get relevent reservation and make a cancellation object assigned to the reservation
     reservation = Reservation.objects.get(id=pk)
 
     reservation.cancellation_requested = True
diff --git a/uwe-flix/cinema/templates/cinema/film_showings.html b/uwe-flix/cinema/templates/cinema/film_showings.html
deleted file mode 100644
index 5af1a9df..00000000
--- a/uwe-flix/cinema/templates/cinema/film_showings.html
+++ /dev/null
@@ -1,26 +0,0 @@
-{% extends 'base.html' %} {% block content %}
-
-<div class="container mt-4">
-  <h1>{{ film.title }}</h1>
-  <div class="row">
-    {% for showing in showings %}
-    <div class="col-md-4 mb-3">
-      <div class="card">
-        <div class="card-body">
-          <h5 class="card-title">{{ showing.start_time|date:'F d, Y' }}</h5>
-          <p class="card-text">{{ showing.start_time|date:'H:i' }}</p>
-          <p class="card-text">{{ showing.screen.cinema.name }}</p>
-          <p class="card-text">Screen {{ showing.screen.screen_number }}</p>
-          <p class="card-text">{{ showing.film.description }}</p>
-          <p class="card-text">Length: {{ showing.film.length }} min</p>
-          <p class="card-text">Remaining Seats: {{ showing.avalible_seats }}</p>
-          <a href="{% url 'make_specific_booking' showing.id %}" class="btn btn-primary"
-            >Book Now</a>
-
-        </div>
-      </div>
-    </div>
-    {% endfor %}
-  </div>
-</div>
-{% endblock %}
diff --git a/uwe-flix/cinema/urls.py b/uwe-flix/cinema/urls.py
index 1f884c0f..04755031 100644
--- a/uwe-flix/cinema/urls.py
+++ b/uwe-flix/cinema/urls.py
@@ -19,7 +19,6 @@ urlpatterns = [
     path('film_management/delete_film/<int:pk>/', views.film_delete, name='delete_film'),
     path('film_management/update_film/<int:pk>/', views.update_film, name='update_film'),
 
-    path('showings/<int:pk>', views.film_showings, name='film_showings'),
     path('showings_management/', views.showings_list, name='showings_management'),
     path('showings_management/delete_showing/<int:pk>/', views.delete_showing, name='delete_showing'),
     path('showings_management/update_showing/<int:pk>/', views.update_showing, name='update_showing'),
diff --git a/uwe-flix/cinema/views.py b/uwe-flix/cinema/views.py
index e46c686b..fbf9fd92 100644
--- a/uwe-flix/cinema/views.py
+++ b/uwe-flix/cinema/views.py
@@ -309,18 +309,6 @@ def film_delete(request, pk):
         film.delete()
         return redirect("film_management")
 
-
-def film_showings(request, pk):
-    film = get_object_or_404(Film, id=pk)
-    showings = Showing.objects.filter(
-        film=film, start_time__gte=datetime.now()
-    ).order_by("start_time")
-    perms = get_user_permissions(request)
-
-    context = {"film": film, "showings": showings, "perms": perms}
-    return render(request, "cinema/film_showings.html", context)
-
-
 def users_list(request):
     """
     Handle a user management page request.
diff --git a/uwe-flix/db.sqlite3 b/uwe-flix/db.sqlite3
index 42ff28d8c57d78f25e57f6269a682bf6dfef40aa..5e55edfdc9bc1cf615411f368c828203e9bbb7b5 100644
GIT binary patch
delta 2438
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

delta 1724
zcmai!YfKbZ6vyxEo!yyP*n4;gwmjVBS(E}ZyUVg{YGHjusuDq45t1q^%X0-+T)?F@
zqBb^Z8ntfIn|`s6*v2nlbgLT^TImOy6suKJurUaxrj1%t6{{g?YR`iB!I(HF`OoCe
zId^_@&ON7ZD6wxSaes<VfAEvEMW{#X51DBKiw{Yb933-;Gt@DY#MY5?xuY=@U-+G1
z3jI{*)k|~JsV!7pG)FLomK1dw=v<B31pd`_F;QTl^F`KqvBbdk5H`s6z%UzwO2~(N
zc5K$d@#Re{-cAifkZhX1d}%p}UZHQwazcY|Rww$2S&(gsdbhW|wPVAyhAd@kgt}0m
z%#t7r#oCI+op#YcWT{vyUo;dNDa#HIm$~ZGWEdgv81BMl7=Z`yH~a|`FgRmj&GMHN
zHXQz0GW<^TG9lrSBSq&e4EhN?g8OhAZooCT0+-+v^uq->1E=96gn4<Nkj<<5ggH@>
zBi=s23=7}_QI!<9MiwZqqGl^|;RczfB%{8fB%vlK3^i7fBK`Y>nxSL~MhQHGf8igv
z4u8NXjKMGrBhyDx<WP++SB^yogE1EKpek{Ebc3#N!Beyw2!tRA6@|R;6f%m(W{sEE
z>kzVDmk{yR>yYm?+~@sVl%5=v&TN$SER>c^l!gqH^%j&`Gl}$X*44y4&o_pIXW=YX
z>IB5tbaCjbr-DF3gA?hIseL--YN}!;lHsDjF30XS9gk@<E|I1T7Y(EOqvFT-Tb*KL
zZ-B1USz0@{1WFs*e4b!ii>)cRwISfQHgu`M-kyLxp!KwK%Qkwvvb&?r)m2y0y2))@
zUZFKFYw<LBmRB!t3p%&dEZO7^+G`!&hVH6>R_zWHH2JKm)mESu7igsx&E~Q@UG|bf
zn_BF2l<vxs^^wOtG*g(5%tB7(?ltaSzrCl!(c&p7b~KmRRbP+CXKiwn`Zo5qc5n7|
zZ01+C(+_t96tObsei?3~O?7Ght|;%@4O`#xthAQawHDVo*KJtbT~p)f>{{Eku4<`2
z=v%RBwO8wCSnXM@`D<UqYb{lsCF-s$gT8Y2JMNN5WiS0+p8yqb0J7MB&<+u_F&M)d
zbTfWnFZF-6jaqW#Y+5P2jFK<gM}JZBU>PXvCOd;$9Ao_4LE2{3T$<*xTMM14sya1!
z9(4;Zf}2UE5`E39-lHk}gD+@bvV={I$M#cL4|!}d+TJXkrQ?{GH1XI0%64E)FzMH9
zf?(4rvOK%970cvs+3hY>RdmlSmbf%4d4f^>vr+1FaqR_G`?Dy$?zu&W%Vswj$#jVP
z>_hzX0WADOJ~%*&=|g)A|6zb8bK?<uKXuXskBJ_x6PUs#yaTte4X;PjJDuRuz$Z@8
zbP<n?cw&f(mP87-qWyXg9WPDWQQ#SVJldA>cv!ef!M_uX=)QFN38x7mE=3R&L8PK0
zN<_hh`9#RWTjtCyl?bVNil5+jZ_~s$3U{KT>H)HhM-6Lq7FcGU0VC4#^r*?H{Pq)?
zlqM?`1e)2Grb*?A@m%csm>-o2Id{ge(;QM{tt93Np?42=F+wC0*}2dy&reFqm-(+T
zVk+MuiLXa06!8&FSxDs6)Fe$-+!?YU`#1W$J5!AD7(jTHB6|5bMYKllnZz7{&9;@b
z)afj-@>~$dalCQ@S78Vz<=4P*ApM33`gX>UzZQ7VEGFO#>uzZ6Xl(Zsw0k1lEN<B!
zmaC@B2dYHM*cC3F7t_)EBr`D<LojEUN+J_}b6k9bH;;=ZZkrH;I$Rl;5R>DHC>eo9
N9no*vab!Zw{~r}a+aUk|

-- 
GitLab


From b36a3457f20197addedfaf99c6e08807641a97e2 Mon Sep 17 00:00:00 2001
From: ryaningham2001 <ryaningham2001@gmail.com>
Date: Fri, 5 May 2023 18:40:50 +0100
Subject: [PATCH 6/6] db premerge

---
 uwe-flix/db.sqlite3 | Bin 319488 -> 319488 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/uwe-flix/db.sqlite3 b/uwe-flix/db.sqlite3
index 5e55edfdc9bc1cf615411f368c828203e9bbb7b5..cdae9dd997efe7fff7ebf98b34b1b68dd433cfbd 100644
GIT binary patch
delta 3863
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
F{{b4Oe)<3a

delta 5776
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
Iv*!JO0aw7L;s5{u

-- 
GitLab