merge
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,6 +8,7 @@ build/
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.log
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
|
||||
@@ -17,4 +17,5 @@ public interface ArticleService {
|
||||
int updateArticle(Article article);
|
||||
List<Article> findArticleByTitle(String title);
|
||||
Page<Article> searchArticlePageable(SearchArticleCritere critere, Pageable pageable);
|
||||
void setSellPrice(int id, float sellPrice);
|
||||
}
|
||||
|
||||
@@ -47,6 +47,11 @@ public class ArticleServiceImpl implements ArticleService{
|
||||
return articleRepository.updateArticle(article);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSellPrice(int id, float sellPrice) {
|
||||
this.articleRepository.setSellPrice(id, sellPrice);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Article> findArticleByTitle(String title) {
|
||||
return articleRepository.findArticleByTitle(title);
|
||||
|
||||
@@ -5,9 +5,8 @@ import fr.eni.enchere.bo.Enchere;
|
||||
import java.util.List;
|
||||
|
||||
public interface EnchereService {
|
||||
Enchere enchereByUserAndArticle(int idUser, int idArticle);
|
||||
List<Enchere> enchereByUser(int idUser);
|
||||
List<Enchere> enchereByArticle(int idArticle);
|
||||
void setEnchere(Enchere enchere);
|
||||
void delete(int id);
|
||||
void deleteEnchere(int id);
|
||||
}
|
||||
|
||||
@@ -15,11 +15,6 @@ public class EnchereServiceImpl implements EnchereService{
|
||||
this.enchereRepository = enchereRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enchere enchereByUserAndArticle(int idUser, int idArticle) {
|
||||
return enchereRepository.findByIdUserAndIdArticle(idUser, idArticle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Enchere> enchereByUser(int idUser) {
|
||||
return enchereRepository.findByIdUser(idUser);
|
||||
@@ -36,7 +31,7 @@ public class EnchereServiceImpl implements EnchereService{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(int id) {
|
||||
enchereRepository.deleteArticle(id);
|
||||
public void deleteEnchere(int id) {
|
||||
this.enchereRepository.delete(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,8 @@ public class Enchere {
|
||||
|
||||
public Enchere(){}
|
||||
|
||||
public Enchere(int noUtilisateur, int noArticle, String pseudoUtilisateur, Date dateEnchere, float montantEnchere, boolean isDelete) {
|
||||
public Enchere(boolean isDelete, int id, int noUtilisateur, int noArticle, String pseudoUtilisateur, Date dateEnchere, float montantEnchere ) {
|
||||
setId(id);
|
||||
setNoUtilisateur(noUtilisateur);
|
||||
setPseudoUtilisateur(pseudoUtilisateur);
|
||||
setNoArticle(noArticle);
|
||||
|
||||
@@ -5,6 +5,7 @@ import fr.eni.enchere.bo.Article;
|
||||
import fr.eni.enchere.bo.SearchArticleCritere;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
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.ui.Model;
|
||||
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.mvc.support.RedirectAttributes;
|
||||
|
||||
@@ -25,7 +27,6 @@ import java.util.Locale;
|
||||
|
||||
|
||||
@Controller
|
||||
@SessionAttributes({"searchTitle", "searchCategory", "venteOptions", "achatOptions", "typeTransaction"})
|
||||
public class AccueilController {
|
||||
|
||||
@Autowired
|
||||
@@ -43,21 +44,27 @@ public class AccueilController {
|
||||
this.fileService = fileService;
|
||||
}
|
||||
|
||||
|
||||
@GetMapping({"/", "/enchere"})
|
||||
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(value = "venteOption", required = false) String[] venteOptions,
|
||||
@RequestParam(value = "achatOption", required = false) String[] achatOptions,
|
||||
@RequestParam(required = false) String typeTransaction) {
|
||||
HttpSession session) {
|
||||
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();
|
||||
critere.setNoCategorie(searchCategory);
|
||||
critere.setTitle(searchTitle);
|
||||
if(userDetails != null) {
|
||||
if (userDetails != null) {
|
||||
critere.setNoVendeur(userService.utilisateurByName(userDetails.getUsername()).getId());
|
||||
}
|
||||
critere.setVenteOptions(venteOptions);
|
||||
@@ -76,23 +83,29 @@ public class AccueilController {
|
||||
model.addAttribute("currentPage", currentPage);
|
||||
model.addAttribute("critere", critere);
|
||||
model.addAttribute("totalPages", articlePage.getTotalPages());
|
||||
model.addAttribute("categories", categorieService.findAllCategories());
|
||||
model.addAttribute("requestURI", request.getRequestURI());
|
||||
|
||||
return "accueil";
|
||||
}
|
||||
|
||||
@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
|
||||
model.addAttribute("searchCategory", searchCategory);
|
||||
// Mettre à jour les critères de recherche dans la session
|
||||
session.setAttribute("searchCategory", searchCategory);
|
||||
session.setAttribute("searchTitle", searchTitle);
|
||||
session.setAttribute("venteOptions", venteOptions);
|
||||
session.setAttribute("achatOptions", achatOptions);
|
||||
session.setAttribute("typeTransaction", typeTransaction);
|
||||
|
||||
model.addAttribute("searchTitle", searchTitle);
|
||||
|
||||
model.addAttribute("venteOptions", venteOptions);
|
||||
model.addAttribute("achatOptions", achatOptions);
|
||||
model.addAttribute("typeTransaction", typeTransaction);
|
||||
|
||||
return viewAccueil(request, userDetails, searchTitle, searchCategory, page, size, model, venteOptions, achatOptions, typeTransaction);
|
||||
// Rediriger vers la page d'accueil
|
||||
return "redirect:/enchere";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ public class AdminController {
|
||||
//Annuler les enchères en cours
|
||||
List<Enchere> userEnchere = enchereService.enchereByUser(id);
|
||||
for (Enchere enchere : userEnchere) {
|
||||
enchereService.delete(enchere.getId());
|
||||
enchereService.deleteEnchere(enchere.getId());
|
||||
}
|
||||
return "redirect:/admin";
|
||||
}
|
||||
@@ -96,7 +96,7 @@ public class AdminController {
|
||||
//Annuler les enchères en cours
|
||||
List<Enchere> userEnchere = enchereService.enchereByUser(id);
|
||||
for (Enchere enchere : userEnchere) {
|
||||
enchereService.delete(enchere.getId());
|
||||
enchereService.deleteEnchere(enchere.getId());
|
||||
}
|
||||
}
|
||||
return "redirect:/admin";
|
||||
|
||||
@@ -80,7 +80,7 @@ public class ArticleController {
|
||||
.map(Enchere::getPseudoUtilisateur);
|
||||
|
||||
model.addAttribute("encheres", lastEnchere);
|
||||
model.addAttribute("maxEncherePseudo", pseudoMaxEnchere.orElse(""));
|
||||
model.addAttribute("maxEncherePseudo", pseudoMaxEnchere.orElse(null));
|
||||
model.addAttribute("isArticleCurrentUser", isArticleCurrentUser);
|
||||
model.addAttribute("article", article);
|
||||
model.addAttribute("username", user);
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Controller()
|
||||
@RequestMapping("/enchere")
|
||||
@@ -62,15 +63,19 @@ public class EnchereController {
|
||||
}
|
||||
|
||||
//Empeche l'enchère si les crédits du user sont inférieur au prix initial de l'article
|
||||
float userCredit = this.userService.utilisateurByName(authentication.getName()).getCredit();
|
||||
if (userCredit < encherePrice) {
|
||||
UserProfil userCredit = this.userService.utilisateurByName(authentication.getName());
|
||||
List<Enchere> encheres = this.enchereService.enchereByUser(userCredit.getId());
|
||||
double encheresSum = encheres.stream()
|
||||
.mapToDouble(ench -> ench.getMontantEnchere()) // Mappez chaque enchère à son montant
|
||||
.sum();
|
||||
if ((userCredit.getCredit() - encheresSum) < encherePrice) {
|
||||
result.rejectValue("montantEnchere", "error.enchere", "Vous ne pouvez pas enchérir si vous n'avez pas les fonds suffisant");
|
||||
}
|
||||
|
||||
Optional<String> pseudoMaxEnchere = lastEnchere.stream()
|
||||
.max(Comparator.comparing(Enchere::getMontantEnchere)) // Comparaison basée sur le montant d'enchère
|
||||
.map(Enchere::getPseudoUtilisateur);
|
||||
if (pseudoMaxEnchere.get().equals(authentication.getName())) {
|
||||
if (pseudoMaxEnchere.isPresent() && pseudoMaxEnchere.get().equals(authentication.getName())) {
|
||||
result.rejectValue("montantEnchere", "error.enchere", "Vous ne pouvez pas enchèrir sur votre propre offre");
|
||||
}
|
||||
|
||||
@@ -80,9 +85,38 @@ public class EnchereController {
|
||||
}
|
||||
|
||||
this.enchereService.setEnchere(enchere);
|
||||
float newCredit = userCredit - enchere.getMontantEnchere();
|
||||
this.userService.setCredit(newCredit, this.userService.utilisateurByName(authentication.getName()).getId());
|
||||
return "redirect:/article/show?id=" + articleId;
|
||||
}
|
||||
|
||||
@PostMapping("/enchereDone")
|
||||
public String enchereDone(@RequestParam("id") int id) {
|
||||
List<Enchere> listEncheres = this.enchereService.enchereByArticle(id);
|
||||
|
||||
List<Enchere> encheres = listEncheres.stream()
|
||||
.sorted(Comparator.comparing(Enchere::getMontantEnchere).reversed())
|
||||
.collect(Collectors.toList());
|
||||
Optional<String> pseudoMaxEnchere = encheres.stream()
|
||||
.max(Comparator.comparing(Enchere::getMontantEnchere)) // Comparaison basée sur le montant d'enchère
|
||||
.map(Enchere::getPseudoUtilisateur);
|
||||
UserProfil user = this.userService.utilisateurByName(pseudoMaxEnchere.get());
|
||||
|
||||
Optional<Float> maxMontantEnchere = listEncheres.stream()
|
||||
.map(Enchere::getMontantEnchere) // Récupère seulement les montants d'enchère
|
||||
.max(Float::compareTo);
|
||||
|
||||
//setCredit user.
|
||||
float userCredit = user.getCredit();
|
||||
float newCredit = userCredit - maxMontantEnchere.get();
|
||||
this.userService.setCredit(newCredit, user.getId());
|
||||
|
||||
//Delete enchere
|
||||
for (Enchere ench : listEncheres) {
|
||||
this.enchereService.deleteEnchere(ench.getId());
|
||||
}
|
||||
|
||||
//Delete article
|
||||
this.articleService.setSellPrice(id, maxMontantEnchere.get());
|
||||
return "redirect:/enchere";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,4 +16,5 @@ public interface ArticleRepository {
|
||||
int saveArticle(Article article);
|
||||
void deleteArticle(int id);
|
||||
int updateArticle(Article article);
|
||||
void setSellPrice(int id, float sellPrice);
|
||||
}
|
||||
|
||||
@@ -356,4 +356,10 @@ public class ArticleRepositoryImpl implements ArticleRepository {
|
||||
jdbcTemplate.update(sql, article.getNom(), article.getDesc(), article.getDateDebutEnch(), article.getDateFinEnch(), article.getPrixInitial(), article.getNumCategorie(), article.getId());
|
||||
return article.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSellPrice(int id, float price) {
|
||||
String sql = "UPDATE ARTICLES_VENDUS SET prix_vente = ?, isDelete = 1 WHERE no_article = ?";
|
||||
jdbcTemplate.update(sql, price, id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,8 @@ import fr.eni.enchere.bo.Enchere;
|
||||
import java.util.List;
|
||||
|
||||
public interface EnchereRepository {
|
||||
Enchere findByIdUserAndIdArticle(int idUser, int idArticle);
|
||||
List<Enchere> findByIdUser(int idUser);
|
||||
List<Enchere> findByIdArticle(int idArticle);
|
||||
void save(Enchere enchere);
|
||||
void deleteArticle(int idArticle);
|
||||
void delete(int id);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public class EnchereRepositoryImpl implements EnchereRepository {
|
||||
@Override
|
||||
public Enchere mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
Enchere enchere = new Enchere();
|
||||
enchere.setId(rs.getInt("id"));
|
||||
enchere.setNoUtilisateur(rs.getInt("no_utilisateur"));
|
||||
enchere.setNoArticle(rs.getInt("no_article"));
|
||||
enchere.setMontantEnchere(rs.getInt("montant_enchere"));
|
||||
@@ -39,11 +40,6 @@ public class EnchereRepositoryImpl implements EnchereRepository {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enchere findByIdUserAndIdArticle(int idUser, int idArticle) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Enchere> findByIdUser(int idUser) {
|
||||
String sql = "SELECT * FROM ENCHERES WHERE no_utilisateur = ? AND isDelete = 0";
|
||||
@@ -51,6 +47,12 @@ public class EnchereRepositoryImpl implements EnchereRepository {
|
||||
return encheres;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(int id) {
|
||||
String sql = "UPDATE ENCHERES SET isDelete = 1 WHERE id = ?";
|
||||
jdbcTemplate.update(sql, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Enchere> findByIdArticle(int idArticle) {
|
||||
String sql = "SELECT * FROM ENCHERES WHERE no_article = ? AND isDelete = 0";
|
||||
@@ -67,10 +69,4 @@ public class EnchereRepositoryImpl implements EnchereRepository {
|
||||
enchere.setId(keyHolder.getKey().intValue());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteArticle(int idArticle) {
|
||||
String sql = "UPDATE ENCHERES SET isDelete = 1 WHERE id = ?";
|
||||
jdbcTemplate.update(sql, idArticle);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package fr.eni.enchere.interceptor;
|
||||
|
||||
import fr.eni.enchere.bll.EnchereService;
|
||||
import fr.eni.enchere.bll.UserService;
|
||||
import fr.eni.enchere.bo.Enchere;
|
||||
import fr.eni.enchere.bo.UserProfil;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
@@ -11,14 +13,18 @@ import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class UserInterceptor implements HandlerInterceptor {
|
||||
|
||||
private final UserService userService;
|
||||
private final EnchereService enchereService;
|
||||
|
||||
@Autowired
|
||||
public UserInterceptor(UserService userService) {
|
||||
public UserInterceptor(UserService userService, EnchereService enchereService) {
|
||||
this.userService = userService;
|
||||
this.enchereService = enchereService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -27,8 +33,13 @@ public class UserInterceptor implements HandlerInterceptor {
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication != null && authentication.isAuthenticated() && !authentication.getName().equals("anonymousUser")) {
|
||||
UserProfil user = this.userService.utilisateurByName(authentication.getName());
|
||||
List<Enchere> enchere = this.enchereService.enchereByUser(user.getId());
|
||||
double encheresSum = enchere.stream()
|
||||
.mapToDouble(ench -> ench.getMontantEnchere()) // Mappez chaque enchère à son montant
|
||||
.sum();
|
||||
if (modelAndView != null && modelAndView.getViewName() != null && !modelAndView.getViewName().startsWith("redirect:")) {
|
||||
modelAndView.addObject("user", user);
|
||||
modelAndView.addObject("enchereUser", encheresSum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ home.button.end = End
|
||||
home.button.next = Next
|
||||
home.button.previous = Previous
|
||||
home.credit = My credits:
|
||||
home.credit.enchere = My auctions :
|
||||
home.nav.enchere = Auctions
|
||||
home.nav.vend = Sell an item
|
||||
home.nav.login = Register / Log in
|
||||
@@ -117,6 +118,7 @@ article.details.label.amount = Amount
|
||||
article.details.button.bid = Bid
|
||||
article.details.address.unknown = Unknown address
|
||||
article.details.validation.amount.required = Bid amount is required.
|
||||
article.details.retrait = Pickup done
|
||||
|
||||
edit.article.title = Edit my article
|
||||
edit.article.update = Edit
|
||||
|
||||
@@ -17,6 +17,7 @@ home.button.end = Fin
|
||||
home.button.next = Suivant
|
||||
home.button.previous = Pr\u00e9cedent
|
||||
home.credit = Mes cr\u00e9dits :
|
||||
home.credit.enchere = Mes ench\u00e9res :
|
||||
home.nav.enchere = Encheres
|
||||
home.nav.vend = Vendre un article
|
||||
home.nav.login = S'inscrire / Se connecter
|
||||
@@ -119,6 +120,7 @@ article.details.label.amount = Montant
|
||||
article.details.button.bid = Ench\u00E9rir
|
||||
article.details.address.unknown = Adresse inconnue
|
||||
article.details.validation.amount.required = Le montant de l'ench\u00E8re est requis.
|
||||
article.details.retrait = Retrait effectu\u00E8
|
||||
|
||||
|
||||
edit.article.title = Modifier mon article
|
||||
|
||||
4803
src/main/resources/logs/eni.log
Normal file
4803
src/main/resources/logs/eni.log
Normal file
File diff suppressed because one or more lines are too long
@@ -1,21 +1,27 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
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
|
||||
const achatsCheckboxes = document.querySelectorAll('#achatsOptions input[type=checkbox]');
|
||||
const ventesCheckboxes = document.querySelectorAll('#ventesOptions input[type=checkbox]');
|
||||
// Logique pour désactiver/activer les checkboxes
|
||||
const achatsCheckboxes = document.querySelectorAll('#achatsOptions input[type=checkbox]');
|
||||
const ventesCheckboxes = document.querySelectorAll('#ventesOptions input[type=checkbox]');
|
||||
|
||||
if (value === 'achats') {
|
||||
achatsCheckboxes.forEach(checkbox => checkbox.disabled = false);
|
||||
ventesCheckboxes.forEach(checkbox => checkbox.disabled = true);
|
||||
} else if (value === 'ventes') {
|
||||
achatsCheckboxes.forEach(checkbox => checkbox.disabled = true);
|
||||
ventesCheckboxes.forEach(checkbox => checkbox.disabled = false);
|
||||
}
|
||||
if (value === 'achats') {
|
||||
achatsCheckboxes.forEach(checkbox => checkbox.disabled = false);
|
||||
ventesCheckboxes.forEach(checkbox => {
|
||||
checkbox.checked = false;
|
||||
checkbox.disabled = true;
|
||||
});
|
||||
} 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
|
||||
console.log("Achats checkboxes disabled:", achatsCheckboxes[0].disabled);
|
||||
console.log("Ventes checkboxes disabled:", ventesCheckboxes[0].disabled);
|
||||
// Log pour voir l'état des checkboxes
|
||||
console.log("Achats checkboxes disabled:", achatsCheckboxes[0].disabled);
|
||||
console.log("Ventes checkboxes disabled:", ventesCheckboxes[0].disabled);
|
||||
};
|
||||
});
|
||||
@@ -17,30 +17,28 @@
|
||||
<div class="col-md-6" th:if="${#authentication.principal != 'anonymousUser'}">
|
||||
<!-- Zone de recherche -->
|
||||
<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 class="mb-4">
|
||||
<select class="form-control" name="searchCategory">
|
||||
<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>
|
||||
</div>
|
||||
<!-- Achats et Ventes -->
|
||||
|
||||
</div>
|
||||
<div class="col-md-12" th:if="${#authentication.principal == 'anonymousUser'}">
|
||||
<!-- Zone de recherche -->
|
||||
<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 class="mb-4">
|
||||
<select class="form-control" name="searchCategory">
|
||||
<option th:value="${categories}" th:text="#{home.search.cat}"></option>
|
||||
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}" ></option>
|
||||
<option value="" th:text="#{home.search.cat}"></option>
|
||||
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}" th:selected="${category.id == session.searchCategory}"></option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- Achats et Ventes -->
|
||||
|
||||
</div>
|
||||
<!-- Colonne pour le bouton de recherche -->
|
||||
<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="mb-3">
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="typeTransaction" id="achats" value="achats" onchange="toggleCheckbox(this.value)">
|
||||
<label class="form-check-label" for="achats" th:text="#{home.sell.title}"></label>
|
||||
<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.buy.title}"></label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Checkboxes pour Achats -->
|
||||
<div id="achatsOptions">
|
||||
<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>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@@ -74,22 +72,22 @@
|
||||
<!-- Boutons radio pour Ventes -->
|
||||
<div class="mb-3">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Checkboxes pour Ventes -->
|
||||
<div id="ventesOptions">
|
||||
<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>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@@ -163,7 +161,7 @@
|
||||
<ul class="pagination justify-content-center">
|
||||
<!-- Bouton pour la première page -->
|
||||
<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">«</span>
|
||||
<span th:text="#{home.button.first}"></span>
|
||||
</a>
|
||||
@@ -171,7 +169,7 @@
|
||||
|
||||
<!-- Bouton pour la page précédente -->
|
||||
<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">‹</span>
|
||||
<span th:text="#{home.button.previous}"></span>
|
||||
</a>
|
||||
@@ -180,13 +178,13 @@
|
||||
<!-- 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))}">
|
||||
<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>
|
||||
</th:block>
|
||||
|
||||
<!-- Bouton pour la page suivante -->
|
||||
<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">›</span>
|
||||
<span th:text="#{home.button.next}"></span>
|
||||
</a>
|
||||
@@ -194,7 +192,7 @@
|
||||
|
||||
<!-- Bouton pour la dernière page -->
|
||||
<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">»</span>
|
||||
<span th:text="#{home.button.end}"></span>
|
||||
</a>
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
<h4 th:text="'Article - offre en cours'"></h4>
|
||||
</div>
|
||||
<div class="card-header" th:unless="${#dates.format(article.dateFinEnch, 'yyyy-MM-dd')} > ${#dates.format(#dates.createNow(), 'yyyy-MM-dd')}">
|
||||
<h4 th:text="'Article - offre remporté par ' + (${#authentication.getName() == maxEncherePseudo ? 'vous' : maxEncherePseudo})"></h4>
|
||||
<h4 th:if="${maxEncherePseudo} != null" th:text="'Article - offre remporté par ' + (${#authentication.getName() == maxEncherePseudo ? 'vous' : maxEncherePseudo})"></h4>
|
||||
<h4 th:unless="${maxEncherePseudo} != null" th:text="'Article - Personne n\'a fait d\'offre'"></h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
@@ -68,6 +69,10 @@
|
||||
<div class="mt-5 d-flex justify-content-end align-items-center">
|
||||
<a class="btn btn-secondary mr-2" href="/enchere" th:text="#{edit.article.back}"></a>
|
||||
<a th:if="${#strings.equals(user.getPseudo(), article.pseudoUtilisateur)} and ${#dates.format(article.dateDebutEnch, 'yyyy-MM-dd')} > ${#dates.format(#dates.createNow(), 'yyyy-MM-dd')}" class="btn btn-primary" th:href="@{/article/edit(id=${article.id})}" th:text="#{edit.article.update}"></a>
|
||||
<form th:if="${#dates.format(article.dateFinEnch, 'yyyy-MM-dd')} < ${#dates.format(#dates.createNow(), 'yyyy-MM-dd')} and ${#strings.equals(user.getPseudo(), article.pseudoUtilisateur)}" th:action="@{/enchere/enchereDone}" method="post">
|
||||
<input type="hidden" id="id" name="id" th:value="${article.id}">
|
||||
<button type="submit" class="btn btn-primary" th:text="#{article.details.retrait}"></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,11 +24,12 @@
|
||||
<img href="/enchere" src="/img/logo.png" width="70" height="70" alt="Logo">
|
||||
<label href="/enchere" class="text-light"><strong>ENI-Encheres</strong></label>
|
||||
</a>
|
||||
<div th:if="${#authentication.principal != 'anonymousUser'}" class="text-light text-center d-flex justify-content-center align-items-center"><!-- Assurez-vous de remplacer "fa-credit-card" par la classe de votre icône -->
|
||||
<div th:if="${#authentication.principal != 'anonymousUser'}" class="text-light text-center d-flex justify-content-center align-items-center">
|
||||
<span th:text="#{home.credit} + ${user.getCredit()} + ' '"></span>
|
||||
<i class="fas fa-coins"></i>
|
||||
<i class="fas fa-coins ml-1"></i>
|
||||
<span th:text="#{home.credit.enchere} + ${enchereUser}" class="ml-4"></span>
|
||||
<i class="fas fa-coins ml-1"></i>
|
||||
</div>
|
||||
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
Reference in New Issue
Block a user