wip: recurring transactions
Some checks failed
Build Docker Image / Build-Docker-Image (push) Failing after 4m24s
Some checks failed
Build Docker Image / Build-Docker-Image (push) Failing after 4m24s
This commit is contained in:
@@ -84,7 +84,7 @@ func (h TreasureChestImpl) handleTreasureChestItemComp() http.HandlerFunc {
|
||||
}
|
||||
|
||||
transactionsRecurring, err := h.transactionRecurring.GetAllByTreasureChest(user, treasureChest.Id.String())
|
||||
transactionsRec := tr.TransactionRecurringItems(transactionsRecurring)
|
||||
transactionsRec := tr.TransactionRecurringItems(transactionsRecurring, "", "", "")
|
||||
|
||||
var comp templ.Component
|
||||
if r.URL.Query().Get("edit") == "true" {
|
||||
|
||||
@@ -309,7 +309,7 @@ func (s TransactionRecurringImpl) Delete(user *types.User, id string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
r, err := tx.Exec("DELETE FROM \"transactionRecurring\" WHERE id = ? AND user_id = ?", uuid, user.Id)
|
||||
r, err := tx.Exec("DELETE FROM transaction_recurring WHERE id = ? AND user_id = ?", uuid, user.Id)
|
||||
err = db.TransformAndLogDbError("transactionRecurring Delete", r, err)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -4,55 +4,51 @@ import "fmt"
|
||||
import "spend-sparrow/template/svg"
|
||||
import "spend-sparrow/types"
|
||||
|
||||
templ TransactionRecurringItems(transactionsRecurring []*types.TransactionRecurring) {
|
||||
<table id="transaction-recurring-items border-spacing-96" class="p-40 w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-sm text-gray-500">Party</th>
|
||||
<th class="text-sm text-gray-500">Description</th>
|
||||
<th class="text-sm text-gray-500">Value (€)</th>
|
||||
<th class="text-sm text-gray-500">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
templ TransactionRecurringItems(transactionsRecurring []*types.TransactionRecurring, editId, accountId, treasureChestId string) {
|
||||
<!-- Don't use table, because embedded forms are only valid for cells -->
|
||||
<div class="grid gap-4 mt-10 grid-cols-[auto_auto_auto_auto_max-content] items-center text-xl">
|
||||
<span class="text-sm text-gray-500">Party</span>
|
||||
<span class="text-sm text-gray-500">Description</span>
|
||||
<span class="text-sm text-gray-500">Interval</span>
|
||||
<span class="text-sm text-right text-gray-500">Value</span>
|
||||
<span></span>
|
||||
for _, transaction := range transactionsRecurring {
|
||||
if transaction.Id.String() == editId {
|
||||
@EditTransactionRecurring(transaction, accountId, treasureChestId)
|
||||
} else {
|
||||
@TransactionRecurringItem(transaction)
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
templ TransactionRecurringItem(transactionRecurring *types.TransactionRecurring) {
|
||||
<tr id={ "transaction-recurring" + transactionRecurring.Id.String() } class="mx-20">
|
||||
<td>
|
||||
<p class="text-sm text-gray-500">
|
||||
<p class="text-gray-600">
|
||||
if transactionRecurring.Party != "" {
|
||||
{ transactionRecurring.Party }
|
||||
} else {
|
||||
|
||||
}
|
||||
</p>
|
||||
</td>
|
||||
<td>
|
||||
<p class="text-sm text-gray-500">
|
||||
<p class="text-gray-600">
|
||||
if transactionRecurring.Description != "" {
|
||||
{ transactionRecurring.Description }
|
||||
} else {
|
||||
|
||||
}
|
||||
</p>
|
||||
</td>
|
||||
<td>
|
||||
<p class="text-gray-500 text-sm">
|
||||
Every <span class="text-xl">{ transactionRecurring.IntervalMonths }</span> month(s)
|
||||
</p>
|
||||
if transactionRecurring.Value < 0 {
|
||||
<p class="mr-8 min-w-22 text-red-700">{ displayBalance(transactionRecurring.Value)+" €" }</p>
|
||||
<p class="text-right text-red-700">{ displayBalance(transactionRecurring.Value)+" €" }</p>
|
||||
} else {
|
||||
<p class="mr-8 min-w-22 text-green-700">{ displayBalance(transactionRecurring.Value)+" €" }</p>
|
||||
<p class="text-right text-green-700">{ displayBalance(transactionRecurring.Value)+" €" }</p>
|
||||
}
|
||||
</td>
|
||||
<td class="flex gap-2">
|
||||
<div class="flex gap-2">
|
||||
<button
|
||||
hx-get={ "/transaction-recurring/" + transactionRecurring.Id.String() + "?edit=true" }
|
||||
hx-target="closest #transaction"
|
||||
hx-target={ "#transaction-recurring" + transactionRecurring.Id.String() }
|
||||
hx-swap="outerHTML"
|
||||
class="button button-neglect px-1 flex items-center gap-2"
|
||||
>
|
||||
@@ -63,7 +59,7 @@ templ TransactionRecurringItem(transactionRecurring *types.TransactionRecurring)
|
||||
</button>
|
||||
<button
|
||||
hx-delete={ "/transaction-recurring/" + transactionRecurring.Id.String() }
|
||||
hx-target="closest #transaction"
|
||||
hx-target={ "#transaction-recurring" + transactionRecurring.Id.String() }
|
||||
hx-swap="outerHTML"
|
||||
hx-confirm="Are you sure you want to delete this transaction?"
|
||||
class="button button-neglect px-1 flex items-center gap-2"
|
||||
@@ -73,8 +69,7 @@ templ TransactionRecurringItem(transactionRecurring *types.TransactionRecurring)
|
||||
Delete
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</div>
|
||||
}
|
||||
|
||||
templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, accountId, treasureChestId string) {
|
||||
@@ -102,14 +97,13 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring,
|
||||
cancelUrl = "/transaction-recurring/" + id
|
||||
}
|
||||
}}
|
||||
<div id="transaction" class="border-1 border-gray-300 w-full my-4 p-4 bg-gray-50 rounded-lg">
|
||||
<form
|
||||
id="transaction-recurring-form"
|
||||
hx-post={ "/transaction-recurring/" + id }
|
||||
hx-target="closest #transaction"
|
||||
hx-swap="outerHTML"
|
||||
class="text-xl flex justify-end gap-4 items-center"
|
||||
>
|
||||
<div class="grid grid-cols-[auto_auto] items-center gap-4 ">
|
||||
></form>
|
||||
<div class="col-span-2">
|
||||
<input
|
||||
name="active"
|
||||
@@ -155,7 +149,6 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring,
|
||||
if treasureChestId != "" {
|
||||
<input type="text" name="treasure-chest-id" class="hidden text-sm text-gray-500" value={ treasureChestId }/>
|
||||
}
|
||||
</div>
|
||||
<button type="submit" class="button button-neglect px-1 flex items-center gap-2">
|
||||
@svg.Save()
|
||||
<span>
|
||||
@@ -164,7 +157,7 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring,
|
||||
</button>
|
||||
<button
|
||||
hx-get={ cancelUrl }
|
||||
hx-target="closest #transaction"
|
||||
hx-target={ "#transaction-recurring" + transactionRecurring.Id.String() }
|
||||
hx-swap="outerHTML"
|
||||
class="button button-neglect px-1 flex items-center gap-2"
|
||||
>
|
||||
@@ -173,8 +166,6 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring,
|
||||
Cancel
|
||||
</span>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
}
|
||||
|
||||
func displayBalance(balance int64) string {
|
||||
|
||||
Reference in New Issue
Block a user