diff --git a/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java b/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java index b8315a55..57a52f44 100644 --- a/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java +++ b/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java @@ -159,11 +159,9 @@ public class AccountingModule extends BaseHandler implements AccountingService { var transaction = accountDb.loadTransaction(transactionId); LOG.log(WARNING,"Missing permission check in patchTransaction(…)!"); var json = json(ex); - if (json.has(Field.DATE)){ - var date = LocalDate.parse(json.getString(Field.DATE)); - transaction.date(date); - accountDb.save(transaction); - } + if (json.has(Field.DATE)) transaction.date(LocalDate.parse(json.getString(Field.DATE))); + if (json.has(Field.PURPOSE)) transaction.purpose(json.getString(Field.PURPOSE)); + accountDb.save(transaction); return sendContent(ex,transaction); } diff --git a/accounting/src/main/java/de/srsoftware/umbrella/accounting/SqliteDb.java b/accounting/src/main/java/de/srsoftware/umbrella/accounting/SqliteDb.java index a719f910..7b657e92 100644 --- a/accounting/src/main/java/de/srsoftware/umbrella/accounting/SqliteDb.java +++ b/accounting/src/main/java/de/srsoftware/umbrella/accounting/SqliteDb.java @@ -217,12 +217,12 @@ public class SqliteDb extends BaseDb implements AccountDb { } catch (SQLException e) { throw failedToStoreObject(transaction); } - } else { + } else if (transaction.isDirty()) { try { Query.replaceInto(TABLE_TRANSACTIONS, Field.ID, Field.ACCOUNT, Field.TIMESTAMP, Field.SOURCE, Field.DESTINATION, Field.AMOUNT, Field.DESCRIPTION) .values(transaction.id(), transaction.accountId(), timestamp, transaction.source().value(), transaction.destination().value(), transaction.amount(), transaction.purpose()) .execute(db).close(); - return transaction; + return transaction.clearDirtyState(); } catch (SQLException e) { throw failedToStoreObject(transaction); } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Transaction.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Transaction.java index 71a1cd38..28dde06f 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Transaction.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Transaction.java @@ -21,6 +21,7 @@ public class Transaction implements Mappable { private double amount; private String purpose; private Set tags; + private HashSet dirtyFields = new HashSet<>(); public Transaction(long id, long accountId, LocalDateTime date, IdOrString source, IdOrString destination, double amount, String purpose, Set tags){ this.id = id; @@ -41,17 +42,23 @@ public class Transaction implements Mappable { return amount; } + public Transaction clearDirtyState(){ + dirtyFields.clear(); + return this; + } + public LocalDateTime date(){ return date; } public Transaction date(LocalDateTime newVal){ date = newVal; + dirtyFields.add(Field.DATE); return this; } - public void date(LocalDate date) { - this.date = this.date.withYear(date.getYear()).withMonth(date.getMonthValue()).withDayOfMonth(date.getDayOfMonth()); + public Transaction date(LocalDate date) { + return date(this.date.withYear(date.getYear()).withMonth(date.getMonthValue()).withDayOfMonth(date.getDayOfMonth())); } public IdOrString destination(){ @@ -62,6 +69,10 @@ public class Transaction implements Mappable { return id; } + public boolean isDirty(){ + return !dirtyFields.isEmpty(); + } + public static Transaction of(ResultSet rs) throws SQLException { var accountId = rs.getLong(Field.ACCOUNT); var timestamp = rs.getLong(Field.TIMESTAMP); @@ -78,6 +89,12 @@ public class Transaction implements Mappable { return purpose; } + public Transaction purpose(String newVal){ + purpose = newVal; + dirtyFields.add(Field.PURPOSE); + return this; + } + public IdOrString source(){ return source; } diff --git a/frontend/src/routes/accounting/transaction.svelte b/frontend/src/routes/accounting/transaction.svelte index bb165bfc..7173b002 100644 --- a/frontend/src/routes/accounting/transaction.svelte +++ b/frontend/src/routes/accounting/transaction.svelte @@ -15,8 +15,12 @@ return false; } - async function setDate(newDate){ - return await update({date:newDate}); + async function setDate(date){ + return await update({date}); + } + + async function setPurpose(purpose){ + return await update({purpose}); } @@ -42,7 +46,9 @@ → {transaction.destination.value} {/if} - {transaction.purpose} + + + {transaction.tags.join(', ')}