Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion ephios_submit_qualifications/forms.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
from django.utils.translation import gettext_lazy as _
from django import forms
from ephios.core.models import Qualification
from .models import QualificationRequest, QualificationDefaultExpirationTime
from .models import (
QualificationRequest,
QualificationDefaultExpirationTime,
)

class QualificationSubmitForm(forms.ModelForm):
qualification = forms.ModelChoiceField(
Expand Down
3 changes: 1 addition & 2 deletions ephios_submit_qualifications/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
from django.db import models
from django.conf import settings
from ephios.core.models import Qualification
from logging import getLogger
import os

class QualificationRequest(models.Model):
user = models.ForeignKey(
Expand Down Expand Up @@ -30,6 +28,7 @@ class Meta:
("add_qualification_request", "Can add qualification requests"),
("manage_qualification_requests", "Can manage qualification requests"),
("manage_own_qualification_requests", "Can manage own qualification requests"),
("get_notifications_for_new_qualification_requests", "Can get Notifications for new Qualification Request if Subscribed"),
]

def __str__(self):
Expand Down
44 changes: 43 additions & 1 deletion ephios_submit_qualifications/notifications.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ def register_notifications(sender, **kwargs):
return [
QualificationRequestAcceptedNotification,
QualificationRequestRejectedNotification,
QualificationRequestCreateNotification,
]

class QualificationRequestAcceptedNotification(AbstractNotificationHandler):
Expand Down Expand Up @@ -100,4 +101,45 @@ def as_html(cls, notification):

@classmethod
def get_url(cls, notification):
return reverse("core:settings_personal_data")
return reverse("core:settings_personal_data")

class QualificationRequestCreateNotification(AbstractNotificationHandler):
slug = "qualification_request_created"
title = _("Qualification Request Created")

@classmethod
def send(cls, user, qualification_request):
Notification.objects.create(
slug=cls.slug,
user=user,
data={
"username": qualification_request.user.get_full_name() or _('Unknown Username'),
},
)

@classmethod
def get_subject(cls, notification):
return _("Qualification Request Created")

@classmethod
def get_body(cls, notification):
base_text = _(
"{username} created a new qualification request."
).format(
username=notification.data.get('username', _('Unknown Username')),
)
return base_text

@classmethod
def as_html(cls, notification):
return """
<p><strong>{subject}</strong></p>
<p>{body}</p>
""".format(
subject=cls.get_subject(notification),
body=cls.get_body(notification),
)

@classmethod
def get_url(cls, notification):
return reverse("ephios_submit_qualifications:qualification_requests")
3 changes: 2 additions & 1 deletion ephios_submit_qualifications/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def add_navigation_item(sender, request, **kwargs):
def register_permission_fields(sender, **kwargs):
return [
(
"submit_qualification_requests",
"add_qualification_requests",
PermissionField(
label=_("Submit Qualification Requests"),
help_text=_("Allows to submit qualification requests."),
Expand All @@ -69,6 +69,7 @@ def register_permission_fields(sender, **kwargs):
"ephios_submit_qualifications.view_qualification_requests",
"ephios_submit_qualifications.view_qualification_request_details",
"ephios_submit_qualifications.manage_qualification_requests",
"ephios_submit_qualifications.get_notifications_for_new_qualification_requests",
],
),
),
Expand Down
4 changes: 2 additions & 2 deletions ephios_submit_qualifications/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.urls import path
from .views import (
OwnQualificationRequestView,
QualificationSubmitView,
QualificationRequestAddView,
QualificationRequestsView,
QualificationRequestDetailView,
qualification_request_image,
Expand All @@ -21,7 +21,7 @@
),
path(
"settings/qualifications/own/submit/",
QualificationSubmitView.as_view(),
QualificationRequestAddView.as_view(),
name="qualification_submit_form",
),
path(
Expand Down
17 changes: 12 additions & 5 deletions ephios_submit_qualifications/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@
from django.shortcuts import get_object_or_404
from django.views.generic import FormView, TemplateView
from django.urls import reverse_lazy
from ephios.core.models import QualificationGrant
from ephios.core.models import UserProfile, QualificationGrant
from .forms import (
QualificationSubmitForm,
QualificationDetailForm,
QualificationDefaultExpirationTimeAddForm,
QualificationDefaultExpirationTimeDetailForm
QualificationDefaultExpirationTimeDetailForm,
)
from .models import (
QualificationRequest,
QualificationDefaultExpirationTime
QualificationDefaultExpirationTime,
)
from .notifications import (
QualificationRequestAcceptedNotification,
QualificationRequestRejectedNotification,
QualificationRequestCreateNotification,
)

class OwnQualificationRequestView(LoginRequiredMixin, TemplateView):
Expand All @@ -48,7 +49,7 @@ def get_context_data(self, **kwargs):
context['can_submit'] = self.request.user.has_perm('ephios_submit_qualifications.add_qualification_request')
return context

class QualificationSubmitView(LoginRequiredMixin, FormView):
class QualificationRequestAddView(LoginRequiredMixin, FormView):
template_name = "ephios_submit_qualifications/qualification_requests/add_form.html"
form_class = QualificationSubmitForm
success_url = reverse_lazy("ephios_submit_qualifications:own_qualification_requests")
Expand All @@ -75,14 +76,18 @@ def form_valid(self, form):
image_data = None
image_content_type = None

QualificationRequest.objects.create(
qualification_request = QualificationRequest.objects.create(
user=self.request.user,
qualification=form.cleaned_data['qualification'],
qualification_date=form.cleaned_data['qualification_date'],
image_data=image_data,
image_content_type=image_content_type
)

for user in UserProfile.objects.all():
if user.has_perm('ephios_submit_qualifications.get_notifications_for_new_qualification_requests'):
QualificationRequestCreateNotification.send(user, qualification_request)

return super().form_valid(form)

class QualificationRequestsView(LoginRequiredMixin, TemplateView):
Expand All @@ -104,6 +109,7 @@ def get_initial(self):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['qualification_requests'] = QualificationRequest.objects.all()
context['can_subscribe'] = self.request.user.has_perm('ephios_submit_qualifications.get_notifications_for_new_qualification_requests')
return context

class QualificationRequestDetailView(LoginRequiredMixin, FormView):
Expand Down Expand Up @@ -199,6 +205,7 @@ def qualification_request_image(request, pk):
content_type=qr.image_content_type or 'application/octet-stream'
)


class QualificationDefaultExpirationTimeListView(LoginRequiredMixin, TemplateView):
template_name = "ephios_submit_qualifications/qualification_default_expiration_time/list.html"

Expand Down