Skip to content

Commit

Permalink
Nowy system obsługi prac dyplomowych (#818)
Browse files Browse the repository at this point in the history
Dostarcza nową implementację systemu do obsługi prac dyplomowych. Funkcjonalnie odpowiada ona aktualnie istniejącej w systemie zapisów (chociaż nieznacznie zmienia modele), oprócz tego, że dodaje możliwość drukowania formularzy, które studenci mają dostarczać do dziekanatu.

Różnica między implementacjami polega na wyborze technologii. Tamta implementacja składa się z elementu back-endowego opartego na Django-Rest-Framework oraz z front-endu opartego na React. Ta jest bardziej minimalistyczna i używa wbudowanych w Django mechanizmów (dzięki czemu zamyka się w 1/4 ilości kodu).
  • Loading branch information
barnij committed Apr 17, 2020
1 parent 8861a36 commit ab3f76e
Show file tree
Hide file tree
Showing 111 changed files with 2,011 additions and 8,447 deletions.
10 changes: 2 additions & 8 deletions zapisy/.babelrc
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
"browsers": ["last 2 versions", "ie >= 10"]
},
"modules": false
}],
// Stage 2 polyfills and syntactical transformations
// see https://stackoverflow.com/a/37252259/1928235
"babel-preset-stage-2"
}]
],
"plugins": [
"transform-runtime",
Expand All @@ -21,9 +18,6 @@
"transform": "lodash/${member}",
"preventFullImport": true
}
}],
// Needed to use React in .jsx files; .tsx files are transformed
// by the TypeScript compiler
"transform-react-jsx"
}]
]
}
7 changes: 5 additions & 2 deletions zapisy/apps/notifications/custom_signals.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import django.dispatch

student_pulled = django.dispatch.Signal(providing_args=["instance", "user"])
student_not_pulled = django.dispatch.Signal(providing_args=["instance", "user", "reason"])
teacher_changed = django.dispatch.Signal(providing_args=["instance", "teacher"])
student_not_pulled = django.dispatch.Signal(
providing_args=["instance", "user", "reason"])
teacher_changed = django.dispatch.Signal(
providing_args=["instance", "teacher"])
thesis_voting_activated = django.dispatch.Signal(providing_args=["instance"])
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.1.13 on 2020-02-27 02:24

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('notifications', '0005_auto_20190929_1436'),
]

operations = [
migrations.AddField(
model_name='notificationpreferencesteacher',
name='thesis_voting_has_been_activated',
field=models.BooleanField(default=True, verbose_name='Powiadomienie o głosowaniu na pracę dyplomową (dotyczy Komisji Prac Dyplomowych)'),
),
]
20 changes: 14 additions & 6 deletions zapisy/apps/notifications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@


class NotificationPreferencesStudent(models.Model):
user = models.ForeignKey(User, verbose_name="użytkownik", on_delete=models.CASCADE)
pulled_from_queue = models.BooleanField("Zapisanie Cię do grupy", default=False)
user = models.ForeignKey(
User, verbose_name="użytkownik", on_delete=models.CASCADE)
pulled_from_queue = models.BooleanField(
"Zapisanie Cię do grupy", default=False)
not_pulled_from_queue = models.BooleanField("Niepowodzenie wciągnięcia Cię do grupy",
default=False)
added_new_group = models.BooleanField(
Expand All @@ -13,10 +15,16 @@ class NotificationPreferencesStudent(models.Model):
"Zmiana prowadzącego grupy, do której jesteś zapisany/a", default=True)
teacher_has_been_changed_queued = models.BooleanField(
"Zmiana prowadzącego grupy, do której czekasz w kolejce", default=True)
news_has_been_added = models.BooleanField("Nowa wiadomość w Aktualnościach", default=True)
news_has_been_added = models.BooleanField(
"Nowa wiadomość w Aktualnościach", default=True)


class NotificationPreferencesTeacher(models.Model):
user = models.ForeignKey(User, verbose_name='użytkownik', on_delete=models.CASCADE)
assigned_to_new_group_as_teacher = models.BooleanField("Przydzielenie do grupy", default=True)
news_has_been_added = models.BooleanField("Nowa wiadomość w Aktualnościach", default=True)
user = models.ForeignKey(
User, verbose_name='użytkownik', on_delete=models.CASCADE)
assigned_to_new_group_as_teacher = models.BooleanField(
"Przydzielenie do grupy", default=True)
news_has_been_added = models.BooleanField(
"Nowa wiadomość w Aktualnościach", default=True)
thesis_voting_has_been_activated = models.BooleanField(
"Powiadomienie o głosowaniu (dotyczy członka Komisji Prac Dyplomowych)", default=True)
23 changes: 22 additions & 1 deletion zapisy/apps/notifications/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@
from apps.enrollment.courses.views import course_view
from apps.enrollment.records.models import Record, RecordStatus
from apps.news.models import News
from apps.theses.models import Thesis
from apps.theses.users import get_theses_board
from apps.theses.enums import ThesisVote
from apps.theses.views import view_thesis
from apps.notifications.api import notify_user, notify_selected_users
from apps.notifications.custom_signals import teacher_changed, student_pulled, student_not_pulled
from apps.notifications.custom_signals import teacher_changed, student_pulled, student_not_pulled, thesis_voting_activated
from apps.notifications.templates import NotificationType


Expand Down Expand Up @@ -147,3 +151,20 @@ def notify_that_news_was_added(sender: News, **kwargs) -> None:
'title': news.title,
'contents': news.body
}, target))


@receiver(thesis_voting_activated, sender=Thesis)
def notify_board_members_about_voting(sender: Thesis, **kwargs) -> None:
thesis = kwargs['instance']

all_voters = get_theses_board()
accepting_voters = [v.owner for v in thesis.thesis_votes.all() if v.vote == ThesisVote.ACCEPTED]
users = [voter.user for voter in all_voters if voter not in accepting_voters]
target = reverse('theses:selected_thesis', args=[thesis.id])

notify_selected_users(
users,
Notification(get_id(), get_time(),
NotificationType.THESIS_VOTING_HAS_BEEN_ACTIVATED, {
'title': thesis.title
}, target))
3 changes: 3 additions & 0 deletions zapisy/apps/notifications/templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class NotificationType(str, Enum):
TEACHER_HAS_BEEN_CHANGED_ENROLLED = 'teacher_has_been_changed_enrolled'
TEACHER_HAS_BEEN_CHANGED_QUEUED = 'teacher_has_been_changed_queued'
NEWS_HAS_BEEN_ADDED = 'news_has_been_added'
THESIS_VOTING_HAS_BEEN_ACTIVATED = 'thesis_voting_has_been_activated'


mapping = {
Expand All @@ -31,4 +32,6 @@ class NotificationType(str, Enum):
NotificationType.NEWS_HAS_BEEN_ADDED:
"Dodano nową wiadomość w aktualnościach: {title}\n"
"{contents}",
NotificationType.THESIS_VOTING_HAS_BEEN_ACTIVATED:
'W pracy dyplomowej "{title}" pojawiła się możliwość głosowania.',
}
24 changes: 18 additions & 6 deletions zapisy/apps/theses/admin.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
from django.contrib import admin
from django import forms

from . import models
from .forms import ThesisForm
from apps.theses.forms import ThesisFormAdmin, RemarkFormAdmin, VoteFormAdmin
from apps.theses.models import Thesis, Remark, Vote, ThesesSystemSettings


class ThesisAdmin(admin.ModelAdmin):
autocomplete_fields = ['advisor', 'supporting_advisor']
form = ThesisForm
autocomplete_fields = []
list_display = ('title', 'kind', 'status', 'added')
form = ThesisFormAdmin


admin.site.register(models.Thesis, ThesisAdmin)
class RemarkAdmin(admin.ModelAdmin):
autocomplete_fields = []
form = RemarkFormAdmin


class VoteAdmin(admin.ModelAdmin):
autocomplete_fields = []
form = VoteFormAdmin


class ThesesSystemSettingsAdmin(admin.ModelAdmin):
Expand All @@ -24,4 +33,7 @@ def has_delete_permission(self, request, obj=None):
return False


admin.site.register(models.ThesesSystemSettings, ThesesSystemSettingsAdmin)
admin.site.register(Thesis, ThesisAdmin)
admin.site.register(Remark, RemarkAdmin)
admin.site.register(Vote, VoteAdmin)
admin.site.register(ThesesSystemSettings, ThesesSystemSettingsAdmin)
6 changes: 0 additions & 6 deletions zapisy/apps/theses/apps.py

This file was deleted.

8 changes: 3 additions & 5 deletions zapisy/apps/theses/asset-defs.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
export default {
bundles: {
"main": [
"theses-main.tsx",
],
},
bundles: {
"theses-widget": ["theses-widget.js"]
}
};
18 changes: 0 additions & 18 deletions zapisy/apps/theses/assets/app_logic/app_mode.ts

This file was deleted.

Loading

0 comments on commit ab3f76e

Please sign in to comment.