prasule/lib/api/wallet.dart
2023-12-07 21:20:52 +01:00

63 lines
1.8 KiB
Dart

import 'package:currency_picker/currency_picker.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:prasule/api/category.dart';
import 'package:prasule/api/recurring_entry.dart';
import 'package:prasule/api/walletentry.dart';
part 'wallet.g.dart';
Currency _currencyFromJson(Map<String, dynamic> data) =>
Currency.from(json: data);
@JsonSerializable()
class Wallet {
final String name;
final List<WalletCategory> categories;
final List<WalletSingleEntry> entries;
final List<RecurringEntry> recurringEntries;
double starterBalance;
@JsonKey(fromJson: _currencyFromJson)
final Currency currency;
Wallet(
{required this.name,
required this.currency,
this.categories = const [],
this.entries = const [],
this.starterBalance = 0,
this.recurringEntries = const []});
/// Connect the generated [_$WalletEntry] function to the `fromJson`
/// factory.
factory Wallet.fromJson(Map<String, dynamic> json) => _$WalletFromJson(json);
/// Connect the generated [_$PersonToJson] function to the `toJson` method.
Map<String, dynamic> toJson() => _$WalletToJson(this);
/// Getter for the next unused unique number ID in the wallet's entry list
int get nextId {
var id = 1;
while (entries.where((element) => element.id == id).isNotEmpty) {
id++; // create unique ID
}
return id;
}
static final Wallet empty = Wallet(
name: "Empty",
currency: Currency.from(
json: {
"code": "USD",
"name": "United States Dollar",
"symbol": "\$",
"flag": "USD",
"decimal_digits": 2,
"number": 840,
"name_plural": "US dollars",
"thousands_separator": ",",
"decimal_separator": ".",
"space_between_amount_and_symbol": false,
"symbol_on_left": true,
},
),
);
}