Skip to content
Snippets Groups Projects
Commit 866776b9 authored by Odin Johan Vatne's avatar Odin Johan Vatne
Browse files

Final touches for paper release branch

parent 29de1797
No related branches found
No related tags found
No related merge requests found
Pipeline #169672 failed
...@@ -7,3 +7,4 @@ admin.site.register(Project) ...@@ -7,3 +7,4 @@ admin.site.register(Project)
admin.site.register(Application) admin.site.register(Application)
admin.site.register(Tag) admin.site.register(Tag)
admin.site.register(ProjectTag) admin.site.register(ProjectTag)
admin.site.register(TagCategory)
# Generated by Django 3.2.9 on 2021-12-14 17:20
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('pasapp', '0005_application_priority'),
]
operations = [
migrations.CreateModel(
name='TagCategory',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('category', models.CharField(max_length=128)),
('color', models.CharField(max_length=6)),
],
),
migrations.AddField(
model_name='tag',
name='category',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='pasapp.tagcategory'),
),
]
# Generated by Django 3.2.9 on 2021-12-15 00:14
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('pasapp', '0006_auto_20211214_1820'),
]
operations = [
migrations.RenameField(
model_name='application',
old_name='date_sent',
new_name='date_created',
),
migrations.RemoveField(
model_name='tagcategory',
name='color',
),
migrations.AddField(
model_name='application',
name='last_updated',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='application',
name='professor_status',
field=models.CharField(default='Pending', max_length=32),
preserve_default=False,
),
migrations.AddField(
model_name='application',
name='student_status',
field=models.CharField(default='Pending', max_length=32),
preserve_default=False,
),
migrations.AddField(
model_name='project',
name='date_created',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='project',
name='group_size',
field=models.CharField(default=2, max_length=128),
preserve_default=False,
),
migrations.AddField(
model_name='project',
name='last_updated',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='tag',
name='class_ids',
field=models.CharField(blank=True, default=None, max_length=256, null=True),
),
migrations.AlterField(
model_name='tag',
name='category',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pasapp.tagcategory'),
),
migrations.CreateModel(
name='StudentTag',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pasapp.tag')),
],
),
]
from django.conf import settings
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
# Create your models here.
class Project(models.Model): class Project(models.Model):
title = models.CharField(max_length=200) title = models.CharField(max_length=200)
professor = models.ForeignKey(User, on_delete=models.CASCADE) professor = models.ForeignKey(User, on_delete=models.CASCADE)
description = models.CharField(max_length=2048) description = models.CharField(max_length=2048)
group_size = models.CharField(max_length=128) # TODO: Not implemented
status = models.CharField(max_length=128) status = models.CharField(max_length=128)
date_created = models.DateTimeField(
auto_now_add=True, name='date_created') # TODO: Not implemented
last_updated = models.DateTimeField(
auto_now_add=True, name='last_updated') # TODO: Not implemented
# Tags - see ProjectTag below # Tags - see ProjectTag below
def __str__(self): def __str__(self):
...@@ -20,15 +22,30 @@ class Application(models.Model): ...@@ -20,15 +22,30 @@ class Application(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE)
student = models.ForeignKey(User, on_delete=models.CASCADE) student = models.ForeignKey(User, on_delete=models.CASCADE)
message = models.CharField(max_length=2000) message = models.CharField(max_length=2000)
date = models.DateTimeField(auto_now_add=True, name='date_sent') date_created = models.DateTimeField(auto_now_add=True, name='date_created')
last_updated = models.DateTimeField(
auto_now_add=True, name='last_updated') # TODO: Not implemented
priority = models.IntegerField(default=None, blank=True, null=True) priority = models.IntegerField(default=None, blank=True, null=True)
professor_status = models.CharField(max_length=32) # TODO: Not implemented
student_status = models.CharField(max_length=32) # TODO: Not implemented
def __str__(self): def __str__(self):
return f'{self.student} on {self.project}' return f'{self.student} on {self.project}'
class TagCategory(models.Model):
category = models.CharField(max_length=128)
def __str__(self):
return self.category
class Tag(models.Model): class Tag(models.Model):
name = models.CharField(max_length=256, unique=True) name = models.CharField(max_length=256, unique=True)
category = models.ForeignKey(
TagCategory, on_delete=models.SET_NULL, blank=True, null=True, default=None)
class_ids = models.CharField(
max_length=256, blank=True, null=True, default=None) # TODO: not implemented
def __str__(self): def __str__(self):
return self.name return self.name
...@@ -40,3 +57,12 @@ class ProjectTag(models.Model): ...@@ -40,3 +57,12 @@ class ProjectTag(models.Model):
def __str__(self): def __str__(self):
return f'{self.project.title}: {self.tag.name}' return f'{self.project.title}: {self.tag.name}'
class StudentTag(models.Model):
# TODO: not implemented
student = models.ForeignKey(User, on_delete=models.CASCADE)
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
def __str__(self):
return f'{self.student.first_name} {self.student.last_name}: {self.tag.name}'
...@@ -34,9 +34,7 @@ ...@@ -34,9 +34,7 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
<div class="messagebox {{message_type}}"> <div class="messagebox {{message_type}}">{{message}}</div>
{{message}}
</div>
{% block content %} {% endblock %} {% block content %} {% endblock %}
</body> </body>
</html> </html>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<ul> <ul>
{% for application in applications %} {% for application in applications %}
<li class="dashed-box"> <li class="dashed-box">
<b>{{application.student.first_name}} {{application.student.last_name}}</b> on {{application.date_sent}} <b>{{application.student.first_name}} {{application.student.last_name}}</b> on {{application.date_created}}
<br> <br>
{% if application.priority %} {% if application.priority %}
<em>Priority: </em> {{application.priority}} <em>Priority: </em> {{application.priority}}
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<ul> <ul>
{% for application in applications %} {% for application in applications %}
<li> <li>
{{application.student}} on {{application.date_sent}} {{application.student}} on {{application.date_created}}
<br /> <br />
{{application.message}} {{application.message}}
</li> </li>
......
...@@ -102,7 +102,7 @@ def project_applications(request, project_id): ...@@ -102,7 +102,7 @@ def project_applications(request, project_id):
if not request.user.id == project.professor.id: if not request.user.id == project.professor.id:
return HttpResponseForbidden() return HttpResponseForbidden()
applications = Application.objects.filter( applications = Application.objects.filter(
project=project_id).order_by('-date_sent') project=project_id).order_by('-date_created')
context = {'project': project, 'applications': applications} context = {'project': project, 'applications': applications}
return render(request, 'pasapp/project_applications.html', contextWithHeader(context, request)) return render(request, 'pasapp/project_applications.html', contextWithHeader(context, request))
...@@ -191,7 +191,7 @@ def student_applications_view(request): ...@@ -191,7 +191,7 @@ def student_applications_view(request):
Displays all of the student's project applications and allows them to set rankings (see update_priorities below) Displays all of the student's project applications and allows them to set rankings (see update_priorities below)
''' '''
applications = Application.objects.filter(student=request.user).order_by( applications = Application.objects.filter(student=request.user).order_by(
F('priority').asc(nulls_last=True), '-date_sent') F('priority').asc(nulls_last=True), '-date_created')
context = {'applications': applications} context = {'applications': applications}
return render(request, 'pasapp/student_applications.html', contextWithHeader(context, request)) return render(request, 'pasapp/student_applications.html', contextWithHeader(context, request))
...@@ -202,11 +202,13 @@ def professor_applications_view(request): ...@@ -202,11 +202,13 @@ def professor_applications_view(request):
''' '''
projects = Project.objects.filter(professor=request.user) projects = Project.objects.filter(professor=request.user)
sections = {project: Application.objects.filter( sections = {project: Application.objects.filter(
project=project).order_by('-date_sent') for project in projects} project=project).order_by('-date_created') for project in projects}
context = {'sections': sections} context = {'sections': sections}
return render(request, 'pasapp/professor_applications.html', contextWithHeader(context, request)) return render(request, 'pasapp/professor_applications.html', contextWithHeader(context, request))
@login_required
@user_passes_test(is_student)
def update_priorities(request): def update_priorities(request):
''' '''
Endpoint for updating the priority values of a student's applications. POST only. Endpoint for updating the priority values of a student's applications. POST only.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment