diff --git a/mobile/lib/pages/cart_page.dart b/mobile/lib/pages/cart_page.dart index a7bdcf8..0cca791 100644 --- a/mobile/lib/pages/cart_page.dart +++ b/mobile/lib/pages/cart_page.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:mobile/pages/finish_shopping_page.dart'; import 'package:mobile/repos/cart.dart'; import 'package:mobile/repos/product.dart'; +import 'package:mobile/repos/user.dart'; import 'package:mobile/results.dart'; import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/sized_card.dart'; @@ -141,7 +142,8 @@ class CartItemView extends StatelessWidget { } class CartPage extends StatelessWidget { - const CartPage({super.key}); + final User user; + const CartPage({super.key, required this.user}); @override Widget build(BuildContext context) { @@ -318,7 +320,7 @@ class CartPage extends StatelessWidget { context, MaterialPageRoute( builder: (context) => - const FinishShoppingPage())); + FinishShoppingPage(user: user))); }, child: const Text("Afslut indkøb")), ), diff --git a/mobile/lib/pages/dashboard.dart b/mobile/lib/pages/dashboard.dart index 7f0e5b6..c818bf0 100644 --- a/mobile/lib/pages/dashboard.dart +++ b/mobile/lib/pages/dashboard.dart @@ -19,7 +19,7 @@ class Dashboard extends StatelessWidget { user: user, ), const AllProductsPage(), - const CartPage(), + CartPage(user: user), const AllReceiptsPage(), ]); } diff --git a/mobile/lib/pages/finish_shopping_page.dart b/mobile/lib/pages/finish_shopping_page.dart index 6c3ed6c..c7132a4 100644 --- a/mobile/lib/pages/finish_shopping_page.dart +++ b/mobile/lib/pages/finish_shopping_page.dart @@ -2,12 +2,16 @@ import 'package:flutter/material.dart'; import 'package:mobile/repos/cart.dart'; import 'package:mobile/repos/paying_state.dart'; import 'package:mobile/repos/receipt.dart'; +import 'package:mobile/repos/user.dart'; +import 'package:mobile/results.dart'; import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/receipt_item.dart'; import 'package:provider/provider.dart'; class FinishShoppingPage extends StatelessWidget { - const FinishShoppingPage({super.key}); + final User user; + + const FinishShoppingPage({super.key, required this.user}); @override Widget build(BuildContext context) { @@ -53,8 +57,28 @@ class FinishShoppingPage extends StatelessWidget { child: PrimaryButton( onPressed: () async { payingStateRepo.next(); - receiptRepo.createReceipt(cart); await Future.delayed(const Duration(seconds: 1)); + if (user.pay(cartRepo.totalPrice()) is Err) { + if (context.mounted) { + showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + content: const Text( + 'Du har desværre ikke råd til at købe dette'), + actions: [ + TextButton( + onPressed: () => + Navigator.pop(context, 'OK'), + child: const Text('OK'), + ), + ], + ), + ); + } + payingStateRepo.reset(); + return; + } + receiptRepo.createReceipt(cart); payingStateRepo.next(); await Future.delayed(const Duration(seconds: 1)); cartRepo.clearCart(); diff --git a/mobile/lib/repos/product.dart b/mobile/lib/repos/product.dart index d041412..b69ec51 100644 --- a/mobile/lib/repos/product.dart +++ b/mobile/lib/repos/product.dart @@ -83,7 +83,7 @@ class ProductRepo extends ChangeNotifier { Product( id: _nextId++, name: "Jägermeister 750 ml", - price: 60, + price: 120, description: ""), Product( id: _nextId++, diff --git a/mobile/lib/repos/user.dart b/mobile/lib/repos/user.dart index 67c188f..40d1fc2 100644 --- a/mobile/lib/repos/user.dart +++ b/mobile/lib/repos/user.dart @@ -32,7 +32,8 @@ class UsersRepo extends ChangeNotifier { return Err("User with mail $mail already exists"); } - final user = User(id: nextId++, name: name, mail: mail, password: password); + final user = User( + id: nextId++, name: name, mail: mail, password: password, balance: 0); users.add(user); return Ok(user); @@ -51,11 +52,24 @@ class UsersRepo extends ChangeNotifier { return Err("User with mail $mail doesn't exist"); } + Result pay(int userId, int amount) { + final user = getUserById(userId); + if (user is Ok) { + return (user as User).pay(amount); + } + return Err("User with id $userId doesn't exist"); + } + void addTestUsers() { users ..add(User( - id: nextId++, mail: "test@test.com", name: "test", password: "test")) - ..add(User(id: nextId++, mail: "", name: "", password: "")); + id: nextId++, + mail: "test@test.com", + name: "test", + password: "test", + balance: 1000)) + ..add( + User(id: nextId++, mail: "", name: "", password: "", balance: 10000)); } } @@ -64,10 +78,20 @@ class User { final String mail; final String name; final String password; + int balance; User( {required this.id, required this.mail, required this.name, - required this.password}); + required this.password, + required this.balance}); + + Result pay(int amount) { + if (balance < amount) { + return Err("User can not afford paying amount $amount"); + } + balance -= amount; + return Ok(balance); + } }