Files

224 lines
9.6 KiB
Plaintext

import 'account.dart';
class ReconciliationStatus {
final int accountId;
final String accountName;
final double appBalance;
final bool checkedToday;
final double? realBalance;
final double? difference;
ReconciliationStatus({
required this.accountId,
required this.accountName,
required this.appBalance,
required this.checkedToday,
this.realBalance,
this.difference,
});
factory ReconciliationStatus.fromJson(Map<String, dynamic> json) {
return ReconciliationStatus(
accountId: json['account_id'] as int,
accountName: json['account_name'] as String,
appBalance: (json['app_balance'] as num? ?? 0).toDouble(),
checkedToday: json['checked_today'] is int
? (json['checked_today'] as int) == 1
: json['checked_today'] as bool? ?? false,
realBalance: (json['real_balance'] as num?)?.toDouble(),
difference: (json['difference'] as num?)?.toDouble(),
);
}
Map<String, dynamic> toJson() {
return {
'account_id': accountId,
'account_name': accountName,
'app_balance': appBalance,
'checked_today': checkedToday,
'real_balance': realBalance,
'difference': difference,
};
}
ReconciliationStatus copyWith({
double? appBalance,
bool? checkedToday,
double? realBalance,
double? difference,
}) {
return ReconciliationStatus(
accountId: accountId,
accountName: accountName,
appBalance: appBalance ?? this.appBalance,
checkedToday: checkedToday ?? this.checkedToday,
realBalance: realBalance ?? this.realBalance,
difference: difference ?? this.difference,
);
}
}
class DashboardData {
final String month;
final double totalBalance;
final double availableAfterReserves;
final double monthlyIncome;
final double monthlyExpenses;
final double monthlyBalance;
final double provisionsCurrentTotal;
final double provisionsTargetTotal;
final double monthlyChargesRemainingTotal;
final double monthlyTransferRemainingTotal;
final double monthlyProvisionOperationRemainingTotal;
// Nouveaux champs backend : échéancier / opérations prévues ponctuelles.
final double scheduledExpensesRemainingTotal;
final double scheduledIncomeRemainingTotal;
final double scheduledTransferRemainingTotal;
final double scheduledProvisionRemainingTotal;
final double scheduledNetRemainingTotal;
final double projectedMonthBalance;
final List<Account> accounts;
final List<ReconciliationStatus> reconciliationsToday;
DashboardData({
required this.month,
required this.totalBalance,
required this.availableAfterReserves,
required this.monthlyIncome,
required this.monthlyExpenses,
required this.monthlyBalance,
required this.provisionsCurrentTotal,
required this.provisionsTargetTotal,
required this.monthlyChargesRemainingTotal,
required this.monthlyTransferRemainingTotal,
required this.monthlyProvisionOperationRemainingTotal,
required this.scheduledExpensesRemainingTotal,
required this.scheduledIncomeRemainingTotal,
required this.scheduledTransferRemainingTotal,
required this.scheduledProvisionRemainingTotal,
required this.scheduledNetRemainingTotal,
required this.projectedMonthBalance,
required this.accounts,
required this.reconciliationsToday,
});
double get plannedExpensesTotal =>
monthlyChargesRemainingTotal + scheduledExpensesRemainingTotal;
double get plannedTransfersTotal =>
monthlyTransferRemainingTotal + scheduledTransferRemainingTotal;
double get plannedProvisionsTotal =>
monthlyProvisionOperationRemainingTotal + scheduledProvisionRemainingTotal;
bool get hasScheduledInfo =>
scheduledExpensesRemainingTotal != 0 ||
scheduledIncomeRemainingTotal != 0 ||
scheduledTransferRemainingTotal != 0 ||
scheduledProvisionRemainingTotal != 0;
factory DashboardData.fromJson(Map<String, dynamic> json) {
final availableRaw = json['available_after_reserves'] ?? json['total_balance'] ?? 0;
final monthlyBalance = (json['monthly_balance'] as num? ?? 0).toDouble();
final scheduledIncome = (json['scheduled_income_remaining_total'] as num? ?? 0).toDouble();
final scheduledExpenses = (json['scheduled_expenses_remaining_total'] as num? ?? 0).toDouble();
return DashboardData(
month: json['month'] as String? ?? '',
totalBalance: (json['total_balance'] as num? ?? 0).toDouble(),
availableAfterReserves: (availableRaw as num).toDouble(),
monthlyIncome: (json['monthly_income'] as num? ?? 0).toDouble(),
monthlyExpenses: (json['monthly_expenses'] as num? ?? 0).toDouble(),
monthlyBalance: monthlyBalance,
provisionsCurrentTotal: (json['provisions_current_total'] as num? ?? 0).toDouble(),
provisionsTargetTotal: (json['provisions_target_total'] as num? ?? 0).toDouble(),
monthlyChargesRemainingTotal: (json['monthly_charges_remaining_total'] as num? ?? 0).toDouble(),
monthlyTransferRemainingTotal: (json['monthly_transfer_remaining_total'] as num? ?? 0).toDouble(),
monthlyProvisionOperationRemainingTotal: (json['monthly_provision_operation_remaining_total'] as num? ?? 0).toDouble(),
scheduledExpensesRemainingTotal: scheduledExpenses,
scheduledIncomeRemainingTotal: scheduledIncome,
scheduledTransferRemainingTotal: (json['scheduled_transfer_remaining_total'] as num? ?? 0).toDouble(),
scheduledProvisionRemainingTotal: (json['scheduled_provision_remaining_total'] as num? ?? 0).toDouble(),
scheduledNetRemainingTotal: (json['scheduled_net_remaining_total'] as num? ?? (scheduledIncome - scheduledExpenses)).toDouble(),
projectedMonthBalance: (json['projected_month_balance'] as num? ?? (monthlyBalance + scheduledIncome - scheduledExpenses)).toDouble(),
accounts: (json['accounts'] as List<dynamic>? ?? [])
.map((e) => Account.fromJson(e as Map<String, dynamic>))
.toList(),
reconciliationsToday: (json['reconciliations_today'] as List<dynamic>? ?? [])
.map((e) => ReconciliationStatus.fromJson(e as Map<String, dynamic>))
.toList(),
);
}
Map<String, dynamic> toJson() {
return {
'month': month,
'total_balance': totalBalance,
'available_after_reserves': availableAfterReserves,
'monthly_income': monthlyIncome,
'monthly_expenses': monthlyExpenses,
'monthly_balance': monthlyBalance,
'provisions_current_total': provisionsCurrentTotal,
'provisions_target_total': provisionsTargetTotal,
'monthly_charges_remaining_total': monthlyChargesRemainingTotal,
'monthly_transfer_remaining_total': monthlyTransferRemainingTotal,
'monthly_provision_operation_remaining_total': monthlyProvisionOperationRemainingTotal,
'scheduled_expenses_remaining_total': scheduledExpensesRemainingTotal,
'scheduled_income_remaining_total': scheduledIncomeRemainingTotal,
'scheduled_transfer_remaining_total': scheduledTransferRemainingTotal,
'scheduled_provision_remaining_total': scheduledProvisionRemainingTotal,
'scheduled_net_remaining_total': scheduledNetRemainingTotal,
'projected_month_balance': projectedMonthBalance,
'accounts': accounts.map((e) => e.toJson()).toList(),
'reconciliations_today': reconciliationsToday.map((e) => e.toJson()).toList(),
};
}
DashboardData copyWith({
String? month,
double? totalBalance,
double? availableAfterReserves,
double? monthlyIncome,
double? monthlyExpenses,
double? monthlyBalance,
double? provisionsCurrentTotal,
double? provisionsTargetTotal,
double? monthlyChargesRemainingTotal,
double? monthlyTransferRemainingTotal,
double? monthlyProvisionOperationRemainingTotal,
double? scheduledExpensesRemainingTotal,
double? scheduledIncomeRemainingTotal,
double? scheduledTransferRemainingTotal,
double? scheduledProvisionRemainingTotal,
double? scheduledNetRemainingTotal,
double? projectedMonthBalance,
List<Account>? accounts,
List<ReconciliationStatus>? reconciliationsToday,
}) {
return DashboardData(
month: month ?? this.month,
totalBalance: totalBalance ?? this.totalBalance,
availableAfterReserves: availableAfterReserves ?? this.availableAfterReserves,
monthlyIncome: monthlyIncome ?? this.monthlyIncome,
monthlyExpenses: monthlyExpenses ?? this.monthlyExpenses,
monthlyBalance: monthlyBalance ?? this.monthlyBalance,
provisionsCurrentTotal: provisionsCurrentTotal ?? this.provisionsCurrentTotal,
provisionsTargetTotal: provisionsTargetTotal ?? this.provisionsTargetTotal,
monthlyChargesRemainingTotal: monthlyChargesRemainingTotal ?? this.monthlyChargesRemainingTotal,
monthlyTransferRemainingTotal: monthlyTransferRemainingTotal ?? this.monthlyTransferRemainingTotal,
monthlyProvisionOperationRemainingTotal: monthlyProvisionOperationRemainingTotal ?? this.monthlyProvisionOperationRemainingTotal,
scheduledExpensesRemainingTotal: scheduledExpensesRemainingTotal ?? this.scheduledExpensesRemainingTotal,
scheduledIncomeRemainingTotal: scheduledIncomeRemainingTotal ?? this.scheduledIncomeRemainingTotal,
scheduledTransferRemainingTotal: scheduledTransferRemainingTotal ?? this.scheduledTransferRemainingTotal,
scheduledProvisionRemainingTotal: scheduledProvisionRemainingTotal ?? this.scheduledProvisionRemainingTotal,
scheduledNetRemainingTotal: scheduledNetRemainingTotal ?? this.scheduledNetRemainingTotal,
projectedMonthBalance: projectedMonthBalance ?? this.projectedMonthBalance,
accounts: accounts ?? this.accounts,
reconciliationsToday: reconciliationsToday ?? this.reconciliationsToday,
);
}
}