diff --git a/assets/styles/app.css b/assets/styles/app.css index 6d727b5b5cffb63d91195791bfb8e14ab9cbce3b..192bf3b864dc9374d81f36294850aec6abeb54c2 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -329,4 +329,28 @@ button { .non_aime { color: lightgray; +} + +.container-mes-annonces { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + background-color: rgba(223, 220, 220, 0.952); + box-shadow: 0 2px 4px rgba(0, 0, 0, .5), 0 5px 10px rgba(0, 0, 0, .5); +} + +.btn-navigation { + width: 100%; + background-color: white; + color: black; + padding: 10px 20px; + text-align: center; + margin: 4px 2px; + cursor: pointer; + border-radius: 8px; +} +.btn-navigation.active { + background-color: #4CAF50; + color: white; } \ No newline at end of file diff --git a/config/routes.yaml b/config/routes.yaml index 8769cc57020d7513d69f6011c96aa4f94cf7f731..eaea01c73b4b1e33a76f49d05303d699270480fa 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -18,4 +18,8 @@ filtres: filtmes_annonces_filtres: path: /mes_annonces/filtres/ - controller: App\Controller\ModifUserController::mesAnnoncesFiltres \ No newline at end of file + controller: App\Controller\ModifUserController::mesAnnoncesFiltres + +filtmes_annonces_repondues_filtres: + path: /mes_annonces_repondues/filtres/ + controller: App\Controller\ModifUserController::mesAnnoncesReponduesFiltres \ No newline at end of file diff --git a/src/Controller/ModifUserController.php b/src/Controller/ModifUserController.php index 4dcd861a7812a833ca6f66fbb0a80d4cee064b3f..388ad12bf7ab8b176af878c23d046b998a970f27 100644 --- a/src/Controller/ModifUserController.php +++ b/src/Controller/ModifUserController.php @@ -178,6 +178,26 @@ class ModifUserController extends AbstractController ]); } + #[Route('/mes_annonces_repondues', name: 'app_mes_annonces_repondues')] + public function mesAnnoncesRepondues(Request $request, EntityManagerInterface $entityManager, PrestationsRepository $prestationsRepository): Response + { + $user = $this->getUser(); + + $prestations = $prestationsRepository->findMesAnnoncesRepondues($user->getId()); + + $entrees = $entityManager->getRepository(Prestations::class)->findAll(); + $prets = $entityManager->getRepository(Pret::class)->findAll(); + $services = $entityManager->getRepository(Services::class)->findAll(); + + return $this->render('security/mes_annonces_repondues.html.twig', [ + 'controller_name' => 'ModifUserController', + 'entrees' => $entrees, + 'prets' => $prets, + 'services' => $services, + 'prestations' => $prestations, + ]); + } + #[Route('', name: 'mes_annonces_filtres')] public function mesAnnoncesFiltres(Request $request, EntityManagerInterface $entityManager, PrestationsRepository $prestationsRepository): Response { @@ -214,6 +234,42 @@ class ModifUserController extends AbstractController ]); } + #[Route('', name: 'mes_annonces_repondues_filtres')] + public function mesAnnoncesReponduesFiltres(Request $request, EntityManagerInterface $entityManager, PrestationsRepository $prestationsRepository): Response + { + $user = $this->getUser(); + $keyword = $request->query->get('keyword'); + $prixMin = $request->query->get('prixMin'); + $prixMax = $request->query->get('prixMax'); + $typePrestation = $request->query->get('type_prestation'); + if ($prixMin == '') $prixMin = null; + if ($prixMax == '') $prixMax = null; + + $res = []; + $prestations = $prestationsRepository->findMesAnnoncesRepondues($user->getId()); + $prestations2 = $prestationsRepository->findFilteredPrestations($keyword, $prixMin, $prixMax, $typePrestation); + + foreach ($prestations as $pres) { + foreach ($prestations2 as $pres2) { + if ($pres === $pres2) + array_push($res,$pres); + } + } + + + $entrees = $entityManager->getRepository(Prestations::class)->findAll(); + $prets = $entityManager->getRepository(Pret::class)->findAll(); + $services = $entityManager->getRepository(Services::class)->findAll(); + + return $this->render('security/mes_annonces_repondues.html.twig', [ + 'controller_name' => 'ModifUserController', + 'entrees' => $entrees, + 'prets' => $prets, + 'services' => $services, + 'prestations' => $res, + ]); + } + #[Route('/userCoord', name: 'app_user_coord')] public function userCoord(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response { diff --git a/src/Repository/PrestationsRepository.php b/src/Repository/PrestationsRepository.php index 7f556c0753d5283f768b1ee792fa6ca2341b3560..95ae60c2bff5513df8c027f2283d9b4e0e47e790 100644 --- a/src/Repository/PrestationsRepository.php +++ b/src/Repository/PrestationsRepository.php @@ -95,4 +95,15 @@ class PrestationsRepository extends ServiceEntityRepository return $queryBuilder->getQuery()->getResult(); } + + public function findMesAnnoncesRepondues(int $id = null): array + { + $queryBuilder = $this->createQueryBuilder('p'); + + $queryBuilder + ->andWhere('p.client = :id') + ->setParameter('id', $id); + + return $queryBuilder->getQuery()->getResult(); + } } diff --git a/templates/annonce_creation/creation.html.twig b/templates/annonce_creation/creation.html.twig index 4128756f484206f18822c0a7da2426d287116b82..7c557341510c4a56f27fd5ce002b49e1412fe788 100644 --- a/templates/annonce_creation/creation.html.twig +++ b/templates/annonce_creation/creation.html.twig @@ -3,7 +3,6 @@ {% block title %}Création d'annonce{% endblock %} {% block body %} -<h1>Création d'annonce</h1> <div class="container-connexion3"> <div class="container-connexion"> {{ form_start(form) }} diff --git a/templates/security/mes_annonces.html.twig b/templates/security/mes_annonces.html.twig index 3f88c3120c061ba2c0f607a5f60137b8110aac26..5fcd4108f2663746ade2211e147bc9e3ec276ed5 100644 --- a/templates/security/mes_annonces.html.twig +++ b/templates/security/mes_annonces.html.twig @@ -3,11 +3,6 @@ {% block title %}Mes annonces{% endblock %} {% block body %} -<style> - .example-wrapper { margin: 1em auto; width: 95%; font: 18px/1.5 sans-serif; align: "center"; } - .example-wrapper code { padding: 2px 6px; } - .footer { margin: 15px; position: absolute; bottom: 0; } -</style> <div class="container-recherche"> <form id="filterForm" method="post"> <input class="txt_form" type="text" name="keyword" value="{{ app.request.query.get('keyword') }}" placeholder="Mot-clé"> @@ -37,6 +32,11 @@ </script> </div> +<div class="container-mes-annonces"> + <a id="btnPostees" class="btn-navigation active" href="{{ path('app_mes_annonces') }}">Annonces postées</a> + <a id="btnRepondues" class="btn-navigation" href="{{ path('app_mes_annonces_repondues') }}">Annonces répondues</a> +</div> + <div class="prestations"> {% for prestation in prestations %} <div class="prestation"> @@ -55,29 +55,18 @@ {% endfor %} </div> -{#<div class="prestations"> -{% for entree in entrees %} - {% for pret in prets %} - {% if pret.id == entree.id %} - <div class="prestation"> - <p class="tag_pret" id="tag">Prêt</p> - <p>{{ entree.titre }}</p> - <p>{{ entree.CoutPrestation }} florains</p> - <a href="{{ path('annonce_detail', {'id': entree.id}) }}"><button class="tag_pret">Voir le détail >></button></a> - </div> - {% endif %} - {% endfor %} - {% for service in services %} - {% if service.id == entree.id %} - <div class="prestation"> - <p class="tag_service" id="tag">Service</p> - <p>{{ entree.titre }}</p> - <p>{{ entree.CoutPrestation }} florains</p> - <a href="{{ path('annonce_detail', {'id': entree.id}) }}"><button class="tag_service">Voir le détail >></button></a> - </div> - {% endif %} - {% endfor %} -{% endfor %} -</div>#} +<script> + const btnPostees = document.getElementById('btnPostees'); + const btnRepondues = document.getElementById('btnRepondues'); + + btnPostees.addEventListener('click', () => { + btnPostees.classList.add('active'); + btnRepondues.classList.remove('active'); + }); + btnRepondues.addEventListener('click', () => { + btnRepondues.classList.add('active'); + btnPostees.classList.remove('active'); + }); +</script> {% endblock %} diff --git a/templates/security/mes_annonces_repondues.html.twig b/templates/security/mes_annonces_repondues.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..031c8c3f21573418a916ee807013bb72d2175182 --- /dev/null +++ b/templates/security/mes_annonces_repondues.html.twig @@ -0,0 +1,72 @@ +{% extends 'base.html.twig' %} + +{% block title %}Mes annonces{% endblock %} + +{% block body %} +<div class="container-recherche"> + <form id="filterForm" method="post"> + <input class="txt_form" type="text" name="keyword" value="{{ app.request.query.get('keyword') }}" placeholder="Mot-clé"> + <input class="txt_form prix" type="number" name="prixMin" value="{{ app.request.query.get('prixMin') }}" placeholder="€ minimum"> + <input class="txt_form prix" type="number" name="prixMax" value="{{ app.request.query.get('prixMax') }}" placeholder="€ maximum"> + <select class="txt_form" name="type_prestation"> + <option value="">Tous les types de prestation</option> + <option value="pret" {% if app.request.query.get('type_prestation') == 'pret' %} selected {% endif %}>Prêts</option> + <option value="service" {% if app.request.query.get('type_prestation') == 'service' %} selected {% endif %}>Services</option> + </select> + <button type="submit" class="btn_recherche">Filtrer</button> + </form> + + <script> + document.getElementById("filterForm").addEventListener("submit", function(event) { + event.preventDefault(); + + var keyword = document.getElementsByName("keyword")[0].value; + var prixMin = document.getElementsByName("prixMin")[0].value; + var prixMax = document.getElementsByName("prixMax")[0].value; + var typePrestation = document.getElementsByName("type_prestation")[0].value; + + var url = "../../mes_annonces_repondues/filtres/?keyword=" + encodeURIComponent(keyword) + "&prixMin=" + encodeURIComponent(prixMin) + "&prixMax=" + encodeURIComponent(prixMax) + "&type_prestation=" + encodeURIComponent(typePrestation); + + window.location.href = url; + }); + </script> +</div> + +<div class="container-mes-annonces"> + <a id="btnPostees" class="btn-navigation" href="{{ path('app_mes_annonces') }}">Annonces postées</a> + <a id="btnRepondues" class="btn-navigation active" href="{{ path('app_mes_annonces_repondues') }}">Annonces répondues</a> +</div> + +<div class="prestations"> + {% for prestation in prestations %} + <div class="prestation"> + {% if prestation.getType() == 'Pret' %} + <p class="tag_pret" id="tag">Prêt</p> + <p>{{ prestation.titre }}</p> + <p>{{ prestation.CoutPrestation }} florains</p> + <a href="{{ path('annonce_detail', {'id': prestation.id}) }}"><button class="tag_pret">Voir le détail >></button></a> + {% elseif prestation.getType() == 'Service' %} + <p class="tag_service" id="tag">Service</p> + <p>{{ prestation.titre }}</p> + <p>{{ prestation.CoutPrestation }} florains</p> + <a href="{{ path('annonce_detail', {'id': prestation.id}) }}"><button class="tag_service">Voir le détail >></button></a> + {% endif %} + </div> + {% endfor %} +</div> + +<script> + const btnPostees = document.getElementById('btnPostees'); + const btnRepondues = document.getElementById('btnRepondues'); + + btnPostees.addEventListener('click', () => { + btnPostees.classList.add('active'); + btnRepondues.classList.remove('active'); + }); + + btnRepondues.addEventListener('click', () => { + btnRepondues.classList.add('active'); + btnPostees.classList.remove('active'); + }); +</script> +{% endblock %}