From 8e26bf1ab75906e0d89c7b6adfaa0003646805a5 Mon Sep 17 00:00:00 2001 From: Aaron <Aaron8.jones@live.uwe.ac.uk> Date: Thu, 27 Mar 2025 15:55:51 +0000 Subject: [PATCH] 1) added more database stuff (mlModel, Billings, Interactions, Records). 2) New Directory (mlModels) for storage of mlModels in the future. 3) Addeds separate dashboard htmls in new directory (templates/dashboards) in hopes of getting modelforms to work in the future. --- ActualProjectCode/DjangoProject/core/admin.py | 6 ++- ActualProjectCode/DjangoProject/core/forms.py | 7 ++++ .../DjangoProject/core/models.py | 37 ++++++++++++++++- ActualProjectCode/DjangoProject/core/views.py | 16 ++++---- .../DjangoProject/docker-compose.yml | 8 +++- .../DjangoProject/server/urls.py | 5 ++- .../templates/dashboards/admin_dashboard.html | 11 +++++ .../templates/dashboards/ai_dashboard.html | 11 +++++ .../dashboards/finance_dashboard.html | 11 +++++ .../templates/dashboards/user_dashboard.html | 27 ++++++++++++ .../DjangoProject/templates/profile.html | 41 +++++++++++++++++-- 11 files changed, 164 insertions(+), 16 deletions(-) create mode 100644 ActualProjectCode/DjangoProject/templates/dashboards/admin_dashboard.html create mode 100644 ActualProjectCode/DjangoProject/templates/dashboards/ai_dashboard.html create mode 100644 ActualProjectCode/DjangoProject/templates/dashboards/finance_dashboard.html create mode 100644 ActualProjectCode/DjangoProject/templates/dashboards/user_dashboard.html diff --git a/ActualProjectCode/DjangoProject/core/admin.py b/ActualProjectCode/DjangoProject/core/admin.py index 6dc9bd61..0a58da4d 100644 --- a/ActualProjectCode/DjangoProject/core/admin.py +++ b/ActualProjectCode/DjangoProject/core/admin.py @@ -5,10 +5,14 @@ from core import models from django.contrib import admin from django.contrib.auth.models import User -from .models import Profile +from .models import Profile, mlModel, Interaction, Billing, Record # Register the Profile model in the admin admin.site.register(Profile) +admin.site.register(mlModel) +admin.site.register(Interaction) +admin.site.register(Billing) +admin.site.register(Record) # Customize the User Admin to display profile fields class UserAdmin(admin.ModelAdmin): diff --git a/ActualProjectCode/DjangoProject/core/forms.py b/ActualProjectCode/DjangoProject/core/forms.py index 68b9df47..4dc71124 100644 --- a/ActualProjectCode/DjangoProject/core/forms.py +++ b/ActualProjectCode/DjangoProject/core/forms.py @@ -1,6 +1,13 @@ from django import forms +from django.forms import ModelForm from django.contrib.auth.models import User +from .models import Record class UserLoginForm(forms.Form): username = forms.CharField(max_length=100) password = forms.CharField(widget=forms.PasswordInput) + +class UserUploadForm(forms.ModelForm): + class Meta: + model = Record + fields = '__all__' \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/core/models.py b/ActualProjectCode/DjangoProject/core/models.py index 4e743ecd..ebf45c53 100644 --- a/ActualProjectCode/DjangoProject/core/models.py +++ b/ActualProjectCode/DjangoProject/core/models.py @@ -6,4 +6,39 @@ class Profile(models.Model): role = models.CharField(max_length=100, choices=[('admin', 'Admin'), ('user', 'User'), ('ai_engineer', 'AI Engineer'), ('finance', 'Finance Team')]) def __str__(self): - return f"{self.user.username} - {self.role}" \ No newline at end of file + return f"{self.user.username} - {self.role}" + +class mlModel(models.Model): + modelID = models.AutoField(primary_key=True) + username = models.CharField(max_length=100, default="default") + modelName = models.CharField(max_length=100) + + def __str__(self): + return self.modelName + +class Interaction(models.Model): + interactionID = models.AutoField(primary_key=True) + username = models.CharField(max_length=100, default="default") + date = models.DateTimeField() + interaction = models.CharField(max_length=1000) + + def __str__(self): + return self.interactionID + +class Billing(models.Model): + billingID = models.AutoField(primary_key=True) + amount = models.FloatField() + username = models.CharField(max_length=100, default="company") + companyName = models.CharField(max_length=100) + + def __str__(self): + return f"{self.companyName} - {self.billingID}" + +class Record(models.Model): + username = models.CharField(max_length=100, default="default") + uploadedFile = models.FileField(upload_to='./records/') + chosenML = models.CharField(max_length=100, default="baseML") + responseByML = models.CharField(max_length=100, default="PLACEHOLDER RESPONSE") # change to actual response by ML + + def __str__(self): + return f"{self.chosenML} Response to {self.userID}" \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/core/views.py b/ActualProjectCode/DjangoProject/core/views.py index 9962f78e..8ef49d71 100644 --- a/ActualProjectCode/DjangoProject/core/views.py +++ b/ActualProjectCode/DjangoProject/core/views.py @@ -3,8 +3,8 @@ from django.contrib.auth.forms import UserCreationForm from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.http import HttpResponse -from .models import Profile -from .forms import UserLoginForm +from .models import Profile, mlModel, Billing, Interaction, Record +from .forms import UserLoginForm, UserUploadForm # Registration view @@ -36,7 +36,7 @@ def login_view(request): role = profile.role # Redirect to the correct profile page based on the user's role if role == 'ai_engineer': - return redirect('ai_engineer_dashboard') + return redirect('ai_dashboard') elif role == 'finance': return redirect('finance_dashboard') else: @@ -49,14 +49,16 @@ def login_view(request): return render(request, 'login.html', {'form': form}) def user_dashboard(request): - return render(request, 'profile.html') + return render(request, 'dashboards/user_dashboard.html') +def ai_dashboard(request): + return render(request, 'dashboards/ai_dashboard.html') -def ai_engineer_dashboard(request): - return render(request, 'profile.html') +def admin_dashboard(request): + return render(request, 'dashboards/admin_dashboard.html') def finance_dashboard(request): - return render(request, 'profile.html') + return render(request, 'dashboards/finance_dashboard.html') def logout_view(request): logout(request) diff --git a/ActualProjectCode/DjangoProject/docker-compose.yml b/ActualProjectCode/DjangoProject/docker-compose.yml index da720a0f..6bab324f 100644 --- a/ActualProjectCode/DjangoProject/docker-compose.yml +++ b/ActualProjectCode/DjangoProject/docker-compose.yml @@ -1,4 +1,3 @@ -version: '3.8' services: web: build: @@ -33,5 +32,12 @@ services: timeout: 5s retries: 5 +# working on mlservice external container - idk how. + +# mlService: +# image: mlService + + + volumes: db-data: diff --git a/ActualProjectCode/DjangoProject/server/urls.py b/ActualProjectCode/DjangoProject/server/urls.py index 4ca26845..c3b59eba 100644 --- a/ActualProjectCode/DjangoProject/server/urls.py +++ b/ActualProjectCode/DjangoProject/server/urls.py @@ -34,7 +34,8 @@ urlpatterns = [ path('logout/', views.logout_view, name='logout'), path('login/', views.login_view, name='login'), path('register/', views.register_view, name='register'), - path('profile/', views.user_dashboard, name='user_dashboard'), - path('ai_engineer_dashboard/', views.ai_engineer_dashboard, name='ai_engineer_dashboard'), + path('admin_dashboard/', views.admin_dashboard, name="admin_dashboard"), + path('user_dashboard/', views.user_dashboard, name='user_dashboard'), + path('ai_dashboard/', views.ai_dashboard, name='ai_dashboard'), path('finance_dashboard/', views.finance_dashboard, name='finance_dashboard'), ] \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/templates/dashboards/admin_dashboard.html b/ActualProjectCode/DjangoProject/templates/dashboards/admin_dashboard.html new file mode 100644 index 00000000..a1ef3a95 --- /dev/null +++ b/ActualProjectCode/DjangoProject/templates/dashboards/admin_dashboard.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> +<head> + <title>User Dashboard</title> +</head> + +<body> + +</body> + +</html> \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/templates/dashboards/ai_dashboard.html b/ActualProjectCode/DjangoProject/templates/dashboards/ai_dashboard.html new file mode 100644 index 00000000..a1ef3a95 --- /dev/null +++ b/ActualProjectCode/DjangoProject/templates/dashboards/ai_dashboard.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> +<head> + <title>User Dashboard</title> +</head> + +<body> + +</body> + +</html> \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/templates/dashboards/finance_dashboard.html b/ActualProjectCode/DjangoProject/templates/dashboards/finance_dashboard.html new file mode 100644 index 00000000..a1ef3a95 --- /dev/null +++ b/ActualProjectCode/DjangoProject/templates/dashboards/finance_dashboard.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> +<head> + <title>User Dashboard</title> +</head> + +<body> + +</body> + +</html> \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/templates/dashboards/user_dashboard.html b/ActualProjectCode/DjangoProject/templates/dashboards/user_dashboard.html new file mode 100644 index 00000000..894505fd --- /dev/null +++ b/ActualProjectCode/DjangoProject/templates/dashboards/user_dashboard.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<head> + <title>{{ user.username }}'s Dashboard</title> +</head> + +<body> + <nav> + <ul> + <li><a href="{% url 'logout' %}">Logout</a></li> + </ul> + </nav> + <h1>Welcome, {{ user.username }}!</h1> + <h2>User Dashboard</h2> + <p>Manage your tasks and profile.</p> + <br> + <h2>Upload Files to ML</h2> + {% block content %} + <form method="post"> + {% csrf_token %} + {{form.as_p}} + <input type="submit"> + </form> + {% endblock %} +</body> + +</html> \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/templates/profile.html b/ActualProjectCode/DjangoProject/templates/profile.html index 29f54320..21b2bc99 100644 --- a/ActualProjectCode/DjangoProject/templates/profile.html +++ b/ActualProjectCode/DjangoProject/templates/profile.html @@ -10,16 +10,49 @@ </ul> </nav> <h1>Welcome, {{ user.username }}!</h1> - - {% if user.profile.role == 'ai_engineer' %} + {% if user.profile.role == 'ai_engineer' %} <!-- AI Dashboard --> <h2>AI Engineer Dashboard</h2> <p>Access AI-related tools and data.</p> - {% elif user.profile.role == 'finance' %} + + + + + + {% elif user.profile.role == 'finance' %} <!-- Finance Dashboard --> <h2>Finance Dashboard</h2> <p>View financial reports and tools.</p> - {% else %} + + + + + + {% elif user.profile.role == 'admin' %} <!-- Admin Dashboard --> + <h2>Admin Page</h2> + <p>View all Activity</p> + <p>Manage Users</p> + + + + + + {% else %} <!-- User Dashboard --> <h2>User Dashboard</h2> <p>Manage your tasks and profile.</p> + <br> + <h2>Upload Files to ML</h2> + + <form method="post"> + {% csrf_token %} + {{ form }} + <label for="uploadedFile">File </label> + <input type="file" name="uploadedFile" id="uploadedFile"> + <br> + <input type="submit">Submit + </form> + + + + {% endif %} </body> </html> -- GitLab