It is our collective responsibility to report an accident. By reporting accidents, relevant agencies monitor problems and identify their root causes. Reporting road accidents enable actions to be taken to reduce future ocurrences, and at LifeShield it takes about 5 minutes to report an accident.
\ No newline at end of file
diff --git a/src/templates/incident_create1.html b/src/templates/incident_create1.html
new file mode 100644
index 0000000..a22cab2
--- /dev/null
+++ b/src/templates/incident_create1.html
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
Document
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/templates/index.html b/src/templates/index.html
new file mode 100644
index 0000000..8546bda
--- /dev/null
+++ b/src/templates/index.html
@@ -0,0 +1 @@
+
LIFESHIELDS
\ No newline at end of file
diff --git a/src/usersapp/admin.py b/src/usersapp/admin.py
index 8c38f3f..b285111 100644
--- a/src/usersapp/admin.py
+++ b/src/usersapp/admin.py
@@ -1,3 +1,5 @@
from django.contrib import admin
+from .models import Incident
# Register your models here.
+admin.site.register(Incident)
\ No newline at end of file
diff --git a/src/usersapp/forms.py b/src/usersapp/forms.py
new file mode 100644
index 0000000..8b6f98a
--- /dev/null
+++ b/src/usersapp/forms.py
@@ -0,0 +1,13 @@
+from bootstrap_datepicker_plus import DatePickerInput, TimePickerInput
+from django.forms import ModelForm
+from .models import Incident
+
+class IncidentForm(ModelForm):
+ class Meta:
+ model = Incident
+ fields = ['accident_location', 'nearest_landmark', 'date_of_accident', 'time_of_accident', 'number_of_vehicles_involved', 'vehicle_type', 'if_other_vehicle_specify', 'vehicles_number_plates', 'vehicle_precrash_factors', 'number_of_damaged_vehicles', 'road_geometry', 'road_type', 'driver_precrash_factors', 'collision_type', 'number_of_victims', 'number_of_injured', 'number_of_deaths', 'category_of_victims', 'victims_age_group', 'number_of_male_victims', 'number_of_female_victims', 'number_of_child_victims', 'victims_current_location', 'if_hospital_specify', 'if_other_location_specify', 'more_accident_info']
+ widgets = {
+ 'date_of_accident': DatePickerInput(), # default date-format %m/%d/%Y will be used
+ # 'end_date': DatePickerInput(format='%Y-%m-%d'), # specify date-frmat
+ 'time_of_accident': TimePickerInput(),
+ }
\ No newline at end of file
diff --git a/src/usersapp/migrations/0002_auto_20200528_2003.py b/src/usersapp/migrations/0002_auto_20200528_2003.py
new file mode 100644
index 0000000..968a6ec
--- /dev/null
+++ b/src/usersapp/migrations/0002_auto_20200528_2003.py
@@ -0,0 +1,158 @@
+# Generated by Django 3.0.6 on 2020-05-28 19:03
+
+from django.db import migrations, models
+import multiselectfield.db.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('usersapp', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='incident',
+ old_name='date',
+ new_name='date_of_accident',
+ ),
+ migrations.RenameField(
+ model_name='incident',
+ old_name='description',
+ new_name='more_accident_info',
+ ),
+ migrations.RenameField(
+ model_name='incident',
+ old_name='time',
+ new_name='time_of_accident',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='age',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='causes',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='currently_allocated_to',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='gender',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='junction_type',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='number_of_damage_vehicle',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='number_of_death',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='number_of_injury',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='traffic_lane',
+ ),
+ migrations.RemoveField(
+ model_name='incident',
+ name='vehicle_involved',
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='category_of_victims',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Driver', 'Driver'), ('Passenger', 'Passenger'), ('Trailer', 'Trailer'), ('Motorcycle', 'Motorcyclist'), ('Tricyclist', 'Tricyclist'), ('Bicyclist', 'Bicyclist'), ('Pedestrian', 'Pedestrian')], default=0, max_length=20),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='driver_precrash_factors',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Nothing notable', 'Nothing notable'), ('Fatigue/Sleepiness', 'Fatigue/Sleepiness'), ('Sudden illness', 'Sudden illness'), ('Speeding', 'Speeding'), ('Careless overtaking', 'Careless overtaking'), ('Tailgating', 'Tailgating'), ('Sudden turn', 'Sudden turn'), ('risktaking', 'Other calculated risktaking'), ('phone while driving', 'Use of phone while driving'), ('Alcohol', 'Influence of alcohol'), ('Drug', 'Influence of drug'), ('Other distractions', 'Other distractions/inattentiveness')], default=0, max_length=30),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='gender_of_victims',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Male', 'Male'), ('Female', 'Female')], default=0, max_length=20),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_damaged_vehicles',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_deaths',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_injured',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_vehicles_involved',
+ field=models.IntegerField(default=0),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='road_geometry',
+ field=models.CharField(choices=[('Straight road', 'Straight road'), ('Curve', 'Curve'), ('Roundabout', 'Roundabout'), ('T-junction', 'T-junction'), ('Y-junction', 'Y-junction'), ('+-junction', '+-junction'), ('Bridge', 'Bridge'), ('Road works', 'Road works'), ('Other', 'Other')], default=0, max_length=20),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='vehicle_precrash_factors',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Tyre burst', 'Tyre burst'), ('Mechanical deficiency', 'Mechanical deficiency'), ('Overloaded', 'Overloaded'), ('Defective light', 'Defective light'), ('Nothing notable', 'Nothing notable')], max_length=30, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='victims_age_group',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Baby', 'Baby'), ('Toddler', 'Toddler'), ('Child', 'Child'), ('Teenager', 'Teenager'), ('Adult', 'Adult'), ('Middle aged', 'Middle aged'), ('Elderly', 'Elderly')], default=0, max_length=20),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='victims_current_location',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[(1, 'Accident Scene'), (2, 'Hospital'), (3, 'Other')], default=0, max_length=50),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='collision_type',
+ field=models.CharField(choices=[('Mv/mv head on', 'Moving vehicles, head on'), ('Mv/mv rear end', 'Moving vehicles, rear end'), ('Mv/mv intersecting', 'Moving vehicles, intersecting'), ('Mv/mv overtake', 'Moving vehicles, overtake'), ('Mv/mv turn', 'Moving vehicles, turn'), ('Single mv hit object', 'Single moving vehicle, hit object'), ('Single mv run off', 'Single moving vehicle, run off'), ('Single mv falling off', 'Single moving vehicle, falling off'), ('Mv/pedestrian', 'Moving vehicle with pedestrian'), ('Mv/bicyclist', 'Moving vehicle with pedestrian'), ('Other', 'Other')], default=0, max_length=100),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='location',
+ field=models.CharField(choices=[('Abia', 'Abia'), ('Adamawa', 'Adamawa'), ('Akwa Ibom', 'Akwa Ibom'), ('Anambra', 'Anambra'), ('Bauchi', 'Bauchi'), ('Benue', 'Benue'), ('Borno', 'Borno'), ('Cross River', 'Cross River'), ('Damaturu', 'Damaturu'), ('Ebonyi', 'Ebonyi'), ('Enugu', 'Enugu'), ('Lagos', 'Lagos'), ('Ogun', 'Ogun')], max_length=45),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_victims',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='road_type',
+ field=models.CharField(choices=[('Dual carriageway', 'Dual carriageway'), ('Single carriageway', 'Single carriageway'), ('Expressway', 'Expressway'), ('Street', 'Street'), ('Other', 'Other')], default=0, max_length=20),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='vehicle_type',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Car saloon', 'Car saloon'), ('Microbus', 'Microbus (< 10 seater)'), ('Minibus', 'Minibus (< 15 seater)'), ('Coaster', 'Coaster (< 15 > 35 seater)'), ('Bus', 'Bus (> 35 seater)'), ('Pickup', 'Pickup'), ('SUV', 'SUV (Jeep'), ('Light lorry', 'Light lorry (< 3.5 t)'), ('Heavy lorry', 'Heavy lorry (> 3.5 t)'), ('Tanker', 'Tanker'), ('Trailer', 'Trailer'), ('Motorcycle', 'Motorcycle'), ('Tricycle', 'Tricycle'), ('Bicycle', 'Bicycle'), ('Unknown', 'Unknown')], max_length=20),
+ ),
+ ]
diff --git a/src/usersapp/migrations/0003_auto_20200529_0239.py b/src/usersapp/migrations/0003_auto_20200529_0239.py
new file mode 100644
index 0000000..2a67721
--- /dev/null
+++ b/src/usersapp/migrations/0003_auto_20200529_0239.py
@@ -0,0 +1,49 @@
+# Generated by Django 3.0.6 on 2020-05-29 01:39
+
+from django.db import migrations, models
+import multiselectfield.db.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('usersapp', '0002_auto_20200528_2003'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='incident',
+ name='category_of_victims',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Driver', 'Driver'), ('Passenger', 'Passenger'), ('Trailer', 'Trailer'), ('Motorcycle', 'Motorcyclist'), ('Tricyclist', 'Tricyclist'), ('Bicyclist', 'Bicyclist'), ('Pedestrian', 'Pedestrian')], max_length=30),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='collision_type',
+ field=models.CharField(choices=[('Mv/mv head on', 'Moving vehicles, head on'), ('Mv/mv rear end', 'Moving vehicles, rear end'), ('Mv/mv intersecting', 'Moving vehicles, intersecting'), ('Mv/mv overtake', 'Moving vehicles, overtake'), ('Mv/mv turn', 'Moving vehicles, turn'), ('Single mv hit object', 'Single moving vehicle, hit object'), ('Single mv run off', 'Single moving vehicle, run off'), ('Single mv falling off', 'Single moving vehicle, falling off'), ('Mv/pedestrian', 'Moving vehicle with pedestrian'), ('Mv/bicyclist', 'Moving vehicle with pedestrian'), ('Other', 'Other')], max_length=70),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='driver_precrash_factors',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Nothing notable', 'Nothing notable'), ('Fatigue/Sleepiness', 'Fatigue/Sleepiness'), ('Sudden illness', 'Sudden illness'), ('Speeding', 'Speeding'), ('Careless overtaking', 'Careless overtaking'), ('Tailgating', 'Tailgating'), ('Sudden turn', 'Sudden turn'), ('risktaking', 'Other calculated risktaking'), ('phone while driving', 'Use of phone while driving'), ('Alcohol', 'Influence of alcohol'), ('Drug', 'Influence of drug'), ('Other distractions', 'Other distractions/inattentiveness')], max_length=50),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='road_geometry',
+ field=models.CharField(choices=[('Straight road', 'Straight road'), ('Curve', 'Curve'), ('Roundabout', 'Roundabout'), ('T-junction', 'T-junction'), ('Y-junction', 'Y-junction'), ('+-junction', '+-junction'), ('Bridge', 'Bridge'), ('Road works', 'Road works'), ('Other', 'Other')], max_length=30),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='road_type',
+ field=models.CharField(choices=[('Dual carriageway', 'Dual carriageway'), ('Single carriageway', 'Single carriageway'), ('Expressway', 'Expressway'), ('Street', 'Street'), ('Other', 'Other')], max_length=30),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='vehicle_precrash_factors',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Tyre burst', 'Tyre burst'), ('Mechanical deficiency', 'Mechanical deficiency'), ('Overloaded', 'Overloaded'), ('Defective light', 'Defective light'), ('Nothing notable', 'Nothing notable')], max_length=50, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='vehicle_type',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Car saloon', 'Car saloon'), ('Microbus', 'Microbus (< 10 seater)'), ('Minibus', 'Minibus (< 15 seater)'), ('Coaster', 'Coaster (< 15 > 35 seater)'), ('Bus', 'Bus (> 35 seater)'), ('Pickup', 'Pickup'), ('SUV', 'SUV (Jeep'), ('Light lorry', 'Light lorry (< 3.5 t)'), ('Heavy lorry', 'Heavy lorry (> 3.5 t)'), ('Tanker', 'Tanker'), ('Trailer', 'Trailer'), ('Motorcycle', 'Motorcycle'), ('Tricycle', 'Tricycle'), ('Bicycle', 'Bicycle'), ('Unknown', 'Unknown')], max_length=50),
+ ),
+ ]
diff --git a/src/usersapp/migrations/0004_auto_20200530_1155.py b/src/usersapp/migrations/0004_auto_20200530_1155.py
new file mode 100644
index 0000000..caa1a2e
--- /dev/null
+++ b/src/usersapp/migrations/0004_auto_20200530_1155.py
@@ -0,0 +1,38 @@
+# Generated by Django 3.0.6 on 2020-05-30 10:55
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('usersapp', '0003_auto_20200529_0239'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='incident',
+ name='if_hospital_specify',
+ field=models.CharField(blank=True, max_length=45, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='if_other_location_specify',
+ field=models.CharField(blank=True, max_length=45, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_child_victims',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_female_victims',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='number_of_male_victims',
+ field=models.IntegerField(blank=True, null=True),
+ ),
+ ]
diff --git a/src/usersapp/migrations/0005_incident_vehicles_number_plates.py b/src/usersapp/migrations/0005_incident_vehicles_number_plates.py
new file mode 100644
index 0000000..d52b18c
--- /dev/null
+++ b/src/usersapp/migrations/0005_incident_vehicles_number_plates.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.6 on 2020-05-30 18:15
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('usersapp', '0004_auto_20200530_1155'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='incident',
+ name='vehicles_number_plates',
+ field=models.CharField(blank=True, max_length=45, null=True),
+ ),
+ ]
diff --git a/src/usersapp/migrations/0006_auto_20200601_1633.py b/src/usersapp/migrations/0006_auto_20200601_1633.py
new file mode 100644
index 0000000..a29818d
--- /dev/null
+++ b/src/usersapp/migrations/0006_auto_20200601_1633.py
@@ -0,0 +1,111 @@
+# Generated by Django 3.0.6 on 2020-06-01 15:33
+
+from django.db import migrations, models
+import multiselectfield.db.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('usersapp', '0005_incident_vehicles_number_plates'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='incident',
+ old_name='location',
+ new_name='accident_location',
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='if_other_vehicle_specify',
+ field=models.CharField(blank=True, db_column='other vehicle type', max_length=50, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='category_of_victims',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Driver', 'Driver'), ('Passenger', 'Passenger'), ('Trailer', 'Trailer'), ('Motorcycle', 'Motorcyclist'), ('Tricyclist', 'Tricyclist'), ('Bicyclist', 'Bicyclist'), ('Pedestrian', 'Pedestrian')], help_text='If no victim, leave box unticked.', max_length=30, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='gender_of_victims',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Male', 'Male'), ('Female', 'Female')], help_text='If no victim, leave box unticked.', max_length=20, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='if_hospital_specify',
+ field=models.CharField(blank=True, db_column='hospital location', max_length=50, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='if_other_location_specify',
+ field=models.CharField(blank=True, db_column='other location', max_length=50, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_child_victims',
+ field=models.IntegerField(default=0, help_text='Number of child victims can be zero or more'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_deaths',
+ field=models.IntegerField(default=0, help_text='Number of dead can be zero or more.'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_female_victims',
+ field=models.IntegerField(default=0, help_text='Number of female victims can be zero or more'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_injured',
+ field=models.IntegerField(default=0, help_text='Number of injured can be zero or more.'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_male_victims',
+ field=models.IntegerField(default=0, help_text='Number of male victims can be zero or more.'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_vehicles_involved',
+ field=models.IntegerField(db_column='vehicles involved'),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_victims',
+ field=models.IntegerField(default=0, help_text='Number of victims can be zero or more.'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='vehicle_precrash_factors',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Tyre burst', 'Tyre burst'), ('Mechanical deficiency', 'Mechanical deficiency'), ('Overloaded', 'Overloaded'), ('Defective light', 'Defective light'), ('Nothing notable', 'Nothing notable')], default=0, max_length=50),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='vehicle_type',
+ field=multiselectfield.db.fields.MultiSelectField(choices=[('Car saloon', 'Car saloon'), ('Microbus', 'Microbus (< 10 seater)'), ('Minibus', 'Minibus (< 15 seater)'), ('Coaster', 'Coaster (< 15 > 35 seater)'), ('Bus', 'Bus (> 35 seater)'), ('Pickup', 'Pickup'), ('SUV', 'SUV (Jeep'), ('Light lorry', 'Light lorry (< 3.5 t)'), ('Heavy lorry', 'Heavy lorry (> 3.5 t)'), ('Tanker', 'Tanker'), ('Trailer', 'Trailer'), ('Motorcycle', 'Motorcycle'), ('Tricycle', 'Tricycle'), ('Bicycle', 'Bicycle'), ('Unknown', 'Unknown'), ('Other', 'Other')], max_length=50),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='vehicles_number_plates',
+ field=models.CharField(blank=True, help_text='You can add more than one vehicle number plate.', max_length=100, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='victims_age_group',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Baby', 'Baby'), ('Toddler', 'Toddler'), ('Child', 'Child'), ('Teenager', 'Teenager'), ('Adult', 'Adult'), ('Middle aged', 'Middle aged'), ('Elderly', 'Elderly')], help_text='If no victim, leave box unticked.', max_length=20, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='victims_current_location',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[(1, 'Accident Scene'), (2, 'Hospital'), (3, 'Other')], help_text='If no victim, leave box unticked.', max_length=50, null=True),
+ ),
+ ]
diff --git a/src/usersapp/migrations/0007_auto_20200601_2102.py b/src/usersapp/migrations/0007_auto_20200601_2102.py
new file mode 100644
index 0000000..5a636ab
--- /dev/null
+++ b/src/usersapp/migrations/0007_auto_20200601_2102.py
@@ -0,0 +1,39 @@
+# Generated by Django 3.0.6 on 2020-06-01 20:02
+
+from django.db import migrations, models
+import multiselectfield.db.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('usersapp', '0006_auto_20200601_1633'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='incident',
+ name='gender_of_victims',
+ ),
+ migrations.AddField(
+ model_name='incident',
+ name='nearest_landmark',
+ field=models.CharField(blank=True, help_text='By landmark we mean somewhere notable such as bustop, market, hotel, hospital etc.', max_length=50, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='category_of_victims',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Driver', 'Driver'), ('Passenger', 'Passenger'), ('Motorcycle', 'Motorcyclist'), ('Tricyclist', 'Tricyclist'), ('Bicyclist', 'Bicyclist'), ('Pedestrian', 'Pedestrian')], help_text='If no victim, leave boxes unticked.', max_length=40, null=True),
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='number_of_damaged_vehicles',
+ field=models.IntegerField(default=0, help_text='Number of damaged vehicles can be zero or more.'),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='incident',
+ name='victims_age_group',
+ field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('Baby', 'Baby'), ('Toddler', 'Toddler'), ('Child', 'Child'), ('Teenager', 'Teenager'), ('Adult', 'Adult'), ('Middle aged', 'Middle aged'), ('Elderly', 'Elderly')], help_text='If no victim, leave boxes unticked.', max_length=50, null=True),
+ ),
+ ]
diff --git a/src/usersapp/models.py b/src/usersapp/models.py
index 45af23e..2cb5dd3 100644
--- a/src/usersapp/models.py
+++ b/src/usersapp/models.py
@@ -1,22 +1,169 @@
from django.db import models
+from multiselectfield import MultiSelectField
# Create your models here.
+
+VEHICLE_CHOICES = (('Car saloon', 'Car saloon'),
+ ('Microbus', 'Microbus (< 10 seater)'),
+ ('Minibus', 'Minibus (< 15 seater)'),
+ ('Coaster', 'Coaster (< 15 > 35 seater)'),
+ ('Bus', 'Bus (> 35 seater)'),
+ ('Pickup', 'Pickup'),
+ ('SUV', 'SUV (Jeep'),
+ ('Light lorry', 'Light lorry (< 3.5 t)'),
+ ('Heavy lorry', 'Heavy lorry (> 3.5 t)'),
+ ('Tanker', 'Tanker'),
+ ('Trailer', 'Trailer'),
+ ('Motorcycle', 'Motorcycle'),
+ ('Tricycle', 'Tricycle'),
+ ('Bicycle', 'Bicycle'),
+ ('Unknown', 'Unknown'),
+ ('Other', 'Other'))
+
+VEHICLE_PRECRASH_CHOICES = (('Tyre burst', 'Tyre burst'),
+ ('Mechanical deficiency', 'Mechanical deficiency'),
+ ('Overloaded', 'Overloaded'),
+ ('Defective light', 'Defective light'),
+ ('Nothing notable', 'Nothing notable'))
+
+DRIVER_PRECRASH_CHOICES = (('Nothing notable', 'Nothing notable'),
+ ('Fatigue/Sleepiness', 'Fatigue/Sleepiness'),
+ ('Sudden illness', 'Sudden illness'),
+ ('Speeding', 'Speeding'),
+ ('Careless overtaking', 'Careless overtaking'),
+ ('Tailgating', 'Tailgating'),
+ ('Sudden turn', 'Sudden turn'),
+ ('risktaking', 'Other calculated risktaking'),
+ ('phone while driving', 'Use of phone while driving'),
+ ('Alcohol', 'Influence of alcohol'),
+ ('Drug', 'Influence of drug'),
+ ('Other distractions', 'Other distractions/inattentiveness'))
+
+VICTIM_CATEGORY = (('Driver', 'Driver'),
+ ('Passenger', 'Passenger'),
+ ('Motorcycle', 'Motorcyclist'),
+ ('Tricyclist', 'Tricyclist'),
+ ('Bicyclist', 'Bicyclist'),
+ ('Pedestrian', 'Pedestrian'))
+
+VICTIM_AGE_GROUP= (('Baby', 'Baby'),
+ ('Toddler', 'Toddler'),
+ ('Child', 'Child'),
+ ('Teenager', 'Teenager'),
+ ('Adult', 'Adult'),
+ ('Middle aged', 'Middle aged'),
+ ('Elderly', 'Elderly'))
+LOCATIONS = ((1, 'Accident Scene'),
+ (2, 'Hospital'),
+ (3, 'Other'))
+
+LOCATIONS = ((1, 'Accident Scene'),
+(2, 'Hospital'),
+(3, 'Other'))
+
+
+VICTIMS_LOCATIONS = ((1, 'Accident Scene'),
+ (2, 'Hospital'),
+ (3, 'Other'))
+
+USER_LOCATION = [
+ ('FCT', 'FCT'),
+ ('Abia', 'Abia'),
+ ('Adamawa', 'Adamawa'),
+ ('Akwa Ibom', 'Akwa Ibom'),
+ ('Anambra', 'Anambra'),
+ ('Bauchi', 'Bauchi'),
+ ('Bayelsa', 'Bayelsa'),
+ ('Benue','Benue'),
+ ('Borno', 'Borno'),
+ ('Cross River', 'Cross River'),
+ ('Delta', 'Delta'),
+ ('Ebonyi', 'Ebonyi'),
+ ('Enugu', 'Enugu'),
+ ('Edo', 'Edo'),
+ ('Ekiti', 'Ekiti'),
+ ('Gombe', 'Gombe'),
+ ('Imo', 'Imo'),
+ ('Jigawa', 'Jigawa'),
+ ('Kaduna', 'Kaduna'),
+ ('Kano', 'Kano'),
+ ('Katsina', 'Katsina'),
+ ('Kebbi', 'Kebbi'),
+ ('Kogi', 'Kogi'),
+ ('Kwara', 'Kwara'),
+ ('Lagos', 'Lagos'),
+ ('Nasarawa', 'Nasarawa'),
+ ('Niger', 'Niger'),
+ ('Ogun', 'Ogun'),
+ ('Ondo', 'Ondo'),
+ ('Osun', 'Osun'),
+ ('Oyo', 'Oyo'),
+ ('Plateau', 'Plateau'),
+ ('Rivers', 'Rivers'),
+ ('Sokoto', 'Sokoto'),
+ ('Taraba', 'Taraba'),
+ ('Yobe', 'Yobe'),
+ ('Zamfara', 'Zamfara')
+]
+
+GEOMETRY_CHOICES = [
+ ('Straight road', 'Straight road'),
+ ('Curve', 'Curve'),
+ ('Roundabout', 'Roundabout'),
+ ('T-junction', 'T-junction'),
+ ('Y-junction', 'Y-junction'),
+ ('+-junction', '+-junction'),
+ ('Bridge', 'Bridge'),
+ ('Road works', 'Road works'),
+ ('Other', 'Other')
+]
+
+ROAD_TYPE_CHOICES = [
+ ('Dual carriageway', 'Dual carriageway'),
+ ('Single carriageway', 'Single carriageway'),
+ ('Expressway', 'Expressway'),
+ ('Street', 'Street'),
+ ('Other', 'Other')
+]
+
+COLLISION_CHOICES = [
+ ('Mv/mv head on', 'Moving vehicles, head on'),
+ ('Mv/mv rear end', 'Moving vehicles, rear end'),
+ ('Mv/mv intersecting', 'Moving vehicles, intersecting'),
+ ('Mv/mv overtake', 'Moving vehicles, overtake'),
+ ('Mv/mv turn', 'Moving vehicles, turn'),
+ ('Single mv hit object', 'Single moving vehicle, hit object'),
+ ('Single mv run off', 'Single moving vehicle, run off'),
+ ('Single mv falling off', 'Single moving vehicle, falling off'),
+ ('Mv/pedestrian', 'Moving vehicle with pedestrian'),
+ ('Mv/bicyclist', 'Moving vehicle with pedestrian'),
+ ('Other', 'Other')
+]
+
class Incident(models.Model) :
- location=models.CharField(max_length=45,null=False,blank=False)
- date=models.DateField()
- description=models.TextField(blank=True,null=True)
- vehicle_type=models.CharField(max_length=20,null=False,blank=False)
- vehicle_involved=models.CharField(max_length=20,null=False,blank=False)
- traffic_lane=models.CharField(max_length=20,null=True,blank=True)
- road_type=models.CharField(max_length=20,null=True,blank=True)
- junction_type=models.CharField(max_length=20,null=True,blank=True)
- time=models.TimeField( )
- causes=models.CharField(max_length=30,null=True,blank=True)
- collision_type=models.CharField(max_length=100,null=True,blank=True)
- number_of_victims=models.CharField(max_length=20,null=True,blank=True)
- number_of_injury=models.CharField(max_length=10,null=True,blank=True)
- number_of_death=models.CharField(max_length=10,null=True,blank=True)
- number_of_damage_vehicle=models.CharField(max_length=10,null=True,blank=True)
- currently_allocated_to=models.CharField(max_length=100,null=True,blank=True)
- gender=models.CharField(max_length=20,null=True,blank=True)
- age=models.CharField(max_length=20,null=True,blank=True)
\ No newline at end of file
+ accident_location=models.CharField(choices=USER_LOCATION,max_length=45,null=False,blank=False)
+ nearest_landmark=models.CharField(max_length=50,null=True,blank=True, help_text="By landmark we mean somewhere notable such as bustop, market, hotel, hospital etc.")
+ date_of_accident=models.DateField(auto_now=False)
+ time_of_accident=models.TimeField(auto_now=False)
+ number_of_vehicles_involved=models.IntegerField(null=False,blank=False, db_column='vehicles involved')
+ vehicle_type=MultiSelectField(choices=VEHICLE_CHOICES,max_length=50,null=False,blank=False)
+ if_other_vehicle_specify=models.CharField(max_length=50,null=True,blank=True, db_column='other vehicle type')
+ vehicles_number_plates=models.CharField(max_length=100,null=True,blank=True, help_text="You can add more than one vehicle number plate.")
+ vehicle_precrash_factors=MultiSelectField(choices=VEHICLE_PRECRASH_CHOICES,max_length=50,null=False,blank=False)
+ number_of_damaged_vehicles=models.IntegerField(null=False,blank=False, help_text="Number of damaged vehicles can be zero or more.")
+ road_geometry=models.CharField(choices=GEOMETRY_CHOICES,max_length=30,null=False,blank=False)
+ road_type=models.CharField(choices=ROAD_TYPE_CHOICES,max_length=30,null=False,blank=False)
+ driver_precrash_factors=MultiSelectField(choices=DRIVER_PRECRASH_CHOICES,max_length=50,null=False,blank=False)
+ collision_type=models.CharField(choices=COLLISION_CHOICES,max_length=70,null=False,blank=False)
+ number_of_victims=models.IntegerField(null=False,blank=False, help_text="Number of victims can be zero or more.")
+ number_of_injured=models.IntegerField(null=False,blank=False, help_text="Number of injured can be zero or more.")
+ number_of_deaths=models.IntegerField(null=False,blank=False, help_text="Number of dead can be zero or more.")
+ category_of_victims=MultiSelectField(choices=VICTIM_CATEGORY,max_length=40,null=True,blank=True, help_text="If no victim, leave boxes unticked.")
+ victims_age_group=MultiSelectField(choices=VICTIM_AGE_GROUP,max_length=50,null=True,blank=True,help_text="If no victim, leave boxes unticked.")
+ number_of_male_victims=models.IntegerField(null=False,blank=False, help_text="Number of male victims can be zero or more.")
+ number_of_female_victims=models.IntegerField(null=False,blank=False, help_text="Number of female victims can be zero or more")
+ number_of_child_victims=models.IntegerField(null=False,blank=False, help_text="Number of child victims can be zero or more")
+ victims_current_location=MultiSelectField(choices=VICTIMS_LOCATIONS,max_length=50,null=True,blank=True,help_text="If no victim, leave box unticked.")
+ if_hospital_specify=models.CharField(max_length=50,null=True,blank=True, db_column='hospital location')
+ if_other_location_specify=models.CharField(max_length=50,null=True,blank=True, db_column='other location')
+ more_accident_info=models.TextField(blank=True,null=True)
\ No newline at end of file
diff --git a/src/usersapp/urls.py b/src/usersapp/urls.py
new file mode 100644
index 0000000..0c04bf4
--- /dev/null
+++ b/src/usersapp/urls.py
@@ -0,0 +1,26 @@
+"""goal3 URL Configuration.
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/3.0/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.urls import include, path
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path
+
+#connecting incident_create to usersapp
+from .views import home, incident_create
+
+
+urlpatterns = [
+ path('', home, name='home'),
+ path('incident/create/', incident_create, name='incident_create'),
+]
diff --git a/src/usersapp/views.py b/src/usersapp/views.py
index 91ea44a..e860460 100644
--- a/src/usersapp/views.py
+++ b/src/usersapp/views.py
@@ -1,3 +1,39 @@
-from django.shortcuts import render
+from django.shortcuts import render, redirect
+from django.contrib import messages
+from .forms import IncidentForm
+from .models import Incident
+from django.views.decorators.http import require_POST
# Create your views here.
+# add a new view function called incident_create
+def home (request):
+ #incident = Incident.objects.get(pk=1)
+ return render(request,'index.html')
+
+def incident_create(request):
+ if request.method == 'POST':
+
+ #form = IncidentForm(request.POST)
+ userform = IncidentForm(request.POST)
+
+ #if form.is_valid():
+ if userform.is_valid():
+
+ #form.save()
+ userform.save()
+
+ print('form submitted')
+ messages.info(request, 'Thank you for reporting')
+ return redirect('incident_create')
+ else:
+ print('unable to submit')
+
+ #form = IncidentForm()
+ userform = IncidentForm()
+
+ return render(request,
+ 'incident_create.html',
+ {
+ #'form': form
+ 'form': userform
+ })