package y1.pos;
import java.util.HashMap;
import java.util.Iterator;
import y1.wms.Item;
/**
* Ostukorvi klass.
*
* Ostukorv on realiseeritud, kasutades andmete hoidmiseks hashmap andmestruktuuri, kus key
* on kaup ning value on kauba hulk ostukorvis.
*
* Realiseeritud on kauba lisamise, kauba eemaldamise, ostukorvis oleva kauba hulga muutmise,
* ostukorvi tühjendamise, ostukorvist tellimuse koostamise, ostukorvi maksumuse arvutamise ning
* toString meetodid.
*
* @author Jaak Laanpere
*
*/
public class Cart {
private HashMap<Item, Integer> shoppingCart;
/**
* Ostukorvi klassi konstruktor, mis loob uue hashmap andmestruktuuri nimega shoppingCart.
*
*/
public Cart(){
this.shoppingCart = new HashMap<Item, Integer>();
}
/**
* Meetod, mis lisab kaupa ostukorvi. Kauba hulk ei saa olla negatiivne.
* Kui ostukorvis on juba antud kaupa, siis lisab olemasolevale hulgale
* parameetrina sisestatud hulga juurde.
*
* @param pickedItem — ostukorvi lisatav kaup
* @param quantity – ostukorvi lisatava kauba hulk
* @return true/false – kauba lisamine ostukorvi õnnestus/ebaõnnestus
*/
public boolean add(Item pickedItem, int quantity){
if(quantity>0){
if(this.shoppingCart.containsKey(pickedItem)){
this.shoppingCart.put(pickedItem, this.shoppingCart.get(pickedItem) + quantity);
}else{
this.shoppingCart.put(pickedItem, quantity);
}
return true;
}
return false;
}
/**
* Meetod, mis lisab sisendparameetrina antud kauba, kogusega 1, ostukorvi.
*
* @param pickedItem — ostukorvi lisatav kaup
*/
public void add(Item pickedItem){
add(pickedItem,1);
}
/**
* Meetod kauba eemaldamiseks ostukorvist. Sisendparameetriks kaup.
* Eemaldab kogu selle kauba koguse ostukorvist.
*
* @param pickedItem — valitud kaup ostukorvist, mida soovitakse eemaldada
*/
public void remove(Item pickedItem){
if(this.shoppingCart.containsKey(pickedItem)){
this.shoppingCart.remove(pickedItem);
}
}
/**
* Meetod ostukorvis oleva kindla kauba hulga muutmiseks.
* Meetodi õnnestumise korral on ostukorvis lõpetades sisendparameetrina
* sisestatud hulk antud kaupa.
*
* @param pickedItem — valitud kaup ostukorvis, mille hulka soovitakse muuta.
* @param quantity – valitud hulk antud kaupa, mida ostukorvi soovitakse
* @return true/false — ostukorvi sisu muutmine õnnestus/ebaõnnestus
*/
public boolean change(Item pickedItem, int quantity){
if(this.shoppingCart.containsKey(pickedItem) && quantity>0){
this.shoppingCart.put(pickedItem,quantity);
return true;
}
return false;
}
/**
* Meetod ostukorvi tühjendamiseks.
* Tühjendab kogu ostukorvi kogu kaubast.
*
*/
public void clear(){
this.shoppingCart.clear();
}
/**
* Meetod, mis väljastab stringina ostukorvi sisu loetaval kujul.
*/
public String toString(){
String cartItems = "";
Iterator<Item> iterator = this.shoppingCart.keySet().iterator();
while(iterator.hasNext()){
Item item = iterator.next();
if(cartItems != ""){
cartItems += ", ";
}
cartItems += this.shoppingCart.get(item) + "x " + "(" + item + ")";
}
return cartItems;
}
/**
* Meetod, mis loob antud ostukorvi põhjal tellimuse.
* Tagastab uue tellimuse.
*
* @return — tellimus, mis sisaldab antud ostukorvi sisu.
*/
public Order checkOut(){
Order newOrder = new Order();
Iterator<Item> iterator = this.shoppingCart.keySet().iterator();
while(iterator.hasNext()){
Item item = iterator.next();
newOrder.add(item, this.shoppingCart.get(item));
}
return newOrder;
}
/**
* Meetod, mis tagastab ostukorvi maksumuse.
*
* @return – ostukorvi maksumus double'ina.
*/
public double getTotal(){
double total = 0;
Iterator<Item> iterator = this.shoppingCart.keySet().iterator();
while(iterator.hasNext()){
Item item = iterator.next();
total += (item.getPrice())* this.shoppingCart.get(item);
}
total = Math.round(total*100.0)/100.0;
return total;
}
}