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); }