package com.kapti.pointsmanager.pointevents.IndividualEvents;
import com.kapti.client.finance.FinanceFactory;
import com.kapti.client.finance.Index;
import com.kapti.client.finance.Quote;
import com.kapti.client.user.PointsType;
import com.kapti.client.user.User;
import com.kapti.exceptions.StockPlayException;
import com.kapti.pointsmanager.util.Profit;
import java.text.DecimalFormat;
import org.apache.log4j.Logger;
/**
* De speler krijgt punten indien zijn portfolio beter presteert dan de BEL-20.
* Per procent winst over de BEL-20 krijgt hij MULTIPLIER punten erbij.
*
* @author Dieter
*/
public class ProfitEvent implements IIndividualEvent {
private static Logger logger = Logger.getLogger(ProfitEvent.class);
private static String BEL20 = "BE0389555039";
private static String DESCRIPTION = "Beating the BEL-20";
private static int MULTIPLIER = 10;
private double percentage; //Percentage van laatste gebruiker
public PointsType getType() {
return PointsType.PROFIT;
}
public String getDescription() {
DecimalFormat df = new DecimalFormat("#.##");
return DESCRIPTION + " (" + df.format(percentage*100) + "%)";
}
public int getPoints(User user) {
try {
Profit profit = new Profit(user);
Index bel20 = FinanceFactory.getInstance().getIndexById(BEL20);
Quote latestQuote = FinanceFactory.getInstance().getLatestQuoteFromIndex(bel20);
double profitPercentageBel20 = (latestQuote.getPrice() - latestQuote.getOpen())/latestQuote.getOpen();
double profitPercentageUser = profit.getProfitPercentage();
percentage = profitPercentageUser-profitPercentageBel20;
if(profit.getProfit()>0 && profitPercentageUser > profitPercentageBel20) {
return (int) ((profitPercentageUser - profitPercentageBel20) * 100 * MULTIPLIER);
}
else
return 0;
} catch (StockPlayException ex) {
logger.error("Error when trying to calculate profit for user " + user.getId(), ex);
return 0;
}
}
}