package no.dusken.barweb.plugin.statisticsplugin.control; import no.dusken.barweb.model.BarPerson; import no.dusken.barweb.model.Gjeng; import no.dusken.barweb.model.Transaksjon; import no.dusken.barweb.model.TransaksjonVare; import no.dusken.barweb.plugin.statisticsplugin.model.StatisticsElement; import no.dusken.barweb.plugin.statisticsplugin.service.StatisticsService; import no.dusken.barweb.service.BarPersonService; import no.dusken.barweb.service.GjengService; import no.dusken.barweb.service.TransaksjonService; import org.kantega.jexmec.store.PluginStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.inject.Inject; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; /** * @author Marvin B. Lillehaug <lillehau@underdusken.no> * Contains methods that when evoked saves elements. */ @Component public class CreateStatisticsController { @Inject private BarPersonService barPersonService; @Inject private GjengService gjengService; @Inject private TransaksjonService transaksjonService; @Inject private StatisticsService statisticsService; @Inject private PluginStore pluginStore; private final Logger logger = LoggerFactory.getLogger(getClass()); private final String beer = "ØL"; @Scheduled(cron = "0 0 11 ? * THU") public void createPersonBalance() { logger.info("Creating statistics for person balance"); for(BarPerson p : getAllPersonsDefaultGjeng()){ StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.PERSON_BALANCE); el.setAmount(p.getMoney().longValue()); el.setTrackedObjectId(p.getId()); el.getTimeCreated().getTimeInMillis(); statisticsService.save(el); } } @Scheduled(cron = "0 0 11 ? * THU") public void createPersonMoneyLastWeek() { logger.info("Creating statistics for money spent last week"); List<BarPerson> allBarPersons = getAllPersonsDefaultGjeng(); Calendar now = new GregorianCalendar(); Calendar then = new GregorianCalendar(); then.add(Calendar.WEEK_OF_YEAR, -1); for(BarPerson p : allBarPersons) { StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.PERSON_MONEY_SPENT_LAST_WEEK); List<Transaksjon> transaksjons = transaksjonService.getByBarPersonAndTimeCreatedBetween(p, then, now); long sum = 0; for (Transaksjon t : transaksjons) { // Only count what has been used, not when a person pays to the bar. if (t.getSum() > 0) sum += t.getSum(); } el.setAmount(sum); el.setTrackedObjectId(p.getId()); statisticsService.save(el); } } @Scheduled(cron = "0 0 11 ? * THU") public void createPersonBeersLastWeek() { logger.info("Creating statistics for beers per person last week"); List<BarPerson> allBarPersons = getAllPersonsDefaultGjeng(); Calendar now = new GregorianCalendar(); Calendar then = new GregorianCalendar(); then.add(Calendar.WEEK_OF_YEAR, -1); for(BarPerson p : allBarPersons) { StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.PERSON_BEER_LAST_WEEK); el.setTrackedObjectId(p.getId()); Integer sum = 0; for (Transaksjon t : transaksjonService.getByBarPersonAndTimeCreatedBetween(p, then, now)){ for (TransaksjonVare tv : t.getTransaksjoner()) { if (tv.getVare().getName().toLowerCase().equals(beer.toLowerCase())) sum += tv.getAmount(); } } el.setAmount(sum.longValue()); statisticsService.save(el); } } @Scheduled(cron = "0 0 11 ? * THU") public void createTotalBeersLastWeek() { logger.info("Creating statistics for total number of beers last week"); List<BarPerson> allBarPersons = getAllPersonsDefaultGjeng(); Calendar now = new GregorianCalendar(); Calendar then = new GregorianCalendar(); then.add(Calendar.WEEK_OF_YEAR, -1); StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.GJENG_BEER_LAST_WEEK); el.setTrackedObjectId(gjengService.getByDefaultGjengTrue().getId()); Integer sum = 0; for(BarPerson p : allBarPersons) { for (Transaksjon t : transaksjonService.getByBarPersonAndTimeCreatedBetween(p, then, now)){ for (TransaksjonVare tv : t.getTransaksjoner()) { if (tv.getVare().getName().toLowerCase().equals(beer.toLowerCase())) sum += tv.getAmount(); } } } el.setAmount(sum.longValue()); statisticsService.save(el); } @Scheduled(cron = "0 0 11 ? * THU") public void createTotalMoneySpentLastWeek() { logger.info("Creating statistics for total money spent last week"); List<BarPerson> allBarPersons = getAllPersonsDefaultGjeng(); Calendar now = new GregorianCalendar(); Calendar then = new GregorianCalendar(); then.add(Calendar.WEEK_OF_YEAR, -1); StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.GJENG_MONEY_SPENT_LAST_WEEK); el.setTrackedObjectId(gjengService.getByDefaultGjengTrue().getId()); Integer sum = 0; for(BarPerson p : allBarPersons) { for (Transaksjon t : transaksjonService.getByBarPersonAndTimeCreatedBetween(p, then, now)){ for (TransaksjonVare tv : t.getTransaksjoner()) { sum += tv.getAmount() * tv.getVare().getInternalPrice(); } } } el.setAmount(sum.longValue()); statisticsService.save(el); } @Scheduled(cron = "0 0 11 ? * THU") public void createSumPersonBalance() { logger.info("Creating statistics for sum person balances"); StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.SUM_PERSON_BALANCE); el.setTrackedObjectId(gjengService.getByDefaultGjengTrue().getId()); el.setShowOnlyInAdmin(true); Integer sum = 0; for(BarPerson p : getAllPersonsDefaultGjeng()){ sum += p.getMoney(); } el.setAmount(sum.longValue()); statisticsService.save(el); } @Scheduled(cron = "0 0 11 ? * THU") public void createValueInBar() { logger.info("Creating statistics for value in bar"); StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.GJENG_VALUE_BAR); el.setShowOnlyInAdmin(true); el.setAmount(Long.valueOf(pluginStore.getString("valuesinbar", "0"))); el.setTrackedObjectId(gjengService.getByDefaultGjengTrue().getId()); statisticsService.save(el); } @Scheduled(cron = "0 0 11 ? * THU") public void createValueInBank() { logger.info("Creating statistics for value in bank"); StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.GJENG_VALUE_BANK); el.setShowOnlyInAdmin(true); el.setAmount(Long.valueOf(pluginStore.getString("valuesinbank", "0"))); el.setTrackedObjectId(gjengService.getByDefaultGjengTrue().getId()); statisticsService.save(el); } @Scheduled(cron = "0 0 11 ? * THU") public void createLiquidity() { logger.info("Creating statistics for bar liquidity"); Long amount = barPersonService.getSumPersonBalances(gjengService.getByDefaultGjengTrue()); Long valueInBar = Long.valueOf(pluginStore.getString("valuesinbar", "0")); Long valueInBank = Long.valueOf(pluginStore.getString("valuesinbank", "0")); StatisticsElement el = new StatisticsElement(); el.setName(StatisticsConstants.GJENG_LIQUIDITY); el.setTrackedObjectId(gjengService.getByDefaultGjengTrue().getId()); el.setShowOnlyInAdmin(true); el.setAmount(valueInBar + valueInBank - amount); statisticsService.save(el); } private List<BarPerson> getAllPersonsDefaultGjeng() { Gjeng g = gjengService.getByDefaultGjengTrue(); List<BarPerson> all = barPersonService.getActivePersons(g); all.addAll(barPersonService.getNonActivePersons(g)); return all; } public void setGjengService(GjengService gjengService) { this.gjengService = gjengService; } public void setStatisticsService(StatisticsService statisticsService) { this.statisticsService = statisticsService; } public void setBarPersonService(BarPersonService barPersonService) { this.barPersonService = barPersonService; } public void setTransaksjonService(TransaksjonService transaksjonService) { this.transaksjonService = transaksjonService; } public void setPluginStore(PluginStore pluginStore) { this.pluginStore = pluginStore; } }