Skip to content

Commit

Permalink
Récupère les tournées de l'utilisateur + celles des organismes enfants
Browse files Browse the repository at this point in the history
Issue: #198975
Change-Id: I0c6131d216cff4f37186bf5b1f82e1b2f6c2996f
  • Loading branch information
Emilie Genton committed Dec 11, 2023
1 parent 21de30a commit 08f9aca
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import static fr.sdis83.remocra.db.model.remocra.Tables.ORGANISME;
import static fr.sdis83.remocra.db.model.remocra.Tables.TRANSFERTS_AUTOMATISES;
import static fr.sdis83.remocra.db.model.remocra.Tables.TYPE_ORGANISME;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.SQLDataType.BIGINT;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand All @@ -13,6 +15,7 @@
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.jooq.CommonTableExpression;
import org.jooq.Condition;
import org.jooq.DSLContext;
import org.jooq.impl.DSL;
Expand Down Expand Up @@ -101,4 +104,24 @@ public OrganismeModel readByEmail(String email) {
}
return o;
}

public List<Long> getOrganismeAvecEnfants(Long idOrganisme) {
CommonTableExpression<?> cte =
name("org")
.fields("id")
.as(
context
.selectDistinct(ORGANISME.ID)
.from(ORGANISME)
.where(ORGANISME.ID.eq(idOrganisme))
.unionAll(
context
.select(ORGANISME.ID)
.from((DSL.table("org")).crossJoin(ORGANISME))
.where(
ORGANISME.ORGANISME_PARENT.eq(
DSL.field(name("org", "id"), BIGINT)))));

return context.withRecursive(cte).selectFrom(cte).fetchInto(Long.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ public TourneeRepository(DSLContext context, TransactionManager transactionManag
* l'utilisateur et donc de son organisme * de si un autre utilisateur est en train de la faire ou
* non
*
* @param idOrganisme : id de l'organisme de l'utilisateur
* @param idsOrganisme : liste des ids de l'organisme de l'utilisateur et ces organismes enfants
* @return la liste des tournées disponibles
*/
public List<TourneeModel> getTourneesDisponibles(Long idOrganisme) {
public List<TourneeModel> getTourneesDisponibles(List<Long> idsOrganisme) {
return context
.select(TOURNEE.ID, TOURNEE.NOM, TOURNEE.AFFECTATION, TOURNEE.RESERVATION)
.from(TOURNEE)
.where(TOURNEE.RESERVATION.isNull())
.and(TOURNEE.AFFECTATION.eq(idOrganisme))
.and(TOURNEE.AFFECTATION.in(idsOrganisme))
.and(TOURNEE.ETAT.lessThan(100))
.fetch(
(RecordMapper<Record, TourneeModel>)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.sdis83.remocra.usecase.tournee;

import com.google.inject.Inject;
import fr.sdis83.remocra.repository.OrganismesRepository;
import fr.sdis83.remocra.repository.TourneeRepository;
import fr.sdis83.remocra.web.model.mobilemodel.ImmutableTourneeModel;
import fr.sdis83.remocra.web.model.mobilemodel.TourneeModel;
Expand All @@ -12,14 +13,16 @@

public class TourneeUseCase {
@Inject TourneeRepository tourneeRepository;
@Inject OrganismesRepository organismesRepository;

@Inject
public TourneeUseCase(TourneeRepository tourneeRepository) {
this.tourneeRepository = tourneeRepository;
}

public List<TourneeModel> getTourneesDisponibles(Long idOrganisme) {
return tourneeRepository.getTourneesDisponibles(idOrganisme);
public List<TourneeModel> getTourneesDisponibles(Long idOrganismeUtilisateur) {
List<Long> idsOrganisme = organismesRepository.getOrganismeAvecEnfants(idOrganismeUtilisateur);
return tourneeRepository.getTourneesDisponibles(idsOrganisme);
}

public ReservationTourneesResponse reserveTournees(List<Long> listIdTournees, Long idUser) {
Expand Down

0 comments on commit 08f9aca

Please sign in to comment.