From 2f95ddc87872f1973bd2fd0bca204e2611bbd302 Mon Sep 17 00:00:00 2001
From: Ciprian Boziean <cb01752@surrey.ac.uk>
Date: Tue, 6 Dec 2022 13:27:06 +0000
Subject: [PATCH] Added functionality so that a new vehicle that is being
 parked outputs all the information and stores it

---
 carpark/__pycache__/urls.cpython-39.pyc       | Bin 981 -> 1022 bytes
 carpark/urls.py                               |   1 +
 db.sqlite3                                    | Bin 147456 -> 147456 bytes
 homeapp/templates/homeapp/home.html           |   2 +-
 static/css/base.css                           |  24 ++++++-
 static/css/base.css.map                       |   2 +-
 static/css/base.scss                          |  31 +++++++-
 vehicleapp/__pycache__/forms.cpython-39.pyc   | Bin 0 -> 1223 bytes
 vehicleapp/__pycache__/models.cpython-39.pyc  | Bin 577 -> 573 bytes
 vehicleapp/__pycache__/urls.cpython-39.pyc    | Bin 0 -> 533 bytes
 vehicleapp/__pycache__/views.cpython-39.pyc   | Bin 0 -> 1878 bytes
 vehicleapp/forms.py                           |  37 ++++++++++
 .../__pycache__/0001_initial.cpython-39.pyc   | Bin 851 -> 851 bytes
 vehicleapp/models.py                          |   4 +-
 .../templates/vehicleapp/create_view.html     |  14 ++++
 .../templates/vehicleapp/detail_view.html     |  17 +++++
 vehicleapp/templates/vehicleapp/index.html    |  38 ++++++++++
 .../templates/vehicleapp/update_view.html     |  11 +++
 vehicleapp/urls.py                            |  15 ++++
 vehicleapp/views.py                           |  67 +++++++++++++++++-
 20 files changed, 255 insertions(+), 8 deletions(-)
 create mode 100644 vehicleapp/__pycache__/forms.cpython-39.pyc
 create mode 100644 vehicleapp/__pycache__/urls.cpython-39.pyc
 create mode 100644 vehicleapp/__pycache__/views.cpython-39.pyc
 create mode 100644 vehicleapp/forms.py
 create mode 100644 vehicleapp/templates/vehicleapp/create_view.html
 create mode 100644 vehicleapp/templates/vehicleapp/detail_view.html
 create mode 100644 vehicleapp/templates/vehicleapp/index.html
 create mode 100644 vehicleapp/templates/vehicleapp/update_view.html
 create mode 100644 vehicleapp/urls.py

diff --git a/carpark/__pycache__/urls.cpython-39.pyc b/carpark/__pycache__/urls.cpython-39.pyc
index 90c5111fed91bd3d42ddd5190e80ad48b5fa8e4e..1081066e4c8cc5d88274631e3401667a17d03a9d 100644
GIT binary patch
delta 127
zcmcc0{*PTdk(ZZ?0SM;a?o0M#W?*;>;vfSyAjbiSi+v_)TZ^T#q_C&5rf@VfHZ!F&
zM{%TZ1~X`KZ7i6>BwfW(mYR{7oRg|w#SdjA78K}}7UdLA=3(9~zymadg`bB}fSHF8
H2>${AddC}!

delta 85
zcmeyzewAH2k(ZZ?0SLaG=u4JiW?*;>;vfT7AjbiSiybCvTXUr|MRBCC2Qz4LY^<5X
WG})MWHy=nl3qKE|05cCG&p!Z|iVmj$

diff --git a/carpark/urls.py b/carpark/urls.py
index cfb8bff..3a10bdb 100644
--- a/carpark/urls.py
+++ b/carpark/urls.py
@@ -18,5 +18,6 @@ from django.urls import path, include
 
 urlpatterns = [
     path("admin/", admin.site.urls),
+    path("vehicle/", include("vehicleapp.urls")),
     path("", include("homeapp.urls"))
 ]
diff --git a/db.sqlite3 b/db.sqlite3
index 6e5a52c852ab75b295326782dda911f827c3c0df..3bd28013ac4ca93c1abea959b922f3eb87adeec4 100644
GIT binary patch
delta 707
zcmZ{iKWx)L6vppzQGM5nJh@f~R$4_FfTdCVr^a?y23XlxT6%D`O@vUTlcH`-)v;1l
z#KsB(Ys7#mq^@B^lm!7Jf=);bNZoj6r==Y@pZuQe@7>SudmfF%Xe18Wbm`f`ZMrmG
zf7O|{V2!{De1dl{ggtlxYvY}}aP8_G^XYJ-c>L(ehTPnIFipkou>W@0r~4n~t;U4F
zXDoXT14yCPn2dMEjqOx$((H7*i;Ge#X;zl!TRM)zIE>;r4gxO-dVbLJ5<ggpZmoEp
zi7Cd2bJBKQEY+F9Jze3lx&B|)w>WX!rYTc;yF|*16@G+(<;Z~iD&DMf(n64J%R=W`
z%R&_@4bm_P&oF)@wbVBl3R^~~r7{ojmUu~;#FupoHBM~XM%_K5lKS%N>y#7Mak@=s
z@U$2_RGHe!GliP4=X<!b+_bA_2_Y675%>bX;0XS}cQ}U08+-jV+~=%G4PMN#Hl5nT
zE#^?{*%GWp%TDShD?gRZFdGYMg1MrCR;M2l_y~va8-BtBPT?D#{t{NNuns*Rm6&BN
zt-R+ZtsJ#XS~*oxN-xeRGt3d#)H&i9-Xr7(d_~Y{iMZ2XUHb1QC>hmYxoOR$C83%^
M-M}iNFCx&izvZ2-Gynhq

delta 62
zcmZo@;B08%oFL7pI8nx#QE_9!5_usu{xSysm;6`wck`F=ck|EUuh`g_z~5Y^zr9SK
RvG2lWmV`g@iwXpQ2moq16;S{H

diff --git a/homeapp/templates/homeapp/home.html b/homeapp/templates/homeapp/home.html
index 24a2748..cf5aef5 100644
--- a/homeapp/templates/homeapp/home.html
+++ b/homeapp/templates/homeapp/home.html
@@ -1,7 +1,7 @@
 {% extends "base.html" %}
 
 {% block title %}
-    <title>Notes Home</title>
+    <title>Carpark Home</title>
 {% endblock title%}
 
 {% block content %}
diff --git a/static/css/base.css b/static/css/base.css
index da5abb8..016f2d4 100644
--- a/static/css/base.css
+++ b/static/css/base.css
@@ -10,7 +10,29 @@ h1 {
 .success {
   background-color: #00FF00; }
 
-.error, .errorlist {
+.error,
+.errorlist {
   background-color: #FF0000; }
 
+.menu {
+  font-weight: bold;
+  float: left;
+  color: white;
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+  width: 100%;
+  overflow: hidden;
+  background-color: #111; }
+  .menu li {
+    float: left; }
+  .menu a {
+    display: block;
+    color: white;
+    text-align: center;
+    padding: 14px 16px;
+    text-decoration: none; }
+  .menu a:hover {
+    background-color: #444; }
+
 /*# sourceMappingURL=base.css.map */
\ No newline at end of file
diff --git a/static/css/base.css.map b/static/css/base.css.map
index daafed0..481bbeb 100644
--- a/static/css/base.css.map
+++ b/static/css/base.css.map
@@ -5,5 +5,5 @@
 		"base.scss"
 	],
 	"names": [],
-	"mappings": "AAGA,AAAA,IAAI,CAAC;EACD,WAAW,EAJR,iBAAiB,EAAE,OAAO,EAAE,KAAK;EAKpC,gBAAgB,EAJZ,OAAO;EAKX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI,GAChB;;AAED,AAAA,EAAE,CAAC;EACC,cAAc,EAAE,SAAS,GAC5B;;AAED,AAAA,QAAQ,CAAC;EACL,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,MAAM,EAAE,UAAU,CAAC;EACf,gBAAgB,EAAE,OACtB,GAAC"
+	"mappings": "AAGA,AAAA,IAAI,CAAC;EACD,WAAW,EAJR,iBAAiB,EAAE,OAAO,EAAE,KAAK;EAKpC,gBAAgB,EAJZ,OAAO;EAKX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI,GAChB;;AAED,AAAA,EAAE,CAAC;EACC,cAAc,EAAE,SAAS,GAC5B;;AAED,AAAA,QAAQ,CAAC;EACL,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,MAAM;AACN,UAAU,CAAC;EACP,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,KAAK,CAAC;EACF,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,KAAK;EACZ,eAAe,EAAE,IAAI;EACrB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,MAAM;EAChB,gBAAgB,EAAE,IAAI,GAiBzB;EA1BD,AAWI,KAXC,CAWD,EAAE,CAAC;IACC,KAAK,EAAE,IAAI,GACd;EAbL,AAeI,KAfC,CAeD,CAAC,CAAC;IACE,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,IAAI,GACxB;EArBL,AAuBI,KAvBC,CAuBD,CAAC,CAAC,KAAK,CAAC;IACJ,gBAAgB,EAAE,IAAI,GACzB"
 }
\ No newline at end of file
diff --git a/static/css/base.scss b/static/css/base.scss
index 8833086..147c699 100644
--- a/static/css/base.scss
+++ b/static/css/base.scss
@@ -16,6 +16,35 @@ h1 {
     background-color: #00FF00
 }
 
-.error, .errorlist {
+.error,
+.errorlist {
     background-color: #FF0000
+}
+
+.menu {
+    font-weight: bold;
+    float: left;
+    color: white;
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    width: 100%;
+    overflow: hidden;
+    background-color: #111;
+
+    li {
+        float: left;
+    }
+
+    a {
+        display: block;
+        color: white;
+        text-align: center;
+        padding: 14px 16px;
+        text-decoration: none;
+    }
+
+    a:hover {
+        background-color: #444;
+    }
 }
\ No newline at end of file
diff --git a/vehicleapp/__pycache__/forms.cpython-39.pyc b/vehicleapp/__pycache__/forms.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ae4f1fd987bfdabc87c67b122b1b14ffe53dbd42
GIT binary patch
literal 1223
zcmZ`(&2AGh5VpPlNh+!$A;E<n5K=A;AR#1FL6EAV9vV=g9QLwu)+X6@|FAcd<{GYu
z7wCx_ujDJIUU&cwh#7AKQClo|>=}>8GxL4Bd~K~mV6f+3)B7$VKTug6U?W4A`T&F=
zg65>4F{MN>;pD7vVuzBKM7YBHOoS)tk-KnW7c9OAz!HGP1B(ZiP()yfz~X}?5S=%q
z-#v%8q)(0azEXugr>z#elhZ8CWs0Y(1J8#r^*RViVk$_?1dScRAev*M9p1>jvYs`@
z6|f!kT@xlr$qShzrjsN^C1yG9dr9(P#`EP#hIf+Yw3gqA>OycUe!UnRYN_-f&1#kL
za$L<b$;-ix)W=O#57P02hff|q8l+s+TpbTSwrTUa9@u)e>Qm)GFl?h{AVO;OD|I<=
zHbkdeAeMC<Lcb+cwoQZs)ww2mn-$CI8rUiX4@y)4tSUqifiO3cgqLO2@FuHDoh1JX
zYIi;KTmymkY+fB|_5bH}2RxT~0hUxSz>+N(biU24djZ)l;CLkrzB9zP#w%eY5M=_P
zzR}o|{!xIG67Crj-WPhI`<L|KuO2RljF3_pwf@lpBAxkhr=`_=eI=c(ecAB7Zz3fp
zqggSQ%6QdD2}_h#Wy8~ERGBUUn3WSGknyp*d!-3*eFbES5YG3R%*FiXft+NzQMS38
zZM;4+UYc{QAxzFwIjwRb71EkFjneaIcb4ayBVggY_j+2D^5UMl4gHvV)9KTq81=iC
za8yVe;{j!5ZhZT?R>&eCg8bB2np-+q>`ZWyiHU6Vb!ZzGdw`JZdmuvQGMJQ6_B(Vh
zt)9zz%>AkEg5y<kS@U&IDEuUmkS)<2tB?Aj@x>7@CsmudZ>!O^w3XbWeJm2WW3OEo
X--O%k$NLO_0vg%gqdm6aY&d@a3l|T#

literal 0
HcmV?d00001

diff --git a/vehicleapp/__pycache__/models.cpython-39.pyc b/vehicleapp/__pycache__/models.cpython-39.pyc
index ddebce1b220e342eb17f1c221db204443a473761..7904ffe301dc507e589f9a7023cab59d14198010 100644
GIT binary patch
delta 147
zcmX@evX_N7k(ZZ?0SJCM^e0D5<jrIBn^<EnvVdzLLlk!^GnnQ{VGCx^WS@9lpV?27
zcd`Iurs^%ukj&gvx6IU>lqj|mAk#B1iXBAzmzJz#C=vh~SR^ocGGja=$K=n9Y8ns$
duqcQS1QNG6Y;yBcN^?@}7=gTECLqDX1OT0SB+vi=

delta 151
zcmdnXa*%~Lk(ZZ?0SFSV^d%Qf<jrFYn^<Enlf{z4lET)@7{!&!3}<tvum>|}a!fq0
z&!x#&#0u2pr^z#!kug&$imfCwH`OyQiXBAzmzJz#DB=go7x7Q-XN+g$nf#tnO#>nT
c76lOkK;jmMO>TZlX-=vgBam0j1SEKv0O$829smFU

diff --git a/vehicleapp/__pycache__/urls.cpython-39.pyc b/vehicleapp/__pycache__/urls.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2e86f3b168d9d1ed2a8c46542589dca19186617d
GIT binary patch
literal 533
zcmZvYyG{Z@6ozNmU2Y2tuR+7Ai7`<^D6DOa%{FA%bA*9q*vu@Tl=jBw@RhdIiWji3
z@(c{o!ZVpa`EqXmjA*x;jN;|yE&bq(eOmY%4T2F}^GE^=c*d4I;haGQysWbH5|1<F
z;G;M9A%N<uM^qyUpzf$aRE4Iakf;VNM{S}yM3$yO(tyrA>vi|Ei}iTv=c1VH$(Ds+
zBXMg=mb5oGlWB%ysQ{mBnG#FfH3m`@*Gj@L>9`6r1}uckN>AZ72~T|ly9hxR@o!6X
zO0IJd1@5|l85a0o#W8c&YnCC*g_^GVYn>TgA)7j|;*%uJgS)XcorFgl4pNP@!NGCe
z0chM|rvn;F&o59b^Uic=2V40b#SaFxiBp+tDb!@OlPFYti)K-*@;IHGonKvE#HrA^
k(2Ll;OXPWMZT9o$vOZX@V4dO6{;Y{eTD;{)6?eXV0QW1K0ssI2

literal 0
HcmV?d00001

diff --git a/vehicleapp/__pycache__/views.cpython-39.pyc b/vehicleapp/__pycache__/views.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d76f5beadb3ed28d5a41d515b5df36191a061e56
GIT binary patch
literal 1878
zcmZuy&2HpG5bht3?aW^$AwjS!(12D#BcYuIE#j~X0ws&!GK(_1d+=rCxSPZidu+Np
zVHr86AaRO#h2*%e<SVCr1x{3TJIM@-NA9lfa(7jIUsX-q>$M3y>YKlkKSM(P#>MKx
zVDTNix`aUxK{Jxmh*FeU#&RC<+>5-t6}9Xh&-^@y0+2n?%EEjj+OV>pwewEY0XY!i
zA0+CE4bg_VCpw}Fb6@mCALdQ5DF!eP#MYFIw%>wPGNN_&M`OwZsmo%a<%ri?N7BrS
z!?{dgQnSa89@oB-3n5h<Dk)M03OE+#QtS9g>bKP06TFhgX_86MbsF)9LgfjnZypTU
zgLe;J{V@zFIj4rq=@q*s6&3U;F}#BCD|*4fNj{0XXYSfrmTI%yZB}tvj#KdI^}}P6
zXCqGmz@!eG+q&j)mMJteVs)V8ucuO*I!KCzk+01gqWYlv=lk(XEtMW8X{pk9aab%<
z8862BQlFTj94Cj5zWDm9FULu&%2=I@S1g~U@;Cjk{Jm~lA7;1?;7aYoK)A>IObtLv
zFy5PogK!)B5Ec+SGsIAg`;t{mFo>Q(^t@s=dT#<)vhpMf8r#eJD^3V$;xx0i9SB^Z
z35$e_ovSWv)O?W&)k77A?S@TMbXKm|h7IRF_4t6Q_h7w79p2r7*HU*3f}^ei^2)v-
z7xWxlpEE&En0isMD}GJXKFr=Vp~SSV{0hc-AlNmBbtw1+o!;$l2oLuwAYQZphBm<9
zH%SmoYVYUg(-+I#S1uKX(=txva8JqDNKyA1P-d2l<%6FVXK|K_A!grjKQ{4`=D?yb
z!=yRn{Q}xGJe_6*&yL!FFx3tWwVz9KT!=bM^~~O0dpbUo3JI?}u@JMS9O_{Da&Pb1
zbgB@ny7lbf;Q7HS9gd0j@#g>1vEspppx0=bP>=R$n}+Zk(2xySNYzKMzm{8Q>z15D
zSghyPImf)3^YWe`6&LK1oqLss)Tjx}ElZJq6#zy49H_Ar0VPPrC7Y7UgY5JhT7o7!
z!^s=S&QxG8NEh0~i$q5KhN73HKyIS`4L2^;MpR*<DGYxN{8Rh=8u)j~d`pA+01qQJ
z7I<|JrTaKw@DAmcO?qbrlfLHA6s*B_@Ln<c8GNbHHNcy9`L<{AW?e-4Q`lWYd#w~c
z2kl)ILlH3SWsu_h$^$(4yw#+<?^1r`O%!&%<>pN`@5@XAR%#b^N5NeY*S@ft|BH3x
zYTJeR2^@SUICs_}`ULbE8ziv-4VZcW@?^9H9bg_Wjtb}>rc~Ih;LpMB=;K0}<kV>A
z4>m5B(f#HFY^EwbbQR#|1=!QB3%9Vev@0I$g0`2~oV8F|<16mkDzN=1d<xf`X7XG7
U%dl*8=??AUkA<Bu2>apAzcl2io&W#<

literal 0
HcmV?d00001

diff --git a/vehicleapp/forms.py b/vehicleapp/forms.py
new file mode 100644
index 0000000..e653b83
--- /dev/null
+++ b/vehicleapp/forms.py
@@ -0,0 +1,37 @@
+from django import forms
+from .models import Vehicle
+
+class DateInput(forms.DateInput):
+    input_type = 'date'
+
+class TimeInput(forms.TimeInput):
+    input_type: 'time'
+# creating a form
+class VehicleForm(forms.ModelForm):
+    
+    # create meta class
+    class Meta:
+        # specify model to be used
+        model = Vehicle
+        
+        fields = ['regNumber', 'owner', 'contactNo', 'parkingDate', 'timeIn', 'timeOut']
+        widgets = {
+            'regNumber': forms.TextInput(attrs={
+            'class': 'formfield',
+            'placeholder': 'Registration Number',
+            }),
+            'owner': forms.TextInput(attrs={
+            'class': 'formfield',
+            'placeholder': 'Full Name',
+            }),
+            'contactNo': forms.TextInput(attrs={
+            'class': 'formfield',
+            'placeholder': 'Phone Number',
+            }),
+            
+            'parkingDate': DateInput(),
+            
+            'timeIn': TimeInput(attrs={'placeholder' : 'hh:mm'}),
+            
+            'timeOut': TimeInput(),
+        }
\ No newline at end of file
diff --git a/vehicleapp/migrations/__pycache__/0001_initial.cpython-39.pyc b/vehicleapp/migrations/__pycache__/0001_initial.cpython-39.pyc
index c3b3ee7e06f4f43b0cce57b36cb6cdc6a308a4bf..def7eaa06b01fac686a83ef982e934ffb10df68d 100644
GIT binary patch
delta 20
acmcc2cA1Skk(ZZ?0SIL6`!{lXFarQE`~)=s

delta 20
acmcc2cA1Skk(ZZ?0SM}^^ljw!U<Lp;BLyn}

diff --git a/vehicleapp/models.py b/vehicleapp/models.py
index b7423d2..8bc2986 100644
--- a/vehicleapp/models.py
+++ b/vehicleapp/models.py
@@ -5,5 +5,5 @@ class Vehicle(models.Model):
     owner = models.CharField(max_length = 50, unique=True)
     contactNo = models.CharField(max_length = 11, unique=True)
     parkingDate = models.DateField()
-    timeIn = models.CharField(max_length=50)
-    timeOut = models.CharField(max_length=50)
\ No newline at end of file
+    timeIn = models.TimeField()
+    timeOut = models.TimeField()
\ No newline at end of file
diff --git a/vehicleapp/templates/vehicleapp/create_view.html b/vehicleapp/templates/vehicleapp/create_view.html
new file mode 100644
index 0000000..bf4ac2b
--- /dev/null
+++ b/vehicleapp/templates/vehicleapp/create_view.html
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+
+{% block content %}
+<form method="POST" enctype="multipart/form-data">
+
+    <!-- Security token -->
+    {% csrf_token %}
+
+    <!-- Using the formset -->
+    {{ form.as_p }}
+    
+    <input type="submit" value="Create">
+</form>
+{% endblock content %}
\ No newline at end of file
diff --git a/vehicleapp/templates/vehicleapp/detail_view.html b/vehicleapp/templates/vehicleapp/detail_view.html
new file mode 100644
index 0000000..bdbf40b
--- /dev/null
+++ b/vehicleapp/templates/vehicleapp/detail_view.html
@@ -0,0 +1,17 @@
+{% extends "base.html" %}
+{% block content %}
+
+<body>
+    <h2>{{ vehicle.regNumber }}</h2>
+    <hr>
+    <p> {{ vehicle.owner }}</p>
+    <hr>
+    <hr>
+    <p> {{ vehicle.contactNo }}</p>
+    <hr>
+    <p> Created:{{ vehicle.created_at }}</p>
+    <p> Last Updated: {{ vehicle.updated_at }}</p>
+    <input type="button" onclick="location.href='{% url 'vehicle_update' vehicle.id %}';" value="Edit" />
+    <input type="button" onclick="location.href='{% url 'vehicle_delete' vehicle.id %}';" value="Delete" />
+</body>
+{% endblock content %}
\ No newline at end of file
diff --git a/vehicleapp/templates/vehicleapp/index.html b/vehicleapp/templates/vehicleapp/index.html
new file mode 100644
index 0000000..07b17b1
--- /dev/null
+++ b/vehicleapp/templates/vehicleapp/index.html
@@ -0,0 +1,38 @@
+{% extends 'base.html' %}
+{% block content %}
+<table>
+    <tr>
+        <th>Registration Number</th>
+        <th>Owner</th>
+        <th>Contact Number</th>
+        <th>Parking Date</th>
+        <th>Time In</th>
+        <th>Time Out</th>
+    </tr>
+    {% for vehicle in vehicle_list %}
+    <tr>
+        <td>
+            <a href="{% url 'vehicles_detail' vehicle.id %}">
+                {{ vehicle.regNumber | truncatechars:20}}</a>
+        </td>
+        <td>
+            {{ vehicle.owner | truncatechars:25}}
+        </td>
+        <td>
+            {{ vehicle.contactNo | truncatechars:25}}
+        </td>
+        <td>
+            {{ vehicle.parkingDate | truncatechars:25}}
+        </td>
+        <td>
+            {{ vehicle.timeIn | truncatechars:25}}
+        </td>
+        <td>
+            {{ vehicle.timeOut | truncatechars:25}}
+        </td>
+    </tr>
+    {% endfor %}
+</table>
+<hr />
+<input type="button" onclick="location.href='{%url 'vehicle_new'%}';" value="New" />
+{% endblock content %}
\ No newline at end of file
diff --git a/vehicleapp/templates/vehicleapp/update_view.html b/vehicleapp/templates/vehicleapp/update_view.html
new file mode 100644
index 0000000..f54b451
--- /dev/null
+++ b/vehicleapp/templates/vehicleapp/update_view.html
@@ -0,0 +1,11 @@
+{% extends 'base.html' %}
+{% block content %}
+
+<form method="POST" enctype="multipart/form-data">
+    <!-- Security token -->
+    {% csrf_token %}
+    <!-- Using the formset -->
+    {{ form.as_p }}
+    <input type="submit" value="Update">
+</form>
+{% endblock content %}
\ No newline at end of file
diff --git a/vehicleapp/urls.py b/vehicleapp/urls.py
new file mode 100644
index 0000000..ab32cd7
--- /dev/null
+++ b/vehicleapp/urls.py
@@ -0,0 +1,15 @@
+from django.urls import path
+from . import views
+
+urlpatterns = [
+    #vehicles/
+    path('', views.index_view, name='vehicle_index'),
+    #vehicles/id
+    path('<int:nid>', views.detail_view, name='vehicles_detail'),
+    #vehicles/new
+    path('new', views.create_view, name='vehicle_new'),
+    #vehicles/edit/id
+    path('edit/<int:nid>', views.update_view, name='vehicle_update'),
+    #vehicles/delete/id
+    path('delete/<int:nid>', views.delete_view, name='vehicle_delete'),
+]
diff --git a/vehicleapp/views.py b/vehicleapp/views.py
index 91ea44a..7d683c6 100644
--- a/vehicleapp/views.py
+++ b/vehicleapp/views.py
@@ -1,3 +1,66 @@
-from django.shortcuts import render
+from django.http import HttpResponse
+from django.shortcuts import (get_object_or_404, render, redirect)
+from django.contrib import messages
+from .models import Vehicle
+from .forms import VehicleForm
 
-# Create your views here.
+def index_view(request):
+    # dictionary for initial data with
+    # field names as keys
+    context ={}
+    
+    # add the dictionary during initialization
+    context["vehicle_list"] = Vehicle.objects.all()
+    
+    return render(request, "vehicleapp/index.html", context)
+
+# pass id attribute from urls
+def detail_view(request, nid):
+    context ={}
+
+    # add the dictionary during initialization
+    context["vehicle"] = get_object_or_404(Vehicle, pk=nid)
+    return render(request, "vehicleapp/detail_view.html",context)
+
+def create_view(request):
+    context ={}
+    form = VehicleForm(request.POST or None)
+    if(request.method == 'POST'):
+        if form.is_valid():
+            form.save()
+            messages.add_message(request, messages.SUCCESS, 'Vehicle Space Created')
+            return redirect('vehicle_index')
+        else:
+            messages.add_message(request, messages.ERROR, 'Invalid Form Data; Space not created')
+            
+    context['form']= form
+    return render(request, "vehicleapp/create_view.html", context)
+
+def update_view(request, nid):
+    context ={}
+    
+    # fetch the object related to passed id
+    obj = get_object_or_404(Vehicle, id = nid)
+    
+    # pass the object as instance in form
+    form = VehicleForm(request.POST or None, instance = obj)
+
+    # save the data from the form and
+    # redirect to detail_view
+    if form.is_valid():
+        form.save()
+        messages.add_message(request, messages.SUCCESS, 'VehicleUpdated')
+
+        return redirect('vehicle_detail', nid=nid)
+    # add form dictionary to context
+    context["form"] = form
+    return render(request, "vehicleapp/update_view.html", context)
+
+def delete_view(request, nid):
+    # fetch the object related to passed id
+    obj = get_object_or_404(Vehicle, id = nid)
+    # delete object
+    obj.delete()
+    messages.add_message(request, messages.SUCCESS, 'Vehicle Deleted')
+    # after deleting redirect to index view
+    return redirect('vehicle_index')
\ No newline at end of file
-- 
GitLab