diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java index e31ae9a985bfd40bb679ac4ee2d47941cfebe6cb..388cdf278e3a40afc744fdfea20a00198ab37093 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java @@ -63,10 +63,11 @@ public class TemplateController extends BaseController } @PostMapping(value = "/templates/fromTransaction") - public String postNormal(Model model, - @RequestParam(value = "templateName") String templateName, + public String postNormal(@RequestParam(value = "templateName") String templateName, @ModelAttribute("NewTransaction") Transaction transaction, - @RequestParam(value = "isPayment", required = false) boolean isPayment) + @RequestParam(value = "isPayment", required = false) boolean isPayment, + @RequestParam(value = "ignoreCategory") Boolean ignoreCategory, + @RequestParam(value = "ignoreAccount") Boolean ignoreAccount) { transactionService.handleAmount(transaction, isPayment); transactionService.handleTags(transaction); @@ -76,9 +77,7 @@ public class TemplateController extends BaseController throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "templateName must not be empty"); } - final Template template = new Template(templateName, transaction); - templateService.getRepository().save(template); - + templateService.createFromTransaction(templateName, transaction, ignoreCategory, ignoreAccount); return "redirect:/templates"; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java index 19cb398dc72581d4bb87ce5588ca3fd397165de0..bbeb9803a8d882018d617558ed29b417db80e118 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java @@ -1,6 +1,7 @@ package de.deadlocker8.budgetmaster.templates; import de.deadlocker8.budgetmaster.services.Resetable; +import de.deadlocker8.budgetmaster.transactions.Transaction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -33,4 +34,20 @@ public class TemplateService implements Resetable public void createDefaults() { } + + public void createFromTransaction(String templateName, Transaction transaction, boolean ignoreCategory, boolean ignoreAccount) + { + final Template template = new Template(templateName, transaction); + if(ignoreCategory) + { + template.setCategory(null); + } + + if(ignoreAccount) + { + template.setAccount(null); + } + + getRepository().save(template); + } } diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index d820a9a1a79aff478d94616f94c1f4d8f38e646d..66d619c26e4518b9ce4307463a2118a428f9588c 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -246,6 +246,9 @@ search.in.description=Beschreibung search.in.category=Kategorie search.in.tags=Tags +template.checkbox.ignore.category=Kategorie nicht übernehmen +template.checkbox.ignore.account=Konto nicht übernehmen + # ABOUT about=Über {0} about.roadmap.link=Roadmap öffnen diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index bd3553199eca85e6639cbc60348398bdebe15a55..8356570c7549f7a362c48c45ce47e4dea6ab1007 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -246,6 +246,9 @@ search.in.description=Description search.in.category=Category search.in.tags=Tags +template.checkbox.ignore.category=Omit selected category +template.checkbox.ignore.account=Omit selected account + # ABOUT about=About {0} about.roadmap.link=Open Roadmap diff --git a/src/main/resources/static/js/templates.js b/src/main/resources/static/js/templates.js index 31b7ea7c017144f700e520a216465f49f642dc23..496d4ecd0c96761d85f2417d3fa3372d169e1356 100644 --- a/src/main/resources/static/js/templates.js +++ b/src/main/resources/static/js/templates.js @@ -24,30 +24,37 @@ $(document).ready(function() data: {}, success: function(data) { - $('#saveAsTemplateModalContainer').html(data); - $('#modalCreateFromTransaction').modal(); - $('#modalCreateFromTransaction').modal('open'); - let templateNameInput = document.getElementById('template-name'); - templateNameInput.focus(); - $(templateNameInput).on('keypress', function(e) - { - let code = e.keyCode || e.which; - if(code === 13) - { - saveAsTemplate(); - } - }); - - $('#buttonCreateTemplate').click(function() - { - saveAsTemplate(); - }); + createAndOpenModal(data) } }); }); } }); +function createAndOpenModal(data) +{ + let modalID = '#modalCreateFromTransaction'; + + $('#saveAsTemplateModalContainer').html(data); + $(modalID).modal(); + $(modalID).modal('open'); + let templateNameInput = document.getElementById('template-name'); + templateNameInput.focus(); + $(templateNameInput).on('keypress', function(e) + { + let code = e.keyCode || e.which; + if(code === 13) + { + saveAsTemplate(); + } + }); + + $('#buttonCreateTemplate').click(function() + { + saveAsTemplate(); + }); +} + function saveAsTemplate() { // validate template name @@ -58,18 +65,13 @@ function saveAsTemplate() return } - // insert additional input for template name - let inputTemplateName = document.createElement('input'); - inputTemplateName.setAttribute('type', 'hidden'); - inputTemplateName.setAttribute('name', 'templateName'); - inputTemplateName.setAttribute('value', templateName); - let form = document.getElementsByName('NewTransaction')[0]; - form.appendChild(inputTemplateName); + form.appendChild(createAdditionalHiddenInput('templateName', templateName)); + form.appendChild(createAdditionalHiddenInput('ignoreCategory', document.getElementById('ignore-category').checked)); + form.appendChild(createAdditionalHiddenInput('ignoreAccount', document.getElementById('ignore-account').checked)); // replace form target url form.action = $('#buttonCreateTemplate').attr('data-url'); - form.submit(); } @@ -96,4 +98,13 @@ function validateTemplateName(templateName) } return true; +} + +function createAdditionalHiddenInput(name, value) +{ + let newInput = document.createElement('input'); + newInput.setAttribute('type', 'hidden'); + newInput.setAttribute('name', name); + newInput.setAttribute('value', value); + return newInput; } \ No newline at end of file diff --git a/src/main/resources/templates/templates/createFromTransactionModal.ftl b/src/main/resources/templates/templates/createFromTransactionModal.ftl index 6e1165f8ac395b98775ea45f711852f2ef297d32..c82f42f2f1035e7a4d2b07ebc0870d6a04a77a55 100644 --- a/src/main/resources/templates/templates/createFromTransactionModal.ftl +++ b/src/main/resources/templates/templates/createFromTransactionModal.ftl @@ -10,6 +10,18 @@ <input id="template-name" type="text" name="templateName"> <label for="template-name">${locale.getString("transaction.new.label.name")}</label> </div> + <div class="col s12"> + <label> + <input id="ignore-category" type="checkbox"> + <span class="columnName-checkbox-label text-color">${locale.getString('template.checkbox.ignore.category')}</span> + </label> + </div> + <div class="col s12"> + <label> + <input id="ignore-account" type="checkbox" checked="checked"> + <span class="columnName-checkbox-label text-color">${locale.getString('template.checkbox.ignore.account')}</span> + </label> + </div> </div> </div> <div class="modal-footer background-color"> diff --git a/src/main/resources/templates/transactions/newTransactionNormal.ftl b/src/main/resources/templates/transactions/newTransactionNormal.ftl index 04a0fddc14607a9988809da6a89d8024a4522b7e..e0117da12c956f55b934255f35f174af4ebc9d62 100644 --- a/src/main/resources/templates/transactions/newTransactionNormal.ftl +++ b/src/main/resources/templates/transactions/newTransactionNormal.ftl @@ -5,6 +5,7 @@ <@header.style "transactions"/> <@header.style "datepicker"/> <@header.style "categories"/> + <@header.style "filter"/> <#import "/spring.ftl" as s> </head> <body class="budgetmaster-blue-light"> diff --git a/src/main/resources/templates/transactions/newTransactionTransfer.ftl b/src/main/resources/templates/transactions/newTransactionTransfer.ftl index 5c2c6333babcd314319d2ee427ca42862b1716cf..2b4fd1240bfa357d8deaff53fb7f62be40dd1281 100644 --- a/src/main/resources/templates/transactions/newTransactionTransfer.ftl +++ b/src/main/resources/templates/transactions/newTransactionTransfer.ftl @@ -5,6 +5,7 @@ <@header.style "transactions"/> <@header.style "datepicker"/> <@header.style "categories"/> + <@header.style "filter"/> <#import "/spring.ftl" as s> </head> <body class="budgetmaster-blue-light">