diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java index 59687135107f4cdacd33853383a0e77e0bd29916..508cdcdc82083386b226a9e43a22b1d4584ced58 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java @@ -1,7 +1,11 @@ package de.deadlocker8.budgetmaster.controller; +import de.deadlocker8.budgetmaster.entities.Payment; import de.deadlocker8.budgetmaster.entities.Settings; +import de.deadlocker8.budgetmaster.repositories.PaymentRepository; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; +import de.deadlocker8.budgetmaster.services.HelpersService; +import de.deadlocker8.budgetmaster.services.PaymentService; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +14,8 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; +import java.util.List; + @Controller public class IndexController extends BaseController @@ -17,6 +23,15 @@ public class IndexController extends BaseController @Autowired SettingsRepository settingsRepository; + @Autowired + private PaymentService paymentService; + + @Autowired + PaymentRepository paymentRepository; + + @Autowired + private HelpersService helpers; + @RequestMapping("/") public String index(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) { @@ -32,6 +47,16 @@ public class IndexController extends BaseController } model.addAttribute("currentDate", date); + + List<Payment> payments = paymentService.getPaymentsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear()); + + int incomeSum = helpers.getIncomeSumForPaymentList(payments); + int paymentSum = helpers.getPaymentSumForPaymentList(payments); + int rest = incomeSum + paymentSum; + model.addAttribute("incomeSum", incomeSum); + model.addAttribute("paymentSum", paymentSum); + model.addAttribute("rest", rest); + return "index"; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java index 52247a6ed1004d7014b4792932d9c2bebb682ec6..35e2fab30e5063a10935d66e60dabe75294c4c50 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java @@ -6,6 +6,7 @@ import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.entities.Tag; import de.deadlocker8.budgetmaster.repositories.*; import de.deadlocker8.budgetmaster.services.HelpersService; +import de.deadlocker8.budgetmaster.services.PaymentService; import de.deadlocker8.budgetmaster.validators.PaymentValidator; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; @@ -25,6 +26,9 @@ public class PaymentController extends BaseController @Autowired private PaymentRepository paymentRepository; + @Autowired + private PaymentService paymentService; + @Autowired private CategoryRepository categoryRepository; @@ -44,7 +48,7 @@ public class PaymentController extends BaseController public String payments(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) { DateTime date = getDateTimeFromCookie(cookieDate); - List<Payment> payments = getPaymentsForMonthAndYear(date.getMonthOfYear(), date.getYear()); + List<Payment> payments = paymentService.getPaymentsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear()); model.addAttribute("payments", payments); model.addAttribute("incomeSum", helpers.getIncomeSumForPaymentList(payments)); @@ -62,7 +66,7 @@ public class PaymentController extends BaseController } DateTime date = getDateTimeFromCookie(cookieDate); - List<Payment> payments = getPaymentsForMonthAndYear(date.getMonthOfYear(), date.getYear()); + List<Payment> payments = paymentService.getPaymentsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear()); model.addAttribute("payments", payments); model.addAttribute("incomeSum", helpers.getIncomeSumForPaymentList(payments)); model.addAttribute("paymentSum", helpers.getPaymentSumForPaymentList(payments)); @@ -146,13 +150,6 @@ public class PaymentController extends BaseController return settingsRepository.findOne(0); } - private List<Payment> getPaymentsForMonthAndYear(int month, int year) - { - DateTime startDate = DateTime.now().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); - DateTime endDate = DateTime.now().withYear(year).withMonthOfYear(month).dayOfMonth().withMaximumValue(); - return paymentRepository.findAllByAccountAndDateBetweenOrderByDateDesc(helpers.getCurrentAccount(), startDate, endDate); - } - private DateTime getDateTimeFromCookie(String cookieDate) { if(cookieDate == null) diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/PaymentService.java b/src/main/java/de/deadlocker8/budgetmaster/services/PaymentService.java new file mode 100644 index 0000000000000000000000000000000000000000..29f3321f91fe6a5b16b1d21ef4c19b6268000995 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/services/PaymentService.java @@ -0,0 +1,32 @@ +package de.deadlocker8.budgetmaster.services; + +import de.deadlocker8.budgetmaster.entities.Account; +import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.repositories.PaymentRepository; +import org.joda.time.DateTime; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class PaymentService +{ + private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + private PaymentRepository paymentRepository; + + @Autowired + public PaymentService(PaymentRepository categoryRepository) + { + this.paymentRepository = categoryRepository; + } + + public List<Payment> getPaymentsForMonthAndYear(Account account, int month, int year) + { + DateTime startDate = DateTime.now().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); + DateTime endDate = DateTime.now().withYear(year).withMonthOfYear(month).dayOfMonth().withMaximumValue(); + return paymentRepository.findAllByAccountAndDateBetweenOrderByDateDesc(account, startDate, endDate); + } +} diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index d7064a61c7c1234bbcaa712927df65c8edfab65e..71cca960dffef4c07d6ef842149305e246db176e 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -23,6 +23,7 @@ title.incomes=Einnahmen title.income=Einnahme title.payments=Ausgaben title.payment=Ausgabe +title.rest=Rest title.category=Kategorie title.category.budgets=Verbrauch nach Kategorien title.amount=Betrag diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 0f373a69cae58fb90bd2a1d27401b1b543efe56c..b34c07f0f146b9c66a6e16ec3581584f8b080a06 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -23,6 +23,7 @@ title.incomes=Incomes title.income=Income title.payments=Payments title.payment=Payment +title.rest=Rest title.category=Category title.category.budgets=Consumption by categories title.amount=Amount diff --git a/src/main/resources/templates/index.ftl b/src/main/resources/templates/index.ftl index 6aa96315904b6ca1fcc1bf970621753b2d959afc..85728dfd53242a9b2b11a0d9f636b58117653428 100644 --- a/src/main/resources/templates/index.ftl +++ b/src/main/resources/templates/index.ftl @@ -2,6 +2,7 @@ <head> <#import "header.ftl" as header> <@header.header "BudgetMaster"/> + <#assign locale = static["tools.Localization"]> </head> <body class="budgetmaster-blue-light"> <#import "navbar.ftl" as navbar> @@ -17,37 +18,49 @@ <div class="col s12 m4"> <div class="icon-block"> <h1 class="center text-green"><i class="material-icons icon-budget">file_download</i></h1> - <h5 class="center budget">2350,15 €</h5> - <h5 class="center grey-text text-darken-1 budget-headline">Einnahmen</h5> + <h5 class="center budget">${helpers.getCurrencyString(incomeSum)}</h5> + <h5 class="center grey-text text-darken-1 budget-headline">${locale.getString("title.incomes")}</h5> </div> </div> <div class="col s12 m4"> <div class="icon-block"> <h1 class="center text-red"><i class="material-icons icon-budget">file_upload</i></h1> - <h5 class="center budget">-576,33 €</h5> - <h5 class="center grey-text text-darken-1 budget-headline">Ausgaben</h5> + <h5 class="center budget">${helpers.getCurrencyString(paymentSum)}</h5> + <h5 class="center grey-text text-darken-1 budget-headline">${locale.getString("title.payments")}</h5> </div> </div> <div class="col s12 m4"> <div class="icon-block"> - <h1 class="center budgetmaster-blue-text"><i class="material-icons icon-budget">account_balance</i></h1> - <h5 class="center budget">1773,82 €</h5> - <h5 class="center grey-text text-darken-1 budget-headline">Rest</h5> + <h1 class="center budgetmaster-blue-text"><i class="fas fa-piggy-bank icon-budget"></i></h1> + <h5 class="center budget">${helpers.getCurrencyString(rest)}</h5> + <h5 class="center grey-text text-darken-1 budget-headline">${locale.getString("title.rest")}</h5> </div> </div> </div> <div class="hide-on-small-only"><br><br></div> <div class="row"> + <#if incomeSum gt paymentSum?abs> + <#assign fullPercentage = incomeSum> + <#else> + <#assign fullPercentage = paymentSum?abs> + </#if> + <div class="col s12"> - <div class="budget-bar-container"> - <div class="budget-bar color-green" style="width: 100%"></div> - </div> - <div class="budget-bar-container"> - <div class="budget-bar color-red" style="width: 25%"></div> - </div> - <div class="budget-bar-container"> - <div class="budget-bar budgetmaster-blue" style="width: 75%"></div> - </div> + <#if fullPercentage gt 0> + <div class="budget-bar-container"> + <div class="budget-bar color-green" style="width: ${(100 / fullPercentage * incomeSum)?abs?c}%"></div> + </div> + </#if> + <#if fullPercentage gt 0> + <div class="budget-bar-container"> + <div class="budget-bar color-red" style="width: ${(100 / fullPercentage * paymentSum)?abs?c}%"></div> + </div> + </#if> + <#if rest gt 0> + <div class="budget-bar-container"> + <div class="budget-bar budgetmaster-blue" style="width: ${(100 / fullPercentage * rest)?abs?c}%"></div> + </div> + </#if> </div> </div> </div>