From 1857837230b1d9f6ae054395ae4c23cd384e7d53 Mon Sep 17 00:00:00 2001
From: Flavio Tarsetti <flavio.tarsetti@idiap.ch>
Date: Tue, 8 Aug 2017 16:49:10 +0200
Subject: [PATCH] [accounts] patch api not able to validate already validated
 user

---
 beat/web/accounts/api.py | 70 ++++++++++++++++++++++------------------
 1 file changed, 39 insertions(+), 31 deletions(-)

diff --git a/beat/web/accounts/api.py b/beat/web/accounts/api.py
index 862e24223..7ee38b8c4 100644
--- a/beat/web/accounts/api.py
+++ b/beat/web/accounts/api.py
@@ -126,49 +126,57 @@ class GodfatherAddSuperviseeView(BaseUpdateSupervisionTrackView):
     def put(self, request, supervisee_name):
         supervisee = User.objects.get(username=supervisee_name)
         profile_supervisee = Profile.objects.get(user=supervisee)
-        supervisiontrack = SupervisionTrack.objects.get(godfather=request.user, supervisee=supervisee, supervisee__profile__supervision_key=models.F('supervision_key'))
+        if supervisee.profile.status != Profile.ACCEPTED:
+            supervisiontrack = SupervisionTrack.objects.get(godfather=request.user, supervisee=supervisee, supervisee__profile__supervision_key=models.F('supervision_key'))
 
-        supervisiontrack.is_valid = True
+            supervisiontrack.is_valid = True
 
-        now = datetime.datetime.now()
-        expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_EXPIRATION_DAYS)
-        supervisiontrack.expiration_date = now + expiration_date_delta
+            now = datetime.datetime.now()
+            expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_EXPIRATION_DAYS)
+            supervisiontrack.expiration_date = now + expiration_date_delta
 
-        supervisiontrack.start_date = now
-        supervisiontrack.last_validation_date = now
-        supervisee.profile.status = Profile.ACCEPTED
-        supervisee.profile.rejection_date = None
+            supervisiontrack.start_date = now
+            supervisiontrack.last_validation_date = now
+            supervisee.profile.status = Profile.ACCEPTED
+            supervisee.profile.rejection_date = None
 
-        supervisiontrack.save()
-        supervisee.profile.save()
-        supervisee.is_active = True
-        supervisee.save()
+            supervisiontrack.save()
+            supervisee.profile.save()
+            supervisee.is_active = True
+            supervisee.save()
 
-        from django.core.mail import send_mail
+            from django.core.mail import send_mail
 
-        parsed_url = urlparse(settings.URL_PREFIX)
-        server_address = '%s://%s' % (parsed_url.scheme, parsed_url.hostname)
+            parsed_url = urlparse(settings.URL_PREFIX)
+            server_address = '%s://%s' % (parsed_url.scheme, parsed_url.hostname)
 
-        c = Context({ 'supervisor': supervisiontrack.godfather,
-                      'supervisee': supervisee,
-                      'prefix': server_address,
-                    })
+            c = Context({ 'supervisor': supervisiontrack.godfather,
+                          'supervisee': supervisee,
+                          'prefix': server_address,
+                        })
 
-        try:
-            t = loader.get_template('registration/mail.godfather_validated.subject.txt')
-            subject = t.render(c)
+            try:
+                t = loader.get_template('registration/mail.godfather_validated.subject.txt')
+                subject = t.render(c)
 
-            # Note: e-mail subject *must not* contain newlines
-            subject = settings.EMAIL_SUBJECT_PREFIX + ''.join(subject.splitlines())
+                # Note: e-mail subject *must not* contain newlines
+                subject = settings.EMAIL_SUBJECT_PREFIX + ''.join(subject.splitlines())
 
-            t = loader.get_template('registration/mail.godfather_validated.message.txt')
-            message = t.render(c)
+                t = loader.get_template('registration/mail.godfather_validated.message.txt')
+                message = t.render(c)
 
-            send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [supervisee.email])
-        except:
-            pass
+                send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [supervisee.email])
+            except:
+                pass
 
-        return Response(status=status.HTTP_204_NO_CONTENT)
+            return Response(status=status.HTTP_204_NO_CONTENT)
+        else:
+            #Track already valid
+            reason = "You can't validate this supervisee as his supervision is still valid"
+            result = {
+                'error': reason,
+            }
+            return BadRequestResponse(result)
 
 
 #----------------------------------------------------------
-- 
GitLab