/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package controller.terminal.controller;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import model.database.BikeMapper;
import model.database.BikeUsageMapper;
import model.database.NemoUserMapper;
import model.database.PriceMapper;
import model.object.Price;
import model.object.Terminal;
/**
*
* @author Valentin SEITZ
*/
public class TerminalRentController {
private static TerminalRentController terminalRentController;
private BikeMapper bikeMapper = new BikeMapper();
private BikeUsageMapper bikeUsageMapper = new BikeUsageMapper();
private Terminal terminal = ProcessedData.getTerminal();
public static TerminalRentController getTerminalRentController() {
if (terminalRentController == null) {
terminalRentController = new TerminalRentController();
}
return terminalRentController;
}
/**
* Allows to know the maximal amount of bikes available to rent
*
* @return quantity of available bikes
*/
public int getMaxAvailableBikes() {
int result;
result = this.bikeMapper.getAvailableBikesForThisTerminal(this.terminal.getId());
//Auto cancel?
if (result == 0) {
doAutoCancel("Aucun vélo disponible sur ce terminal.");
}
return result;
}
public Set<String> getPossibleDurationUnits() {
Set<String> result;
result = new HashSet<>();
PriceMapper pm = new PriceMapper();
ArrayList<Price> priceResult = pm.getUniquePriceDurationUnitForRent();
if (priceResult.size() > 0) {
for (int i = 0; i < priceResult.size(); ++i) {
result.add(priceResult.get(i).getPriceDurationUnit());
}
} else {
doAutoCancel("Aucune unité de durée n'a pu être retrouvé.");
}
return result;
}
public Set<Integer> getPossibleDurations(String durationUnit) {
Set<Integer> result;
result = new HashSet<>();
PriceMapper pm = new PriceMapper();
ArrayList<Price> priceResult = pm.getPriceDurationForRent(durationUnit);
if (priceResult.size() > 0) {
for (int i = 0; i < priceResult.size(); ++i) {
result.add(priceResult.get(i).getPriceDuration());
}
} else {
doAutoCancel("Aucune durée n'a pu être retrouvé pour l'unité de durée donné.");
}
//Add result values
return result;
}
/**
* The user does want rent bikes
*
* @param nbBikes bikes to reserve during payment
* @param duration duration of rental that next has to be payed
* @param durationUnit duration unit of retnal that next has to be payed
*/
public void doRent(int nbBikes, int duration, String durationUnit) {
NemoUserMapper num;
int nemoUserId;
if (VueStateMachine.possibleAction(VueStateMachine.ACTION_DO_RENT)) {
num = new NemoUserMapper();
nemoUserId = num.createAnonymousUser();
if (this.bikeUsageMapper.bookAvailableBikesForTerminal(this.terminal.getId(), nemoUserId, nbBikes, ProcessedData.getIdBikeUsagesToResetEndDate(), ProcessedData.getIdBikeUsagesToDelete())) {
ProcessedData.setAnonymousUserId(nemoUserId);
ProcessedData.getRentSummary().setBikeQuantity(nbBikes);
ProcessedData.getRentSummary().setDuration(duration);
ProcessedData.getRentSummary().setDurationUnit(durationUnit);
VueStateMachine.doAction(VueStateMachine.ACTION_DO_RENT);
}
}
}
private void doAutoCancel(String msg) {
if (TerminalController.isDoAutoCancel()) {
if (TerminalController.isDoAlertBeforeAutoCancel()) {
TerminalController.getMainVue().showWarning(msg);
}
TerminalController.doCancel();
}
}
}