Skip to content
Snippets Groups Projects
Commit 87177182 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#338 - added options to ignore account and category

parent efe512d6
No related branches found
No related tags found
No related merge requests found
Pipeline #3353 passed
...@@ -63,10 +63,11 @@ public class TemplateController extends BaseController ...@@ -63,10 +63,11 @@ public class TemplateController extends BaseController
} }
@PostMapping(value = "/templates/fromTransaction") @PostMapping(value = "/templates/fromTransaction")
public String postNormal(Model model, public String postNormal(@RequestParam(value = "templateName") String templateName,
@RequestParam(value = "templateName") String templateName,
@ModelAttribute("NewTransaction") Transaction transaction, @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.handleAmount(transaction, isPayment);
transactionService.handleTags(transaction); transactionService.handleTags(transaction);
...@@ -76,9 +77,7 @@ public class TemplateController extends BaseController ...@@ -76,9 +77,7 @@ public class TemplateController extends BaseController
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "templateName must not be empty"); throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "templateName must not be empty");
} }
final Template template = new Template(templateName, transaction); templateService.createFromTransaction(templateName, transaction, ignoreCategory, ignoreAccount);
templateService.getRepository().save(template);
return "redirect:/templates"; return "redirect:/templates";
} }
......
package de.deadlocker8.budgetmaster.templates; package de.deadlocker8.budgetmaster.templates;
import de.deadlocker8.budgetmaster.services.Resetable; import de.deadlocker8.budgetmaster.services.Resetable;
import de.deadlocker8.budgetmaster.transactions.Transaction;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -33,4 +34,20 @@ public class TemplateService implements Resetable ...@@ -33,4 +34,20 @@ public class TemplateService implements Resetable
public void createDefaults() 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);
}
} }
...@@ -246,6 +246,9 @@ search.in.description=Beschreibung ...@@ -246,6 +246,9 @@ search.in.description=Beschreibung
search.in.category=Kategorie search.in.category=Kategorie
search.in.tags=Tags search.in.tags=Tags
template.checkbox.ignore.category=Kategorie nicht übernehmen
template.checkbox.ignore.account=Konto nicht übernehmen
# ABOUT # ABOUT
about=Über {0} about=Über {0}
about.roadmap.link=Roadmap öffnen about.roadmap.link=Roadmap öffnen
......
...@@ -246,6 +246,9 @@ search.in.description=Description ...@@ -246,6 +246,9 @@ search.in.description=Description
search.in.category=Category search.in.category=Category
search.in.tags=Tags search.in.tags=Tags
template.checkbox.ignore.category=Omit selected category
template.checkbox.ignore.account=Omit selected account
# ABOUT # ABOUT
about=About {0} about=About {0}
about.roadmap.link=Open Roadmap about.roadmap.link=Open Roadmap
......
...@@ -24,9 +24,20 @@ $(document).ready(function() ...@@ -24,9 +24,20 @@ $(document).ready(function()
data: {}, data: {},
success: function(data) success: function(data)
{ {
createAndOpenModal(data)
}
});
});
}
});
function createAndOpenModal(data)
{
let modalID = '#modalCreateFromTransaction';
$('#saveAsTemplateModalContainer').html(data); $('#saveAsTemplateModalContainer').html(data);
$('#modalCreateFromTransaction').modal(); $(modalID).modal();
$('#modalCreateFromTransaction').modal('open'); $(modalID).modal('open');
let templateNameInput = document.getElementById('template-name'); let templateNameInput = document.getElementById('template-name');
templateNameInput.focus(); templateNameInput.focus();
$(templateNameInput).on('keypress', function(e) $(templateNameInput).on('keypress', function(e)
...@@ -43,10 +54,6 @@ $(document).ready(function() ...@@ -43,10 +54,6 @@ $(document).ready(function()
saveAsTemplate(); saveAsTemplate();
}); });
} }
});
});
}
});
function saveAsTemplate() function saveAsTemplate()
{ {
...@@ -58,18 +65,13 @@ function saveAsTemplate() ...@@ -58,18 +65,13 @@ function saveAsTemplate()
return 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]; 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 // replace form target url
form.action = $('#buttonCreateTemplate').attr('data-url'); form.action = $('#buttonCreateTemplate').attr('data-url');
form.submit(); form.submit();
} }
...@@ -97,3 +99,12 @@ function validateTemplateName(templateName) ...@@ -97,3 +99,12 @@ function validateTemplateName(templateName)
return true; 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
...@@ -10,6 +10,18 @@ ...@@ -10,6 +10,18 @@
<input id="template-name" type="text" name="templateName"> <input id="template-name" type="text" name="templateName">
<label for="template-name">${locale.getString("transaction.new.label.name")}</label> <label for="template-name">${locale.getString("transaction.new.label.name")}</label>
</div> </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> </div>
<div class="modal-footer background-color"> <div class="modal-footer background-color">
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
<@header.style "transactions"/> <@header.style "transactions"/>
<@header.style "datepicker"/> <@header.style "datepicker"/>
<@header.style "categories"/> <@header.style "categories"/>
<@header.style "filter"/>
<#import "/spring.ftl" as s> <#import "/spring.ftl" as s>
</head> </head>
<body class="budgetmaster-blue-light"> <body class="budgetmaster-blue-light">
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
<@header.style "transactions"/> <@header.style "transactions"/>
<@header.style "datepicker"/> <@header.style "datepicker"/>
<@header.style "categories"/> <@header.style "categories"/>
<@header.style "filter"/>
<#import "/spring.ftl" as s> <#import "/spring.ftl" as s>
</head> </head>
<body class="budgetmaster-blue-light"> <body class="budgetmaster-blue-light">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment