From a63d066b0a2a4d7af914358b1425568dd0223541 Mon Sep 17 00:00:00 2001 From: Tilman Liero Date: Tue, 19 Apr 2016 15:58:20 +0200 Subject: [PATCH] Withdrawals and deleteLastSubmission() --- .../transactions/SecurityConfiguration.java | 4 +- .../controller/TransactionController.java | 33 ++++++++++ .../tilman/transactions/domain/Account.java | 23 +++++++ .../transactions/domain/Withdrawal.java | 64 +++++++++++++++++++ .../repository/TransactionRepository.java | 5 ++ .../repository/WithdrawalRepository.java | 9 +++ src/main/resources/data-h2.sql | 5 +- src/main/resources/static/css/app.css | 13 ++++ src/main/resources/static/js/controllers.js | 35 +++++++++- .../static/partials/transaction-list.html | 13 +++- 10 files changed, 197 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/tilman/transactions/controller/TransactionController.java create mode 100644 src/main/java/de/tilman/transactions/domain/Withdrawal.java create mode 100644 src/main/java/de/tilman/transactions/repository/WithdrawalRepository.java diff --git a/src/main/java/de/tilman/transactions/SecurityConfiguration.java b/src/main/java/de/tilman/transactions/SecurityConfiguration.java index 8989491..cf1fd44 100644 --- a/src/main/java/de/tilman/transactions/SecurityConfiguration.java +++ b/src/main/java/de/tilman/transactions/SecurityConfiguration.java @@ -27,8 +27,8 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { .antMatchers(HttpMethod.GET, "/public/**").permitAll() .anyRequest().authenticated(); -// http.httpBasic(); // XXX mit HTTP Basic Auth funktioniert der Logout nicht richtig - http.formLogin(); + http.httpBasic(); // XXX mit HTTP Basic Auth funktioniert der Logout nicht richtig +// http.formLogin(); http.csrf().disable(); // XXX später wieder aktivieren } diff --git a/src/main/java/de/tilman/transactions/controller/TransactionController.java b/src/main/java/de/tilman/transactions/controller/TransactionController.java new file mode 100644 index 0000000..8f905f2 --- /dev/null +++ b/src/main/java/de/tilman/transactions/controller/TransactionController.java @@ -0,0 +1,33 @@ +package de.tilman.transactions.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.rest.webmvc.RepositoryRestController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import de.tilman.transactions.domain.Transaction; +import de.tilman.transactions.repository.TransactionRepository; + +//@RepositoryRestController +public class TransactionController { + +// private final TransactionRepository repository; +// +// @Autowired +// public TransactionController(TransactionRepository repository) { +// this.repository = repository; +// } +// +// @RequestMapping(method = RequestMethod.DELETE, value = "/transactions/{id}") +// public @ResponseBody Iterable deleteTransaction() { +// Iterable producers = repository.findAll(); +// +// // +// // do some intermediate processing, logging, etc. with the producers +// // +// +// return producers; // or some filtered/altered/mapped version +// } + +} diff --git a/src/main/java/de/tilman/transactions/domain/Account.java b/src/main/java/de/tilman/transactions/domain/Account.java index bcf0258..a7ecafd 100644 --- a/src/main/java/de/tilman/transactions/domain/Account.java +++ b/src/main/java/de/tilman/transactions/domain/Account.java @@ -29,6 +29,13 @@ public class Account { @ManyToMany @JoinTable(name = "account_user", joinColumns = @JoinColumn(name = "account_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")) private List users; + + @OneToMany(mappedBy = "account") + private List withdrawals; + +// @ElementCollection +// private Map withdrawals = new Hashtable(); + public Long getId() { @@ -66,5 +73,21 @@ public class Account { public void setUsers(List users) { this.users = users; } + + public List getWithdrawals() { + return withdrawals; + } + + public void setWithdrawals(List withdrawals) { + this.withdrawals = withdrawals; + } + +// public Map getWithdrawals() { +// return withdrawals; +// } +// +// public void setWithdrawals(Map withdrawals) { +// this.withdrawals = withdrawals; +// } } diff --git a/src/main/java/de/tilman/transactions/domain/Withdrawal.java b/src/main/java/de/tilman/transactions/domain/Withdrawal.java new file mode 100644 index 0000000..2dbc7fb --- /dev/null +++ b/src/main/java/de/tilman/transactions/domain/Withdrawal.java @@ -0,0 +1,64 @@ +package de.tilman.transactions.domain; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +@Entity +public class Withdrawal { + + @Id + @GeneratedValue + private Long id; + + @ManyToOne(optional = false) + private Account account; + + @ManyToOne(optional = false) + private User user; + + private BigDecimal amount; + private Date date; + + public Long getId() { + return id; + } + + public Account getAccount() { + return account; + } + + public void setAccount(Account account) { + this.account = account; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + +} diff --git a/src/main/java/de/tilman/transactions/repository/TransactionRepository.java b/src/main/java/de/tilman/transactions/repository/TransactionRepository.java index 00393f4..f30f744 100644 --- a/src/main/java/de/tilman/transactions/repository/TransactionRepository.java +++ b/src/main/java/de/tilman/transactions/repository/TransactionRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RestResource; +import org.springframework.security.access.prepost.PreAuthorize; import de.tilman.transactions.domain.Transaction; @@ -15,6 +16,10 @@ public interface TransactionRepository extends PagingAndSortingRepository findAll(Pageable pageable); + +// @PreAuthorize("hasRole('ROLE_ADMIN')") +// @Override +// void delete(Transaction transaction); @RestResource(path = "last10") List findFirst10ByAccountIdOrderByDateDescLastChangeDesc(@Param("accountId") Long accountId); diff --git a/src/main/java/de/tilman/transactions/repository/WithdrawalRepository.java b/src/main/java/de/tilman/transactions/repository/WithdrawalRepository.java new file mode 100644 index 0000000..ef5c67d --- /dev/null +++ b/src/main/java/de/tilman/transactions/repository/WithdrawalRepository.java @@ -0,0 +1,9 @@ +package de.tilman.transactions.repository; + +import org.springframework.data.repository.PagingAndSortingRepository; + +import de.tilman.transactions.domain.Withdrawal; + +public interface WithdrawalRepository extends PagingAndSortingRepository { + +} diff --git a/src/main/resources/data-h2.sql b/src/main/resources/data-h2.sql index 27d5e91..7b13308 100644 --- a/src/main/resources/data-h2.sql +++ b/src/main/resources/data-h2.sql @@ -1,12 +1,13 @@ INSERT INTO User (id, name, username) VALUES (1, 'Adam', 'adam@mail.com'), (2, 'Betty', 'betty@mail.com'); INSERT INTO Account (id, name, owner_id) VALUES (1, 'Gemeinschaftskonto', 1), (2, 'Konto Adam', 1); +INSERT INTO Withdrawal(id, account_id, amount, user_id, date) VALUES (1, 1, 20.00, 2, '2014-06-12'); +INSERT INTO Withdrawal(id, account_id, amount, user_id, date) VALUES (2, 1, 10.00, 1, '2014-06-14'); + INSERT INTO Category (id, name, account_id, position) VALUES (1, 'Essen - Lebensmittel', 1, 2), (2, 'Einnahmen - Gehalt', 1, 1), (3, 'Essen - Arbeit', 1, 3), (4, 'Einnahmen - Gehalt', 2, 1), (5, 'Technik - Server und Hosting', 2, 2); - INSERT INTO Account_User (account_id, user_id) VALUES (1, 1), (1, 2), (2, 1); - INSERT INTO Transaction (id, amount, account_id, category_id, date, description, creditor_id) VALUES (NULL, 1280.81, 1, 1, '2014-06-01', 'Gehalt', null), (NULL, -2.21, 1, 2, '2014-06-10', 'Brot', null), diff --git a/src/main/resources/static/css/app.css b/src/main/resources/static/css/app.css index d1ffffb..810eb14 100644 --- a/src/main/resources/static/css/app.css +++ b/src/main/resources/static/css/app.css @@ -28,4 +28,17 @@ body { .clickable { cursor: pointer; +} + +#accountSelector { + text-align: right; + margin-right: 4em; +} + +.color-red { + color: red; +} + +.color-green { + color: green; } \ No newline at end of file diff --git a/src/main/resources/static/js/controllers.js b/src/main/resources/static/js/controllers.js index 51c58c9..67b975a 100644 --- a/src/main/resources/static/js/controllers.js +++ b/src/main/resources/static/js/controllers.js @@ -63,7 +63,6 @@ transactionControllers.controller('TransactionListCtrl', [ '$scope', '$location' } radioButtons[0].checked = true; } - } $scope.initList = function() { @@ -104,6 +103,30 @@ transactionControllers.controller('TransactionListCtrl', [ '$scope', '$location' amount = '-' + amount; } + // handle withdrawals + if ($scope.transaction.category._links.self.href === 'withdrawal') { + if (amount.charAt(0) === '-') { + amount = amount.substr(1); + } + + var Withdrawal = $resource('/withdrawals'); + + var newWithdrawal = new Withdrawal({ + "account" : $scope.account._links.self.href, + "amount" : amount, + "date" : $scope.transaction.date, + "user" : $scope.userinfo._links.self.href + }); + + newWithdrawal.$save(function(withdrawal) { + $scope.refreshList(); + $scope.lastSubmission = newWithdrawal; + console.log(newWithdrawal); + }); + + return; + } + // via Resource (might be moved into a service) var Transaction = $resource('/transactions'); @@ -118,6 +141,16 @@ transactionControllers.controller('TransactionListCtrl', [ '$scope', '$location' newTransaction.$save(function(transaction) { $scope.refreshList(); + $scope.lastSubmission = newTransaction; + }); + + }; + + $scope.deleteLastSubmission = function() { + console.log($scope.lastSubmission._links.self.href); + var testTrns = $resource($scope.lastSubmission._links.self.href).delete(function() { + $scope.lastSubmission = undefined; + $scope.refreshList(); }); }; diff --git a/src/main/resources/static/partials/transaction-list.html b/src/main/resources/static/partials/transaction-list.html index 254d5e8..526ad56 100644 --- a/src/main/resources/static/partials/transaction-list.html +++ b/src/main/resources/static/partials/transaction-list.html @@ -1,11 +1,20 @@
-
+
+ +
+ {{lastSubmission.date | date:'dd.MM.yyyy'}} + {{lastSubmission.amount}} € +     + löschen +
+ +
-
Betrag:
The value is not valid!