-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathviews.py
153 lines (122 loc) · 5.67 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import datetime
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect
from django.utils import timezone
from django.utils.translation import gettext as _
from apps.approval.forms import FieldOfStudyApplicationForm
from apps.approval.models import MembershipApproval
from apps.authentication.models import get_length_of_membership
@login_required
def create_fos_application(request):
if request.method == "POST":
if not request.user.ntnu_username:
messages.error(
request, _("Du må knytte et NTNU-brukernavn til kontoen din.")
)
return redirect("profiles_active", active_tab="membership")
form = FieldOfStudyApplicationForm(request.POST, request.FILES)
if form.is_valid():
cleaned = form.cleaned_data
field_of_study = int(cleaned["field_of_study"])
if field_of_study == 0:
messages.warning(
request,
_("Denne studieretningen (Gjest) er ikke et gyldig alternativ."),
)
return redirect("profiles_active", active_tab="membership")
started_day = 1
started_month = 0
started_year = int(cleaned["started_year"])
if cleaned["started_semester"] == "h":
started_month = 7
if cleaned["started_semester"] == "v":
started_month = 1
started_date = datetime.date(started_year, started_month, started_day)
# Does the user already have a field of study and started date?
if request.user.started_date and request.user.field_of_study:
# If there is no change from the current settings, ignore the
# request
if (
request.user.started_date == started_date
and request.user.field_of_study == field_of_study
):
messages.error(
request,
_(
"Du er allerede registrert med denne studieretningen og denne startdatoen."
),
)
return redirect("profiles_active", active_tab="membership")
documentation = cleaned["documentation"]
application = MembershipApproval(
applicant=request.user,
field_of_study=field_of_study,
started_date=started_date,
documentation=documentation,
)
length_of_fos = get_length_of_membership(field_of_study)
if length_of_fos > 0:
application.new_expiry_date = get_expiry_date(
started_year, length_of_fos
)
application.save()
messages.success(request, _("Søknad om bytte av studieretning er sendt."))
return redirect("profiles_active", active_tab="membership")
raise Http404
def get_expiry_date(started_year, length_of_fos):
today = timezone.now().date()
# Expiry dates should be 15th September, so that we have time to get new
# lists from NTNU
new_expiry_date = datetime.date(started_year, 9, 16) + datetime.timedelta(
days=365 * length_of_fos
)
# Expiry dates in the past sets the expiry date to next september
if new_expiry_date < today:
if today < datetime.date(today.year, 9, 15):
new_expiry_date = datetime.date(today.year, 9, 15)
else:
new_expiry_date = datetime.date(today.year, 9, 16) + datetime.timedelta(
days=365
)
return new_expiry_date
@login_required
def create_membership_application(request):
if request.method == "POST":
if not request.user.has_expiring_membership:
messages.error(request, _("Din bruker har ikke et utløpende medlemskap."))
return redirect("profiles_active", active_tab="membership")
if not request.user.ntnu_username:
messages.error(
request, _("Du må knytte et NTNU-brukernavn til kontoen din.")
)
return redirect("profiles_active", active_tab="membership")
# Grant membership until 16th of September this year if the request was sent previous to 1st of July,
# or until 16th of September next year if the request was sent after 1st of July
if timezone.now().date().month < 7:
new_expiration_date = datetime.date(timezone.now().year, 9, 16)
else:
new_expiration_date = datetime.date(
timezone.now().year, 9, 16
) + datetime.timedelta(days=365)
application = MembershipApproval(
applicant=request.user,
field_of_study=request.user.field_of_study,
new_expiry_date=new_expiration_date,
)
application.save()
messages.success(request, _("Søknad om ett års forlenget medlemskap er sendt."))
return redirect("profiles_active", active_tab="membership")
raise Http404
@login_required
def cancel_application(request, application_id):
app = get_object_or_404(MembershipApproval, pk=application_id)
if app.applicant != request.user:
messages.error(request, _("Bare søkeren selv kan slette en søknad."))
return redirect("profiles_active", active_tab="membership")
if app.processed:
messages.error(request, _("Denne søknaden er behandlet og kan ikke slettes."))
return redirect("profiles_active", active_tab="membership")
app.delete()
return redirect("profiles_active", active_tab="membership")