diff --git a/pom.xml b/pom.xml index 2b66cc3b9f4a35b276cb07bcc21afbd42f5a907a..1bb1248394aad3aef155ec8edd329409a7cac0e0 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,17 @@ <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> + + <dependency> + <groupId>joda-time</groupId> + <artifactId>joda-time</artifactId> + </dependency> + + <dependency> + <groupId>org.jadira.usertype</groupId> + <artifactId>usertype.core</artifactId> + <version>5.0.0.GA</version> + </dependency> </dependencies> <build> diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java index 78948a95c2a4a6d65e7077e0ea6978e2b1f34fa7..da1b03012252beeb8acd505bd7aefb5ef86d3495 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java @@ -8,13 +8,6 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller public class EmptyPageController extends BaseController { - @RequestMapping("/payments") - public String payments(Model model) - { - model.addAttribute("active", "payments"); - return "emptyPage"; - } - @RequestMapping("/reports") public String reports(Model model) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java new file mode 100644 index 0000000000000000000000000000000000000000..d24f55f99245a9e610a535e5d615eb67e20e1559 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java @@ -0,0 +1,22 @@ +package de.deadlocker8.budgetmaster.controller; + +import de.deadlocker8.budgetmaster.repositories.PaymentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + + +@Controller +public class PaymentController extends BaseController +{ + @Autowired + private PaymentRepository paymentRepository; + + @RequestMapping("/payments") + public String payments(Model model) + { + model.addAttribute("payments", paymentRepository.findAll()); + return "payments/payments"; + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java index 7bb7fab0160c7f5c5972a1a087a739e2a7b46cc7..2066b4dab38a8bdf92f6636c46d399133e7a3900 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java @@ -1,9 +1,9 @@ package de.deadlocker8.budgetmaster.entities; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import org.hibernate.annotations.Type; +import org.joda.time.DateTime; + +import javax.persistence.*; @Entity public class Payment @@ -12,8 +12,9 @@ public class Payment @GeneratedValue(strategy = GenerationType.AUTO) private Integer ID; private Integer amount; - private String date; - private Integer categoryID; + private DateTime date; + @ManyToOne + private Category category; private String name; private String description; // private RepeatingDefinition repeatingDefinition; @@ -38,24 +39,24 @@ public class Payment this.amount = amount; } - public String getDate() + public DateTime getDate() { return date; } - public void setDate(String date) + public void setDate(DateTime date) { this.date = date; } - public Integer getCategoryID() + public Category getCategory() { - return categoryID; + return category; } - public void setCategoryID(Integer categoryID) + public void setCategory(Category category) { - this.categoryID = categoryID; + this.category = category; } public String getName() @@ -95,7 +96,7 @@ public class Payment "ID=" + ID + ", amount=" + amount + ", date='" + date + '\'' + - ", categoryID=" + categoryID + + ", category=" + category + ", name='" + name + '\'' + ", description='" + description + '\'' + // ", repeatingDefinition=" + repeatingDefinition + diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/PaymentRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/PaymentRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..b76b56b541c4c5682f6b8b0fc4986fe0d062bb40 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/PaymentRepository.java @@ -0,0 +1,12 @@ +package de.deadlocker8.budgetmaster.repositories; + +import de.deadlocker8.budgetmaster.entities.Payment; +import org.joda.time.DateTime; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + + +public interface PaymentRepository extends JpaRepository<Payment, Integer> +{ +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0e4d934f8dd6d5d75cbe1f601a6f4e6de410deaa..f027bea075bb3618245680e4757fe80ff943f6fd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,4 +12,6 @@ spring.mvc.log-resolved-exception=false spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql://localhost:3306/budgetmaster2 spring.datasource.username=root -spring.datasource.password= \ No newline at end of file +spring.datasource.password= + +spring.jpa.properties.jadira.usertype.autoRegisterUserTypes = true \ No newline at end of file diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index c91c3c05712f9248f57d744970b070a1731b40c1..f1227ca6ed3335b781d272b1cba39280f67e2ba7 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -16,7 +16,6 @@ title.incomes=Einnahmen title.income=Einnahme title.payments=Ausgaben title.payment=Ausgabe -title.categories=Kategorien 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 4b3f344c3ab1dd5519c0726e74629b82a09bb966..1254f6fbfa663e021d11850d384639332d896596 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -16,7 +16,6 @@ title.incomes=Incomes title.income=Income title.payments=Payments title.payment=Payment -title.categories=Categories title.category=Category title.category.budgets=Consumption by categories title.amount=Amount diff --git a/src/main/resources/templates/categories/categories.ftl b/src/main/resources/templates/categories/categories.ftl index 46ae1847b4cdc59ae3851af4af2742bfc4368935..6f335b4e03d06ca60341ed6a05d5643335c33c40 100644 --- a/src/main/resources/templates/categories/categories.ftl +++ b/src/main/resources/templates/categories/categories.ftl @@ -13,7 +13,7 @@ <div class="card main-card"> <div class="container"> <div class="section center-align"> - <div class="grey-text text-darken-4 headline">${locale.getString("title.categories")}</div> + <div class="grey-text text-darken-4 headline">${locale.getString("menu.categories")}</div> </div> </div> <br> diff --git a/src/main/resources/templates/payments/payments.ftl b/src/main/resources/templates/payments/payments.ftl new file mode 100644 index 0000000000000000000000000000000000000000..b87946021120497a29d03489a2b0fc663d6f2945 --- /dev/null +++ b/src/main/resources/templates/payments/payments.ftl @@ -0,0 +1,67 @@ +<html> + <head> + <#import "../header.ftl" as header> + <@header.header/> + <link type="text/css" rel="stylesheet" href="/css/categories.css"/> + <#assign locale = localization["tools.Localization"]> + </head> + <body class="budgetmaster-blue-light"> + <#import "../navbar.ftl" as navbar> + <@navbar.navbar "payments"/> + + <main> + <div class="card main-card"> + <div class="container"> + <div class="section center-align"> + <div class="grey-text text-darken-4 headline">${locale.getString("menu.payments")}</div> + </div> + </div> + <br> + <div class="center-align"><a href="/categories/newCategory" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">add</i>${locale.getString("title.category.new")}</a></div> + <br> + <div class="container"> + <table class="bordered"> + <#list payments as payment> + <tr> + <td> + <div class="category-circle" style="background-color: ${payment.category.color}"> + <span style="color: ${payment.category.getAppropriateTextColor()}"> + ${payment.category.name?capitalize[0]} + </span> + </div> + </td> + <td>${payment.name}</td> + <td> + <a href="/payments/${payment.ID}/edit" class="btn-flat no-padding"><i class="material-icons left">edit</i></a> + <#if (payment.category.type.name() != "REST")> + <a href="/payments/${payment.ID}/requestDelete" class="btn-flat no-padding"><i class="material-icons left">delete</i></a> + </#if> + </td> + </tr> + </#list> + </table> + </div> + </div> + + <#--<#if currentCategory??>--> + <#--<!-- confirm delete modal –>--> + <#--<div id="modalConfirmDelete" class="modal">--> + <#--<div class="modal-content">--> + <#--<h4>Kategorie löschen</h4>--> + <#--<p>Möchtest du die Kategorie "${currentCategory.name}" wirklich löschen?</p>--> + <#--</div>--> + <#--<div class="modal-footer">--> + <#--<a href="/categories" class="modal-action modal-close waves-effect waves-red btn-flat ">Abbrechen</a>--> + <#--<a href="/categories/${currentCategory.ID}/delete" class="modal-action modal-close waves-effect waves-green btn-flat ">Löschen</a>--> + <#--</div>--> + <#--</div>--> + <#--</#if>--> + </main> + + <!-- Scripts--> + <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script> + <script src="/js/main.js"></script> + <#--<script src="/js/categories.js"></script>--> + </body> +</html> \ No newline at end of file