Browse Source

Suppr d'un usager

Arthur Brandao 5 years ago
parent
commit
89c6c88f5d

+ 79 - 0
WebContent/abonnes.jsp

@@ -37,6 +37,49 @@
     <!-- Footer -->
     <tag:footer />
     
+    <!-- Confirmation -->
+  	<div id="confirmation" class="modal conf">
+    	<div class="modal-content">
+    		<div class="row">
+    			<div class="col offset-m1 m3 mtop-4">
+                    <i class="material-icons red-text" style="font-size: 8em;">warning</i>
+                </div>
+                <div class="col m7 s12 mtop-3">
+                    <h4>Confirmer la suppression de <span id="conf-user"></span> ?</h4>
+      				<p style="font-size:1.2em">La suppression est d&eacute;finitive et aucun retour en arri&egrave;re n'est possible</p>
+                </div>
+    		</div>
+    	</div>
+    	<div class="modal-footer">
+      		<a href="#!" class="modal-close waves-effect waves-red btn-flat">Annuler</a>
+      		<a href="#!" id="conf-delete" class="modal-close waves-effect waves-light btn">Confirmer</a>
+    	</div>
+  	</div>
+    <!-- Popup -->
+    <div id="ok-popup" class="modal popup">
+        <div class="modal-content" style="overflow: hidden;">
+            <div class="row">
+                <div class="col offset-m1 m3 s12">
+                    <i class="material-icons green-text" style="font-size: 8em;">check_circle</i>
+                </div>
+                <div class="col m7 s12 mtop-3">
+                    <h4 id="ok-text">Success message</h4>
+                </div>
+            </div>    
+        </div>
+    </div>
+    <div id="err-popup" class="modal popup">
+        <div class="modal-content" style="overflow: hidden;">
+            <div class="row">
+                <div class="col offset-m1 m3 s12">
+                    <i class="material-icons red-text" style="font-size: 8em;">error</i>
+                </div>
+                <div class="col m7 s12 mtop-3">
+                    <h4 id="error-text">Error message</h4>
+                </div>
+            </div>    
+        </div>
+    </div>
     <!--  Loader  -->
     <tag:loader name="loader" />
 
@@ -45,8 +88,12 @@
     <script type="text/javascript">
         $(document).ready(() => {
         	const loader = M.Modal.getInstance($('#loader'));
+        	const okPopup = M.Modal.getInstance($('#ok-popup'));
+        	const errPopup = M.Modal.getInstance($('#err-popup'));
+        	const conf = M.Modal.getInstance($('#confirmation'));
         	const idPagination = 'usager';
         	const perPage = 5;
+        	let usagerToDelete = null;
         	
         	function pagine(numPage) {
         		loader.open();
@@ -93,6 +140,38 @@
                 console.log('abo', 'num', $(this).attr('data-page'));
                 pagine($(this).attr('data-page'));
             });
+            
+            // Suppr abonne
+            $('#abo').on('click', '.delete-usager', function () {
+            	$("#conf-user").html($(this).attr('data-usager'));
+            	$("#conf-delete").attr('data-code', $(this).attr('data-code'));
+            	usagerToDelete = $(this).parent().parent();
+            	conf.open();
+            });
+            $('#conf-delete').on('click', function () {
+            	loader.open();
+            	$.ajax({
+                    type: "DELETE",
+                    url: "${base}api/usager/" + $(this).attr('data-code'),
+                    error: () => {
+                    	loader.close();
+                    	$('#error-text').html('Une erreur est survenue');
+                    	errPopup.open();
+                    },
+                    success: (result) => {
+                    	loader.close();
+                    	if (result.success) {
+                    		$('#ok-text').html(result.data.msg);
+                    		okPopup.open();
+                    		usagerToDelete.remove();
+                    		usagerToDelete = null;
+                    	} else {
+                    		$('#error-text').html(result.data);
+                        	errPopup.open();
+                    	}
+                    },
+                });
+            })
         });
     </script>
 </body>

+ 5 - 0
WebContent/js/script.js

@@ -117,6 +117,11 @@ $(document).ready(function(){
         startingTop: '30%',
         endingTop: '35%'
     });
+    M.Modal.init($('.conf'), {
+        dismissible: true,
+        startingTop: '30%',
+        endingTop: '35%'
+    });
     // Date picker
     M.Datepicker.init($('.datepicker'), {
         format: 'dd/mm/yyyy',

+ 6 - 1
src/db/DatabaseTable.java

@@ -128,7 +128,7 @@ public abstract class DatabaseTable<T extends Persistable> {
 		return del(obj.getId());
 	}
 	
-	private T cache(T obj) {
+	protected T cache(T obj) {
 		// Si l'objet à un id invalide
 		if (obj.getId() <= 0) {
 			return obj;
@@ -146,6 +146,11 @@ public abstract class DatabaseTable<T extends Persistable> {
 		return obj;
 	}
 	
+	protected List<T> cache(List<T> list) {
+		list.forEach(elt -> cache(elt));
+		return list;
+	}
+	
 	private void remove(long id) {
 		if (cacheMap.containsKey(id)) {
 			cacheMap.remove(id);

+ 23 - 1
src/microfolie/entry/rest/UsagerController.java

@@ -3,6 +3,7 @@ package microfolie.entry.rest;
 import java.util.List;
 import java.util.logging.Logger;
 
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -45,17 +46,38 @@ public class UsagerController {
 		// Formattage des données
 		JSONArray list = new JSONArray();
 		usagers.forEach(elt -> {
+			StringBuilder action = new StringBuilder();
+			action.append("<a href='scan/generate.jsp?code=");
+			action.append(elt.getCode());
+			action.append("' class='tooltipped' data-position='right' data-tooltip='Voir le QR Code'><i class='material-icons'>center_focus_strong</i></a>");
+			action.append("<i class='delete-usager material-icons red-text tooltipped mleft-1' data-code='");
+			action.append(elt.getCode());
+			action.append("' data-usager='");
+			action.append(elt.getPrenom() + " " + elt.getNom());
+			action.append("' data-position='right' data-tooltip='Supprimer usager' style='cursor: pointer'>delete_forever</i>");
 			JSONObject json = new JSONObject();
 			json.put("nom", elt.getNom());
 			json.put("prenom", elt.getPrenom());
 			json.put("email", elt.getEmail());
 			json.put("ville", elt.getVille());
-			json.put("action", "<a href='scan/generate.jsp?code=" + elt.getCode() + "' class='tooltipped' data-position='right' data-tooltip='Voir le QR Code'><i class='material-icons'>center_focus_strong</i></a>");
+			json.put("action", action.toString());
 			list.put(json);
 		});
 		data.put("list", list);
 		LOGGER.info("End: Usager page");
 		return JsonUtils.success(data).toString();
 	}
+	
+	@DELETE
+	@Path("/{code}")
+	public String delete(@PathParam("code") String code) {
+		if (service.delete(code)) {
+			JSONObject data = new JSONObject();
+			data.put("msg", "Usager supprim&eacute;");
+			return JsonUtils.success(data).toString();
+		} else {
+			return JsonUtils.error("Erreur lors de la suppression de l'usager").toString();
+		}
+	}
 
 }

+ 13 - 2
src/microfolie/persistance/table/FrequentationTable.java

@@ -12,6 +12,7 @@ import db.annotation.DbTable;
 import db.mapper.DatabaseMapper;
 import microfolie.persistance.entity.Espace;
 import microfolie.persistance.entity.Frequentation;
+import microfolie.persistance.entity.Usager;
 
 @DbTable(name = "Frequentation", entity = Frequentation.class)
 public class FrequentationTable extends DatabaseTable<Frequentation>{
@@ -44,7 +45,7 @@ public class FrequentationTable extends DatabaseTable<Frequentation>{
 		params.add(to);
 		Optional<List<Frequentation>> opt = Database.query(sql, params, DatabaseMapper.listMapper(getClass().getAnnotation(DbTable.class)));
 		if (opt.isPresent()) {
-			return opt.get();
+			return cache(opt.get());
 		}
 		return new ArrayList<>();
 	}
@@ -58,7 +59,17 @@ public class FrequentationTable extends DatabaseTable<Frequentation>{
 		params.add(to);
 		Optional<List<Frequentation>> opt = Database.query(sql, params, DatabaseMapper.listMapper(getClass().getAnnotation(DbTable.class)));
 		if (opt.isPresent()) {
-			return opt.get();
+			return cache(opt.get());
+		}
+		return new ArrayList<>();
+	}
+	
+	public List<Frequentation> getByUsager(Usager usager) {
+		SQLQueryBuilder sql = SQLQueryBuilder.selectQuery("Frequentation");
+		sql.add("USAGER", usager.id);
+		Optional<List<Frequentation>> opt = Database.query(sql.toSQL(), sql.getParams(), DatabaseMapper.listMapper(getClass().getAnnotation(DbTable.class)));
+		if (opt.isPresent()) {
+			return cache(opt.get());
 		}
 		return new ArrayList<>();
 	}

+ 17 - 0
src/microfolie/service/UsagerService.java

@@ -4,7 +4,9 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Random;
 
+import microfolie.persistance.entity.Frequentation;
 import microfolie.persistance.entity.Usager;
+import microfolie.persistance.table.FrequentationTable;
 import microfolie.persistance.table.UsagerTable;
 import microfolie.service.dto.UsagerDTO;
 import microfolie.service.transformer.UsagerTransformer;
@@ -15,6 +17,7 @@ public class UsagerService {
 	private static final Random RANDOM = new Random();
 	private static UsagerService instance;
 	
+	private FrequentationTable frequentationTable = FrequentationTable.getInstance();
 	private UsagerTable table = UsagerTable.getInstance();
 	
 	private UsagerService() {
@@ -51,6 +54,20 @@ public class UsagerService {
 		return UsagerTransformer.entityToDto(usagers);
 	}
 	
+	public boolean delete(String code) {
+		Optional<Usager> opt = table.findByCode(code);
+		if (opt.isPresent()) {
+			Usager usager = opt.get();
+			List<Frequentation> freqs = frequentationTable.getByUsager(usager);
+			freqs.forEach(f -> {
+				f.usager = null;
+				frequentationTable.save(f);
+			});
+			return table.del(usager);
+		}
+		return false;
+	}
+	
 	private String generateUniqueCode() {
 		String code;
 		do {