diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java index 7fbacc6987e82355653c3f9a49c0c4337e55a30e..1a43ec0328d0c2aa59962c4ee802df9d88bd7d0c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java @@ -108,7 +108,9 @@ public class PaymentController extends BaseController @RequestParam(value = "isPayment", required = false) boolean isPayment, @RequestParam(value = "enableRepeating", required = false) boolean enableRepeating, @RequestParam(value = "repeatingModifierNumber", required = false) int repeatingModifierNumber, - @RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType) + @RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType, + @RequestParam(value = "repeatingEndType", required = false) String repeatingEndType, + @RequestParam(value = "repeatingEndValue", required = false) String repeatingEndValue) { PaymentValidator paymentValidator = new PaymentValidator(); paymentValidator.validate(payment, bindingResult); diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java index 54ad0ed7a10bc7c517c8a54a535af4f0bccacfd3..a8278758358514076d0972f52fde56e2e38aac8f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java @@ -14,6 +14,16 @@ public abstract class RepeatingEnd @GeneratedValue(strategy = GenerationType.AUTO) private Integer ID; + @Transient + private String localizationKey; + + RepeatingEnd(String localizationKey) + { + this.localizationKey = localizationKey; + } + + RepeatingEnd() {} + public Integer getID() { return ID; @@ -24,5 +34,15 @@ public abstract class RepeatingEnd this.ID = ID; } + public String getLocalizationKey() + { + return localizationKey; + } + + public void setLocalizationKey(String localizationKey) + { + this.localizationKey = localizationKey; + } + public abstract boolean isEndReached(List<DateTime> dates); } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java index 9f5b100871bfee979bd9c2de43a8329dfc7d1406..287ac1c40b098fc0360d4ed8395ade3629f1a992 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java @@ -12,6 +12,7 @@ public class RepeatingEndAfterXTimes extends RepeatingEnd public RepeatingEndAfterXTimes(int times) { + super("repeating.end.key.afterXTimes"); this.times = times; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java index 131b9f9e5fd52b3337182f9203a2e2b92100da31..3a9904723deda9c3d897e74adc540afb1125b2d9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java @@ -14,6 +14,7 @@ public class RepeatingEndDate extends RepeatingEnd public RepeatingEndDate(DateTime endDate) { + super("repeating.end.key.date"); this.endDate = endDate; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java index 4b5747766c9b599d01bbb8ad122f6b3ec0bdd0b9..8f41f8132fa567197e5f6004d307e5745196fa1b 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java @@ -2,12 +2,18 @@ package de.deadlocker8.budgetmaster.repeating.endoption; import org.joda.time.DateTime; -import javax.persistence.*; +import javax.persistence.Entity; +import javax.persistence.Transient; import java.util.List; @Entity public class RepeatingEndNever extends RepeatingEnd { + public RepeatingEndNever() + { + super("repeating.end.key.never"); + } + @Override @Transient public boolean isEndReached(List<DateTime> dates) diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index b82b391c08c56e972b6a628792ed5e7ecc4ca4b7..50eb64ff4c66cc812c2e74f3d3e92286cb5e22c5 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -330,6 +330,16 @@ repeating.modifier.days=Tage repeating.modifier.months=Monate repeating.modifier.years=Jahre +repeating.end.key.never = never +repeating.end.key.afterXTimes = afterXTimes +repeating.end.key.date = date + +repeating.end=Endet +repeating.end.never=niemals +repeating.end.afterXTimes.A=nach +repeating.end.afterXTimes.B=Wiederholungen +repeating.end.date=am + paymenttab.button.filter=Filter paymenttab.label.filter.active=Filter aktiv paymenttab.label.incomes=Einnahmen: diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 635cba0ecba0b2da5980a0d5434d0ca3b711f98c..fe5ccf8fbc7b8bc3ec810c26d3277cfd19a3b7c1 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -330,6 +330,16 @@ repeating.modifier.days=Days repeating.modifier.months=Months repeating.modifier.years=Years +repeating.end.key.never = never +repeating.end.key.afterXTimes = afterXTimes +repeating.end.key.date = date + +repeating.end=Ends +repeating.end.never=never +repeating.end.afterXTimes.A=after +repeating.end.afterXTimes.B=times +repeating.end.date=on + paymenttab.button.filter=Filter paymenttab.label.filter.active=Filter active paymenttab.label.incomes=Incomes: diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 66f3bdc4f2de5e4a91b629488c8a0a73af4271c8..07cc944639343d439055f544567a2a47f8a58bff 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -293,7 +293,7 @@ ul.dropdown-content.select-dropdown li.selected { } /* chips autocomplete dropdown */ -.autocomplete-content li span{ +.autocomplete-content li span { color: #2E79B9; } @@ -301,6 +301,15 @@ ul.dropdown-content.select-dropdown li.selected { background-color: rgba(0, 0, 0, 0.15); } +/* radio buttons */ +input[type="radio"]:checked + label::after, [type="radio"].with-gap:checked + label::after { + background-color: #2E79B9; +} + +input[type="radio"]:checked + label::after, [type="radio"].with-gap:checked + label::before, [type="radio"].with-gap:checked + label::after { + border: 2px solid #2E79B9; +} + .account-budget { font-size: 20px !important; } diff --git a/src/main/resources/static/js/payments.js b/src/main/resources/static/js/payments.js index e908fc8c000f8ff38e968644b915f0d0cf71a83a..d752028b6351a82eb5caec6238fded66bdad7d4f 100644 --- a/src/main/resources/static/js/payments.js +++ b/src/main/resources/static/js/payments.js @@ -62,15 +62,13 @@ $( document ).ready(function() { $('#enableRepeating').change(function(){ if($(this).is(":checked")) { - $('#payment-repeating-modifier').prop('disabled', false); - $('#payment-repeating-modifier-type').prop('disabled', false); - $('#payment-repeating-modifier-type').material_select(); + $('#payment-repeating-modifier-row').show(); + $('#payment-repeating-end').show(); } else { - $('#payment-repeating-modifier').prop('disabled', true); - $('#payment-repeating-modifier-type').prop('disabled', true); - $('#payment-repeating-modifier-type').material_select(); + $('#payment-repeating-modifier-row').hide(); + $('#payment-repeating-end').hide(); } }); @@ -149,6 +147,7 @@ function removeTooltip(id) function validateForm() { + // handle tags var tags = $('.chips-autocomplete').material_chip('data'); var parent = document.getElementById("hidden-payment-tags"); for(var i = 0; i < tags.length; i++) @@ -160,5 +159,26 @@ function validateForm() parent.appendChild(input); } + // handle repeating end + var endNever = document.getElementById("repeating-end-never"); + var endAfterXTimes = document.getElementById("repeating-end-after-x-times"); + var endDate = document.getElementById("repeating-end-date"); + var endInput = document.getElementById("hidden-payment-repeating-end-value"); + + if(endNever.checked) + { + return true; + } + + if(endAfterXTimes.checked) + { + endInput.value = "12"; + } + + if(endDate.checked) + { + endInput.value = "13.05.18"; + } + return true; } \ No newline at end of file diff --git a/src/main/resources/templates/payments/newPayment.ftl b/src/main/resources/templates/payments/newPayment.ftl index c1f2535e1545a600f3d7e0d8680db773d601b3c9..aaa969da121966e04e951236a773042e7eb4cd80 100644 --- a/src/main/resources/templates/payments/newPayment.ftl +++ b/src/main/resources/templates/payments/newPayment.ftl @@ -140,7 +140,7 @@ </div> <#-- repeating modifier --> - <div class="row"> + <div class="row" id="payment-repeating-modifier-row"> <div class="input-field col s6 m6 l4 offset-l2"> <input id="payment-repeating-modifier" name="repeatingModifierNumber" type="text" <@validation.validation "repeatingModifierNumber"/> value="<#if payment.getRepeatingOption()??>${payment.getRepeatingOption().getModifier().getQuantity()}</#if>"> <label for="payment-repeating-modifier">${locale.getString("payment.new.label.repeating.all")}</label> @@ -154,16 +154,54 @@ <#if payment.getRepeatingOption()??> <#if payment.getRepeatingOption().getModifier().getLocalizationKey() == modifierName> <option selected value="${modifierName}">${modifierName}</option> + <#else> + <option value="${modifierName}">${modifierName}</option> </#if> + <#else> + <option value="${modifierName}">${modifierName}</option> </#if> - <option value="${modifierName}">${modifierName}</option> </#list> </select> - <input type="hidden" id="hidden-payment-repeating-modifier-type" value="<#if payment.getRepeatingOption()??>${locale.getString(payment.getRepeatingOption().getModifier().getLocalizationKey())}</#if>"> </div> </div> <#-- repeating end option --> + <div class="row" id="payment-repeating-end"> + <div class="col s12 m12 l8 offset-l2"> + ${locale.getString("repeating.end")} + <p> + <#if payment.getRepeatingOption()??> + <#if payment.getRepeatingOption().getEndOption().getLocalizationKey() == locale.getString("repeating.end.key.never")> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-never" checked value="${locale.getString("repeating.end.key.never")}"/> + <#else> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-never" value="${locale.getString("repeating.end.key.never")}"/> + </#if> + <#else> + <#-- default --> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-never" checked value="${locale.getString("repeating.end.key.never")}"/> + </#if> + <label for="repeating-end-never">${locale.getString("repeating.end.never")}</label> + </p> + <p> + <#if payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == locale.getString("repeating.end.key.afterXTimes")> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-after-x-times" checked value="${locale.getString("repeating.end.key.afterXTimes")}"/> + <#else> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-after-x-times" value="${locale.getString("repeating.end.key.afterXTimes")}"/> + </#if> + <label for="repeating-end-after-x-times">${locale.getString("repeating.end.afterXTimes.A")} 8 ${locale.getString("repeating.end.afterXTimes.B")}</label> + </p> + <p> + <#if payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == locale.getString("repeating.end.key.date")> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-date" checked value="${locale.getString("repeating.end.key.date")}"/> + <#else> + <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-date" value="${locale.getString("repeating.end.key.date")}"/> + </#if> + <label for="repeating-end-date">${locale.getString("repeating.end.date")} 13.05.2018</label> + </p> + <input type="hidden" id="hidden-payment-repeating-end-value" name="repeatingEndValue" value=""> + </div> + </div> + <br> <#-- buttons -->