Files
sure/mobile/lib/models/account.dart
ghost 2fc85345c4 feat(mobile): show account detail context (#2231)
* feat(mobile): show account detail context

* fix(mobile): show current account holdings

* fix(mobile): tidy account detail review states
2026-06-08 22:06:57 +02:00

105 lines
3.0 KiB
Dart

import '../utils/json_parsing.dart';
class Account {
final String id;
final String name;
final String balance;
final int? balanceCents;
final String? cashBalance;
final int? cashBalanceCents;
final String currency;
final String? classification;
final String accountType;
final String? subtype;
final String? status;
final String? institutionName;
final String? institutionDomain;
final DateTime? createdAt;
final DateTime? updatedAt;
Account({
required this.id,
required this.name,
required this.balance,
this.balanceCents,
this.cashBalance,
this.cashBalanceCents,
required this.currency,
this.classification,
required this.accountType,
this.subtype,
this.status,
this.institutionName,
this.institutionDomain,
this.createdAt,
this.updatedAt,
});
factory Account.fromJson(Map<String, dynamic> json) {
return Account(
id: json['id'].toString(),
name: JsonParsing.parseRequiredString(json['name'], 'account name'),
balance: JsonParsing.parseRequiredString(
json['balance'],
'account balance',
),
balanceCents: JsonParsing.parseInt(json['balance_cents']),
cashBalance: JsonParsing.parseString(json['cash_balance']),
cashBalanceCents: JsonParsing.parseInt(json['cash_balance_cents']),
currency: JsonParsing.parseRequiredString(
json['currency'],
'account currency',
),
classification: JsonParsing.parseString(json['classification']),
accountType: JsonParsing.parseRequiredString(
json['account_type'],
'account type',
),
subtype: JsonParsing.parseString(json['subtype']),
status: JsonParsing.parseString(json['status']),
institutionName: JsonParsing.parseString(json['institution_name']),
institutionDomain: JsonParsing.parseString(json['institution_domain']),
createdAt: JsonParsing.parseDateTime(json['created_at']),
updatedAt: JsonParsing.parseDateTime(json['updated_at']),
);
}
bool get isAsset => classification == 'asset';
bool get isLiability => classification == 'liability';
double get balanceAsDouble {
try {
// Remove commas and any other non-numeric characters except dots and minus signs
final cleanedBalance = balance.replaceAll(RegExp(r'[^\d.-]'), '');
return double.parse(cleanedBalance);
} catch (e) {
return 0.0;
}
}
String get displayAccountType {
switch (accountType) {
case 'depository':
return 'Bank Account';
case 'credit_card':
return 'Credit Card';
case 'investment':
return 'Investment';
case 'loan':
return 'Loan';
case 'property':
return 'Property';
case 'vehicle':
return 'Vehicle';
case 'crypto':
return 'Crypto';
case 'other_asset':
return 'Other Asset';
case 'other_liability':
return 'Other Liability';
default:
return accountType;
}
}
}