Added Account::getTimeline()

Returns a date sorted list of transactions and earnings.
This commit is contained in:
quentin 2022-08-13 12:00:05 -05:00
parent ad8910253b
commit 5999a45e2b
10 changed files with 100 additions and 8 deletions

View File

@ -9,4 +9,5 @@ add_executable(${PROJECT_NAME} src/main.cpp src/main.h
src/money/recept.cpp src/money/recept.h src/money/recept.cpp src/money/recept.h
src/data/data.tpp src/data/data.h src/data/data.tpp src/data/data.h
src/data/accountData.cpp src/data/accountData.h src/data/accountData.cpp src/data/accountData.h
src/money/earning.cpp src/money/earning.h) src/money/earning.cpp src/money/earning.h
src/data/dateMoney.cpp src/data/dateMoney.h)

View File

@ -16,7 +16,7 @@ public:
rapidjson::Document document; rapidjson::Document document;
Data(std::string file); explicit Data(std::string file);
virtual T createObject() = 0; virtual T createObject() = 0;

25
src/data/dateMoney.cpp Normal file
View File

@ -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) {}

29
src/data/dateMoney.h Normal file
View File

@ -0,0 +1,29 @@
//
// Created by quentin on 8/12/22.
//
#ifndef BUDGET_DATEMONEY_H
#define BUDGET_DATEMONEY_H
#include <ctime>
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

View File

@ -15,3 +15,28 @@ Account::Account() {
withdrawable = true; withdrawable = true;
name = ""; 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<DateMoney> Account::getTimeline() {
std::vector<DateMoney> 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;
}

View File

@ -8,8 +8,10 @@
#include "transaction.h" #include "transaction.h"
#include "earning.h" #include "earning.h"
#include "../data/dateMoney.h"
#include <list> #include <list>
#include <string> #include <string>
#include <vector>
class Account { class Account {
public: public:
@ -17,6 +19,10 @@ public:
std::string name); std::string name);
Account(); Account();
int getValue();
std::vector<DateMoney> getTimeline();
private: private:
std::list<Transaction> transactions; std::list<Transaction> transactions;

View File

@ -5,3 +5,7 @@
#include "earning.h" #include "earning.h"
Earning::Earning(const int value, std::tm date) : value(value), date(date) {} Earning::Earning(const int value, std::tm date) : value(value), date(date) {}
tm *Earning::getDate() {
return &date;
}

View File

@ -8,11 +8,13 @@
#include <ctime> #include <ctime>
class Earning { class Earning {
public:
explicit Earning(int value, std::tm date);
public: public:
const int value; const int value;
explicit Earning(int value, std::tm date);
tm *getDate();
private:
std::tm date; std::tm date;
}; };

View File

@ -15,6 +15,6 @@ Receipt &Transaction::getReceipt() {
return receipt; return receipt;
} }
std::tm &Transaction::getDate() { tm * Transaction::getDate() {
return date; return &date;
} }

View File

@ -17,7 +17,7 @@ public:
Receipt &getReceipt(); Receipt &getReceipt();
std::tm &getDate(); tm * getDate();
private: private: