From 7ad8eaab51f000a26e9a4cf83c910f857b8e3d37 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 13 May 2018 15:03:45 +0200 Subject: [PATCH] #178, #267 - added radio buttons for repeating end options --- .../controller/PaymentController.java | 4 +- .../repeating/endoption/RepeatingEnd.java | 20 +++++++++ .../endoption/RepeatingEndAfterXTimes.java | 1 + .../repeating/endoption/RepeatingEndDate.java | 1 + .../endoption/RepeatingEndNever.java | 8 +++- src/main/resources/languages/_de.properties | 10 +++++ src/main/resources/languages/_en.properties | 10 +++++ src/main/resources/static/css/style.css | 11 ++++- src/main/resources/static/js/payments.js | 32 +++++++++++--- .../templates/payments/newPayment.ftl | 44 +++++++++++++++++-- 10 files changed, 129 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java index 7fbacc698..1a43ec032 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 54ad0ed7a..a82787583 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 9f5b10087..287ac1c40 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 131b9f9e5..3a9904723 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 4b5747766..8f41f8132 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 b82b391c0..50eb64ff4 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 635cba0ec..fe5ccf8fb 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 66f3bdc4f..07cc94463 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 e908fc8c0..d752028b6 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 c1f2535e1..aaa969da1 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 --> -- GitLab