Skip to content
Snippets Groups Projects
Commit 4d7314f9 authored by a272-jones's avatar a272-jones
Browse files

admin screen "finished" mostly, can update user roles and delete with an...

admin screen "finished" mostly, can update user roles and delete with an error, idk how to fix ill fix it later.
parent 8e26bf1a
No related branches found
No related tags found
No related merge requests found
Showing
with 224 additions and 110 deletions
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from .models import Record
from . import models
class UserLoginForm(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput)
class UserUploadForm(forms.ModelForm):
username = forms.CharField(max_length=100, widget=forms.HiddenInput)
class Meta:
model = Record
fields = '__all__'
\ No newline at end of file
model = models.Record
fields = ['username', 'uploadedFile','chosenML']
class UploadModelForm(forms.ModelForm):
username = forms.CharField(max_length=100, widget=forms.HiddenInput)
class Meta:
model = models.mlModel
fields = ['username','modelName']
class GenerateBillingsForm(forms.ModelForm):
username = forms.CharField(max_length=100, widget=forms.HiddenInput)
class Meta:
model = models.Billing
fields = ['amount', 'username', 'companyName']
class UpdateUser(forms.ModelForm):
class Meta:
model = models.Profile
fields = ['user', 'role']
\ No newline at end of file
# Generated by Django 5.1.7 on 2025-03-13 15:36
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='user',
fields=[
('userID', models.IntegerField(primary_key=True, serialize=False)),
('username', models.CharField(max_length=100)),
('password', models.CharField(max_length=100)),
('usertypes', models.CharField(max_length=100)),
],
),
]
......@@ -11,10 +11,10 @@ class Profile(models.Model):
class mlModel(models.Model):
modelID = models.AutoField(primary_key=True)
username = models.CharField(max_length=100, default="default")
modelName = models.CharField(max_length=100)
modelName = models.FileField(upload_to="./mlModels/modelName", null=True, blank=True)
def __str__(self):
return self.modelName
return f"{self.username} NEW MODEL ID: {self.modelID} Path: {self.modelName}"
class Interaction(models.Model):
interactionID = models.AutoField(primary_key=True)
......@@ -32,13 +32,14 @@ class Billing(models.Model):
companyName = models.CharField(max_length=100)
def __str__(self):
return f"{self.companyName} - {self.billingID}"
return f"{self.companyName} Billing - ID: {self.billingID}"
class Record(models.Model):
username = models.CharField(max_length=100, default="default")
uploadedFile = models.FileField(upload_to='./records/')
uploadedFile = models.FileField(upload_to='./records/', null=True, blank=True)
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
return f"{self.chosenML} Response to {self.username}"
\ No newline at end of file
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from .models import Profile, mlModel, Billing, Interaction, Record
from .forms import UserLoginForm, UserUploadForm
from .forms import UserLoginForm, UserUploadForm, UploadModelForm, GenerateBillingsForm, UpdateUser
# Registration view
......@@ -35,12 +36,7 @@ def login_view(request):
profile = user.profile
role = profile.role
# Redirect to the correct profile page based on the user's role
if role == 'ai_engineer':
return redirect('ai_dashboard')
elif role == 'finance':
return redirect('finance_dashboard')
else:
return redirect('user_dashboard')
return redirect('profile')
else:
# Handle invalid login
return render(request, 'login.html', {'error': 'Invalid credentials'})
......@@ -48,17 +44,65 @@ def login_view(request):
form = UserLoginForm()
return render(request, 'login.html', {'form': form})
def user_dashboard(request):
return render(request, 'dashboards/user_dashboard.html')
def profile(request):
return render(request, 'profile.html')
def ai_dashboard(request):
return render(request, 'dashboards/ai_dashboard.html')
def userUpload(request):
form = UserUploadForm(initial={'username': request.user.username}) # sets username in form.
if request.method == 'POST':
form = UserUploadForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return redirect('profile')
context = {'form': form}
return render(request, 'modelForms/userUpload.html', context)
def mlUpload(request):
form = UploadModelForm(initial={'username': request.user.username})
if request.method == 'POST':
form = UploadModelForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return redirect('profile')
context = {'form': form}
return render(request, 'modelForms/mlUpload.html', context)
def genBillings(request):
form = GenerateBillingsForm(initial={'username': request.user.username})
if request.method == 'POST':
form = GenerateBillingsForm(request.POST)
if form.is_valid():
form.save()
return redirect('profile')
context = {'form': form}
return render(request, 'modelForms/genBillings.html', context)
def admin_dashboard(request):
return render(request, 'dashboards/admin_dashboard.html')
def manageUsers(request):
profile = Profile.objects.all()
return render(request, 'modelForms/manageUsers.html', {'profile': profile})
def updateUsers(request, id):
user = Profile.objects.get(id=id)
form = UpdateUser(instance=user)
if request.method == 'POST':
form=UpdateUser(request.POST, instance=user)
if form.is_valid():
form.save()
return redirect('profile')
context = {'form': form}
return render(request, 'modelForms/updateUsers.html', context)
def deleteUsers(request, id):
user = Profile.objects.get(id=id)
if request.method == 'POST':
user.delete()
# because of how users are stored, we need to delete from both Profile and User
return('profile')
def finance_dashboard(request):
return render(request, 'dashboards/finance_dashboard.html')
context = {'user': user}
return render(request, 'modelForms/deleteUsers.html', context)
def logout_view(request):
logout(request)
......
# point of this file is do be the driver of a selected ML model / IPYNB file in modelName directory
# This file is planned to be called when a end-user uploads a file.
#
# receive form from main website
# contact model in directory and get response from it - store in variable
# return response by ml back into db.
\ No newline at end of file
......@@ -34,8 +34,12 @@ urlpatterns = [
path('logout/', views.logout_view, name='logout'),
path('login/', views.login_view, name='login'),
path('register/', views.register_view, name='register'),
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'),
path('profile/', views.profile, name="profile"),
path('modelForms/userUpload', views.userUpload, name="userUpload"),
path('modelForms/mlUpload', views.mlUpload, name="mlUpload"),
path('modelForms/genBillings', views.genBillings, name="genBillings"),
path('modelForms/manageUsers/', views.manageUsers, name="manageUsers"),
path('modelForms/updateUsers/<str:id>/', views.updateUsers, name="updateUsers"),
path('modelForms/deleteUsers/<str:id>/', views.deleteUsers, name="deleteUsers"),
]
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>User Dashboard</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>User Dashboard</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<!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
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p> Are you sure you want to delete the account named "{{user.user}}"? </p>
<form action="{% url 'deleteUsers' user.id %}" method="POST">
{% csrf_token %}
<a href="{% url 'manageUsers' %}">Cancel</a>
<input type="submit" name="confirm">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>Billing Page</title>
</head>
<body>
<form action="" method="POST">
{% csrf_token %}
{{ form }}
<input type="submit">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<br>
<p><a href="{% url 'profile' %}">Return to admin profile</a></p>
<br>
<br>
{% for p in profile %}
<p> Username -- {{ p.user }} </p>
<p> Role -- {{ p.role }} </p>
<p><a href="{% url 'updateUsers' p.id %}"> Update </a></p>
<p><a href="{% url 'deleteUsers' p.id %}">Delete </a></p>
<h1>-------------------------------------------------</h1>
{% endfor %}
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>Upload ML Model</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>User Dashboard</title>
</head>
</head>
<body>
</body>
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE HTML>
<html>
<head>
<title>User Upload</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<!-- eventually, this will connect to ML container and fill in responsebyML to an actual response -->
<input type="submit">
</form>
</body>
</html>
\ No newline at end of file
......@@ -13,7 +13,12 @@
{% if user.profile.role == 'ai_engineer' %} <!-- AI Dashboard -->
<h2>AI Engineer Dashboard</h2>
<p>Access AI-related tools and data.</p>
<br>
<h1>Upload new ML Model</h1>
<h2><a href="{% url 'mlUpload' %}">Upload</a></h2>
<br>
<h1>Access Records</h1>
<h2><a href="">All Records</a></h2> <!-- TO DO -->
......@@ -21,7 +26,8 @@
{% elif user.profile.role == 'finance' %} <!-- Finance Dashboard -->
<h2>Finance Dashboard</h2>
<p>View financial reports and tools.</p>
<br>
<h1><a href="{% url 'genBillings' %}">Generate Billings</a></h1>
......@@ -29,7 +35,11 @@
{% elif user.profile.role == 'admin' %} <!-- Admin Dashboard -->
<h2>Admin Page</h2>
<p>View all Activity</p>
<p>Manage Users</p>
<!-- for each record in record db -->
<!-- display -->
<p><a href="{% url 'manageUsers' %}">Manage Users<a></a></p>
<!-- for each user in profile db: -->
......@@ -41,14 +51,7 @@
<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>
<h1><a href="{% url 'userUpload' %}"> Upload Thing </a></h1>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment