diff --git a/model.rar b/model.rar
new file mode 100644
index 0000000000000000000000000000000000000000..0073e7106ffd001a03b3a18c0cbbdef29ec1cf1d
Binary files /dev/null and b/model.rar differ
diff --git a/scenario/my_foodora.ini b/scenario/my_foodora.ini
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dd2dacb906c11b995bc6b272a6577fab102fc4bf 100644
--- a/scenario/my_foodora.ini
+++ b/scenario/my_foodora.ini
@@ -0,0 +1,80 @@
+# initial login
+
+login ceo 123456789
+
+###############
+# Registering Users
+###############
+
+registerManager 698697556 cto cto cto@mail.fr 987654321 0.0,0.0 22/03/1985
+
+registerRestaurant 350697523 AuBonResto resto1 mail@mail.fr resto1pwd 0.02,0.03
+registerRestaurant 350697523 LaBonneBouffe resto2 mail@mail.fr resto2pwd -0.50,0.25
+registerRestaurant 350697523 AuCarreIrlandais resto3 mail@mail.fr resto3pwd 0.02,-0.3
+registerRestaurant 350697523 CafeDeLaPaix resto4 mail@mail.fr resto4pwd 23.2,-0.03
+registerRestaurant 350697523 Lolivier resto5 mail@mail.fr resto5pwd 0.02,0.36
+
+registerCourier 649878446 Marc cour_marc marc@mail.fr marc_pwd 0.9,-9.0 22/03/1975
+registerCourier 498784515 Henri cour_henri henri@mail.fr henri_pwd -0.9,-9.0 12/09/1989
+registerCourier 498484516 Luc cour_luc henri@mail.fr luc_pwd 0.9,19.0 27/12/1995
+
+registerCustomer 943684597 Louise custo_louise louise@mail.fr louise_pwd 5.3,9.1 23/02/1994
+registerCustomer 465131879 Jean custo_jean jean@mail.fr jean_pwd 3.3,-9.1 18/11/1985
+registerCustomer 648451648 Patrick custo_patrick patrick@mail.fr patrick_pwd 4.3,-3.1 12/02/1998
+registerCustomer 198745487 Mathieu custo_mathieu mathieu@mail.fr mathieu_pwd -8.3,-0.1 28/13/1958
+registerCustomer 877887446 Etienne custo_etienne etienne@mail.fr etienne_pwd -6.3,-6.1 21/12/1980
+registerCustomer 489446548 Jeanne custo_jeanne jeanne@mail.fr jeanne_pwd 7.3,-3.1 03/08/1989
+registerCustomer 489546844 Marie custo_marie marie@mail.fr marie_pwd 12.3,1.9 21/01/1997
+
+###############
+# Switching to restaurant
+###############
+
+logout
+
+login resto1 resto1pwd
+
+###############
+# Adding Dishes
+###############
+
+addDishRestaurantMenu steackFrites MainDish normal 14.50
+addDishRestaurantMenu salad Starter vegetarian 5.80
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 12.50
+addDishRestaurantMenu tartare Starter glutenFree 8.50
+addDishRestaurantMenu brownie Dessert normal 14.50
+addDishRestaurantMenu fruits Dessert vegetarian 4.50
+
+###############
+# Creating Menus
+###############
+
+createMeal menuEnfant FullMeal
+createMeal menuBoucher FullMeal
+createMeal menuVegetarien FullMeal
+createMeal menuDuMidi FullMeal
+createMeal menuLeger HalfMeal
+
+###############
+# Adding Menus to Meals
+###############
+
+addDishToMeal steackFrites menuEnfant
+addDishToMeal salad menuEnfant
+addDishToMeal cookie menuEnfant
+
+addDishToMeal tartare menuBoucher
+addDishToMeal steackFrites menuBoucher
+addDishToMeal brownie menuBoucher
+
+addDishToMeal salad menuVegetarien
+addDishToMeal mushroomPie menuVegetarien
+addDishToMeal fruits menuVegetarien
+
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+
+addDishToMeal salad menuLeger
+addDishToMeal mushroomPie menuLeger
\ No newline at end of file
diff --git a/scenario/testScenario1.txt b/scenario/testScenario1.txt
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..45cd71f2a1aaeea1b244e72c0d62316c276b2a1a 100644
--- a/scenario/testScenario1.txt
+++ b/scenario/testScenario1.txt
@@ -0,0 +1,267 @@
+###############
+# showing users
+###############
+
+login ceo 123456789
+
+showCustomer
+showCourier
+showRestaurantTop
+
+###############
+# register a few more users
+###############
+
+registerRestaurant 123756753 LaSalleHaute resto6 resto6@mail.fr resto6pwd 2.02,-1.03
+registerRestaurant 789321345 AuBistrot resto7 resto7@mail.fr resto7pwd -5.50,3.25
+
+registerCourier 123786541 Lucie cour_lucie lucie@mail.fr lucie_pwd 1.5,-2.0 23/03/1998
+# registerCourier 789534123 Alexandre cour_alexandre alexandre@mail.fr alexandre_pwd -0.8,2.1 14/05/1982
+registerCourier 789534123 Pascal cour_pascal pascal@mail.fr pascal_pwd -0.8,2.1 14/05/1978
+
+registerCustomer 943684597 Jacques custo_jacques jacques@mail.fr jacques_pwd 2.3,-9.8 23/02/1975
+registerCustomer 465131879 Gabrielle custo_gabrielle gabrielle@mail.fr gabrielle_pwd -3.3,2.1 18/03/1987
+
+# show restaurants
+showRestaurantTop
+
+# show customers
+showCustomer
+
+# logout
+logout
+
+###############
+# login, adding and populate a meal to each restaurant
+# 5 uniques Full meals
+# 2 uniques Half meals
+###############
+
+
+login resto2 resto2pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 9.50
+addDishRestaurantMenu brownie Dessert normal 12.50
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuEnfant FullMeal
+addDishToMeal steackFrites menuEnfant
+addDishToMeal salad menuEnfant
+addDishToMeal cookie menuEnfant
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+# login implies logout of the current logged entity
+login resto3 resto3pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 9.50
+addDishRestaurantMenu brownie Dessert normal 12.50
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuBoucher FullMeal
+addDishToMeal tartare menuBoucher
+addDishToMeal steackFrites menuBoucher
+addDishToMeal brownie menuBoucher
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+login resto4 resto4pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 9.50
+addDishRestaurantMenu brownie Dessert normal 12.50
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuVegetarien FullMeal
+addDishToMeal salad menuVegetarien
+addDishToMeal mushroomPie menuVegetarien
+addDishToMeal fruits menuVegetarien
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+
+login resto5 resto5pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.50
+addDishRestaurantMenu salad Starter vegetarian 5.80
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 12.50
+addDishRestaurantMenu tartare Starter glutenFree 7.60
+addDishRestaurantMenu brownie Dessert normal 12.30
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+login resto6 resto6pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.50
+addDishRestaurantMenu salad Starter vegetarian 5.80
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 12.50
+addDishRestaurantMenu tartare Starter glutenFree 8.50
+addDishRestaurantMenu brownie Dessert normal 14.50
+addDishRestaurantMenu fruits Dessert vegetarian 4.50
+createMeal menuLegerPlatDessert HalfMeal
+addDishToMeal mushroomPie menuLegerPlatDessert
+addDishToMeal cookie menuLegerPlatDessert
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+
+login resto7 resto7pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 8.50
+addDishRestaurantMenu brownie Dessert normal 14.50
+addDishRestaurantMenu fruits Dessert vegetarian 4.50
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+###############
+# setting meal of the week for some restaurant (2,3,5,6)
+###############
+
+# !!!!!
+# Offers are stocked for each customer, waiting for connection to spam.
+# !!!!!
+
+login resto2 resto2pwd
+setSpecialOffer menuEnfant
+
+login resto3 resto3pwd
+setSpecialOffer menuDuMidi
+
+login resto5 resto5pwd
+setSpecialOffer menuLegerEntreePlat
+
+login resto6 resto6pwd
+setSpecialOffer menuLegerPlatDessert
+
+# Show all the restaurant and their menu :
+
+login ceo 123456789
+showRestaurantTop
+
+# Before testing command let's add afidelity card :
+
+associateCard custo_gabrielle Point
+associateCard custo_louise Lottery
+
+# Login a few customers
+
+login custo_jacques jacques_pwd
+# login implies logout of the current logged entity
+login custo_gabrielle gabrielle_pwd
+login custo_louise louise_pwd
+
+createOrder resto6 maCommande
+addItemToOrder maCommande menuDuMidi
+addItemToOrder maCommande salad
+addItemToOrder maCommande menuLegerPlatDessert
+
+endOrder maCommande
+
+login custo_gabrielle gabrielle_pwd
+
+createOrder resto5 maCommande2
+addItemToOrder maCommande2 menuDuMidi
+addItemToOrder maCommande2 cookie
+addItemToOrder maCommande2 menuLegerEntreePlat
+
+endOrder maCommande2
+
+#########"
+# Meal Of the week accuracy
+### resto 2 & 3 & 4 have exactly the same prices, menuMidi is meal of the week for resto3
+
+createOrder resto4 maCommande3
+createOrder resto3 maCommande4
+createOrder resto2 maCommande5
+# 5% reduc
+addItemToOrder maCommande3 menuDuMidi
+# 10% reduc
+addItemToOrder maCommande4 menuDuMidi
+# full price
+addItemToOrder maCommande5 salad
+addItemToOrder maCommande5 steackFrites
+addItemToOrder maCommande5 cookie
+
+endOrder maCommande5
+endOrder maCommande3
+endOrder maCommande4
+
+# last order, to test profit calculation
+
+createOrder resto2 maCommande6
+addItemToOrder maCommande6 menuDuMidi
+addItemToOrder maCommande6 menuLegerEntreePlat
+addItemToOrder maCommande6 cookie
+
+# at this point no courier available
+endOrderAt maCommande6 05/04/2017
+login ceo 123456789
+# free a courier
+offDuty cour_pascal
+login custo_gabrielle gabrielle_pwd
+
+endOrderAt maCommande6 05/04/2017
+
+# login again manager
+
+login ceo 123456789
+
+# initial profit
+showTotalProfit
+
+# set a markup profit strategy
+setProfitPolicy markup 6.0
+showTotalProfit
+
+# set a serviceFee strategy
+setProfitPolicy ServiceFee 5.0
+showTotalProfit
+
+setProfitPolicy deliveryCost 3.0
+showTotalProfit
+showProfitBetween 01/05/2017 10/05/2017
+
+showCourier
+showCourierOrdered ASC
+showCourierOrdered DESC
+
+###########
+# other stuff :
+###########
+
+# onDuty & offDuty
+offDuty cour_marc
+showCourier
+onDuty cour_marc
+showCourier
+
+showCustomer
+
+logout
\ No newline at end of file
diff --git a/src/Cards/FidelityCard.java b/src/Cards/FidelityCard.java
index c52064bd4bd67f8a22b868fff6ef578ef4c09d40..48783c904f09203ebd9bf6e9521b0b80cec1be70 100644
--- a/src/Cards/FidelityCard.java
+++ b/src/Cards/FidelityCard.java
@@ -25,7 +25,6 @@ public abstract class FidelityCard implements VisitableCard {
 	}
 	
 	public abstract String returnType();
-
 	
 
 }
diff --git a/src/Cli/Clui.java b/src/Cli/Clui.java
index adfa162248c1203103814b63121b40704bb7a398..2a6e3e7e2f0a90632141b9e148d33e590419eec6 100644
--- a/src/Cli/Clui.java
+++ b/src/Cli/Clui.java
@@ -11,12 +11,14 @@ import Commands.AssociateCard;
 import Commands.CreateMeal;
 import Commands.CreateOrder;
 import Commands.EndOrder;
+import Commands.EndOrderAt;
 import Commands.Help;
 import Commands.Logout;
 import Commands.OffDuty;
 import Commands.OnDuty;
 import Commands.RegisterCourier;
 import Commands.RegisterCustomer;
+import Commands.RegisterManager;
 import Commands.RegisterRestaurant;
 import Commands.RemoveSpecialOffer;
 import Commands.RenameMeal;
@@ -25,6 +27,7 @@ import Commands.SetDeliveryPolicy;
 import Commands.SetProfitPolicy;
 import Commands.SetSpecialOffer;
 import Commands.ShowCourier;
+import Commands.ShowCourierOrdered;
 import Commands.ShowCustomer;
 import Commands.ShowMeal;
 import Commands.ShowMenuItem;
@@ -37,6 +40,7 @@ import Exception.ExceptionUnknownDishType;
 import Exception.ExceptionUnknownMealType;
 import Exception.ExceptionUnknownStartegyType;
 import Exception.ExceptionUnknownTypeOfUser;
+import User.Customer;
 
 public class Clui {
 	
@@ -57,6 +61,7 @@ public class Clui {
 		this.listOfCommand.add(new CreateMeal());
 		this.listOfCommand.add(new CreateOrder());
 		this.listOfCommand.add(new EndOrder());
+		this.listOfCommand.add(new EndOrderAt());
 		this.listOfCommand.add(new Help());
 		this.listOfCommand.add(new Login());
 		this.listOfCommand.add(new Logout());
@@ -64,6 +69,7 @@ public class Clui {
 		this.listOfCommand.add(new OnDuty());
 		this.listOfCommand.add(new RegisterCourier());
 		this.listOfCommand.add(new RegisterCustomer());
+		this.listOfCommand.add(new RegisterManager());
 		this.listOfCommand.add(new RegisterRestaurant());
 		this.listOfCommand.add(new RemoveSpecialOffer());
 		this.listOfCommand.add(new RenameMeal());
@@ -72,6 +78,7 @@ public class Clui {
 		this.listOfCommand.add(new SetProfitPolicy());
 		this.listOfCommand.add(new SetSpecialOffer());
 		this.listOfCommand.add(new ShowCourier());
+		this.listOfCommand.add(new ShowCourierOrdered());
 		this.listOfCommand.add(new ShowCustomer());
 		this.listOfCommand.add(new ShowMeal());
 		this.listOfCommand.add(new ShowMenuItem());
@@ -88,35 +95,51 @@ public class Clui {
 		return null;
 	}
 
-	public void executeCommand(String command) throws ExceptionUnknownMealType, NumberFormatException, ExceptionUnknownDishType, ExceptionUnknownStartegyType, ExceptionUnknownTypeOfUser{
-		StringTokenizer st = new StringTokenizer(command);
-		String commandName = st.nextToken();
-		ArrayList<String> arguments = new ArrayList<String>();
-		while (st.hasMoreTokens()) {
-			arguments.add(st.nextToken());
-	    }
-		
-		Command commandAsked;
-		commandAsked = getCommand(commandName);
-		if(commandAsked != null){
-			try{
-				if(commandAsked.isGoodArgument(arguments)){
-					commandAsked.execute(arguments, foodora, activeUser);
-				}else{
-					System.out.println("Error in the arguments.");
+	public void executeCommand(String command){
+		if(!(command.equals("") || command.substring(0, 1).equals("#"))){
+			StringTokenizer st = new StringTokenizer(command);
+			String commandName = st.nextToken();
+			ArrayList<String> arguments = new ArrayList<String>();
+			while (st.hasMoreTokens()) {
+				arguments.add(st.nextToken());
+		    }
+			
+			Command commandAsked;
+			commandAsked = getCommand(commandName);
+			if(commandAsked != null){
+				try{
+					if(commandAsked.isGoodArgument(arguments)){
+						try {
+							commandAsked.execute(arguments, foodora, activeUser);
+						} catch (NumberFormatException | ExceptionUnknownMealType | ExceptionUnknownDishType
+								| ExceptionUnknownStartegyType | ExceptionUnknownTypeOfUser | java.lang.NullPointerException e) {
+							// TODO Auto-generated catch block
+							System.out.println("ERROR with command "+commandName+ " : " + e.getMessage());
+							//e.printStackTrace();
+						}
+					}else{
+						System.out.println("Error in the arguments.");
+					}
+				}catch (errorWrongNumberOfParams ex) {
+				     System.out.println(ex);
 				}
-			}catch (errorWrongNumberOfParams ex) {
-			     System.out.println(ex);
+				catch (errorWrongFormatValue ex) {
+				     System.out.println(ex);
+				}
+			}else{
+				System.out.println("Unknown command.");
 			}
-			catch (errorWrongFormatValue ex) {
-			     System.out.println(ex);
+			
+			// lifeTimeFunction
+			if(activeUser.getUser() instanceof Customer){
+				Customer c = (Customer) activeUser.getUser();
+				c.checkForPendingOffer();
 			}
-		}else{
-			System.out.println("Unknown command.");
+			
 		}
 	}
 	
-	public void launchClui() throws errorWrongNumberOfParams, errorWrongFormatValue, ExceptionUnknownMealType, NumberFormatException, ExceptionUnknownDishType, ExceptionUnknownStartegyType, ExceptionUnknownTypeOfUser{
+	public void launchClui(){
 		System.out.println("Welcome to MyFoodora system, type help <> in order to have all the possible commands");
 		while(true){
 			String command = Input.string("===================\n"
diff --git a/src/Cli/Command.java b/src/Cli/Command.java
index efceeb0773a8ced2452570e8c72016263a493d7e..a8683ea9d6fd6a08d0748f103d7301573a8e41d3 100644
--- a/src/Cli/Command.java
+++ b/src/Cli/Command.java
@@ -26,12 +26,14 @@ public abstract class Command {
 	
 	public boolean isGoodArgument(ArrayList<String> arguments) throws errorWrongNumberOfParams,errorWrongFormatValue{
 		if(arguments.size() != listOfArgs.length){
-			throw new errorWrongNumberOfParams("Error : "+Integer.toString(arguments.size())+" parameter insteed of "+Integer.toString(listOfArgs.length));
+			throw new errorWrongNumberOfParams("Error : "+ commandName +" : "+Integer.toString(arguments.size())+" parameter insteed of "+Integer.toString(listOfArgs.length));
 		}
 		int i = 0;
 		for (String arg : arguments) {
-			listOfArgs[i].isTockenCorrect(arg); // throw une erreur, faut la catch au dessus !
-			i++;
+			if(listOfArgs[i].isTockenCorrect(arg))
+				i++;
+			else
+				throw new errorWrongFormatValue("Error : "+ commandName +" : " + i + " arg is wrong format");
 		}
 		 // trow une erreur
 		return true;
diff --git a/src/Cli/Token.java b/src/Cli/Token.java
index f0d81608d86e7b021d20cd29b3889e1da44e79ba..740ada0a141afcdd8127ba3fc5eb60727025c00a 100644
--- a/src/Cli/Token.java
+++ b/src/Cli/Token.java
@@ -37,7 +37,7 @@ public class Token {
 					return true;
 				break;
 			case position:
-				if(_value.matches("-?\\d+(\\.\\d+)\\,\\d+(\\.\\d+)?"))
+				if(_value.matches("-?\\d+(\\.\\d+)\\,-?\\d+(\\.\\d+)?"))
 					return true;
 				break;
 			case decimal:
diff --git a/src/Commands/AddDishRestaurantMenu.java b/src/Commands/AddDishRestaurantMenu.java
index ec315130e320aa54f6f9586353363a246e0507cd..be581f385c7c77123065de3b95afa223821660bb 100644
--- a/src/Commands/AddDishRestaurantMenu.java
+++ b/src/Commands/AddDishRestaurantMenu.java
@@ -32,7 +32,7 @@ public class AddDishRestaurantMenu extends Command {
 		if(activeUser.getUser() instanceof Restaurant){
 			Restaurant r = (Restaurant) activeUser.getUser();
 			r.addDish(arg.get(1), arg.get(0), arg.get(2), Double.parseDouble(arg.get(3)));
-			System.out.println("Customer added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Dish added : " + r.getDishByName(arg.get(0)));
 		}else{
 			System.out.println("You need to be a logged Restaurant in order to access this function");
 		}
diff --git a/src/Commands/AddItemToOrder.java b/src/Commands/AddItemToOrder.java
index 27735c6b90f2640763f90e3a86188b3be55204e2..b5417b3cd46bd15ad6f360e935afa583ba64035f 100644
--- a/src/Commands/AddItemToOrder.java
+++ b/src/Commands/AddItemToOrder.java
@@ -6,11 +6,8 @@ import Cli.Command;
 import Cli.Token;
 import Core.ActiveUserContext;
 import Core.MyFoodora;
-import Exception.ExceptionUnknownDishType;
-import Exception.ExceptionUnknownMealType;
 import Order.Order;
 import User.Customer;
-import User.Restaurant;
 
 public class AddItemToOrder extends Command {
 
@@ -28,6 +25,7 @@ public class AddItemToOrder extends Command {
 		if(activeUser.getUser() instanceof Customer){
 			Customer c = (Customer) activeUser.getUser();
 			Order o = c.getOrderByName(arg.get(0));
+			//System.out.println(c.getListOrder());
 			o.addItemByName(arg.get(1));
 			System.out.println(arg.get(1) + " added in "+arg.get(0)+".");
 		}else{
diff --git a/src/Commands/AssociateCard.java b/src/Commands/AssociateCard.java
index 840f349eff97461f52bca37d8add00575ecc92e1..873607bb350957970705513156c479a9549caf90 100644
--- a/src/Commands/AssociateCard.java
+++ b/src/Commands/AssociateCard.java
@@ -29,6 +29,7 @@ public class AssociateCard extends Command {
 		if(activeUser.getUser() instanceof Manager){
 			Manager m = (Manager) activeUser.getUser();
 			Customer c = (Customer) foodora.getUserByUsername(arg.get(0));
+			System.out.println("You are choosing a "+arg.get(1)+" card.");
 			c.registerFidelityPlan(arg.get(1));
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
diff --git a/src/Commands/EndOrder.java b/src/Commands/EndOrder.java
index 5de3bb6423a98029b8141b3fce7e90dd5ce5fdea..eba1a55bc784f30b841304bb8a00b5e31b4b8248 100644
--- a/src/Commands/EndOrder.java
+++ b/src/Commands/EndOrder.java
@@ -15,8 +15,7 @@ public class EndOrder extends Command {
 
 	public EndOrder() {
 		super("endOrder",
-				new Token[]{new Token(Token.TypeToken.str,"orderName"),
-							new Token(Token.TypeToken.date,"orderDate")}
+				new Token[]{new Token(Token.TypeToken.str,"orderName")}
 		);
 		// TODO Auto-generated constructor stub
 	}
@@ -26,8 +25,8 @@ public class EndOrder extends Command {
 		// TODO Auto-generated method stub
 		if(activeUser.getUser() instanceof Customer){
 			Customer c = (Customer) activeUser.getUser();
-			c.getOrderByName(arg.get(0)).finalize();
-			System.out.println(arg.get(1) + " finalized the "+arg.get(0)+".");
+			System.out.println("finalising the command : "+ arg.get(0));
+			c.placeOrder(c.getOrderByName(arg.get(0)), foodora);
 		}else{
 			System.out.println("You need to be a logged Customer in order to access this function");
 		}
diff --git a/src/Commands/EndOrderAt.java b/src/Commands/EndOrderAt.java
new file mode 100644
index 0000000000000000000000000000000000000000..14a6a1063aa713d91e0e5f63d95d1b429800fcd5
--- /dev/null
+++ b/src/Commands/EndOrderAt.java
@@ -0,0 +1,44 @@
+package Commands;
+
+import java.util.ArrayList;
+
+import Cli.Command;
+import Cli.Token;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownDishType;
+import Exception.ExceptionUnknownMealType;
+import Exception.ExceptionUnknownStartegyType;
+import Exception.ExceptionUnknownTypeOfUser;
+import Order.Order;
+import Others.Date;
+import User.Customer;
+
+public class EndOrderAt extends Command {
+
+	public EndOrderAt() {
+		super("endOrderAt",
+				new Token[]{new Token(Token.TypeToken.str,"orderName"),
+							new Token(Token.TypeToken.date,"orderDate")}
+		);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) throws NumberFormatException {
+		// TODO Auto-generated method stub
+		if(activeUser.getUser() instanceof Customer){
+			Customer c = (Customer) activeUser.getUser();
+			Order o = (Order) c.getOrderByName(arg.get(0));
+			String[] parts = arg.get(1).split("/");
+			int day = Integer.parseInt(parts[0]);
+			int month = Integer.parseInt(parts[1]);
+			int year = Integer.parseInt(parts[2]);
+			System.out.println("finalising the command : "+ arg.get(0) + ", the : "+arg.get(1));
+			c.placeOrder(o, foodora,new Date(year,month,day));
+			//System.out.println(foodora.getGlobalHistoric());
+		}else{
+			System.out.println("You need to be a logged Customer in order to access this function");
+		}
+	}
+}
diff --git a/src/Commands/OffDuty.java b/src/Commands/OffDuty.java
index 59f9ab703f4676ed4fcc10e8f56b920198f7cf54..88fac869c41ce9f298b5718238ca67a19d2e0b78 100644
--- a/src/Commands/OffDuty.java
+++ b/src/Commands/OffDuty.java
@@ -27,7 +27,7 @@ public class OffDuty extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			Courier d = (Courier) foodora.getUserByUsername(arg.get(0));
 			d.setAvailable(true);
-			System.out.println(arg.get(0) + " in now on duty.");
+			System.out.println(arg.get(0) + " in now available.");
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
 		}
diff --git a/src/Commands/RegisterCourier.java b/src/Commands/RegisterCourier.java
index ba330da6abdf6a9e2690a8987e98c22d696aba8b..660b8a54dcad56451dbbe2d227c1a6f87b7318cd 100644
--- a/src/Commands/RegisterCourier.java
+++ b/src/Commands/RegisterCourier.java
@@ -8,6 +8,7 @@ import Core.ActiveUserContext;
 import Core.MyFoodora;
 import Exception.ExceptionUnknownTypeOfUser;
 import Others.Adress;
+import User.Courier;
 import User.Manager;
 import User.User;
 
@@ -33,7 +34,7 @@ public class RegisterCourier extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			// registerCourier 0123456789 resto1 resto1 mail password 0.01,0.02 22/03/1995
 			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, arg.get(6), "1", foodora, User.COURIER , "Human");
-			System.out.println("Courier added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Courier added : " + (Courier) foodora.getUserByUsername(arg.get(2)));
 		}else{
 			System.out.println("You need to be a manager in order to access this function");
 		}
diff --git a/src/Commands/RegisterCustomer.java b/src/Commands/RegisterCustomer.java
index a2609aa2ccd48788844a717a091cf5c1d6375357..99352b2bd13be62b6fe668b6346f275af9d99b96 100644
--- a/src/Commands/RegisterCustomer.java
+++ b/src/Commands/RegisterCustomer.java
@@ -8,6 +8,7 @@ import Core.ActiveUserContext;
 import Core.MyFoodora;
 import Exception.ExceptionUnknownTypeOfUser;
 import Others.Adress;
+import User.Customer;
 import User.Manager;
 import User.User;
 
@@ -33,7 +34,7 @@ public class RegisterCustomer extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			// registerRestaurant 0123456789 resto1 resto1 mail password 0.01,0.02 22/03/1995
 			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, arg.get(6), "1", foodora, User.CUSTOMER , "Human");
-			System.out.println("Customer added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Customer added : " + (Customer) foodora.getUserByUsername( arg.get(2)));
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
 		}
diff --git a/src/Commands/RegisterManager.java b/src/Commands/RegisterManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa2657c37a837b2eafbe52e60c41a9f52abd8752
--- /dev/null
+++ b/src/Commands/RegisterManager.java
@@ -0,0 +1,42 @@
+package Commands;
+
+import java.util.ArrayList;
+
+import Cli.Command;
+import Cli.Token;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownTypeOfUser;
+import Others.Adress;
+import User.Manager;
+import User.User;
+
+public class RegisterManager extends Command {
+
+	public RegisterManager() {
+		super("registerManager",
+				new Token[]{new Token(Token.TypeToken.integer,"tel")
+						,new Token(Token.TypeToken.str,"name")
+						,new Token(Token.TypeToken.str,"username")
+						,new Token(Token.TypeToken.str,"mail")
+						,new Token(Token.TypeToken.str,"password")
+						,new Token(Token.TypeToken.position,"adress")
+						,new Token(Token.TypeToken.date,"birthday")}
+		);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) throws NumberFormatException, ExceptionUnknownTypeOfUser {
+		// TODO Auto-generated method stub
+		if(activeUser.getUser() instanceof Manager){
+			Manager m = (Manager) activeUser.getUser();
+			// registerRestaurant 0123456789 resto1 resto1 mail password 0.01,0.02 22/03/1995
+			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, arg.get(6), "1", foodora, User.MANAGER , "Human");
+			System.out.println("Manager added : " + (Manager) foodora.getUserByUsername(arg.get(2)));
+		}else{
+			System.out.println("You need to be a logged Manager in order to access this function");
+		}
+	}
+
+}
diff --git a/src/Commands/RegisterRestaurant.java b/src/Commands/RegisterRestaurant.java
index 64459adec4bc0f194e5fb3bc920ced6aac9044ce..bb080186814512c5da85ba10308437fb8fcf5b25 100644
--- a/src/Commands/RegisterRestaurant.java
+++ b/src/Commands/RegisterRestaurant.java
@@ -33,7 +33,7 @@ public class RegisterRestaurant extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			// registerRestaurant 0123456789 resto1 resto1 mail password 0.01,0.02
 			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, "1", "1", foodora, User.RESTAURANT , "Moral");
-			System.out.println("Restaurant added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Restaurant added : " + (Restaurant) foodora.getUserByUsername(arg.get(2)));
 		}else{
 			System.out.println("You need to be a manager in order to access this function");
 		}
diff --git a/src/Commands/RunTest.java b/src/Commands/RunTest.java
index ff7e3013a21a5a6c6fc2c76b181b3db025f2b103..aee333360c7de7a0ef0fef9fdccb0aba1a72ed10 100644
--- a/src/Commands/RunTest.java
+++ b/src/Commands/RunTest.java
@@ -14,6 +14,7 @@ import Core.MyFoodora;
 import Exception.ExceptionUnknownDishType;
 import Exception.ExceptionUnknownMealType;
 import Exception.ExceptionUnknownStartegyType;
+import Exception.ExceptionUnknownTypeOfUser;
 import User.Manager;
 
 public class RunTest extends Command {
@@ -28,28 +29,15 @@ public class RunTest extends Command {
 
 	@Override
 	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) {
-		if(activeUser.getUser() instanceof Manager){
-			Clui clui = new Clui(foodora, activeUser);
-			String fileName = arg.get(0);
-
-			//read file into stream, try-with-resources
-			try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
-
-				stream.forEach(command -> {
-					try {
-						clui.executeCommand(command);
-					} catch (NumberFormatException | ExceptionUnknownMealType | ExceptionUnknownDishType | ExceptionUnknownStartegyType e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-				});
-
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		else{
-			System.out.println("You need to be a manager in order to access this function");
+		Clui clui = new Clui(foodora, activeUser);
+		String fileName = System.getProperty("user.dir") + "/" + arg.get(0);
+
+		//read file into stream, try-with-resources
+		try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
+			stream.forEach(command -> clui.executeCommand(command));
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
 		}
 	}
 
diff --git a/src/Commands/SetProfitPolicy.java b/src/Commands/SetProfitPolicy.java
index 85caeb825af2f41c5252f90eef8f90f1c81f6ac7..ef1301f6a243736ca2bc204133c405f062616c10 100644
--- a/src/Commands/SetProfitPolicy.java
+++ b/src/Commands/SetProfitPolicy.java
@@ -15,7 +15,8 @@ public class SetProfitPolicy extends Command {
 
 	public SetProfitPolicy() {
 		super("setProfitPolicy",
-				new Token[]{new Token(Token.TypeToken.str,"profityPolicyName")}
+				new Token[]{new Token(Token.TypeToken.str,"profityPolicyName"),
+							new Token(Token.TypeToken.decimal,"valueTargetted")}
 		);
 		// TODO Auto-generated constructor stub
 	}
@@ -26,7 +27,8 @@ public class SetProfitPolicy extends Command {
 		if(activeUser.getUser() instanceof Manager){
 			Manager m = (Manager) activeUser.getUser();
 			foodora.getContextTargetProfitStrategy().setStrategy(arg.get(0));
-			System.out.println(arg.get(0) + " is now the profit policy.");
+			foodora.getContextTargetProfitStrategy().execute(foodora, Double.parseDouble(arg.get(1)));
+			System.out.println(arg.get(0) + " is now the profit policy, target is : "+arg.get(1)+".");
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
 		}
diff --git a/src/Commands/SetSpecialOffer.java b/src/Commands/SetSpecialOffer.java
index c1f4dbea9148a4f82845024ef1994b679fa68e31..8bb0974c717d1fb2c67a251b8df411445217a367 100644
--- a/src/Commands/SetSpecialOffer.java
+++ b/src/Commands/SetSpecialOffer.java
@@ -23,7 +23,6 @@ public class SetSpecialOffer extends Command {
 		if(activeUser.getUser() instanceof Restaurant){
 			Restaurant r = (Restaurant) activeUser.getUser();
 			r.addMealOfTheWeek(foodora, arg.get(0));
-			
 			System.out.println("Meal "+arg.get(0)+" is now the Meal Of The Week.");
 		}else{
 			System.out.println("You need to be a logged Restaurant in order to access this function");
diff --git a/src/Commands/ShowCourier.java b/src/Commands/ShowCourier.java
index a4a6facaa57bcf451d2daa8cd2f1a4ebce1df838..339d2af4c9451b1ab5f6a24bc0e2e4068f4a416f 100644
--- a/src/Commands/ShowCourier.java
+++ b/src/Commands/ShowCourier.java
@@ -9,6 +9,7 @@ import Core.MyFoodora;
 import Exception.ExceptionUnknownDishType;
 import Exception.ExceptionUnknownMealType;
 import Exception.ExceptionUnknownStartegyType;
+import User.Courier;
 import User.Manager;
 
 public class ShowCourier extends Command {
@@ -22,7 +23,10 @@ public class ShowCourier extends Command {
 	@Override
 	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getListCourier().getList().toString());
+			System.out.println("\n*************\nlist of couriers :");
+			for(Courier c : foodora.getListCourier().getList()){
+				System.out.println(c.toString());
+			}
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/src/Commands/ShowCourierOrdered.java b/src/Commands/ShowCourierOrdered.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5dc0f2759263693fd4c9c742895958d4936a9f4
--- /dev/null
+++ b/src/Commands/ShowCourierOrdered.java
@@ -0,0 +1,33 @@
+package Commands;
+
+import java.util.ArrayList;
+
+import Cli.Command;
+import Cli.Token;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownDishType;
+import Exception.ExceptionUnknownMealType;
+import Exception.ExceptionUnknownStartegyType;
+import Exception.ExceptionUnknownTypeOfUser;
+import User.Manager;
+
+public class ShowCourierOrdered extends Command {
+	
+	public ShowCourierOrdered() {
+		super("showCourierOrdered", new Token[]{new Token(Token.TypeToken.str,"typeOrdering")});
+		// TODO Auto-generated constructor stub
+	}
+	// + "showCustomers <> for the currently logged on myFoodora manager to display thelist of customers\n"
+
+	@Override
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) {
+		if(activeUser.getUser() instanceof Manager){
+			System.out.println("\n*************\nlist of couriers ordered by "+arg.get(0)+" : \n" + foodora.getListCourierOrdered(arg.get(0)).toString());
+		}
+		else{
+			System.out.println("You need to be a manager in order to access this function");
+		}
+	}
+
+}
diff --git a/src/Commands/ShowCustomer.java b/src/Commands/ShowCustomer.java
index 4f6a131a6f73adf1c49acf0bf2acd787d248f5c3..ba4eab6cd250db509fa47f68ed4ce66899efe261 100644
--- a/src/Commands/ShowCustomer.java
+++ b/src/Commands/ShowCustomer.java
@@ -6,12 +6,13 @@ import Cli.Command;
 import Cli.Token;
 import Core.ActiveUserContext;
 import Core.MyFoodora;
+import User.Customer;
 import User.Manager;
 
 public class ShowCustomer extends Command {
 
 	public ShowCustomer() {
-		super("showCustomers", new Token[]{});
+		super("showCustomer", new Token[]{});
 		// TODO Auto-generated constructor stub
 	}
 	// + "showCustomers <> for the currently logged on myFoodora manager to display thelist of customers\n"
@@ -19,7 +20,10 @@ public class ShowCustomer extends Command {
 	@Override
 	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getListCustomer().getList().toString());
+			System.out.println("\n*************\nlist of customers :");
+			for(Customer c : foodora.getListCustomer().getList()){
+				System.out.println(c.toString());
+			}
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/src/Commands/ShowProfitBetween.java b/src/Commands/ShowProfitBetween.java
index b1f875b99ebfa319effaf7ac0c7ca608c152f29d..51694b7a95994e576200dc24ca96fb58fcfa4917 100644
--- a/src/Commands/ShowProfitBetween.java
+++ b/src/Commands/ShowProfitBetween.java
@@ -20,9 +20,13 @@ public class ShowProfitBetween extends Command {
 	// + "showCustomers <> for the currently logged on myFoodora manager to display thelist of customers\n"
 
 	@Override
-	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getGlobalProfit());
+			String[] db = arg.get(0).split("/");
+			String[] de = arg.get(1).split("/");
+			Others.Date dateBeg = new Others.Date(Integer.parseInt(db[2]), Integer.parseInt(db[1]), Integer.parseInt(db[0]));
+			Others.Date dateEnd = new Others.Date(Integer.parseInt(de[2]), Integer.parseInt(de[1]), Integer.parseInt(de[0]));
+			System.out.println("Total profit between "+dateBeg+" and "+ dateEnd +" : " + foodora.getProfitBetween(dateBeg, dateEnd));
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/src/Commands/ShowRestaurantTop.java b/src/Commands/ShowRestaurantTop.java
index 7863bfaeee0c052368b9b63ec96fb6db1316ebe4..9318d5b6411a523a587a4f9adbc11e24355476e7 100644
--- a/src/Commands/ShowRestaurantTop.java
+++ b/src/Commands/ShowRestaurantTop.java
@@ -38,7 +38,7 @@ public class ShowRestaurantTop extends Command {
 				listToSort.remove(mostSeller);
 			}
 			
-			System.out.println(sortListOfRestaurant.toString());
+			System.out.println("\n*************\nlist of restaurants :" + sortListOfRestaurant.toString());
 			
 		}
 		else{
diff --git a/src/Commands/ShowTotalProfit.java b/src/Commands/ShowTotalProfit.java
index 073454df9468ca8735388d598aee2b6fdafd3daa..d50a55f19411ca5d9d2f1b28df054bc7892a21b5 100644
--- a/src/Commands/ShowTotalProfit.java
+++ b/src/Commands/ShowTotalProfit.java
@@ -22,7 +22,7 @@ public class ShowTotalProfit extends Command {
 	@Override
 	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getGlobalProfit());
+			System.out.println("Total profit since the begining : " + foodora.getGlobalProfit());
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/model.di b/src/Commands/model.di
similarity index 100%
rename from model.di
rename to src/Commands/model.di
diff --git a/model.notation b/src/Commands/model.notation
similarity index 100%
rename from model.notation
rename to src/Commands/model.notation
diff --git a/model.uml b/src/Commands/model.uml
similarity index 100%
rename from model.uml
rename to src/Commands/model.uml
diff --git a/src/Core/Main.java b/src/Core/Main.java
index b606a9800ba3291b38b4012e9bb774d49ff0eed0..27f526a66212ff6ca4e397bd06c2bbe7960c2e51 100644
--- a/src/Core/Main.java
+++ b/src/Core/Main.java
@@ -23,15 +23,20 @@ public class Main {
 		// TODO Auto-generated constructor stub
 	}
 
-	public static void main(String[] args) throws ExceptionUnknownStartegyType, errorWrongNumberOfParams, errorWrongFormatValue, ExceptionUnknownDishType, ExceptionUnknownMealType, ExceptionUnknownTypeOfUser {
+	public static void main(String[] args)  {
 		// TODO Auto-generated method stub
-		MyFoodora foodora = new MyFoodora();
+		MyFoodora foodora = null;
+		foodora = new MyFoodora();
 		ActiveUserContext activeUser = new ActiveUserContext(foodora);
 		foodora.setMarkupPercentage(0.05);
 		foodora.setServiceFee(3.0);
 		Clui clui = new Clui(foodora,activeUser);
 		
 		Manager manager = new Manager(650588938, "ceo", "ceo", "ceo@centrale.supelec.fr", "123456789", new Adress(15.0, 10.0), true, "25/15/1955", "jacquo");
+		foodora.addManager(manager);
+		
+		clui.executeCommand("runtest scenario/my_foodora.ini");
+		clui.executeCommand("runtest scenario/testScenario1.txt");
 		
 		/*
 		foodora.addManager(manager);
diff --git a/src/Core/MyFoodora.java b/src/Core/MyFoodora.java
index d51e6abbdb8c773ad9ca4621b4f39fbfb66b133e..7a742893044ce33f8e3e4c27bfbf07b9f2b50a5f 100644
--- a/src/Core/MyFoodora.java
+++ b/src/Core/MyFoodora.java
@@ -3,6 +3,8 @@ package Core;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.TimeZone;
 
@@ -57,15 +59,26 @@ public class MyFoodora {
 	/** CONSTRUCTOR 
 	 * @throws ExceptionUnknownStartegyType **/
 	
-	public MyFoodora() throws ExceptionUnknownStartegyType{
-		this.contextTargetProfitStrategy = new ContextTargetProfitStrategy("DeliveryCost");
-		this.contextDeliveryPolicy = new ContextDeliveryStrategy("FairOccupation");
+	public MyFoodora(){
+		try {
+			this.contextTargetProfitStrategy = new ContextTargetProfitStrategy("DeliveryCost");
+		} catch (ExceptionUnknownStartegyType e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		try {
+			this.contextDeliveryPolicy = new ContextDeliveryStrategy("FairOccupation");
+		} catch (ExceptionUnknownStartegyType e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 		this.listRestaurant = new ListUser<Restaurant>();
 		this.listCustomer = new ListUser<Customer>();
 		this.listManager = new ListUser<Manager>();
 		this.listCourier = new ListUser<Courier>();
 		this.globalListUser = new ListUser<User>();
 		this.globalHistoric = new HistoricOrder();
+		this.listPendingOrder = new ArrayList<Order>();
 	}
 	
 	/** CUSTOM **/
@@ -91,6 +104,7 @@ public class MyFoodora {
 				return user;
 			}
 		}
+		System.out.println("\n /!\\ WARNING : " + username + " is not in user database.");
 		return null;	
 	}
 	
@@ -224,6 +238,19 @@ public class MyFoodora {
 	public ListUser<Courier> getListCourier() {
 		return listCourier;
 	}
+	public ListUser<Courier> getListCourierOrdered(String type) {
+		Collections.sort(listCourier.getList());
+		switch(type){
+			case "ASC":
+			break;
+			case "DESC":
+				Collections.reverse(listCourier.getList());
+			break;
+			default:
+				System.out.println("Warning, "+type+" is unkown, only ASC & DESC are known.");
+		}
+		return listCourier;
+	}
 	public HistoricOrder getGlobalHistoric() {
 		return globalHistoric;
 	}
@@ -314,13 +341,18 @@ public class MyFoodora {
 	}
 	
 	public int getNumberOfOrderLastMonth() {
-		Date date = null; // your date
+		/*
+		Date date = new Date(); // your date
 	    Calendar cal = Calendar.getInstance();
 	    cal.setTimeZone(TimeZone.getDefault());
 	    cal.setTime(date);
 	    int theYear = cal.get(Calendar.YEAR) + 1;
 	    int theMonth = cal.get(Calendar.MONTH) + 2;
 	    int theDay = cal.get(Calendar.DAY_OF_MONTH);
+	    */
+		int theDay = new java.util.Date().getDay();
+		int theMonth = new java.util.Date().getMonth() + 1 ;
+		int theYear = new java.util.Date().getYear() + 1900;
 		Others.Date today = new Others.Date(theYear, theMonth, theDay);
 		int lastMonth = 0;
 		int yearOfLastMonth = 0;
@@ -334,7 +366,7 @@ public class MyFoodora {
 		}
 		int nbOfOrder = 0;
 		for(Order order : this.globalHistoric.getListOrder()){
-			if((order.getDate().getIntMonth()== lastMonth)&(order.getDate().getIntYear()==yearOfLastMonth)){
+			if((order.getDate().getIntMonth()== lastMonth)&&(order.getDate().getIntYear()==yearOfLastMonth)){
 				nbOfOrder++;
 			}
 		}
@@ -346,7 +378,19 @@ public class MyFoodora {
 		double totalProfit = 0;
 		for(Order order : this.globalHistoric.getListOrder()){
 			if(order != null){
-				totalProfit = order.getPrice()*this.markupPercentage + this.serviceFee - this.deliveryCost ;
+				totalProfit += order.getPrice()*this.markupPercentage + this.serviceFee - this.deliveryCost ;
+			}
+		}
+		return totalProfit;
+	}
+	
+public double getProfitBetween(Others.Date dateBeg, Others.Date dateEnd){
+		
+		double totalProfit = 0;
+		for(Order order : this.globalHistoric.getListOrder()){
+			//System.out.println(dateBeg + " - " + order.getDate() + " - " + dateBeg.compareTo(order.getDate()));
+			if(dateBeg.compareTo(order.getDate()) <= 0 && dateEnd.compareTo(order.getDate()) >= 0){
+				totalProfit += order.getPrice()*this.markupPercentage + this.serviceFee - this.deliveryCost ;
 			}
 		}
 		
diff --git a/src/Item/Meal.java b/src/Item/Meal.java
index 9f4040dbfb4ea8110c24ff6a4953d8cb998c8557..862022616f1d906300eeb05ef79b10d366dce456 100644
--- a/src/Item/Meal.java
+++ b/src/Item/Meal.java
@@ -21,7 +21,7 @@ import Order.Order;
  */
 public abstract class Meal extends Item{
 	
-	ArrayList<Dish> listDish = new ArrayList<Dish>();
+	ArrayList<Dish> listDish = null;
 	String [][] patternTypeInMeal;
 	protected String typeOfMeal;
 	protected long nbOfSell;
@@ -33,7 +33,7 @@ public abstract class Meal extends Item{
 	public Meal(String name,String typeOfFood) {
 		super(name,typeOfFood);
 		this.nbOfSell = 0;
-		
+		this.listDish = new ArrayList<Dish>();
 	}
 	
 	/** add and remove dishes **/
@@ -43,22 +43,14 @@ public abstract class Meal extends Item{
 		int idInMenuInc=0;
 		for(String[] tabOfType : this.getPatternTypeInMeal()){
 			for(String typeFromPatternType : tabOfType){
-				if(typeFromPatternType==dish.getTypeInMeal()){
+				if(typeFromPatternType.toLowerCase().equals(dish.getTypeInMeal().toLowerCase())){
 					idInMenu=idInMenuInc;
 				}
 			}
 			idInMenuInc+=1;
 		}
 		if(idInMenu>-1){
-			if(listDish.get(idInMenu)==null){
-				listDish.set(idInMenu, dish);
-			}
-			else{
-				if(Cli.Confirm.text("This dish : "+listDish.get(idInMenu).toString()+" exists already. Do you want to replace it ?))")){
-					listDish.remove(idInMenu);
-					listDish.add(idInMenu, dish);
-				}
-			}
+			this.listDish.set(idInMenu, dish);
 		}
 	}
 	
@@ -139,11 +131,11 @@ public abstract class Meal extends Item{
 	@Override
 	public String toString(){
 		String s="";
-		s+="Menu : "+name;
-		s+="\nType of Food : "+typeOfFood;
-		s+="\nThis Menu contain : ";
+		s+="\n***\nMenu : "+name;
+		s+=", this Menu contain : ";
 		for(Dish d:listDish){
-			s+="\n"+d.toString();
+			if(d != null)
+				s+=d.toString();
 		}
 		return s;
 	}
diff --git a/src/Offers/MealOfTheWeek.java b/src/Offers/MealOfTheWeek.java
index 42fe167de0827c0047674d711ddb53debdc27d7e..75a6772832ef65d3e93f20c192074889fb20c0de 100644
--- a/src/Offers/MealOfTheWeek.java
+++ b/src/Offers/MealOfTheWeek.java
@@ -75,8 +75,6 @@ public class MealOfTheWeek implements ObservableOffer {
 		this.observers = observers;
 	}
 
-
-
 	@Override
 	public void notifyObservers(Restaurant r) {
 		if(this.changed){
diff --git a/src/Order/Order.java b/src/Order/Order.java
index c83efd3b05e1b7cfc7533999c38a77232c8669f3..a58851f0d82a741ff86cdbc138344bfb637f9861 100644
--- a/src/Order/Order.java
+++ b/src/Order/Order.java
@@ -40,13 +40,12 @@ public class Order implements Comparable<Order>{
 		
 		this.listDish = new ArrayList<Dish>();
 		this.listMeal = new ArrayList<Meal>();
-		nameOrder = _name;
-		restaurantAttached = _restaurant;
+		this.nameOrder = _name;
+		this.restaurantAttached = _restaurant;
 	}
 
 	/** CUSTOM **/
 	
-	@SuppressWarnings("deprecation")
 	public void finalize(){
 		int theDay = new java.util.Date().getDay();
 		int theMonth = new java.util.Date().getMonth() + 1 ;
@@ -64,6 +63,12 @@ public class Order implements Comparable<Order>{
 		foodora.getOrderPendingList().add(this);
 	}
 	
+	public void finalize(MyFoodora foodora, Others.Date _date){
+		this.date = _date;
+		finalized = true;
+		foodora.getOrderPendingList().add(this);
+	}
+	
 	public static ArrayList<Order> getListOfOrderInAPeriod(HistoricOrder historic,Period period){
 		ArrayList<Order> listOrder = new ArrayList<Order>();
 		int beginDay = period.getBeginingOfPeriod().getIntDay();
@@ -138,11 +143,13 @@ public class Order implements Comparable<Order>{
 		Item item = this.restaurantAttached.getDishByName(string);
 		if(item != null)
 			this.add((Dish) item);
-		item = this.restaurantAttached.getMealByName(string);
-		if(item != null)
-			this.add((Meal) item);
-		if(item == null)
-			System.out.println("Unknown item.");
+		else{
+			item = this.restaurantAttached.getMealByName(string);
+			if(item != null)
+				this.add((Meal) item);
+			else
+				System.out.println("Unknown item.");
+		}
 	}
 	
 	public void add(Dish d){
@@ -186,14 +193,18 @@ public class Order implements Comparable<Order>{
 	public double getPrice(){
 		price = 0;
 		MealOfTheWeek mealOfTheWeekAttachedToRestaurant = restaurantAttached.getMealOfTheWeek();
-		String nameOfTheMealOfTheWeek = null;
-		for(Meal m : restaurantAttached.getListOfMeal()){
-			if(mealOfTheWeekAttachedToRestaurant.getMeal().getName() == m.getName()){
-				nameOfTheMealOfTheWeek = m.getName();
+		String nameOfTheMealOfTheWeek = "";
+		if(mealOfTheWeekAttachedToRestaurant != null){
+			if(mealOfTheWeekAttachedToRestaurant.getMeal() != null){
+				for(Meal m : restaurantAttached.getListOfMeal()){
+					if(mealOfTheWeekAttachedToRestaurant.getMeal().getName().toLowerCase().equals(m.getName().toLowerCase())){
+						nameOfTheMealOfTheWeek = m.getName();
+					}
+				}
 			}
 		}
 		for(Meal meal : listMeal){
-			if(meal.getName() == nameOfTheMealOfTheWeek){
+			if(meal.getName().toLowerCase().equals(nameOfTheMealOfTheWeek.toLowerCase())){
 				price += meal.getPrice()*(1-restaurantAttached.getSpecialDiscountFactor());
 			}
 			else{
@@ -229,7 +240,9 @@ public class Order implements Comparable<Order>{
 		this.listMeal = listMeal;
 	}
 	
-	
+	public String toString(){
+		return "\n***\n Order, name : "+nameOrder+", date : "+ date +"\n Dishs : "+ listDish + "\n Meals : " + listMeal;
+	}
 
 	public void setDate(Others.Date date) {
 		this.date = date;
diff --git a/src/Others/Date.java b/src/Others/Date.java
index 69e97b2c685b501810828a1b7550cf52fe6a995f..f02845ce71c56864a3ce3ca71557b4f7addb33ca 100644
--- a/src/Others/Date.java
+++ b/src/Others/Date.java
@@ -71,5 +71,20 @@ public class Date {
 	public String toString() {
 		return "Date dd/mm/yyyy : " + day + "/" + month + "/" + year ;
 	}
-
+	
+	public int compareTo(Others.Date date) {
+		if(date.getIntYear() < this.getIntYear())
+			return 1;
+		else if(date.getIntMonth() < this.getIntMonth())
+			return 1;
+		else if(date.getIntDay() < this.getIntDay())
+			return 1;
+		else if(date.getIntYear() > this.getIntYear())
+			return -1;
+		else if(date.getIntMonth() > this.getIntMonth())
+			return -1;
+		else if(date.getIntDay() > this.getIntDay())
+			return -1;
+		return 0;
+	}
 }
diff --git a/src/StrategyProfit/TargetProfitDeliveryCost.java b/src/StrategyProfit/TargetProfitDeliveryCost.java
index ab58274fb5469b12cb9d4c3225c2c8425e756489..5fe6345433613d970b998f7e81a5d4fd04300b1d 100644
--- a/src/StrategyProfit/TargetProfitDeliveryCost.java
+++ b/src/StrategyProfit/TargetProfitDeliveryCost.java
@@ -17,6 +17,8 @@ public class TargetProfitDeliveryCost extends StrategyTargetProfitPolicy {
 			double newDeliveryCost = myFoodora.getServiceFee() + (lastMonthIncome*myFoodora.getMarkupPercentage()-targetProfit)/numberOfOrder;
 			if(newDeliveryCost > 0){
 					myFoodora.setDeliveryCost(newDeliveryCost);
+			}else{
+				System.out.println("Warning, new deliveryCost is negative, aborted. " + newDeliveryCost);
 			}
 		}
 	}
diff --git a/src/StrategyProfit/TargetProfitMarkup.java b/src/StrategyProfit/TargetProfitMarkup.java
index 76ac7aaacda1947f3c5188989957c87503f2ca51..d56852a773f5c8f57695cc78169ec40409b05aab 100644
--- a/src/StrategyProfit/TargetProfitMarkup.java
+++ b/src/StrategyProfit/TargetProfitMarkup.java
@@ -17,6 +17,8 @@ public class TargetProfitMarkup extends StrategyTargetProfitPolicy {
 			double newMarkupPercentage = (targetProfit-myFoodora.getServiceFee()*numberOfOrder+myFoodora.getDeliveryCost()*numberOfOrder)/lastMonthIncome;
 			if(newMarkupPercentage >0){
 				myFoodora.setMarkupPercentage(newMarkupPercentage);
+			}else{
+				System.out.println("Warning, new markupPercentage is negative, aborted. " + newMarkupPercentage);
 			}
 		}
 	}
diff --git a/src/StrategyProfit/TargetProfitServiceFee.java b/src/StrategyProfit/TargetProfitServiceFee.java
index 1a44d065ef71527dead21332f8275bc313c43d65..f550fe6e664f11b7fe9ed35d3fffcf2ff145e217 100644
--- a/src/StrategyProfit/TargetProfitServiceFee.java
+++ b/src/StrategyProfit/TargetProfitServiceFee.java
@@ -17,8 +17,11 @@ public class TargetProfitServiceFee extends StrategyTargetProfitPolicy {
 			double newServiceFee = (targetProfit-lastMonthIncome*myFoodora.getMarkupPercentage())/numberOfOrder + myFoodora.getDeliveryCost();
 			if(newServiceFee >0){
 				myFoodora.setServiceFee(newServiceFee);
-
+			}else{
+				System.out.println("Warning, new serviceFee is negative, aborted. " + newServiceFee);
 			}
+		}else{
+			System.out.println("Warning, no orders last month, new strategy can't be calculated");
 		}
 		
 	}
diff --git a/src/User/Courier.java b/src/User/Courier.java
index dba39a58d6dbf1e1c7a9d4480d8a9acdd5c2b73b..ab362145dc749fa895223b9636c188d31fd6a604 100644
--- a/src/User/Courier.java
+++ b/src/User/Courier.java
@@ -22,7 +22,7 @@ import Others.Position;
  */
 
 
-public class Courier extends HumanUser {
+public class Courier extends HumanUser{
 
 	
 	private Position position;
@@ -152,5 +152,16 @@ public class Courier extends HumanUser {
 		System.out.println("The courier " + this.name + " has refused the delivery");
 	}
 	
-
+	public String toString(){
+		return "Courier : "+name+", position : "+adress+", number of orders done : "+nbOfLivraison+", available : "+available;
+	}
+	
+	public int compareTo(User courier){
+		if(courier instanceof Courier){
+			Courier c = (Courier) courier;
+			return (int) c.getNbOfLivraison() - (int) this.getNbOfLivraison();
+		}
+		return -1;
+	}
+	
 }
diff --git a/src/User/Customer.java b/src/User/Customer.java
index 312b20e6516418fcdaa01edd700fe65b308ba0ee..e740b15d3fc9b7ee6135e57a00b2143e63f4bf0e 100644
--- a/src/User/Customer.java
+++ b/src/User/Customer.java
@@ -36,8 +36,13 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 	private FidelityCard card;
 	private IDCard idCard;
 	private ArrayList<Order> listOrder = new ArrayList<Order>();
+	private ArrayList<String> listOffer = new ArrayList<String>();
 	private long nbOfOfferReceived;
 	
+	public ArrayList<Order> getListOrder() {
+		return listOrder;
+	}
+
 	public Customer(long phoneNumber, String name, String username, String mail, String password,
 			Adress adress, boolean activated, String birthdayDate, String surname) {
 		super(phoneNumber, name, username, mail, password, adress, activated, birthdayDate, surname);
@@ -63,7 +68,8 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 
 	@Override
 	public String toString() {
-		return "Customer [spamAgree=" + spamAgree + ", historique=" + historic + ", card=" + card + "]";
+		return "\n***\n" + this.name + ", mail : " + this.mail + ", phone : " + Long.toString(this.phoneNumber) + ", position : " + this.adress +
+		", spamAgree : " + spamAgree + "\nhave been delivered : " + historic.getListOrder().size() + " times.\ncard : " + card.toString();
 	}
 	
 	
@@ -130,6 +136,81 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 		System.out.println("You have to pay " + price);
 	}
 	
+	public void placeOrder(Order order, MyFoodora foodora){
+		Restaurant restaurant = order.getRestaurantAttached();
+		for(Dish dish : order.getListDish()){
+			dish.setNbOfSell(dish.getNbOfSell() + 1);
+		}
+		for(Meal meal : order.getListMeal()){
+			meal.setNbOfSell(meal.getNbOfSell() + 1);
+		}
+		this.historic.addOrder(order);
+		restaurant.historic.addOrder(order);
+		Courier chosenCourier = foodora.getContextDeliveryPolicy().getStrategy().chooseCourier(restaurant, this,foodora.getListCourier().getList());
+		foodora.getOrderPendingList().add(order);
+		
+		// should be a waiting time here
+		if(chosenCourier == null)
+			System.out.println("No courier available now");
+		else{
+			chosenCourier.acceptDelivery(order);
+			foodora.getOrderPendingList().remove(order);
+			foodora.getGlobalHistoric().addOrder(order);
+			this.getListOrder().remove(order);
+			if (this.card instanceof PointFidelityCard){
+				((PointFidelityCard) this.card).setNbOfPoint(this.getPointInTheCard() + 1);
+			}
+			double price = order.getPrice()*(1 + foodora.getMarkupPercentage()) + foodora.getDeliveryCost() + foodora.getServiceFee();
+			boolean chance = false;
+			if(this.card instanceof LotteryFidelityCard){
+				chance = ((LotteryFidelityCard) this.card).getReduction();
+			}
+			if(chance){
+				price = price*0.75;
+			}
+			System.out.println("You have to pay " + price);
+		}
+	}
+	
+	public void placeOrder(Order order, MyFoodora foodora, Others.Date date){
+		Restaurant restaurant = order.getRestaurantAttached();
+		order.setDate(date);
+		if(!foodora.getOrderPendingList().contains(order)){
+			for(Dish dish : order.getListDish()){
+				dish.setNbOfSell(dish.getNbOfSell() + 1);
+			}
+			for(Meal meal : order.getListMeal()){
+				meal.setNbOfSell(meal.getNbOfSell() + 1);
+			}
+			this.historic.addOrder(order);
+			restaurant.historic.addOrder(order);
+			foodora.getOrderPendingList().add(order);
+		}
+		Courier chosenCourier = foodora.getContextDeliveryPolicy().getStrategy().chooseCourier(restaurant, this,foodora.getListCourier().getList());
+		
+		// should be a waiting time here
+		if(chosenCourier == null)
+			System.out.println("No courier available now");
+		else{
+			chosenCourier.acceptDelivery(order);
+			order.setDate(date);
+			foodora.getOrderPendingList().remove(order);
+			foodora.getGlobalHistoric().addOrder(order);
+			if (this.card instanceof PointFidelityCard){
+				((PointFidelityCard) this.card).setNbOfPoint(this.getPointInTheCard() + 1);
+			}
+			double price = order.getPrice()*(1 + foodora.getMarkupPercentage()) + foodora.getDeliveryCost() + foodora.getServiceFee();
+			boolean chance = false;
+			if(this.card instanceof LotteryFidelityCard){
+				chance = ((LotteryFidelityCard) this.card).getReduction();
+			}
+			if(chance){
+				price = price*0.75;
+			}
+			System.out.println("You have to pay " + price);
+			System.out.println("Your delivrer is " + chosenCourier.getName());
+		}
+	}
 	
 	/*
 	
@@ -205,25 +286,29 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 	public void registerFidelityPlan(String newTypeOfFidelityCard){
 		if(newTypeOfFidelityCard == this.card.returnType()){
 			System.out.println("You already have this card");}
-		else if ((newTypeOfFidelityCard != "Basic")&(newTypeOfFidelityCard != "Lottery")&(newTypeOfFidelityCard != "Point")){
+		else if (!
+				(newTypeOfFidelityCard.toLowerCase().equals("basic")
+				|| newTypeOfFidelityCard.toLowerCase().equals("lottery")
+				|| newTypeOfFidelityCard.toLowerCase().equals("point"))
+				){
 			System.out.println("You have to choose between Point, Lottery card");
 		}
-		else if (newTypeOfFidelityCard == "Basic"){
+		else if (newTypeOfFidelityCard.toLowerCase().equals("basic")){
 			System.out.println("You have to choose between Point, Lottery card");
 		}
 		else {
-			if (newTypeOfFidelityCard == "Point"){
+			if (newTypeOfFidelityCard.toLowerCase().equals("point")){
 				idCard=IDCard.getInstance();
 				this.card = new PointFidelityCard();
 			}
 			
-			if (newTypeOfFidelityCard == "Lottery"){
+			if (newTypeOfFidelityCard.toLowerCase().equals("lottery")){
 				idCard=IDCard.getInstance();
 				this.card = new LotteryFidelityCard();
-
 			}
+			System.out.println("Successfully done");
 		}
-		}
+	}
 	
 	public void unregisterFidelityPlan(){
 		if(this.card.returnType() == "Basic"){
@@ -297,15 +382,26 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 	
 	public Order getOrderByName(String string) {
 		for(Order order : listOrder){
-			if(order.getNameOrder().equals(string));
+			if(order.getNameOrder().toLowerCase().equals(string.toLowerCase()))
 				return order;
 		}
+		System.out.println(this.getListOrder());
+		System.out.println("\n/!\\ WARNING : " + string + " order is unkown.");
 		return null;
 	}
 
+	public void checkForPendingOffer(){
+		if(listOffer.size() > 0){
+			for(String offer : listOffer){
+				System.out.println("\n/!\\ An offer has been received /!\\\n" + offer);
+			}
+			listOffer.clear();
+		}
+	}
+	
 	@Override
 	public void update(String offer) {
-		System.out.println(offer);
+		listOffer.add(offer);
 		this.nbOfOfferReceived++;
 	}
 
diff --git a/src/User/MoralUser.java b/src/User/MoralUser.java
index 93600add16d0ec6570dec4c7a6519dff1622031c..4053d4c056621a612aea8075226395994d4c4aa6 100644
--- a/src/User/MoralUser.java
+++ b/src/User/MoralUser.java
@@ -1,5 +1,7 @@
 package User;
 
+import java.math.BigInteger;
+
 import Others.Adress;
 
 public class MoralUser extends User {
diff --git a/src/User/Restaurant.java b/src/User/Restaurant.java
index 0c2f764fe0dcef9497a82d1a7e1e4ae0eb456371..c703064a8bab9e7206633bd8413af7b6f5d2d7d1 100644
--- a/src/User/Restaurant.java
+++ b/src/User/Restaurant.java
@@ -37,10 +37,6 @@ public class Restaurant extends MoralUser {
 		this.generalDiscountFactor = 0.05;
 		this.specialDiscountFactor = 0.1;
 	}
-	
-	public Restaurant(){
-		
-	}
 
 
 	/** SETTERS
@@ -81,7 +77,7 @@ public class Restaurant extends MoralUser {
 		
     public Dish getDishByName(String name){
 		for(Dish d : listOfDish){
-			if(d.getName() == name){
+			if(d.getName().toLowerCase().equals(name.toLowerCase())){
 				return d;
 			}
 		}
@@ -90,7 +86,7 @@ public class Restaurant extends MoralUser {
     
     public Meal getMealByName(String name){
 		for(Meal m : listOfMeal){
-			if(m.getName() == name){
+			if(m.getName().toLowerCase().equals(name.toLowerCase())){
 				return m;
 			}
 		}
@@ -110,7 +106,9 @@ public class Restaurant extends MoralUser {
 	
 	@Override
 	public String toString() {
-		return "Restaurant =" + this.name;
+		return "\n***\nRestaurant " + this.name + ", mail : " + this.mail + ", tel : "+ this.phoneNumber +", position : " + this.adress
+				+ "\nList of Dishs : " + this.getListOfDish()
+				+ "\nList of Meals : " + this.getListOfMeal();
 	}
 
 
@@ -216,7 +214,7 @@ public class Restaurant extends MoralUser {
 	
 	public void addMealOfTheWeek(MyFoodora foodora, String nameOfMeal){
 		for(Meal meal : listOfMeal){
-			if(meal.getName() == nameOfMeal){
+			if(meal.getName().toLowerCase().equals(nameOfMeal.toLowerCase())){
 				this.mealOfTheWeek.setMeal(meal);
 			}
 		}
diff --git a/src/User/User.java b/src/User/User.java
index 25be834052b1e872b57d7eda727bd52aa9868ff1..87b4743a14b09fe92107a64e29dddbb9f57df02b 100644
--- a/src/User/User.java
+++ b/src/User/User.java
@@ -1,11 +1,6 @@
 package User;
 
 import Others.Adress;
-import java.io.*;
-import java.util.*;
-
-import Cli.Input;
-import Core.MyFoodora;
 import Order.HistoricOrder;
 
 public abstract class User implements Comparable<User> {
@@ -76,8 +71,7 @@ public abstract class User implements Comparable<User> {
 	
 	@Override
 	public String toString() {
-		return "User [id=" + id + ", phoneNumber=" + phoneNumber + ", name=" + name + ", username=" + username
-				+ ", mail=" + mail + ", password=" + password + ", adress=" + adress + ", activated=" + activated + "]";
+		return this.name + ", mail : " + this.mail + ", phone : " + Long.toString(this.phoneNumber) + ", position : " + this.adress;
 	}
 	
 	/** GETTER & SETTER **/
diff --git a/src/test/TestCli.java b/src/test/TestCli.java
index 4b805a91ef0b0091e5584ed0970cb5bf8c57e4c1..0b4a45781043bf9b06cb96a72da5085b803fd7ec 100644
--- a/src/test/TestCli.java
+++ b/src/test/TestCli.java
@@ -2,9 +2,47 @@ package test;
 
 import static org.junit.Assert.*;
 
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import Cli.Clui;
+import Cli.errorWrongFormatValue;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownStartegyType;
+import Others.Adress;
+import User.Manager;
+
 
 public class TestCli {
 
+	@Rule
+	public final ExpectedException exception = ExpectedException.none();
 	
-
+	@Test
+	public void testClui() throws ExceptionUnknownStartegyType{
+		MyFoodora foodora = null;
+		foodora = new MyFoodora();
+		ActiveUserContext activeUser = new ActiveUserContext(foodora);
+		Clui clui = new Clui(foodora,activeUser);
+		Manager manager = new Manager(650588938, "ceo", "ceo", "ceo@centrale.supelec.fr", "123456789", new Adress(15.0, 10.0), true, "25/15/1955", "jacquo");
+		foodora.addManager(manager);
+		clui.executeCommand("login ceo 123456789");
+		assert(activeUser.getUser() == manager);
+	}
+	/*
+	@Test
+	public void testTokenWrongFormat() {
+		exception.expect(errorWrongFormatValue.class);
+		MyFoodora foodora = null;
+		foodora = new MyFoodora();
+		ActiveUserContext activeUser = new ActiveUserContext(foodora);
+		Clui clui = new Clui(foodora,activeUser);
+		Manager manager = new Manager(650588938, "ceo", "ceo", "ceo@centrale.supelec.fr", "123456789", new Adress(15.0, 10.0), true, "25/15/1955", "jacquo");
+		foodora.addManager(manager);
+		clui.executeCommand("login ceo 123456789");
+		clui.executeCommand("registerCustomer 943684597 Jacques custo_jacques jacques@mail.fr jacques_pwd -9.8 23/02/1975");
+	}
+	*/
 }
diff --git a/src/test/TestItem.java b/src/test/TestItem.java
index abe35bb7c9caae77115bdf678d8a3ae5d762b846..fc264849d1d19ebb55d02e9e54d3fff05ee1f21d 100644
--- a/src/test/TestItem.java
+++ b/src/test/TestItem.java
@@ -64,10 +64,8 @@ public class TestItem {
 		Dish dish3 = factory1.createDish("Dessert", "soupe", "glutenfree", 5);
 		meal.addDish(dish);
 	    meal.addDish(dish2);
-		System.out.println("please type n");
 		meal.addDish(dish3);
-		assertTrue(meal.getPrice() == 10.0);
-		
+		assertTrue(meal.getPrice() == 10.5);
 	}