From bb6d3e02f2f2fcc689ee4ccafc27421615baaf43 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 13 Mar 2021 11:15:14 +0100
Subject: [PATCH] #553 - show date of first transaction

---
 .../statistics/StatisticsService.java         | 33 +++++++++++++++----
 .../transactions/TransactionRepository.java   |  2 ++
 .../resources/languages/base_de.properties    |  1 +
 .../resources/languages/base_en.properties    |  1 +
 4 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/statistics/StatisticsService.java b/src/main/java/de/deadlocker8/budgetmaster/statistics/StatisticsService.java
index 2fe64dae4..5cea4c873 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/statistics/StatisticsService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/statistics/StatisticsService.java
@@ -4,7 +4,9 @@ import de.deadlocker8.budgetmaster.accounts.AccountService;
 import de.deadlocker8.budgetmaster.categories.CategoryService;
 import de.deadlocker8.budgetmaster.charts.ChartService;
 import de.deadlocker8.budgetmaster.charts.ChartType;
+import de.deadlocker8.budgetmaster.services.DateService;
 import de.deadlocker8.budgetmaster.templates.TemplateService;
+import de.deadlocker8.budgetmaster.transactions.Transaction;
 import de.deadlocker8.budgetmaster.transactions.TransactionService;
 import de.thecodelabs.utils.util.Localization;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,30 +18,49 @@ import java.util.List;
 @Service
 public class StatisticsService
 {
+	private static final String TEXT_WHITE = "text-white";
+	private static final String TEXT_BLACK = "text-black";
+
 	private final AccountService accountService;
 	private final CategoryService categoryService;
 	private final TransactionService transactionService;
 	private final TemplateService templateService;
 	private final ChartService chartService;
+	private final DateService dateService;
 
 	@Autowired
-	public StatisticsService(AccountService accountService, CategoryService categoryService, TransactionService transactionService, TemplateService templateService, ChartService chartService)
+	public StatisticsService(AccountService accountService, CategoryService categoryService, TransactionService transactionService, TemplateService templateService, ChartService chartService, DateService dateService)
 	{
 		this.accountService = accountService;
 		this.categoryService = categoryService;
 		this.transactionService = transactionService;
 		this.templateService = templateService;
 		this.chartService = chartService;
+		this.dateService = dateService;
 	}
 
 	public List<StatisticItem> getStatisticItems()
 	{
 		final List<StatisticItem> statisticItems = new ArrayList<>();
-		statisticItems.add(new StatisticItem("account_balance", Localization.getString("statistics.number.of.accounts", accountService.getAllAccountsAsc().size()), "background-red", "text-white"));
-		statisticItems.add(new StatisticItem("list", Localization.getString("statistics.number.of.transactions", transactionService.getRepository().findAll().size()), "background-blue-baby", "text-white"));
-		statisticItems.add(new StatisticItem("file_copy", Localization.getString("statistics.number.of.templates", templateService.getRepository().findAll().size()), "background-orange-dark", "text-white"));
-		statisticItems.add(new StatisticItem("show_chart", Localization.getString("statistics.number.of.custom.charts", chartService.getRepository().findAllByType(ChartType.CUSTOM).size()), "background-purple", "text-white"));
-		statisticItems.add(new StatisticItem("label", Localization.getString("statistics.number.of.categories", categoryService.getAllCategories().size()), "background-orange", "text-black"));
+		statisticItems.add(new StatisticItem("account_balance", Localization.getString("statistics.number.of.accounts", accountService.getAllAccountsAsc().size()), "background-red", TEXT_WHITE));
+		statisticItems.add(new StatisticItem("list", Localization.getString("statistics.number.of.transactions", transactionService.getRepository().findAll().size()), "background-blue-baby", TEXT_BLACK));
+		statisticItems.add(new StatisticItem("file_copy", Localization.getString("statistics.number.of.templates", templateService.getRepository().findAll().size()), "background-orange-dark", TEXT_BLACK));
+		statisticItems.add(new StatisticItem("show_chart", Localization.getString("statistics.number.of.custom.charts", chartService.getRepository().findAllByType(ChartType.CUSTOM).size()), "background-purple", TEXT_WHITE));
+		statisticItems.add(new StatisticItem("label", Localization.getString("statistics.number.of.categories", categoryService.getAllCategories().size()), "background-orange", TEXT_BLACK));
+		statisticItems.add(new StatisticItem("event", Localization.getString("statistics.first.transaction", getFirstTransactionDate()), "background-grey", TEXT_BLACK));
 		return statisticItems;
 	}
+
+	private String getFirstTransactionDate()
+	{
+		final Transaction firstTransaction = transactionService.getRepository().findFirstByOrderByDate();
+
+		String firstTransactionDate = "-";
+		if(firstTransaction != null)
+		{
+			firstTransactionDate = dateService.getDateStringNormal(firstTransaction.getDate());
+		}
+
+		return firstTransactionDate;
+	}
 }
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java
index f418aab76..43f7a7641 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java
@@ -36,4 +36,6 @@ public interface TransactionRepository extends JpaRepository<Transaction, Intege
 	List<Transaction> findAllByTransferAccount(Account account);
 
 	List<Transaction> findAllByOrderByDateDesc();
+
+	Transaction findFirstByOrderByDate();
 }
\ No newline at end of file
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index e5e500889..598bc7163 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -523,3 +523,4 @@ statistics.number.of.transactions={0} Buchungen
 statistics.number.of.templates={0} Vorlagen
 statistics.number.of.custom.charts={0} Eigene Diagramme
 statistics.number.of.categories={0} Kategorien
+statistics.first.transaction=Erste Buchung {0}
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index e8a3203c3..693f66be1 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -521,3 +521,4 @@ statistics.number.of.transactions={0} Transactions
 statistics.number.of.templates={0} Templates
 statistics.number.of.custom.charts={0} Custom Charts
 statistics.number.of.categories={0} Categories
+statistics.first.transaction=First Transaction {0}
-- 
GitLab