001 /* 002 * Created on 18.09.2005 003 * 004 */ 005 package videoautomat.transition; 006 007 import java.util.Iterator; 008 009 import sale.Gate; 010 import sale.SaleProcess; 011 import sale.Transition; 012 import users.User; 013 import videoautomat.DisplayMoneyStockError; 014 import videoautomat.SaleProcessHandBack; 015 import videoautomat.VideoCassette; 016 import videoautomat.VideoShop; 017 import data.NotEnoughMoneyException; 018 import data.NumberValue; 019 import data.QuoteValue; 020 import data.StockItem; 021 import data.Value; 022 023 /** 024 * a <code>Transition</code> that calculates the money the user get back, temporary re-adds the handed 025 * back videos to the {@link VideoShop}s stock and change to the 026 * {@link SaleProcessHandBack#getChangeGate()}. If there is not enough change money in the shop, a 027 * {@link DisplayMoneyStockError}opens and it returns the sale.SaleProcess#getRollbackGate() 028 * 029 * @author Alexander Herrmann 030 * 031 */ 032 public class HandBackCalculateSumTransition implements Transition { 033 034 /** 035 * ID for Serialization. 036 */ 037 private static final long serialVersionUID = 2125670797916690451L; 038 039 /** 040 * Gate that performes the handback actions. 041 * @author Alexander Herrmann 042 */ 043 public Gate perform(SaleProcess sp, User user) { 044 045 SaleProcessHandBack processHandback = (SaleProcessHandBack) sp; 046 047 if (processHandback.getTemporaryVideosStoringStock().size(processHandback.getBasket()) == 0) 048 return processHandback.restart(); 049 050 Iterator it = processHandback.getTemporaryVideosStoringStock().iterator(processHandback.getBasket(), false); 051 while (it.hasNext()) { 052 StockItem ssi = (StockItem) it.next(); 053 Value v = null; 054 v = ((QuoteValue) ssi.getAssociatedItem(null).getValue()).getOffer(); 055 NumberValue nv_sum = processHandback.getChangeMoneyNumberValue(); 056 nv_sum = (NumberValue) nv_sum.add(v.subtract(((VideoCassette) ssi).getCost())); 057 processHandback.setChangeMoneyNumberValue(nv_sum); 058 059 VideoShop.getVideoStock().add(ssi.getName(), 1, processHandback.getBasket()); 060 } 061 try{ 062 VideoShop.getMoneyBag().transferMoney( 063 processHandback.getTemporaryChangeMoneyBag(), 064 processHandback.getBasket(), 065 processHandback.getChangeMoneyNumberValue()); 066 }catch(NotEnoughMoneyException e){ 067 new DisplayMoneyStockError(); 068 return processHandback.getRollbackGate(); 069 } 070 071 return processHandback.getChangeGate(); 072 } 073 074 }