/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package controller.terminal.controller; import controller.terminal.controller.data.ReturnSummary; import controller.terminal.controller.data.RentSummary; import java.sql.Timestamp; import model.database.BikeUsageMapper; import model.database.PaymentMapper; import model.database.PriceMapper; import model.database.SubscriptionMapper; import model.object.Subscription; import tools.Helper; /** * * @author Valentin SEITZ */ public class TerminalPayController { private static TerminalPayController terminalPayController; public static TerminalPayController getTerminalPayController() { if (terminalPayController == null) { terminalPayController = new TerminalPayController(); } return terminalPayController; } private TerminalPayController() { } public float getAmount() { float amount; switch (VueStateMachine.getState()) { case VueStateMachine.VUE_RENT_PAY: amount = ProcessedData.getRentSummary().getTotalAmount(); break; case VueStateMachine.VUE_RETURN_PAY: amount = ProcessedData.getReturnSummary().supplementAmount(); break; default: amount = 0; } return amount; } public boolean isMustConfirmUseTerms() { boolean confirm; switch (VueStateMachine.getState()) { case VueStateMachine.VUE_RENT_PAY: confirm = true; break; case VueStateMachine.VUE_RETURN_PAY: confirm = false; break; default: confirm = true; } return confirm; } public boolean isMustConfirmPurchaseTerms() { boolean confirm; switch (VueStateMachine.getState()) { case VueStateMachine.VUE_RENT_PAY: confirm = true; break; case VueStateMachine.VUE_RETURN_PAY: confirm = false; break; default: confirm = true; } return confirm; } public void doPay() { switch (VueStateMachine.getState()) { case VueStateMachine.VUE_RENT_PAY: //Here user pays after a rent this.doPayRent(); break; case VueStateMachine.VUE_RETURN_PAY: //Here user pays after a return this.doPayReturn(); break; default: TerminalController.getMainVue().showError("Payment impossible in this situation!"); } } private void doPayRent() { boolean rentSuccess = false; if (VueStateMachine.possibleAction(VueStateMachine.ACTION_DO_PAY)) { Timestamp today = Helper.getSqlDateNow(); RentSummary amountToPay = ProcessedData.getRentSummary(); PaymentMapper pm = new PaymentMapper(); SubscriptionMapper sm = new SubscriptionMapper(); PriceMapper prm = new PriceMapper(); Subscription subscription = new Subscription(); subscription.setIdNemoUser(ProcessedData.getAnonymousUserId()); int priceId = prm.getPriceId(amountToPay.getDurationUnit(), amountToPay.getDuration()); subscription.setIdPrice(priceId); subscription.setAmount(amountToPay.getRentAmount()); subscription.setStartDate(today); int idSubscription = sm.save(subscription); if (idSubscription > 0) { boolean paymentSuccess = pm.payAmountForNemoUser(ProcessedData.getAnonymousUserId(), amountToPay.getTotalAmount(), today, idSubscription); if (paymentSuccess) { BikeUsageMapper bum = new BikeUsageMapper(); rentSuccess = bum.rentBookedBikesForNemoUser(ProcessedData.getAnonymousUserId(), today, ProcessedData.getIdBikeUsagesToDelete()); } } if (rentSuccess) { VueStateMachine.doAction(VueStateMachine.ACTION_DO_PAY); } } } /** * Returns the summary of the rental * * @return summary of the rental */ public ReturnSummary getReturnSummary() { ReturnSummary summary = ProcessedData.getReturnSummary(); return summary; } private void doPayReturn() { boolean returnSuccess = true; if (VueStateMachine.possibleAction(VueStateMachine.ACTION_DO_PAY)) { BikeUsageMapper bum = new BikeUsageMapper(); Timestamp today = Helper.getSqlDateNow(); ReturnSummary returnSummary = this.getReturnSummary(); if (returnSummary.size() <= 0) { returnSuccess = false; } else { for (int i = 0; i < returnSummary.size(); i++) { if (!bum.returnBikeForTerminal(returnSummary.get(i).getSerialNumber(), today, ProcessedData.getTerminal().getId(), ProcessedData.getPaymentToProcess())) { returnSuccess = false; } } } if (returnSuccess) { VueStateMachine.doAction(VueStateMachine.ACTION_DO_PAY); } } } }