001 package market;
002
003 import market.statistics.Statistics;
004 import data.ooimpl.CountingStockImpl;
005
006 /**
007 * This class implements the customers of the market.
008 */
009 public class UCustomer extends UPerson {
010
011 /**
012 * ID for serialization.
013 */
014 private static final long serialVersionUID = 8256899920218903123L;
015
016 private String company;
017 private CountingStockImpl csi_shoppingBasket;
018
019 /**
020 * Creates a new UCustomer.
021 * @param userName the customer's ID.
022 */
023 public UCustomer(String userName){
024 super(userName);
025 csi_shoppingBasket = new CountingStockImpl(userName, SMarket.getArticleCatalog());
026 }
027
028 /**
029 * Sets the customer's company.
030 * @param company the company to be set.
031 */
032 public void setCompany(String company) {
033 this.company = company;
034 }
035
036 /**
037 * Gets the customer's company.
038 * @return the company.
039 */
040 public String getCompany() {
041 return company;
042 }
043
044 /**
045 * Gets the customer's shopping basket.
046 * @return the shopping basket.
047 */
048 public CountingStockImpl getShoppingBasket() {
049 return csi_shoppingBasket;
050 }
051
052 /**
053 * Computes and returns the customer's current discount.<br>
054 * The discount is a value in the range from 0 to 1.
055 * @return the discount.
056 * @see Options
057 */
058 public double getDiscount() {
059 int allowable = Statistics.getAllowableCustomerRevenue(this);
060 int percentValue = SMarket.getOptions().getDiscountValue();
061 //allowable (in cents) / 100 (Euro) / percentValue (how many percent worth) / 100 (range [0..1))
062 double actualDiscount = new Integer(allowable).doubleValue()/(10000 * percentValue);
063 return Math.min(actualDiscount, SMarket.getOptions().getMaxDiscount());
064 }
065 }