Skip to content

Commit

Permalink
fix forecast, update translations
Browse files Browse the repository at this point in the history
  • Loading branch information
sadespresso committed Jan 24, 2025
1 parent 8982eac commit 48fd6b6
Show file tree
Hide file tree
Showing 21 changed files with 94 additions and 26 deletions.
7 changes: 7 additions & 0 deletions assets/l10n/en_IN.json
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,13 @@
"tabs.stats.chart.select.clickToSelect": "Click to select",
"tabs.stats.chart.noExchangeRatesWarning": "Missing exchange rate data. Transactions in non-primary currencies are not displayed.",
"tabs.stats.chart.noExchangeRatesWarning.retry": "Retry",
"tabs.stats.dailyReport.dailyAvgExpense": "Avg. daily expense",
"tabs.stats.dailyReport.dailyAvgIncome": "Avg. daily income",
"tabs.stats.dailyReport.dailyAvgFlow": "Avg. daily flow",
"tabs.stats.dailyReport.dailyAvgFlow.positive": "You gain ~{} daily",
"tabs.stats.dailyReport.dailyAvgFlow.negative": "You lose ~{} daily",
"tabs.stats.dailyReport.forecastFor": "Expense forecast for {}",
"tabs.stats.dailyReport.comparedTo": "Compared to {}",
"tabs.accounts": "Accounts",
"tabs.accounts.reorder": "Reorder accounts",
"tabs.accounts.reorder.guide": "Long press and drag",
Expand Down
7 changes: 7 additions & 0 deletions assets/l10n/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,13 @@
"tabs.stats.chart.select.clickToSelect": "Click to select",
"tabs.stats.chart.noExchangeRatesWarning": "Missing exchange rate data. Transactions in non-primary currencies are not displayed.",
"tabs.stats.chart.noExchangeRatesWarning.retry": "Retry",
"tabs.stats.dailyReport.dailyAvgExpense": "Avg. daily expense",
"tabs.stats.dailyReport.dailyAvgIncome": "Avg. daily income",
"tabs.stats.dailyReport.dailyAvgFlow": "Avg. daily flow",
"tabs.stats.dailyReport.dailyAvgFlow.positive": "You gain ~{} daily",
"tabs.stats.dailyReport.dailyAvgFlow.negative": "You lose ~{} daily",
"tabs.stats.dailyReport.forecastFor": "Expense forecast for {}",
"tabs.stats.dailyReport.comparedTo": "Compared to {}",
"tabs.accounts": "Accounts",
"tabs.accounts.reorder": "Reorder accounts",
"tabs.accounts.reorder.guide": "Long press and drag",
Expand Down
7 changes: 7 additions & 0 deletions assets/l10n/it_IT.json
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,13 @@
"tabs.stats.chart.select.clickToSelect": "Clicca per selezionare",
"tabs.stats.chart.noExchangeRatesWarning": "Dati dei tassi di cambio mancanti. Le transazioni in valute diverse dalla principale non sono visualizzate.",
"tabs.stats.chart.noExchangeRatesWarning.retry": "Riprova",
"tabs.stats.dailyReport.dailyAvgExpense": "Spesa media giornaliera",
"tabs.stats.dailyReport.dailyAvgIncome": "Entrata media giornaliera",
"tabs.stats.dailyReport.dailyAvgFlow": "Flusso medio giornaliero",
"tabs.stats.dailyReport.dailyAvgFlow.positive": "Guadagni ~{} al giorno",
"tabs.stats.dailyReport.dailyAvgFlow.negative": "Perdi ~{} al giorno",
"tabs.stats.dailyReport.forecastFor": "Previsione di spesa per {}",
"tabs.stats.dailyReport.comparedTo": "Rispetto a {}",
"tabs.accounts": "Conti",
"tabs.accounts.reorder": "Riordina i conti",
"tabs.accounts.reorder.guide": "Premi a lungo e trascina",
Expand Down
7 changes: 7 additions & 0 deletions assets/l10n/mn_MN.json
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,13 @@
"tabs.stats.chart.select.clickToSelect": "Товшиж сонгоно уу",
"tabs.stats.chart.noExchangeRatesWarning": "Валютын ханшийн мэдээлэл байхгүй учир үндсэн валютаас ({currency}) бусад гүйлгээнүүд харагдахгүй байна",
"tabs.stats.chart.noExchangeRatesWarning.retry": "Дахин оролдох",
"tabs.stats.dailyReport.dailyAvgExpense": "Дундаж зарлага (өдөр)",
"tabs.stats.dailyReport.dailyAvgIncome": "Дундаж орлого (өдөр)",
"tabs.stats.dailyReport.dailyAvgFlow": "Дундаж урсгал",
"tabs.stats.dailyReport.dailyAvgFlow.positive": "Та өдөрт ~{} олж байна",
"tabs.stats.dailyReport.dailyAvgFlow.negative": "Та өдөрт ~{} алдаж байна",
"tabs.stats.dailyReport.forecastFor": "Урьдчилсан зарлагын тооцоо ({})",
"tabs.stats.dailyReport.comparedTo": "{}-тай харьцуулахад",
"tabs.accounts": "Данснууд",
"tabs.accounts.reorder": "Дараалал өөрчлөх",
"tabs.accounts.reorder.guide": "Удаан дарж чирнэ үү",
Expand Down
31 changes: 30 additions & 1 deletion assets/l10n/tr_TR.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"appName": "Flow",
"appShortDesc": "Kişisel finans takipçiniz",

"visitGitHubRepo": "GitHub'da depoyu ziyaret edin",

"general.back": "Geri Git",
"general.delete": "Silmek",
"general.delete.permanentWarning": "Bu eylem geri alınamaz",
Expand All @@ -28,6 +30,7 @@
"general.disabled": "Devredışı",
"general.selectLocation": "Konum seçin",
"general.nextNDays": "Sonraki {} gün",

"setup.getStarted": "Başlayın",
"setup.next": "Sonraki",
"setup.slides.foss.title": "Ücretsiz ve açık kaynak",
Expand Down Expand Up @@ -70,6 +73,7 @@
"setup.onboarding.freshStart.description": "Flow'u ilk kez kullanıyorum",
"setup.onboarding.importExisting": "Bir yedekten içeri aktarma",
"setup.onboarding.importExisting.description": "Önceki bir Flow yedeklemesinden verileri geri yükleme",

"account": "Hesap",
"account.name": "Hesap adı",
"account.balance": "Bakiye",
Expand All @@ -92,6 +96,7 @@
"account.thisMonth": "Bu ay",
"account.postTransactionBalance": "Bu işlemden sonraki bakiye",
"accounts": "Hesap",

"transaction": "İşlem",
"transaction.new": "Yeni işlem",
"transaction.edit": "İşlemi düzenle",
Expand Down Expand Up @@ -120,6 +125,7 @@
"transaction.location.edit": "Düzenlemek için haritaya dokunun",
"transaction.pending": "Beklemede",
"transaction.pending.preapproved": "Ön Onaylı",

"transactions.all": "Tüm işlemler",
"transactions.pending": "Bekleyen işlemler",
"transactions.query.noResult": "Gösterilecek işlem yok",
Expand All @@ -139,6 +145,7 @@
"transactions.query.filter.categories.n": "{} kategoriler",
"transactions.query.filter.categories.all": "Tüm Kategoriler",
"transactions.count": "{} İşlemler",

"category": "Kategori",
"category.name": "Kategori adı",
"category.new": "Kategori ekleme",
Expand All @@ -148,9 +155,12 @@
"category.none": "Kategori yok",
"categories": "Kategori",
"categories.noCategories": "Herhangi bir kategoriniz yok",

"profile.name": "Ad",

"currency": "Para birimi",
"currency.searchHint": "Aramak... (ülke, para birimi, kod)",

"preferences": "Tercihler",
"preferences.primaryCurrency": "Birincil para birimi",
"preferences.language": "Dil",
Expand Down Expand Up @@ -199,6 +209,7 @@
"preferences.moneyFormatting.preferFull.description": "Mümkün olduğunca sayıları kısaltmayın",
"preferences.moneyFormatting.useCurrencySymbol": "Para birimi simgesini kullan",
"preferences.moneyFormatting.useCurrencySymbol.description": "örneğin, \"5$\" yerine \"5 ABD Doları\"",

"tabs.home": "Ev",
"tabs.home.greetings": "Merhaba, {name}!",
"tabs.home.noTransactions": "Kriterlere uyan işlem yok",
Expand All @@ -211,6 +222,7 @@
"tabs.home.last7days": "Son 7 gün",
"tabs.home.totalBalance": "Toplam bilanço",
"tabs.home.flow": "Flow",

"tabs.stats": "İstatistik",
"tabs.stats.timeRange.select": "Aralık seç",
"tabs.stats.timeRange.changeMode": "Daha fazla seçenek",
Expand All @@ -228,6 +240,13 @@
"tabs.stats.chart.select.clickToSelect": "Seçmek için tıklayın",
"tabs.stats.chart.noExchangeRatesWarning": "Eksik döviz kuru verileri. Birincil olmayan para birimlerindeki işlemler görüntülenmez.",
"tabs.stats.chart.noExchangeRatesWarning.retry": "Tekrar dene",
"tabs.stats.dailyReport.dailyAvgExpense": "Günlük ortalama gider",
"tabs.stats.dailyReport.dailyAvgIncome": "Günlük ortalama gelir",
"tabs.stats.dailyReport.dailyAvgFlow": "Günlük ortalama akış",
"tabs.stats.dailyReport.dailyAvgFlow.positive": "Günlük ~{} kazanıyorsunuz",
"tabs.stats.dailyReport.dailyAvgFlow.negative": "Günlük ~{} kaybediyorsunuz",
"tabs.stats.dailyReport.forecastFor": "{} için gider tahmini",
"tabs.stats.dailyReport.comparedTo": "{} ile karşılaştırıldığında",
"tabs.accounts": "Hesap",
"tabs.accounts.reorder": "Hesapları yeniden sıralama",
"tabs.accounts.reorder.guide": "Uzun basın ve sürükleyin",
Expand All @@ -238,7 +257,8 @@
"tabs.profile.joinDiscord": "Flow Discord'a Katılın",
"tabs.profile.backup": "Yedek",
"tabs.profile.import": "İçe aktarmak",
"tabs.profile.withLoveFromTheCreator": "Sadespresso'dan 🤍",
"tabs.profile.withLoveFromTheCreator": "sadespresso'dan 🤍",

"support": "Destek",
"support.description": "Flow, özgür ve herkese açık bir sevgi emeğidir. Flow'u değerli buluyorsanız, projenin büyümesine yardımcı olmayı düşünün! Bunu yapmanın bazı yolları şunlardır:",
"support.requestFeatures": "Bize fikir verin",
Expand All @@ -249,6 +269,7 @@
"support.donateDeveloper": "İçerik oluşturucuya destek verin",
"support.donateDeveloper.description": "Flow'un tüm işlevleri ücretsiz olarak sunulur ve geliştiriciye bahşiş vermek herhangi bir ek özelliğin kilidini açmaz",
"support.donateDeveloper.action": "Yaratıcıya bir kahve ısmarla",

"flowIcon.change": "Simgeyi değiştir",
"flowIcon.type.icon": "İkon",
"flowIcon.type.icon.brands": "Markalar & Logolar",
Expand All @@ -259,6 +280,7 @@
"flowIcon.type.image.description": "Simge olarak kullanmak için bir resim seçin",
"flowIcon.type.character": "Karakter",
"flowIcon.type.character.description": "Simge olarak kullanmak için bir emoji veya harf girin",

"sync.import": "İçe aktarmak",
"sync.import.pickFile": "Bir dosya seçin",
"sync.import.pickFile.pickOrDrop": "Bir dosyayı seçin veya bırakın",
Expand All @@ -276,6 +298,7 @@
"sync.import.start": "İçe aktarmaya başla",
"sync.import.zipWarning": "Flow uygulaması tarafından üretilen ZIP dosyasını içe aktardığınızdan emin olun!",
"sync.import.success": "İçe aktarma başarılı!",

"sync.export": "Dışa aktarma",
"sync.export.type": "Dışa aktarma ({type})",
"sync.export.asCSV": "CSV olarak",
Expand All @@ -297,6 +320,7 @@
"sync.export.save": "Yedeklemeyi kaydet",
"sync.export.save.shareTitle": "Flow yedekleme ({type}, {date})",
"sync.export.fileDeleted": "Dosya bulunamadı",

"enum.TransactionSubtype": "Tür",
"enum.TransactionSubtype#null": "Varsayılan",
"enum.TransactionSubtype@transactionFee": "İşlem ücreti",
Expand All @@ -306,6 +330,7 @@
"enum.TransactionType@income": "Gelir",
"enum.TransactionType@expense": "Gider",
"enum.TransactionType@transfer": "Aktarmak",

"enum.CSVHeadersV1": "CSV Başlıkları",
"enum.CSVHeadersV1@uuid": "ID",
"enum.CSVHeadersV1@title": "Başlık",
Expand All @@ -323,6 +348,7 @@
"enum.CSVHeadersV1@latitude": "Enlem",
"enum.CSVHeadersV1@longitude": "Boylam",
"enum.CSVHeadersV1@extra": "Ekstra (JSON)",

"enum.ImportV1Progress@waitingConfirmation": "Onay bekleniyor",
"enum.ImportV1Progress@erasing": "Mevcut verilerin silinmesi",
"enum.ImportV1Progress@writingCategories": "Yazma kategorileri",
Expand All @@ -331,6 +357,7 @@
"enum.ImportV1Progress@writingTransactions": "İşlemlerin yazılması",
"enum.ImportV1Progress@success": "Başarılı",
"enum.ImportV1Progress@error": "Bir şeyler ters gitti ({error})",

"enum.ImportV2Progress@waitingConfirmation": "Onay bekleniyor",
"enum.ImportV2Progress@erasing": "Mevcut verilerin silinmesi",
"enum.ImportV2Progress@writingCategories": "Yazma kategorileri",
Expand All @@ -342,6 +369,7 @@
"enum.ImportV2Progress@copyingImages": "Görüntüleri kopyalama",
"enum.ImportV2Progress@success": "Başarılı",
"enum.ImportV2Progress@error": "Bir şeyler ters gitti ({error})",

"enum.BackupEntryType@manual": "El ile",
"[email protected]": "Kullanıcı tarafından oluşturulan yedekleme",
"enum.BackupEntryType@automated": "Otomatik yedekleme",
Expand All @@ -352,6 +380,7 @@
"[email protected]": "Önceki yedeklemeden içe aktarmadan önce önlem olarak oluşturulan yedekleme",
"enum.BackupEntryType@other": "Diğer yedekleme",
"[email protected]": "Diğer yedekleme",

"error.route.404": "Sayfa bulunamadı",
"error.route.400": "Sayfa yüklenemedi",
"error.input.mustBeNotEmpty": "Lütfen bu alanı doldurun",
Expand Down
3 changes: 1 addition & 2 deletions lib/data/flow_report.dart
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,7 @@ class FlowStandardReport {
.map((flow) => flow.getExpenseByCurrency(primaryCurrency))
.fold(Money(0, primaryCurrency), (a, b) => a.amount > b.amount ? a : b);

final int daysLeft = current.duration.inDays -
current.from.difference(DateTime.now()).inDays;
final int daysLeft = current.duration.inDays - countableDays;

currentExpenseSumForecast =
expenseSum + (dailyAvgExpenditure * daysLeft.toDouble());
Expand Down
2 changes: 1 addition & 1 deletion lib/routes/home/profile_tab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import "package:flow/theme/theme.dart";
import "package:flow/utils/utils.dart";
import "package:flow/widgets/general/button.dart";
import "package:flow/widgets/general/list_header.dart";
import "package:flow/widgets/home/prefs/profile_card.dart";
import "package:flow/widgets/home/preferences/profile_card.dart";
import "package:flutter/material.dart";
import "package:go_router/go_router.dart";
import "package:material_symbols_icons/symbols.dart";
Expand Down
23 changes: 17 additions & 6 deletions lib/routes/home/stats_tab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ import "dart:ui";

import "package:auto_size_text/auto_size_text.dart";
import "package:flow/data/flow_report.dart";
import "package:flow/l10n/extensions.dart";
import "package:flow/prefs.dart";
import "package:flow/routes/home/stats_tab/info_card_with_delta.dart";
import "package:flow/theme/theme.dart";
import "package:flow/widgets/general/frame.dart";
import "package:flow/widgets/general/spinner.dart";
import "package:flow/widgets/home/stats/info_card_with_delta.dart";
import "package:flow/widgets/home/stats/no_data.dart";
import "package:flow/widgets/home/stats/range_daily_chart.dart";
import "package:flow/widgets/time_range_selector.dart";
import "package:flutter/material.dart";
Expand Down Expand Up @@ -90,7 +92,9 @@ class _StatsTabState extends State<StatsTab>
children: [
Expanded(
child: InfoCardWithDelta(
title: "Avg. daily expense",
title:
"tabs.stats.dailyReport.dailyAvgExpense"
.t(context),
autoSizeGroup: autoSizeGroup,
money: report!.dailyAvgExpenditure,
previousMoney:
Expand All @@ -101,7 +105,9 @@ class _StatsTabState extends State<StatsTab>
const SizedBox(width: 16.0),
Expanded(
child: InfoCardWithDelta(
title: "Avg. daily income",
title:
"tabs.stats.dailyReport.dailyAvgIncome"
.t(context),
autoSizeGroup: autoSizeGroup,
money: report!.dailyAvgIncome,
previousMoney:
Expand All @@ -119,7 +125,10 @@ class _StatsTabState extends State<StatsTab>
Expanded(
child: InfoCardWithDelta(
title:
"Forecast for ${report!.current.format()}",
"tabs.stats.dailyReport.forecastFor"
.t(context, [
report!.current.format(),
]),
autoSizeGroup: autoSizeGroup,
money:
report!.currentExpenseSumForecast!,
Expand All @@ -130,7 +139,9 @@ class _StatsTabState extends State<StatsTab>
const SizedBox(width: 16.0),
Expanded(
child: InfoCardWithDelta(
title: "Avg. daily flow",
title:
"tabs.stats.dailyReport.dailyAvgFlow"
.t(context),
autoSizeGroup: autoSizeGroup,
money: report!.dailyAvgFlow,
previousMoney:
Expand All @@ -147,7 +158,7 @@ class _StatsTabState extends State<StatsTab>
],
),
)
: Text("No data to show"),
: NoData(),
),
],
);
Expand Down
2 changes: 1 addition & 1 deletion lib/routes/preferences/button_order_preferences_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import "package:dotted_border/dotted_border.dart";
import "package:flow/entity/transaction.dart";
import "package:flow/l10n/extensions.dart";
import "package:flow/prefs.dart";
import "package:flow/routes/preferences/button_order_preferences/transaction_type_button.dart";
import "package:flow/widgets/home/preferences/button_order_preferences/transaction_type_button.dart";
import "package:flow/widgets/general/info_text.dart";
import "package:flutter/material.dart";

Expand Down
2 changes: 1 addition & 1 deletion lib/routes/preferences/numpad_preferences_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import "package:flow/l10n/extensions.dart";
import "package:flow/prefs.dart";
import "package:flow/routes/preferences/numpad_preferences/numpad_selector_radio.dart";
import "package:flow/widgets/home/preferences/numpad_preferences/numpad_selector_radio.dart";
import "package:flow/widgets/general/list_header.dart";
import "package:flutter/material.dart";

Expand Down
2 changes: 1 addition & 1 deletion lib/routes/preferences/transfer_preferences_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import "package:flow/l10n/extensions.dart";
import "package:flow/prefs.dart";
import "package:flow/routes/preferences/transfer_preferences/combine_transfer_radio.dart.dart";
import "package:flow/widgets/home/preferences/transfer_preferences/combine_transfer_radio.dart.dart";
import "package:flow/widgets/general/info_text.dart";
import "package:flow/widgets/general/list_header.dart";
import "package:flutter/material.dart";
Expand Down
2 changes: 1 addition & 1 deletion lib/routes/stats/stats_by_group_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import "package:flow/l10n/named_enum.dart";
import "package:flow/objectbox.dart";
import "package:flow/objectbox/actions.dart";
import "package:flow/prefs.dart";
import "package:flow/routes/home/stats_tab/pie_graph_view.dart";
import "package:flow/widgets/home/stats/pie_graph_view.dart";
import "package:flow/services/exchange_rates.dart";
import "package:flow/widgets/general/spinner.dart";
import "package:flow/widgets/home/stats/exchange_missing_notice.dart";
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import "package:flow/entity/transaction.dart";
import "package:flow/l10n/flow_localizations.dart";
import "package:flow/routes/preferences/transfer_preferences/demo_transaction_list_tile.dart";
import "package:flow/widgets/home/preferences/transfer_preferences/demo_transaction_list_tile.dart";
import "package:flow/theme/theme.dart";
import "package:flutter/material.dart";

Expand Down
19 changes: 10 additions & 9 deletions lib/widgets/home/stats/no_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import "package:flutter/material.dart";
import "package:material_symbols_icons/symbols.dart";

class NoData extends StatelessWidget {
final VoidCallback onTap;
final VoidCallback? selectTimeRange;

const NoData({super.key, required this.onTap});
const NoData({super.key, this.selectTimeRange});

@override
Widget build(BuildContext context) {
Expand All @@ -31,14 +31,15 @@ class NoData extends StatelessWidget {
color: context.colorScheme.primary,
),
const SizedBox(height: 8.0),
Button(
trailing: const Icon(
Symbols.history_rounded,
weight: 600.0,
if (selectTimeRange != null)
Button(
trailing: const Icon(
Symbols.history_rounded,
weight: 600.0,
),
onTap: selectTimeRange,
child: Text("tabs.stats.timeRange.select".t(context)),
),
onTap: onTap,
child: Text("tabs.stats.timeRange.select".t(context)),
),
],
),
),
Expand Down
Loading

0 comments on commit 48fd6b6

Please sign in to comment.