This commit is contained in:
Parpaillax
2024-05-02 12:08:43 +02:00
3 changed files with 71 additions and 54 deletions

View File

@@ -5,6 +5,7 @@ import fr.eni.enchere.bo.Article;
import fr.eni.enchere.bo.SearchArticleCritere; import fr.eni.enchere.bo.SearchArticleCritere;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +16,7 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.i18n.SessionLocaleResolver; import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@@ -25,7 +27,6 @@ import java.util.Locale;
@Controller @Controller
@SessionAttributes({"searchTitle", "searchCategory", "venteOptions", "achatOptions", "typeTransaction"})
public class AccueilController { public class AccueilController {
@Autowired @Autowired
@@ -43,21 +44,27 @@ public class AccueilController {
this.fileService = fileService; this.fileService = fileService;
} }
@GetMapping({"/", "/enchere"}) @GetMapping({"/", "/enchere"})
public String viewAccueil(HttpServletRequest request, @AuthenticationPrincipal UserDetails userDetails, public String viewAccueil(HttpServletRequest request, @AuthenticationPrincipal UserDetails userDetails,
@RequestParam(required = false) String searchTitle, @RequestParam(required = false) Integer searchCategory,
@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "6") int size, Model model, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "6") int size, Model model,
@RequestParam(value = "venteOption", required = false) String[] venteOptions, HttpSession session) {
@RequestParam(value = "achatOption", required = false) String[] achatOptions,
@RequestParam(required = false) String typeTransaction) {
logger.error("test du logger"); logger.error("test du logger");
model.addAttribute("categories", categorieService.findAllCategories());
model.addAttribute("requestURI", request.getRequestURI()); // Récupérer les critères de recherche de la session
String searchTitle = (String) session.getAttribute("searchTitle");
Integer searchCategory = (Integer) session.getAttribute("searchCategory");
String[] venteOptions = (String[]) session.getAttribute("venteOptions");
String[] achatOptions = (String[]) session.getAttribute("achatOptions");
String typeTransaction = (String) session.getAttribute("typeTransaction");
model.addAttribute("SessionTypeTransaction", typeTransaction);
model.addAttribute("sessionVenteOptions", venteOptions);
model.addAttribute("sessionAchatOptions", achatOptions);
// Utiliser les valeurs des critères de recherche dans votre logique métier
SearchArticleCritere critere = new SearchArticleCritere(); SearchArticleCritere critere = new SearchArticleCritere();
critere.setNoCategorie(searchCategory); critere.setNoCategorie(searchCategory);
critere.setTitle(searchTitle); critere.setTitle(searchTitle);
if(userDetails != null) { if (userDetails != null) {
critere.setNoVendeur(userService.utilisateurByName(userDetails.getUsername()).getId()); critere.setNoVendeur(userService.utilisateurByName(userDetails.getUsername()).getId());
} }
critere.setVenteOptions(venteOptions); critere.setVenteOptions(venteOptions);
@@ -75,23 +82,29 @@ public class AccueilController {
model.addAttribute("currentPage", currentPage); model.addAttribute("currentPage", currentPage);
model.addAttribute("critere", critere); model.addAttribute("critere", critere);
model.addAttribute("totalPages", articlePage.getTotalPages()); model.addAttribute("totalPages", articlePage.getTotalPages());
model.addAttribute("categories", categorieService.findAllCategories());
model.addAttribute("requestURI", request.getRequestURI());
return "accueil"; return "accueil";
} }
@PostMapping("/enchere") @PostMapping("/enchere")
public String handleSearch(HttpServletRequest request, @AuthenticationPrincipal UserDetails userDetails, @RequestParam(required = false) String searchTitle, @RequestParam(required = false) Integer searchCategory, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "6") int size, Model model, @RequestParam(value = "venteOption", required = false) String[] venteOptions, @RequestParam(value = "achatOption", required = false) String[] achatOptions, @RequestParam(required = false) String typeTransaction) { public String handleSearch(HttpServletRequest request, @AuthenticationPrincipal UserDetails userDetails,
@RequestParam(required = false) String searchTitle, @RequestParam(required = false) Integer searchCategory,
@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "6") int size, Model model,
@RequestParam(value = "venteOption", required = false) String[] venteOptions,
@RequestParam(value = "achatOption", required = false) String[] achatOptions,
@RequestParam(required = false) String typeTransaction, HttpSession session) {
// Mettre à jour la catégorie dans la session // Mettre à jour les critères de recherche dans la session
model.addAttribute("searchCategory", searchCategory); session.setAttribute("searchCategory", searchCategory);
session.setAttribute("searchTitle", searchTitle);
session.setAttribute("venteOptions", venteOptions);
session.setAttribute("achatOptions", achatOptions);
session.setAttribute("typeTransaction", typeTransaction);
model.addAttribute("searchTitle", searchTitle); // Rediriger vers la page d'accueil
return "redirect:/enchere";
model.addAttribute("venteOptions", venteOptions);
model.addAttribute("achatOptions", achatOptions);
model.addAttribute("typeTransaction", typeTransaction);
return viewAccueil(request, userDetails, searchTitle, searchCategory, page, size, model, venteOptions, achatOptions, typeTransaction);
} }

View File

@@ -1,21 +1,27 @@
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
window.toggleCheckbox = function(value) { window.toggleCheckbox = function(value) {
console.log("toggleCheckbox called with value:", value); console.log("toggleCheckbox called with value:", value);
// Logique pour désactiver/activer les checkboxes // Logique pour désactiver/activer les checkboxes
const achatsCheckboxes = document.querySelectorAll('#achatsOptions input[type=checkbox]'); const achatsCheckboxes = document.querySelectorAll('#achatsOptions input[type=checkbox]');
const ventesCheckboxes = document.querySelectorAll('#ventesOptions input[type=checkbox]'); const ventesCheckboxes = document.querySelectorAll('#ventesOptions input[type=checkbox]');
if (value === 'achats') { if (value === 'achats') {
achatsCheckboxes.forEach(checkbox => checkbox.disabled = false); achatsCheckboxes.forEach(checkbox => checkbox.disabled = false);
ventesCheckboxes.forEach(checkbox => checkbox.disabled = true); ventesCheckboxes.forEach(checkbox => {
} else if (value === 'ventes') { checkbox.checked = false;
achatsCheckboxes.forEach(checkbox => checkbox.disabled = true); checkbox.disabled = true;
ventesCheckboxes.forEach(checkbox => checkbox.disabled = false); });
} } else if (value === 'ventes') {
achatsCheckboxes.forEach(checkbox => {
checkbox.checked = false;
checkbox.disabled = true;
});
ventesCheckboxes.forEach(checkbox => checkbox.disabled = false);
}
// Log pour voir l'état des checkboxes // Log pour voir l'état des checkboxes
console.log("Achats checkboxes disabled:", achatsCheckboxes[0].disabled); console.log("Achats checkboxes disabled:", achatsCheckboxes[0].disabled);
console.log("Ventes checkboxes disabled:", ventesCheckboxes[0].disabled); console.log("Ventes checkboxes disabled:", ventesCheckboxes[0].disabled);
}; };
}); });

View File

@@ -17,30 +17,28 @@
<div class="col-md-6" th:if="${#authentication.principal != 'anonymousUser'}"> <div class="col-md-6" th:if="${#authentication.principal != 'anonymousUser'}">
<!-- Zone de recherche --> <!-- Zone de recherche -->
<div class="mb-3"> <div class="mb-3">
<input type="text" class="form-control" th:attr="placeholder=#{home.search.title}" name="searchTitle" > <input type="text" class="form-control" th:attr="placeholder=#{home.search.title}, value=${session.searchTitle != null ? session.searchTitle : ''}" name="searchTitle">
</div> </div>
<div class="mb-4"> <div class="mb-4">
<select class="form-control" name="searchCategory"> <select class="form-control" name="searchCategory">
<option value="" th:text="#{home.search.cat}"></option> <option value="" th:text="#{home.search.cat}"></option>
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle} "></option> <option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}" th:selected="${category.id == session.searchCategory}"></option>
</select> </select>
</div> </div>
<!-- Achats et Ventes --> <!-- Achats et Ventes -->
</div> </div>
<div class="col-md-12" th:if="${#authentication.principal == 'anonymousUser'}"> <div class="col-md-12" th:if="${#authentication.principal == 'anonymousUser'}">
<!-- Zone de recherche --> <!-- Zone de recherche -->
<div class="mb-3"> <div class="mb-3">
<input type="text" class="form-control" th:attr="placeholder=#{home.search.title}" name="searchTitle"> <input type="text" class="form-control" th:attr="placeholder=#{home.search.title}, value=${session.searchTitle != null ? session.searchTitle : ''}" name="searchTitle">
</div> </div>
<div class="mb-4"> <div class="mb-4">
<select class="form-control" name="searchCategory"> <select class="form-control" name="searchCategory">
<option th:value="${categories}" th:text="#{home.search.cat}"></option> <option value="" th:text="#{home.search.cat}"></option>
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}" ></option> <option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}" th:selected="${category.id == session.searchCategory}"></option>
</select> </select>
</div> </div>
<!-- Achats et Ventes --> <!-- Achats et Ventes -->
</div> </div>
<!-- Colonne pour le bouton de recherche --> <!-- Colonne pour le bouton de recherche -->
<div class="col-md-6 d-flex justify-content-center align-items-center"th:if="${#authentication.principal != 'anonymousUser'}"> <div class="col-md-6 d-flex justify-content-center align-items-center"th:if="${#authentication.principal != 'anonymousUser'}">
@@ -50,22 +48,22 @@
<div class="col-md-6"> <div class="col-md-6">
<div class="mb-3"> <div class="mb-3">
<div class="form-check form-check-inline"> <div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="typeTransaction" id="achats" value="achats" onchange="toggleCheckbox(this.value)"> <input class="form-check-input" type="radio" name="typeTransaction" id="achats" value="achats" th:checked="${SessionTypeTransaction != null and SessionTypeTransaction == 'achats'}" onchange="toggleCheckbox(this.value)">
<label class="form-check-label" for="achats" th:text="#{home.sell.title}"></label> <label class="form-check-label" for="achats" th:text="#{home.buy.title}"></label>
</div> </div>
</div> </div>
<!-- Checkboxes pour Achats --> <!-- Checkboxes pour Achats -->
<div id="achatsOptions"> <div id="achatsOptions">
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" name="achatOption" id="encheresOuvertes" th:value="encheresOuvertes" disabled> <input class="form-check-input" type="checkbox" name="achatOption" id="encheresOuvertes" th:value="encheresOuvertes" th:checked="${sessionAchatOptions != null and #lists.contains(sessionAchatOptions, 'encheresOuvertes')}" th:disabled="${sessionAchatOptions == null}">
<label class="form-check-label" for="encheresOuvertes" th:text="#{home.buy.open}"></label> <label class="form-check-label" for="encheresOuvertes" th:text="#{home.buy.open}"></label>
</div> </div>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" name="achatOption" id="enchereEnCours" th:value="enchereEnCours" disabled> <input class="form-check-input" type="checkbox" name="achatOption" id="enchereEnCours" th:value="enchereEnCours" th:checked="${sessionAchatOptions != null and #lists.contains(sessionAchatOptions, 'enchereEnCours')}" th:disabled="${sessionAchatOptions == null}">
<label class="form-check-label" for="enchereEnCours" th:text="#{home.buy.progress}"></label> <label class="form-check-label" for="enchereEnCours" th:text="#{home.buy.progress}"></label>
</div> </div>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" name="achatOption" id="enchereRemportees" th:value="enchereRemportees" disabled> <input class="form-check-input" type="checkbox" name="achatOption" id="enchereRemportees" th:value="enchereRemportees" th:checked="${sessionAchatOptions != null and #lists.contains(sessionAchatOptions, 'enchereRemportees')}" th:disabled="${sessionAchatOptions == null}">
<label class="form-check-label" for="enchereRemportees" th:text="#{home.buy.success}"></label> <label class="form-check-label" for="enchereRemportees" th:text="#{home.buy.success}"></label>
</div> </div>
</div> </div>
@@ -74,22 +72,22 @@
<!-- Boutons radio pour Ventes --> <!-- Boutons radio pour Ventes -->
<div class="mb-3"> <div class="mb-3">
<div class="form-check form-check-inline"> <div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="typeTransaction" id="ventes" value="ventes" onchange="toggleCheckbox(this.value)"> <input class="form-check-input" type="radio" name="typeTransaction" id="ventes" value="ventes" th:checked="${SessionTypeTransaction != null and SessionTypeTransaction == 'ventes'}" onchange="toggleCheckbox(this.value)">
<label class="form-check-label" for="ventes" th:text="#{home.sell.title}"></label> <label class="form-check-label" for="ventes" th:text="#{home.sell.title}"></label>
</div> </div>
</div> </div>
<!-- Checkboxes pour Ventes --> <!-- Checkboxes pour Ventes -->
<div id="ventesOptions"> <div id="ventesOptions">
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" th:name="venteOption" id="venteEnCours" th:value="venteEnCours" disabled> <input class="form-check-input" type="checkbox" th:name="venteOption" id="venteEnCours" th:value="venteEnCours" th:checked="${sessionVenteOptions != null and #lists.contains(sessionVenteOptions, 'venteEnCours')}" th:disabled="${sessionVenteOptions == null}">
<label class="form-check-label" for="venteEnCours" th:text="#{home.sell.progress}"></label> <label class="form-check-label" for="venteEnCours" th:text="#{home.sell.progress}"></label>
</div> </div>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" th:name="venteOption" id="ventesNonDebutees" th:value="ventesNonDebutees" disabled> <input class="form-check-input" type="checkbox" th:name="venteOption" id="ventesNonDebutees" th:value="ventesNonDebutees" th:checked="${sessionVenteOptions != null and #lists.contains(sessionVenteOptions, 'ventesNonDebutees')}" th:disabled="${sessionVenteOptions == null}">
<label class="form-check-label" for="ventesNonDebutees" th:text="#{home.sell.nostarted}"></label> <label class="form-check-label" for="ventesNonDebutees" th:text="#{home.sell.nostarted}"></label>
</div> </div>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" th:name="venteOption" id="ventesTerminees" th:value="ventesTerminees" disabled> <input class="form-check-input" type="checkbox" th:name="venteOption" id="ventesTerminees" th:value="ventesTerminees" th:checked="${sessionVenteOptions != null and #lists.contains(sessionVenteOptions, 'ventesTerminees')}" th:disabled="${sessionVenteOptions == null}">
<label class="form-check-label" for="ventesTerminees" th:text="#{home.sell.finish}"></label> <label class="form-check-label" for="ventesTerminees" th:text="#{home.sell.finish}"></label>
</div> </div>
</div> </div>
@@ -163,7 +161,7 @@
<ul class="pagination justify-content-center"> <ul class="pagination justify-content-center">
<!-- Bouton pour la première page --> <!-- Bouton pour la première page -->
<li class="page-item"> <li class="page-item">
<a class="page-link" th:href="@{/enchere(page=1, searchTitle=${searchTitle}, searchCategory=${searchCategory}, venteOptions=${venteOptions}, achatOptions=${achatOptions})}"> <a class="page-link" th:href="@{/enchere(page=1)}">
<span aria-hidden="true">&laquo;</span> <span aria-hidden="true">&laquo;</span>
<span th:text="#{home.button.first}"></span> <span th:text="#{home.button.first}"></span>
</a> </a>
@@ -171,7 +169,7 @@
<!-- Bouton pour la page précédente --> <!-- Bouton pour la page précédente -->
<li th:if="${currentPage > 1}" class="page-item"> <li th:if="${currentPage > 1}" class="page-item">
<a class="page-link" th:href="@{/enchere(page=${currentPage - 1}, searchTitle=${searchTitle}, searchCategory=${searchCategory}, venteOptions=${venteOptions}, achatOptions=${achatOptions})}"> <a class="page-link" th:href="@{/enchere(page=${currentPage - 1})}">
<span aria-hidden="true">&lsaquo;</span> <span aria-hidden="true">&lsaquo;</span>
<span th:text="#{home.button.previous}"></span> <span th:text="#{home.button.previous}"></span>
</a> </a>
@@ -180,13 +178,13 @@
<!-- Afficher les deux dernières pages, la page en cours et les deux suivantes --> <!-- Afficher les deux dernières pages, la page en cours et les deux suivantes -->
<th:block th:each="page, iter : ${#numbers.sequence((currentPage - 2 > 0 ? currentPage - 2 : 1), (currentPage + 2 < totalPages ? currentPage + 2 : totalPages))}"> <th:block th:each="page, iter : ${#numbers.sequence((currentPage - 2 > 0 ? currentPage - 2 : 1), (currentPage + 2 < totalPages ? currentPage + 2 : totalPages))}">
<li class="page-item" th:classappend="${currentPage == page ? 'active' : ''}"> <li class="page-item" th:classappend="${currentPage == page ? 'active' : ''}">
<a class="page-link" th:href="@{/enchere(page=${page}, searchTitle=${searchTitle}, searchCategory=${searchCategory}, venteOptions=${venteOptions}, achatOptions=${achatOptions})}" th:text="${page}"></a> <a class="page-link" th:href="@{/enchere(page=${page})}" th:text="${page}"></a>
</li> </li>
</th:block> </th:block>
<!-- Bouton pour la page suivante --> <!-- Bouton pour la page suivante -->
<li th:if="${currentPage < totalPages}" class="page-item"> <li th:if="${currentPage < totalPages}" class="page-item">
<a class="page-link" th:href="@{/enchere(page=${currentPage + 1}, searchTitle=${searchTitle}, searchCategory=${searchCategory}, venteOptions=${venteOptions}, achatOptions=${achatOptions})}"> <a class="page-link" th:href="@{/enchere(page=${currentPage + 1})}">
<span aria-hidden="true">&rsaquo;</span> <span aria-hidden="true">&rsaquo;</span>
<span th:text="#{home.button.next}"></span> <span th:text="#{home.button.next}"></span>
</a> </a>
@@ -194,7 +192,7 @@
<!-- Bouton pour la dernière page --> <!-- Bouton pour la dernière page -->
<li class="page-item"> <li class="page-item">
<a class="page-link" th:href="@{/enchere(page=${totalPages}, searchTitle=${searchTitle}, searchCategory=${searchCategory}, venteOptions=${venteOptions}, achatOptions=${achatOptions})}"> <a class="page-link" th:href="@{/enchere(page=${totalPages})}">
<span aria-hidden="true">&raquo;</span> <span aria-hidden="true">&raquo;</span>
<span th:text="#{home.button.end}"></span> <span th:text="#{home.button.end}"></span>
</a> </a>