diff --git a/CMakeLists.txt b/CMakeLists.txt index b59602c..8854238 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,4 +9,5 @@ add_executable(${PROJECT_NAME} src/main.cpp src/main.h src/money/recept.cpp src/money/recept.h src/data/data.tpp src/data/data.h src/data/accountData.cpp src/data/accountData.h - src/money/earning.cpp src/money/earning.h) \ No newline at end of file + src/money/earning.cpp src/money/earning.h + src/data/dateMoney.cpp src/data/dateMoney.h) \ No newline at end of file diff --git a/src/data/data.h b/src/data/data.h index 70bffbf..17a1f47 100644 --- a/src/data/data.h +++ b/src/data/data.h @@ -16,7 +16,7 @@ public: rapidjson::Document document; - Data(std::string file); + explicit Data(std::string file); virtual T createObject() = 0; diff --git a/src/data/dateMoney.cpp b/src/data/dateMoney.cpp new file mode 100644 index 0000000..28dbe10 --- /dev/null +++ b/src/data/dateMoney.cpp @@ -0,0 +1,25 @@ +// +// Created by quentin on 8/12/22. +// + +#include "dateMoney.h" + + + +bool DateMoney::operator<(const DateMoney &rhs) const { + return mktime(date) < mktime(rhs.date); +} + +bool DateMoney::operator>(const DateMoney &rhs) const { + return rhs < *this; +} + +bool DateMoney::operator<=(const DateMoney &rhs) const { + return !(rhs < *this); +} + +bool DateMoney::operator>=(const DateMoney &rhs) const { + return !(*this < rhs); +} + +DateMoney::DateMoney(const int *value, tm *date) : value(value), date(date) {} diff --git a/src/data/dateMoney.h b/src/data/dateMoney.h new file mode 100644 index 0000000..638dcbc --- /dev/null +++ b/src/data/dateMoney.h @@ -0,0 +1,29 @@ +// +// Created by quentin on 8/12/22. +// + +#ifndef BUDGET_DATEMONEY_H +#define BUDGET_DATEMONEY_H + + +#include + +class DateMoney { +public: + bool operator<(const DateMoney &rhs) const; + + bool operator>(const DateMoney &rhs) const; + + bool operator<=(const DateMoney &rhs) const; + + bool operator>=(const DateMoney &rhs) const; + + DateMoney(const int *value, tm *date); + +private: + const int* value; + tm *date; +}; + + +#endif //BUDGET_DATEMONEY_H diff --git a/src/money/account.cpp b/src/money/account.cpp index 5806d3b..d9e4e75 100644 --- a/src/money/account.cpp +++ b/src/money/account.cpp @@ -15,3 +15,28 @@ Account::Account() { withdrawable = true; name = ""; } + +int Account::getValue() { + int total = 0; + for (auto &transaction : transactions) { + total -= transaction.value; + } + for (auto &earning : earnings) { + total += earning.value; + } + + return total; +} + +std::vector Account::getTimeline() { + std::vector timeline; + for (auto &transaction : transactions) { + timeline.emplace_back(&transaction.value, transaction.getDate()); + } + for (auto &earning : earnings) { + timeline.emplace_back(&earning.value, earning.getDate()); + } + std::sort(timeline.begin(), timeline.end()); + + return timeline; +} diff --git a/src/money/account.h b/src/money/account.h index c592f59..907e5c7 100644 --- a/src/money/account.h +++ b/src/money/account.h @@ -8,8 +8,10 @@ #include "transaction.h" #include "earning.h" +#include "../data/dateMoney.h" #include #include +#include class Account { public: @@ -17,6 +19,10 @@ public: std::string name); Account(); + + int getValue(); + std::vector getTimeline(); + private: std::list transactions; diff --git a/src/money/earning.cpp b/src/money/earning.cpp index 6e622a8..3bc307f 100644 --- a/src/money/earning.cpp +++ b/src/money/earning.cpp @@ -5,3 +5,7 @@ #include "earning.h" Earning::Earning(const int value, std::tm date) : value(value), date(date) {} + +tm *Earning::getDate() { + return &date; +} diff --git a/src/money/earning.h b/src/money/earning.h index 9a116d4..f79f079 100644 --- a/src/money/earning.h +++ b/src/money/earning.h @@ -8,11 +8,13 @@ #include class Earning { -public: - explicit Earning(int value, std::tm date); - public: const int value; + + explicit Earning(int value, std::tm date); + tm *getDate(); + +private: std::tm date; }; diff --git a/src/money/transaction.cpp b/src/money/transaction.cpp index 3b73ea3..5f8b6a0 100644 --- a/src/money/transaction.cpp +++ b/src/money/transaction.cpp @@ -15,6 +15,6 @@ Receipt &Transaction::getReceipt() { return receipt; } -std::tm &Transaction::getDate() { - return date; +tm * Transaction::getDate() { + return &date; } diff --git a/src/money/transaction.h b/src/money/transaction.h index c6f017d..8777f71 100644 --- a/src/money/transaction.h +++ b/src/money/transaction.h @@ -17,7 +17,7 @@ public: Receipt &getReceipt(); - std::tm &getDate(); + tm * getDate(); private: