From bbbf24be098397e62d7a8b013dde3e5ff18b6adf Mon Sep 17 00:00:00 2001
From: Julien Lalloyer <julien.lalloyer.etu@univ-lille.fr>
Date: Fri, 11 Feb 2022 10:52:10 +0100
Subject: [PATCH] Fin du TP 4

---
 pom.xml                                       |  2 +-
 src/main/java/fr/ulille/iut/tva/Main.java     |  2 +-
 .../java/fr/ulille/iut/tva/dto/Detaildto.java | 67 ++++++++++++++++++
 .../fr/ulille/iut/tva/dto/InfoTauxDto.java    | 37 ++++++++++
 .../NiveauTvaInexistantException.java         | 13 ++++
 .../iut/tva/ressource/TvaRessource.java       | 68 +++++++++++++++++++
 6 files changed, 187 insertions(+), 2 deletions(-)
 create mode 100644 src/main/java/fr/ulille/iut/tva/dto/Detaildto.java
 create mode 100644 src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
 create mode 100644 src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java

diff --git a/pom.xml b/pom.xml
index a432679..1466701 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.9.0</version>
+                <version>3.8.1</version>
                 <inherited>true</inherited>
                 <configuration>
                   <release>11</release>
diff --git a/src/main/java/fr/ulille/iut/tva/Main.java b/src/main/java/fr/ulille/iut/tva/Main.java
index 62da555..7038335 100644
--- a/src/main/java/fr/ulille/iut/tva/Main.java
+++ b/src/main/java/fr/ulille/iut/tva/Main.java
@@ -16,7 +16,7 @@ import java.util.logging.Logger;
  */
 public class Main {
     // Base URI the Grizzly HTTP server will listen on
-    public static final String BASE_URI = "http://localhost:8080/myapp/";
+    public static final String BASE_URI = "http://localhost:8080/api/v1";
 
     /**
      * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
diff --git a/src/main/java/fr/ulille/iut/tva/dto/Detaildto.java b/src/main/java/fr/ulille/iut/tva/dto/Detaildto.java
new file mode 100644
index 0000000..70f19de
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/dto/Detaildto.java
@@ -0,0 +1,67 @@
+package fr.ulille.iut.tva.dto;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class Detaildto {
+	 private double montantTT;
+	    private double montantTva;
+	    private double somme;
+	    private String taux;
+	    private double tauxV;
+	    
+	    public Detaildto() {}
+	    
+	    public Detaildto(String taux, double tauxV, double montantTT, double montantTva, double somme) {
+	        this.montantTT = montantTT;
+	        this.taux = taux;
+	        this.montantTva = montantTva;
+	        this.somme = somme;
+	        this.tauxV = tauxV;
+	    }
+
+		public double getMontantTT() {
+			return montantTT;
+		}
+
+		public void setMontantTT(double montantTT) {
+			this.montantTT = montantTT;
+		}
+
+		public double getMontantTva() {
+			return montantTva;
+		}
+
+		public void setMontantTva(double montantTva) {
+			this.montantTva = montantTva;
+		}
+
+		public double getSomme() {
+			return somme;
+		}
+
+		public void setSomme(double somme) {
+			this.somme = somme;
+		}
+
+		public String getTaux() {
+			return taux;
+		}
+
+		public void setTaux(String taux) {
+			this.taux = taux;
+		}
+
+		public double getTauxV() {
+			return tauxV;
+		}
+
+		public void setTauxV(double tauxV) {
+			this.tauxV = tauxV;
+		}
+	    
+
+	  
+	    
+}
+
diff --git a/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java b/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
new file mode 100644
index 0000000..2442aa6
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
@@ -0,0 +1,37 @@
+package fr.ulille.iut.tva.dto;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class InfoTauxDto {
+	
+	private String label;
+    private double taux;
+    
+    public InfoTauxDto() {}
+    
+    public  InfoTauxDto(String label, double taux) {
+        this.label = label;
+        this.taux = taux;
+    }
+   
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public double getTaux() {
+        return taux;
+    }
+
+    public void setTaux(double taux) {
+        this.taux = taux;
+    }
+    
+    
+}
+
diff --git a/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java b/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java
new file mode 100644
index 0000000..1fedf52
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java
@@ -0,0 +1,13 @@
+package fr.ulille.iut.tva.ressource;
+
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Response;
+
+public class NiveauTvaInexistantException extends WebApplicationException {
+	private static final long serialVersionUID = 939875418210403804L;
+
+	public NiveauTvaInexistantException() {
+        super(Response.status(Response.Status.NOT_ACCEPTABLE).entity("Niveau de TVA inexistant").build());
+    }
+}
+
diff --git a/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java b/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
index 4c63ca6..70b2a55 100644
--- a/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
+++ b/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
@@ -1,12 +1,80 @@
 package fr.ulille.iut.tva.ressource;
 
+import fr.ulille.iut.tva.dto.Detaildto;
+import fr.ulille.iut.tva.dto.InfoTauxDto;
+import java.util.*;
 import fr.ulille.iut.tva.service.CalculTva;
 import fr.ulille.iut.tva.service.TauxTva;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
 
 /**
  * TvaRessource
  */
+
+@Path("tva")
 public class TvaRessource {
     private CalculTva calculTva = new CalculTva();
 
+    @GET
+    @Path("tauxpardefaut")
+    public double getValeurTauxParDefaut() {
+        return TauxTva.NORMAL.taux;
+    }
+    
+    @GET
+    @Path("valeur/{niveauTva}")
+    public double getValeurTaux(@PathParam("niveauTva") String niveau) {
+        try {
+            return TauxTva.valueOf(niveau.toUpperCase()).taux; 
+        }
+        catch ( Exception ex ) {
+            throw new NiveauTvaInexistantException();
+        }
+    }
+    
+    @GET
+    @Path("/{niveauTva}")
+    public double getMontantTotal(@QueryParam("somme") double somme, @PathParam("niveauTva") String niveau) {
+        try {
+            return somme + (somme *  (TauxTva.valueOf(niveau.toUpperCase()).taux / 100));
+        } catch (Exception ex) {
+            throw new NiveauTvaInexistantException();
+        }
+    }
+   
+    @GET
+    @Path("lestaux")
+    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public List<InfoTauxDto> getInfoTaux() {
+      ArrayList<InfoTauxDto> result = new ArrayList<InfoTauxDto>();
+      for ( TauxTva t : TauxTva.values() ) {
+        result.add(new InfoTauxDto(t.name(), t.taux));
+      }
+      return result;
+    }
+
+    @GET
+    @Path("details/{taux}")
+    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public List<Detaildto> getDetail(@PathParam("taux") String niveau,@QueryParam("somme") int somme) {
+    	double tauxV = TauxTva.valueOf(niveau.toUpperCase()).taux;
+    	String taux = niveau.toUpperCase();
+    	double montantTva = (somme*(tauxV/100));
+    	double montantTotal = somme + montantTva;
+    	List<Detaildto> result = new ArrayList<>();
+    	result.add(new Detaildto(taux, tauxV, montantTotal, montantTva, somme));
+    	return result;
+    }
+
+   
+
 }
+
+
+
+
-- 
GitLab