style(app): остальные экраны под новый визуальный язык и форматирование
Доходы, ребалансировка, налоги, импорт, цели, здоровье данных, правила, транзакции, категории, cashflow, pending: новые виджеты и токены темы, dart format. Тесты подстроены под новые модели.
This commit is contained in:
@@ -56,23 +56,24 @@ class IncomeEntry {
|
||||
final String basis;
|
||||
final String? taxWithheld;
|
||||
|
||||
String get title => ticker ?? name ?? (instrumentId == null ? '—' : '#$instrumentId');
|
||||
String get title =>
|
||||
ticker ?? name ?? (instrumentId == null ? '—' : '#$instrumentId');
|
||||
|
||||
static IncomeEntry fromJson(Map<String, dynamic> json) => IncomeEntry(
|
||||
instrumentId: asInt(json['instrument_id']),
|
||||
ticker: asString(json['ticker']),
|
||||
name: asString(json['name']),
|
||||
kind: asString(json['kind']) ?? 'dividend',
|
||||
expectedDate: asDate(json['expected_date']),
|
||||
recordDate: asDate(json['record_date']),
|
||||
qty: asString(json['qty']),
|
||||
perUnit: asString(json['per_unit']),
|
||||
amount: asString(json['amount']),
|
||||
currency: asString(json['currency']) ?? 'RUB',
|
||||
amountRub: asString(json['amount_rub']),
|
||||
basis: asString(json['basis']) ?? 'history',
|
||||
taxWithheld: asString(json['tax_withheld']),
|
||||
);
|
||||
instrumentId: asInt(json['instrument_id']),
|
||||
ticker: asString(json['ticker']),
|
||||
name: asString(json['name']),
|
||||
kind: asString(json['kind']) ?? 'dividend',
|
||||
expectedDate: asDate(json['expected_date']),
|
||||
recordDate: asDate(json['record_date']),
|
||||
qty: asString(json['qty']),
|
||||
perUnit: asString(json['per_unit']),
|
||||
amount: asString(json['amount']),
|
||||
currency: asString(json['currency']) ?? 'RUB',
|
||||
amountRub: asString(json['amount_rub']),
|
||||
basis: asString(json['basis']) ?? 'history',
|
||||
taxWithheld: asString(json['tax_withheld']),
|
||||
);
|
||||
}
|
||||
|
||||
class IncomeCalendar {
|
||||
@@ -91,12 +92,12 @@ class IncomeCalendar {
|
||||
final Map<String, String> byBasis;
|
||||
|
||||
static IncomeCalendar fromJson(Map<String, dynamic> json) => IncomeCalendar(
|
||||
asOf: asDate(json['as_of']),
|
||||
currency: asString(json['currency']) ?? 'RUB',
|
||||
totalExpectedRub: asString(json['total_expected_rub']) ?? '0',
|
||||
entries: asObjects(json['entries']).map(IncomeEntry.fromJson).toList(),
|
||||
byBasis: asStringMap(json['by_basis']),
|
||||
);
|
||||
asOf: asDate(json['as_of']),
|
||||
currency: asString(json['currency']) ?? 'RUB',
|
||||
totalExpectedRub: asString(json['total_expected_rub']) ?? '0',
|
||||
entries: asObjects(json['entries']).map(IncomeEntry.fromJson).toList(),
|
||||
byBasis: asStringMap(json['by_basis']),
|
||||
);
|
||||
}
|
||||
|
||||
class IncomeHistoryRow {
|
||||
@@ -118,7 +119,8 @@ class IncomeHistoryRow {
|
||||
final String? taxWithheld;
|
||||
final int paymentCount;
|
||||
|
||||
static IncomeHistoryRow fromJson(Map<String, dynamic> json) => IncomeHistoryRow(
|
||||
static IncomeHistoryRow fromJson(Map<String, dynamic> json) =>
|
||||
IncomeHistoryRow(
|
||||
month: asDate(json['month']),
|
||||
kind: asString(json['kind']) ?? 'other',
|
||||
currency: asString(json['currency']) ?? 'RUB',
|
||||
@@ -151,7 +153,11 @@ class IncomeHistory {
|
||||
}
|
||||
|
||||
class ForecastMonth {
|
||||
const ForecastMonth({required this.amountRub, this.month, this.byBasis = const {}});
|
||||
const ForecastMonth({
|
||||
required this.amountRub,
|
||||
this.month,
|
||||
this.byBasis = const {},
|
||||
});
|
||||
|
||||
final DateTime? month;
|
||||
final String amountRub;
|
||||
@@ -160,10 +166,10 @@ class ForecastMonth {
|
||||
final Map<String, String> byBasis;
|
||||
|
||||
static ForecastMonth fromJson(Map<String, dynamic> json) => ForecastMonth(
|
||||
month: asDate(json['month']),
|
||||
amountRub: asString(json['amount_rub']) ?? '0',
|
||||
byBasis: asStringMap(json['by_basis']),
|
||||
);
|
||||
month: asDate(json['month']),
|
||||
amountRub: asString(json['amount_rub']) ?? '0',
|
||||
byBasis: asStringMap(json['by_basis']),
|
||||
);
|
||||
}
|
||||
|
||||
class IncomeForecast {
|
||||
@@ -192,11 +198,11 @@ class IncomeForecast {
|
||||
}
|
||||
|
||||
static IncomeForecast fromJson(Map<String, dynamic> json) => IncomeForecast(
|
||||
months: asObjects(json['months']).map(ForecastMonth.fromJson).toList(),
|
||||
totalRub: asString(json['total_rub']) ?? '0',
|
||||
annualYieldOnValue: asString(json['annual_yield_on_value']),
|
||||
warnings: asStrings(json['warnings']),
|
||||
);
|
||||
months: asObjects(json['months']).map(ForecastMonth.fromJson).toList(),
|
||||
totalRub: asString(json['total_rub']) ?? '0',
|
||||
annualYieldOnValue: asString(json['annual_yield_on_value']),
|
||||
warnings: asStrings(json['warnings']),
|
||||
);
|
||||
}
|
||||
|
||||
class IncomeApi {
|
||||
@@ -214,12 +220,15 @@ class IncomeApi {
|
||||
DateTime? dateTo,
|
||||
bool includePaid = false,
|
||||
}) async {
|
||||
final r = await _dio.get<Map<String, dynamic>>('$_base/calendar', queryParameters: {
|
||||
'scope': scope,
|
||||
'date_from': ?_isoDate(dateFrom),
|
||||
'date_to': ?_isoDate(dateTo),
|
||||
'include_paid': includePaid,
|
||||
});
|
||||
final r = await _dio.get<Map<String, dynamic>>(
|
||||
'$_base/calendar',
|
||||
queryParameters: {
|
||||
'scope': scope,
|
||||
'date_from': ?_isoDate(dateFrom),
|
||||
'date_to': ?_isoDate(dateTo),
|
||||
'include_paid': includePaid,
|
||||
},
|
||||
);
|
||||
return Cached(
|
||||
IncomeCalendar.fromJson(r.data ?? const {}),
|
||||
fetchedAt: r.extra['fetchedAt'] as DateTime?,
|
||||
@@ -233,24 +242,30 @@ class IncomeApi {
|
||||
DateTime? dateTo,
|
||||
String? kind,
|
||||
}) async {
|
||||
final r = await _dio.get<Map<String, dynamic>>('$_base/history', queryParameters: {
|
||||
'scope': scope,
|
||||
'group': group,
|
||||
'date_from': ?_isoDate(dateFrom),
|
||||
'date_to': ?_isoDate(dateTo),
|
||||
'kind': ?kind,
|
||||
});
|
||||
final r = await _dio.get<Map<String, dynamic>>(
|
||||
'$_base/history',
|
||||
queryParameters: {
|
||||
'scope': scope,
|
||||
'group': group,
|
||||
'date_from': ?_isoDate(dateFrom),
|
||||
'date_to': ?_isoDate(dateTo),
|
||||
'kind': ?kind,
|
||||
},
|
||||
);
|
||||
return Cached(
|
||||
IncomeHistory.fromJson(r.data ?? const {}),
|
||||
fetchedAt: r.extra['fetchedAt'] as DateTime?,
|
||||
);
|
||||
}
|
||||
|
||||
Future<Cached<IncomeForecast>> forecast({String scope = 'all', int months = 12}) async {
|
||||
final r = await _dio.get<Map<String, dynamic>>('$_base/forecast', queryParameters: {
|
||||
'scope': scope,
|
||||
'months': months,
|
||||
});
|
||||
Future<Cached<IncomeForecast>> forecast({
|
||||
String scope = 'all',
|
||||
int months = 12,
|
||||
}) async {
|
||||
final r = await _dio.get<Map<String, dynamic>>(
|
||||
'$_base/forecast',
|
||||
queryParameters: {'scope': scope, 'months': months},
|
||||
);
|
||||
return Cached(
|
||||
IncomeForecast.fromJson(r.data ?? const {}),
|
||||
fetchedAt: r.extra['fetchedAt'] as DateTime?,
|
||||
@@ -262,6 +277,6 @@ class IncomeApi {
|
||||
static String? _isoDate(DateTime? d) => d == null
|
||||
? null
|
||||
: '${d.year.toString().padLeft(4, '0')}-'
|
||||
'${d.month.toString().padLeft(2, '0')}-'
|
||||
'${d.day.toString().padLeft(2, '0')}';
|
||||
'${d.month.toString().padLeft(2, '0')}-'
|
||||
'${d.day.toString().padLeft(2, '0')}';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user