Make budgets work again

This commit is contained in:
2025-05-18 14:42:42 +02:00
parent 5dc474407c
commit 42b1bbd438
9 changed files with 3601 additions and 4917 deletions

View File

@@ -80,7 +80,6 @@ class AccountBalanceGraphCard extends StatelessWidget {
child: FutureBuilder(
future: getAccountBalance(),
builder: (context, snapshot) {
print("SNAPSHOT: ${snapshot.data}");
if (!snapshot.hasData) {
return CircularProgressIndicator();
}

View File

@@ -9,11 +9,13 @@ import 'package:okane/ui/widgets/add_expense_category.dart';
class AddBudgetItemPopup extends StatefulWidget {
final VoidCallback onDone;
final BudgetsDto budget;
final List<BudgetItemDto> items;
const AddBudgetItemPopup({
super.key,
required this.onDone,
required this.budget,
required this.items,
});
@override
@@ -72,7 +74,7 @@ class AddBudgetItemState extends State<AddBudgetItemPopup> {
_expenseCategory == null) {
return;
}
if (widget.budget.budgetItems
if (widget.items
.where(
(i) =>
i.expenseCategory.name == _expenseCategory!.name,
@@ -84,10 +86,11 @@ class AddBudgetItemState extends State<AddBudgetItemPopup> {
await GetIt.I.get<OkaneDatabase>().budgetsDao.upsertBudgetItem(
BudgetItemsCompanion(
expenseCategoryId: Value(_expenseCategory!.id),
amount: Value(
double.parse(_budgetItemAmountEditController.text),
),
expenseCategoryId: Value(_expenseCategory!.id),
budgetId: Value(widget.budget.budget.id),
),
);
widget.onDone();

View File

@@ -22,6 +22,7 @@ class BudgetDetailsPage extends StatelessWidget {
builder:
(_) => AddBudgetItemPopup(
budget: state.activeBudget!,
items: state.budgetItems,
onDone: () {
Navigator.of(context).pop();
},
@@ -55,7 +56,7 @@ class BudgetDetailsPage extends StatelessWidget {
return Text(t.pages.budgets.details.noBudgetSelected);
}
if (state.activeBudget!.budgetItems.isEmpty) {
if (state.budgetItems.isEmpty) {
return Row(
children: [
Text(t.pages.budgets.details.noBudgetItems),
@@ -95,10 +96,9 @@ class BudgetDetailsPage extends StatelessWidget {
),
ListView.builder(
shrinkWrap: true,
itemCount: state.activeBudget!.budgetItems.length,
itemCount: state.budgetItems.length,
itemBuilder: (context, index) {
final item = state.activeBudget!.budgetItems
.elementAt(index);
final item = state.budgetItems.elementAt(index);
final amount = formatCurrency(item.item.amount);
return ListTile(
title: Text(
@@ -120,7 +120,7 @@ class BudgetDetailsPage extends StatelessWidget {
}
final categories =
state.activeBudget!.budgetItems
state.budgetItems
// TODO
//.map((i) => i.expenseCategory.value!.name)
.map((i) => "lol")
@@ -149,7 +149,7 @@ class BudgetDetailsPage extends StatelessWidget {
spending.isEmpty
? 0
: spending.values.reduce((acc, val) => acc + val);
final budgetTotal = state.activeBudget!.budgetItems
final budgetTotal = state.budgetItems
.map((i) => i.item.amount)
.reduce((acc, val) => acc + val);
return Column(
@@ -271,7 +271,7 @@ class BudgetDetailsPage extends StatelessWidget {
fallbackText: "",
valueConverter: formatCurrency,
items:
state.activeBudget!.budgetItems
state.budgetItems
.map(
(i) => (
title: i.expenseCategory.name,
@@ -342,10 +342,9 @@ class BudgetDetailsPage extends StatelessWidget {
padding: EdgeInsets.all(8),
child: ListView.builder(
shrinkWrap: true,
itemCount: state.activeBudget!.budgetItems.length,
itemCount: state.budgetItems.length,
itemBuilder: (context, index) {
final item = state.activeBudget!.budgetItems
.elementAt(index);
final item = state.budgetItems.elementAt(index);
final amount = formatCurrency(item.item.amount);
final spent = spending[item.expenseCategory.name];
final left =