From 1a80ce456f35a9f9ca4bbe713bdd84af9066e787 Mon Sep 17 00:00:00 2001
From: Alexis POYEN <apoyen@grandlyon.com>
Date: Mon, 6 Jul 2020 12:06:00 +0200
Subject: [PATCH] Resolve "Update role should remove capturer"

---
 internal/models/capturer.go          |  2 +-
 web/components/users/handleUser.js   | 15 +++++++++++----
 web/services/model/capturer-model.js |  8 ++++----
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/internal/models/capturer.go b/internal/models/capturer.go
index f404ef3..d8c4d1c 100644
--- a/internal/models/capturer.go
+++ b/internal/models/capturer.go
@@ -137,7 +137,7 @@ func (d *DataHandler) deleteCapturerAdmin(w http.ResponseWriter, r *http.Request
 			http.Error(w, ErrorIDIsMissing, http.StatusNotFound)
 			return
 		}
-		d.db.Delete(&o)
+		d.db.Unscoped().Delete(&o)
 	} else {
 		http.Error(w, ErrorIDIsMissing, http.StatusNotFound)
 	}
diff --git a/web/components/users/handleUser.js b/web/components/users/handleUser.js
index 33ce4ac..dbd0df6 100644
--- a/web/components/users/handleUser.js
+++ b/web/components/users/handleUser.js
@@ -226,6 +226,11 @@ class HandleUser {
       let user = await response.json();
       if (user != undefined && user.role == "CAPTURER")
         await this.postCapturer(user, method);
+      else if (user.role != "CAPTURER") {
+        let capturer = await Auth.getCapturerByUserID(user.id, current_user);
+        if (capturer != undefined)
+          await this.CapturerModel.deleteCapturer(capturer.ID);
+      }
       this.parent.displayUsers();
     } catch (e) {
       Messages.Show("is-warning", e.message);
@@ -236,9 +241,11 @@ class HandleUser {
 
   async postCapturer(user, method) {
     let capturer;
-    if (method === "PUT")
-      capturer = await Auth.getCapturerByUserID(user.id, current_user);
-    else capturer = {};
-    this.CapturerModel.saveCapturer(method, capturer.ID, user.ID, user.name);
+    capturer = await Auth.getCapturerByUserID(user.id, current_user);
+    if (capturer == undefined) {
+      capturer = { ID: 0 };
+      method = "POST";
+    }
+    this.CapturerModel.saveCapturer(method, capturer.ID, user.id, user.name);
   }
 }
diff --git a/web/services/model/capturer-model.js b/web/services/model/capturer-model.js
index 04ad05b..dce3f9f 100644
--- a/web/services/model/capturer-model.js
+++ b/web/services/model/capturer-model.js
@@ -55,10 +55,10 @@ class CapturerModel {
 
   async saveCapturer(method, ID, UserID, Name) {
     try {
-      const response = await fetch("/api/Capturer/" + capturer.ID, {
+      const response = await fetch("/api/Capturer/" + ID, {
         method: method,
         headers: new Headers({
-          "XSRF-Token": current_user.xsrftoken,
+          "XSRF-Token": this.current_user.xsrftoken,
         }),
         body: JSON.stringify({
           ID: ID,
@@ -68,11 +68,10 @@ class CapturerModel {
       });
       if (response.status !== 200) {
         throw new Error(
-          `Capturer could not be deleted (status ${response.status})`
+          `Capturer could not be saved (status ${response.status})`
         );
       }
       this.refreshCapturers();
-      Messages.Show("is-success", "Bureau de vote mis à jour");
       return await response.json();
     } catch (e) {
       Messages.Show("is-warning", e.message);
@@ -94,6 +93,7 @@ class CapturerModel {
           `Capturer could not be deleted (status ${response.status})`
         );
       }
+      this.refreshCapturers();
     } catch (e) {
       Messages.Show("is-warning", e.message);
       console.error(e);
-- 
GitLab