Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions .idea/checkstyle-idea.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

90 changes: 50 additions & 40 deletions src/main/java/fr/diginamic/tp_grasps/ReservationController.java
Original file line number Diff line number Diff line change
@@ -1,77 +1,87 @@
package fr.diginamic.tp_grasps;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Currency;


import fr.diginamic.tp_grasps.beans.Client;
import fr.diginamic.tp_grasps.beans.Reservation;
import fr.diginamic.tp_grasps.beans.TypeReservation;
import fr.diginamic.tp_grasps.daos.ClientDao;
import fr.diginamic.tp_grasps.daos.TypeReservationDao;
import fr.diginamic.tp_grasps.daos.IClientDao;
import fr.diginamic.tp_grasps.daos.ITypeReservationDao;
import fr.diginamic.tp_grasps.daos.impl.ClientDao;
import fr.diginamic.tp_grasps.daos.impl.TypeReservationDao;
import fr.diginamic.tp_grasps.factory.IReservationFactory;
import fr.diginamic.tp_grasps.factory.impl.ReservationFactory;
import fr.diginamic.tp_grasps.services.IReservationService;
import fr.diginamic.tp_grasps.services.impl.ReservationService;
import fr.diginamic.tp_grasps.utils.DateUtils;

/** Controlleur qui prend en charge la gestion des réservations client
* @author RichardBONNAMY
*
*/
public class ReservationController {

/** formatter */
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");

/** DAO permettant d'accéder à la table des clients */
private ClientDao clientDao = new ClientDao();

/** DAO permettant d'accéder à la table des types de réservation */
private TypeReservationDao typeReservationDao = new TypeReservationDao();

/** Méthode qui créée une réservation pour un client à partir des informations transmises
//private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");

/**
* DAO permettant d'accéder à la table des clients
*/
private IClientDao clientDao = new ClientDao();

/**
* DAO permettant d'accéder à la table des types de réservation
*/
private ITypeReservationDao typeReservationDao = new TypeReservationDao();

/**
* DAO permettant d'accéder à la table réservation
*/
private IReservationFactory reservationFactory = new ReservationFactory();

/**
* Services métier pour la réservation
*/
private IReservationService reservationService = new ReservationService();


/**
* Méthode qui créée une réservation pour un client à partir des informations transmises
*
* @param params contient toutes les infos permettant de créer une réservation
* @return Reservation
*/
public Reservation creerReservation(Params params) {

// 1) Récupération des infos provenant de la classe appelante
String identifiantClient = params.getIdentifiantClient();
String dateReservationStr = params.getDateReservation();
String typeReservation = params.getTypeReservation();
int nbPlaces = params.getNbPlaces();

// 2) Conversion de la date de réservation en LocalDateTime
LocalDateTime dateReservation = toDate(dateReservationStr);


LocalDateTime dateReservation = DateUtils.formatStringToDateTime(dateReservationStr);

// 3) Extraction de la base de données des informations client
Client client = clientDao.extraireClient(identifiantClient);

// 4) Extraction de la base de données des infos concernant le type de la réservation
TypeReservation type = typeReservationDao.extraireTypeReservation(typeReservation);

// 5) Création de la réservation
Reservation reservation = new Reservation(dateReservation);
reservation.setNbPlaces(nbPlaces);
reservation.setClient(client);

Reservation reservation = reservationFactory.getInstance(dateReservation, client, nbPlaces);

// 6) Ajout de la réservation au client
client.getReservations().add(reservation);

// 7) Calcul du montant total de la réservation qui dépend:
// - du nombre de places
// - de la réduction qui s'applique si le client est premium ou non
double total = type.getMontant() * nbPlaces;
if (client.isPremium()) {
reservation.setTotal(total*(1-type.getReductionPourcent()/100.0));
}
else {
reservation.setTotal(total);
}
return reservation;
}
reservation.setTotal(reservationService.calculeMontantReservation(client, type, reservation));

/** Transforme une date au format String en {@link LocalDateTime}
* @param dateStr date au format String
* @return LocalDateTime
*/
private LocalDateTime toDate(String dateStr) {

return LocalDateTime.parse(dateStr, formatter);
return reservation;
}
}
4 changes: 2 additions & 2 deletions src/main/java/fr/diginamic/tp_grasps/beans/Reservation.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import javax.persistence.ManyToOne;

@Entity
public class Reservation {
public class Reservation {

@Id
private Long id;

Expand Down
14 changes: 14 additions & 0 deletions src/main/java/fr/diginamic/tp_grasps/daos/IClientDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package fr.diginamic.tp_grasps.daos;

import fr.diginamic.tp_grasps.beans.Client;

public interface IClientDao {

/**
* @param id
* @return
*
* Méthode interface pour extraire le client
*/
Client extraireClient(String id);
}
14 changes: 14 additions & 0 deletions src/main/java/fr/diginamic/tp_grasps/daos/ITypeReservationDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package fr.diginamic.tp_grasps.daos;

import fr.diginamic.tp_grasps.beans.TypeReservation;

public interface ITypeReservationDao {

/**
* @param type
* @return
*
* Méthode interface pour extraire le type de réservation
*/
TypeReservation extraireTypeReservation(String type);
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
package fr.diginamic.tp_grasps.daos;
package fr.diginamic.tp_grasps.daos.impl;

import java.util.List;
import java.util.Optional;

import fr.diginamic.tp_grasps.beans.Client;
import fr.diginamic.tp_grasps.daos.IClientDao;

public class ClientDao {
public class ClientDao implements IClientDao {

private static Client[] clients = {new Client("1", true), new Client("2", true), new Client("3", false)};


/**
* @param id
* @return
*
* Méthode de la classe qui vient faire une extraction d'un client
*/

@Override
public Client extraireClient(String id) {

Optional<Client> opt = List.of(clients).stream().filter(c->c.getIdentifiantClient().equals(id)).findAny();
if (opt.isPresent()) {
return opt.get();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
package fr.diginamic.tp_grasps.daos;
package fr.diginamic.tp_grasps.daos.impl;

import java.util.List;
import java.util.Optional;

import fr.diginamic.tp_grasps.beans.TypeReservation;
import fr.diginamic.tp_grasps.daos.ITypeReservationDao;

public class TypeReservationDao {
public class TypeReservationDao implements ITypeReservationDao {

private static TypeReservation[] types = {new TypeReservation("TH", 150.0, 15.0), new TypeReservation("CI", 10.9, 0.0)};


/**
* @param type
* @return
*
* Méthode de la classe qui vient faire une extraction du type de réservation
*/
@Override
public TypeReservation extraireTypeReservation(String type) {

Optional<TypeReservation> opt = List.of(types).stream().filter(t->t.getType().equals(type)).findAny();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package fr.diginamic.tp_grasps.factory;

import fr.diginamic.tp_grasps.beans.Client;
import fr.diginamic.tp_grasps.beans.Reservation;

import java.time.LocalDateTime;

public interface IReservationFactory {

/**
* @param dateTime
* @param client
* @param nbPlaces
* @return
*
* Méthode interface pour créer une instance
*/
Reservation getInstance(LocalDateTime dateTime, Client client, int nbPlaces);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package fr.diginamic.tp_grasps.factory.impl;

import fr.diginamic.tp_grasps.beans.Client;
import fr.diginamic.tp_grasps.beans.Reservation;
import fr.diginamic.tp_grasps.factory.IReservationFactory;

import java.time.LocalDateTime;

public class ReservationFactory implements IReservationFactory {

/**
* @param dateTime
* @param client
* @param nbPlaces
* @return
*
* Vient Créer une instance de la réservation
*/
public Reservation getInstance(LocalDateTime dateTime, Client client, int nbPlaces) {
Reservation reservation = new Reservation(dateTime);
reservation.setNbPlaces(nbPlaces);
reservation.setClient(client);

return reservation;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package fr.diginamic.tp_grasps.services;

import fr.diginamic.tp_grasps.beans.Client;
import fr.diginamic.tp_grasps.beans.Reservation;
import fr.diginamic.tp_grasps.beans.TypeReservation;

public interface IReservationService {

/**
* @param client
* @param typeReservation
* @param reservation
* @return
*
* Méthode interface pour calculer le total de la réservation
*/
double calculeMontantReservation (Client client, TypeReservation typeReservation, Reservation reservation);
}
Loading