We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Users applying for membership changes with field of study gets expiredate in the past
If you apply for membership today with a Bachelor started in 2011, you will get an expiry date of 2014-09-16.

The given expiration date for a membership should be adjusted upward if the suggested duration of a field of study puts this date in the past.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `apps/approval/views.py`
Content:
```
1 # -*- encoding: utf-8 -*-
2 
3 import datetime
4 
5 from django.contrib import messages
6 from django.contrib.auth.decorators import login_required
7 from django.http import Http404
8 from django.shortcuts import get_object_or_404, redirect
9 from django.utils.translation import ugettext as _
10 
11 from apps.approval.forms import FieldOfStudyApplicationForm
12 from apps.approval.models import MembershipApproval
13 from apps.authentication.models import AllowedUsername, get_length_of_field_of_study
14 
15 
16 @login_required
17 def create_fos_application(request):
18     if request.method == 'POST':
19         if not request.user.ntnu_username:
20             messages.error(request, _("Du må knytte et NTNU-brukernavn til kontoen din."))
21             return redirect('profiles_active', active_tab='membership')
22 
23         form = FieldOfStudyApplicationForm(request.POST)
24         if form.is_valid():
25             cleaned = form.cleaned_data
26 
27             field_of_study = int(cleaned['field_of_study'])
28 
29             if field_of_study == 0:
30                 messages.warning(request, _("Denne studieretningen (Gjest) er ikke et gyldig alternativ."))
31                 return redirect('profiles_active', active_tab='membership')
32 
33             started_day = 1
34             started_month = 0
35             started_year = int(cleaned['started_year'])
36 
37             if cleaned['started_semester'] == "h":
38                 started_month = 7
39             if cleaned['started_semester'] == "v":
40                 started_month = 1
41 
42             started_date = datetime.date(started_year, started_month, started_day)
43 
44             # Does the user already have a field of study and started date?
45             if request.user.started_date and request.user.field_of_study:
46                 # If there is no change from the current settings, ignore the request
47                 if request.user.started_date == started_date and request.user.field_of_study == field_of_study:
48                     messages.error(
49                         request,
50                         _("Du er allerede registrert med denne studieretningen og denne startdatoen.")
51                     )
52                     return redirect('profiles_active', active_tab='membership')
53 
54             application = MembershipApproval(
55                 applicant=request.user,
56                 field_of_study=field_of_study,
57                 started_date=started_date
58             )
59 
60             length_of_fos = get_length_of_field_of_study(field_of_study)
61             if length_of_fos > 0:
62                 # Expiry dates should be 15th September, so that we have tiem to get new lists from NTNU
63                 application.new_expiry_date = datetime.date(
64                     started_year, 9, 16) + datetime.timedelta(days=365*length_of_fos)
65             application.save()
66 
67             messages.success(request, _("Søknad om bytte av studieretning er sendt."))
68 
69         return redirect('profiles_active', active_tab='membership')
70     raise Http404
71 
72 
73 @login_required
74 def create_membership_application(request):
75     if request.method == 'POST':
76         if not request.user.has_expiring_membership:
77             messages.error(request, _("Din bruker har ikke et utløpende medlemskap."))
78             return redirect('profiles_active', active_tab='membership')
79 
80         if not request.user.ntnu_username:
81             messages.error(request, _("Du må knytte et NTNU-brukernavn til kontoen din."))
82             return redirect('profiles_active', active_tab='membership')
83 
84         # Extend length of membership by 1 year
85         membership = AllowedUsername.objects.get(username=request.user.ntnu_username)
86         new_expiration_date = datetime.date(membership.expiration_date.year + 1, 9, 16)
87 
88         application = MembershipApproval(
89             applicant=request.user,
90             new_expiry_date=new_expiration_date,
91         )
92         application.save()
93 
94         messages.success(request, _("Søknad om ett års forlenget medlemskap er sendt."))
95 
96         return redirect('profiles_active', active_tab='membership')
97     raise Http404
98 
99 
100 @login_required
101 def cancel_application(request, application_id):
102     app = get_object_or_404(MembershipApproval, pk=application_id)
103 
104     if app.applicant != request.user:
105         messages.error(request, _("Bare søkeren selv kan slette en søknad."))
106         return redirect('profiles_active', active_tab='membership')
107 
108     if app.processed:
109         messages.error(request, _("Denne søknaden er behandlet og kan ikke slettes."))
110         return redirect('profiles_active', active_tab='membership')
111 
112     app.delete()
113 
114     return redirect('profiles_active', active_tab='membership')
115
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/apps/approval/views.py b/apps/approval/views.py
--- a/apps/approval/views.py
+++ b/apps/approval/views.py
@@ -6,6 +6,7 @@
 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 ugettext as _
 
 from apps.approval.forms import FieldOfStudyApplicationForm
@@ -59,9 +60,7 @@
 
             length_of_fos = get_length_of_field_of_study(field_of_study)
             if length_of_fos > 0:
-                # Expiry dates should be 15th September, so that we have tiem to get new lists from NTNU
-                application.new_expiry_date = datetime.date(
-                    started_year, 9, 16) + datetime.timedelta(days=365*length_of_fos)
+                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."))
@@ -70,6 +69,21 @@
     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':

{"golden_diff": "diff --git a/apps/approval/views.py b/apps/approval/views.py\n--- a/apps/approval/views.py\n+++ b/apps/approval/views.py\n@@ -6,6 +6,7 @@\n from django.contrib.auth.decorators import login_required\n from django.http import Http404\n from django.shortcuts import get_object_or_404, redirect\n+from django.utils import timezone\n from django.utils.translation import ugettext as _\n \n from apps.approval.forms import FieldOfStudyApplicationForm\n@@ -59,9 +60,7 @@\n \n             length_of_fos = get_length_of_field_of_study(field_of_study)\n             if length_of_fos > 0:\n-                # Expiry dates should be 15th September, so that we have tiem to get new lists from NTNU\n-                application.new_expiry_date = datetime.date(\n-                    started_year, 9, 16) + datetime.timedelta(days=365*length_of_fos)\n+                application.new_expiry_date = get_expiry_date(started_year, length_of_fos)\n             application.save()\n \n             messages.success(request, _(\"S\u00f8knad om bytte av studieretning er sendt.\"))\n@@ -70,6 +69,21 @@\n     raise Http404\n \n \n+def get_expiry_date(started_year, length_of_fos):\n+    today = timezone.now().date()\n+    # Expiry dates should be 15th September, so that we have time to get new lists from NTNU\n+    new_expiry_date = datetime.date(\n+        started_year, 9, 16) + datetime.timedelta(days=365*length_of_fos)\n+    # Expiry dates in the past sets the expiry date to next september\n+    if new_expiry_date < today:\n+        if today < datetime.date(today.year, 9, 15):\n+            new_expiry_date = datetime.date(today.year, 9, 15)\n+        else:\n+            new_expiry_date = datetime.date(\n+                today.year, 9, 16) + datetime.timedelta(days=365)\n+    return new_expiry_date\n+\n+\n @login_required\n def create_membership_application(request):\n     if request.method == 'POST':\n", "issue": "Users applying for membership changes with field of study gets expiredate in the past\nIf you apply for membership today with a Bachelor started in 2011, you will get an expiry date of 2014-09-16.\n\nThe given expiration date for a membership should be adjusted upward if the suggested duration of a field of study puts this date in the past.\n\n", "before_files": [{"content": "# -*- encoding: utf-8 -*-\n\nimport datetime\n\nfrom django.contrib import messages\nfrom django.contrib.auth.decorators import login_required\nfrom django.http import Http404\nfrom django.shortcuts import get_object_or_404, redirect\nfrom django.utils.translation import ugettext as _\n\nfrom apps.approval.forms import FieldOfStudyApplicationForm\nfrom apps.approval.models import MembershipApproval\nfrom apps.authentication.models import AllowedUsername, get_length_of_field_of_study\n\n\n@login_required\ndef create_fos_application(request):\n    if request.method == 'POST':\n        if not request.user.ntnu_username:\n            messages.error(request, _(\"Du m\u00e5 knytte et NTNU-brukernavn til kontoen din.\"))\n            return redirect('profiles_active', active_tab='membership')\n\n        form = FieldOfStudyApplicationForm(request.POST)\n        if form.is_valid():\n            cleaned = form.cleaned_data\n\n            field_of_study = int(cleaned['field_of_study'])\n\n            if field_of_study == 0:\n                messages.warning(request, _(\"Denne studieretningen (Gjest) er ikke et gyldig alternativ.\"))\n                return redirect('profiles_active', active_tab='membership')\n\n            started_day = 1\n            started_month = 0\n            started_year = int(cleaned['started_year'])\n\n            if cleaned['started_semester'] == \"h\":\n                started_month = 7\n            if cleaned['started_semester'] == \"v\":\n                started_month = 1\n\n            started_date = datetime.date(started_year, started_month, started_day)\n\n            # Does the user already have a field of study and started date?\n            if request.user.started_date and request.user.field_of_study:\n                # If there is no change from the current settings, ignore the request\n                if request.user.started_date == started_date and request.user.field_of_study == field_of_study:\n                    messages.error(\n                        request,\n                        _(\"Du er allerede registrert med denne studieretningen og denne startdatoen.\")\n                    )\n                    return redirect('profiles_active', active_tab='membership')\n\n            application = MembershipApproval(\n                applicant=request.user,\n                field_of_study=field_of_study,\n                started_date=started_date\n            )\n\n            length_of_fos = get_length_of_field_of_study(field_of_study)\n            if length_of_fos > 0:\n                # Expiry dates should be 15th September, so that we have tiem to get new lists from NTNU\n                application.new_expiry_date = datetime.date(\n                    started_year, 9, 16) + datetime.timedelta(days=365*length_of_fos)\n            application.save()\n\n            messages.success(request, _(\"S\u00f8knad om bytte av studieretning er sendt.\"))\n\n        return redirect('profiles_active', active_tab='membership')\n    raise Http404\n\n\n@login_required\ndef create_membership_application(request):\n    if request.method == 'POST':\n        if not request.user.has_expiring_membership:\n            messages.error(request, _(\"Din bruker har ikke et utl\u00f8pende medlemskap.\"))\n            return redirect('profiles_active', active_tab='membership')\n\n        if not request.user.ntnu_username:\n            messages.error(request, _(\"Du m\u00e5 knytte et NTNU-brukernavn til kontoen din.\"))\n            return redirect('profiles_active', active_tab='membership')\n\n        # Extend length of membership by 1 year\n        membership = AllowedUsername.objects.get(username=request.user.ntnu_username)\n        new_expiration_date = datetime.date(membership.expiration_date.year + 1, 9, 16)\n\n        application = MembershipApproval(\n            applicant=request.user,\n            new_expiry_date=new_expiration_date,\n        )\n        application.save()\n\n        messages.success(request, _(\"S\u00f8knad om ett \u00e5rs forlenget medlemskap er sendt.\"))\n\n        return redirect('profiles_active', active_tab='membership')\n    raise Http404\n\n\n@login_required\ndef cancel_application(request, application_id):\n    app = get_object_or_404(MembershipApproval, pk=application_id)\n\n    if app.applicant != request.user:\n        messages.error(request, _(\"Bare s\u00f8keren selv kan slette en s\u00f8knad.\"))\n        return redirect('profiles_active', active_tab='membership')\n\n    if app.processed:\n        messages.error(request, _(\"Denne s\u00f8knaden er behandlet og kan ikke slettes.\"))\n        return redirect('profiles_active', active_tab='membership')\n\n    app.delete()\n\n    return redirect('profiles_active', active_tab='membership')\n", "path": "apps/approval/views.py"}], "after_files": [{"content": "# -*- encoding: utf-8 -*-\n\nimport datetime\n\nfrom django.contrib import messages\nfrom django.contrib.auth.decorators import login_required\nfrom django.http import Http404\nfrom django.shortcuts import get_object_or_404, redirect\nfrom django.utils import timezone\nfrom django.utils.translation import ugettext as _\n\nfrom apps.approval.forms import FieldOfStudyApplicationForm\nfrom apps.approval.models import MembershipApproval\nfrom apps.authentication.models import AllowedUsername, get_length_of_field_of_study\n\n\n@login_required\ndef create_fos_application(request):\n    if request.method == 'POST':\n        if not request.user.ntnu_username:\n            messages.error(request, _(\"Du m\u00e5 knytte et NTNU-brukernavn til kontoen din.\"))\n            return redirect('profiles_active', active_tab='membership')\n\n        form = FieldOfStudyApplicationForm(request.POST)\n        if form.is_valid():\n            cleaned = form.cleaned_data\n\n            field_of_study = int(cleaned['field_of_study'])\n\n            if field_of_study == 0:\n                messages.warning(request, _(\"Denne studieretningen (Gjest) er ikke et gyldig alternativ.\"))\n                return redirect('profiles_active', active_tab='membership')\n\n            started_day = 1\n            started_month = 0\n            started_year = int(cleaned['started_year'])\n\n            if cleaned['started_semester'] == \"h\":\n                started_month = 7\n            if cleaned['started_semester'] == \"v\":\n                started_month = 1\n\n            started_date = datetime.date(started_year, started_month, started_day)\n\n            # Does the user already have a field of study and started date?\n            if request.user.started_date and request.user.field_of_study:\n                # If there is no change from the current settings, ignore the request\n                if request.user.started_date == started_date and request.user.field_of_study == field_of_study:\n                    messages.error(\n                        request,\n                        _(\"Du er allerede registrert med denne studieretningen og denne startdatoen.\")\n                    )\n                    return redirect('profiles_active', active_tab='membership')\n\n            application = MembershipApproval(\n                applicant=request.user,\n                field_of_study=field_of_study,\n                started_date=started_date\n            )\n\n            length_of_fos = get_length_of_field_of_study(field_of_study)\n            if length_of_fos > 0:\n                application.new_expiry_date = get_expiry_date(started_year, length_of_fos)\n            application.save()\n\n            messages.success(request, _(\"S\u00f8knad om bytte av studieretning er sendt.\"))\n\n        return redirect('profiles_active', active_tab='membership')\n    raise Http404\n\n\ndef get_expiry_date(started_year, length_of_fos):\n    today = timezone.now().date()\n    # Expiry dates should be 15th September, so that we have time to get new lists from NTNU\n    new_expiry_date = datetime.date(\n        started_year, 9, 16) + datetime.timedelta(days=365*length_of_fos)\n    # Expiry dates in the past sets the expiry date to next september\n    if new_expiry_date < today:\n        if today < datetime.date(today.year, 9, 15):\n            new_expiry_date = datetime.date(today.year, 9, 15)\n        else:\n            new_expiry_date = datetime.date(\n                today.year, 9, 16) + datetime.timedelta(days=365)\n    return new_expiry_date\n\n\n@login_required\ndef create_membership_application(request):\n    if request.method == 'POST':\n        if not request.user.has_expiring_membership:\n            messages.error(request, _(\"Din bruker har ikke et utl\u00f8pende medlemskap.\"))\n            return redirect('profiles_active', active_tab='membership')\n\n        if not request.user.ntnu_username:\n            messages.error(request, _(\"Du m\u00e5 knytte et NTNU-brukernavn til kontoen din.\"))\n            return redirect('profiles_active', active_tab='membership')\n\n        # Extend length of membership by 1 year\n        membership = AllowedUsername.objects.get(username=request.user.ntnu_username)\n        new_expiration_date = datetime.date(membership.expiration_date.year + 1, 9, 16)\n\n        application = MembershipApproval(\n            applicant=request.user,\n            new_expiry_date=new_expiration_date,\n        )\n        application.save()\n\n        messages.success(request, _(\"S\u00f8knad om ett \u00e5rs forlenget medlemskap er sendt.\"))\n\n        return redirect('profiles_active', active_tab='membership')\n    raise Http404\n\n\n@login_required\ndef cancel_application(request, application_id):\n    app = get_object_or_404(MembershipApproval, pk=application_id)\n\n    if app.applicant != request.user:\n        messages.error(request, _(\"Bare s\u00f8keren selv kan slette en s\u00f8knad.\"))\n        return redirect('profiles_active', active_tab='membership')\n\n    if app.processed:\n        messages.error(request, _(\"Denne s\u00f8knaden er behandlet og kan ikke slettes.\"))\n        return redirect('profiles_active', active_tab='membership')\n\n    app.delete()\n\n    return redirect('profiles_active', active_tab='membership')\n", "path": "apps/approval/views.py"}]}