Mercurial > hgweb.cgi > drn
changeset 907:fa068ce3faac
IN 37: handles updating the distrubtion in the survey when the budget item source is renamed.
author | John Schneiderman <JohnMS@member.fsf.org> |
---|---|
date | Mon, 17 Oct 2022 17:33:44 +0200 |
parents | c03b90fb95ec |
children | b1ab37bce375 |
files | src/navigation/internal/BudgetBankLedgers.cpp src/navigation/unit-tests/BudgetBankLedgers-unit-tests.cpp |
diffstat | 2 files changed, 300 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/navigation/internal/BudgetBankLedgers.cpp Mon Oct 10 18:58:35 2022 +0200 +++ b/src/navigation/internal/BudgetBankLedgers.cpp Mon Oct 17 17:33:44 2022 +0200 @@ -387,30 +387,55 @@ { this->verifyBudgetSourceName(changed); this->budgetLedgers_.renameWage(original, changed, {}); + const BudgetItemIdentifier id{BudgetItemTypes::Wage, original}; + + for (auto& survey : this->surveys_) + if (survey.second.distribution().count(id) != 0) + survey.second.renamed(id, changed); } void BudgetBankLedgers::renameBill(const BudgetSource& original, const BudgetSource& changed) { this->verifyBudgetSourceName(changed); this->budgetLedgers_.renameBill(original, changed, {}); + const BudgetItemIdentifier id{BudgetItemTypes::Bill, original}; + + for (auto& survey : this->surveys_) + if (survey.second.distribution().count(id) != 0) + survey.second.renamed(id, changed); } void BudgetBankLedgers::renameDebt(const BudgetSource& original, const BudgetSource& changed) { this->verifyBudgetSourceName(changed); this->budgetLedgers_.renameDebt(original, changed, {}); + const BudgetItemIdentifier id{BudgetItemTypes::Debt, original}; + + for (auto& survey : this->surveys_) + if (survey.second.distribution().count(id) != 0) + survey.second.renamed(id, changed); } void BudgetBankLedgers::renameGoal(const BudgetSource& original, const BudgetSource& changed) { this->verifyBudgetSourceName(changed); this->budgetLedgers_.renameGoal(original, changed, {}); + const BudgetItemIdentifier id{BudgetItemTypes::Goal, original}; + + for (auto& survey : this->surveys_) + if (survey.second.distribution().count(id) != 0) + survey.second.renamed(id, changed); } void BudgetBankLedgers::renameNontrack(const BudgetSource& original, const BudgetSource& changed) { this->verifyBudgetSourceName(changed); this->budgetLedgers_.renameNontrack(original, changed, {}); + const BudgetItemIdentifier id{BudgetItemTypes::Nontrack, original}; + + for (auto& survey : this->surveys_) + if (survey.second.distribution().count(id) != 0) + survey.second.renamed(id, changed); } //} @@ -936,7 +961,7 @@ const auto previousSurvey{this->surveys_.find(ba)}; const auto& ledger{this->generalLedger_.ledger(ba.account_.code_)}; const auto reconciledBalance{ - [&previousSurvey, &ledger, &allReconciled, &allAdded, ac{ba.account_.code_}, this] () + [&previousSurvey, &ledger, &allReconciled, &allAdded, ac{ba.account_.code_}] () { Money balance{ previousSurvey.hasValue() @@ -961,6 +986,7 @@ allPosted.emplace_back(this->generalLedger_.post(added)); this->generalLedger_.clear(allPosted); this->generalLedger_.clear(allReconciled); + // TODO: confirm that the monies distributed in the survey is not also distributed in another survey. try {
--- a/src/navigation/unit-tests/BudgetBankLedgers-unit-tests.cpp Mon Oct 10 18:58:35 2022 +0200 +++ b/src/navigation/unit-tests/BudgetBankLedgers-unit-tests.cpp Mon Oct 17 17:33:44 2022 +0200 @@ -720,6 +720,279 @@ ); } + void renameBill_hasCompletedSurvey_ShouldBeRenamed() + { + BudgetBankLedgers bbl{}; + const BudgetSource originalSource{"Original Source Name"}; + const Bill item{ + originalSource, + Money{1500, 0u, Iso4217Codes::USD}, + EventFrequency::Monthly, + {2020, 11, 29} + }; + bbl.add(item); + const Bank c1st{BankName{"Community 1st"}}; + bbl.add(c1st); + const auto savings{ + bbl.addAccount( + "Primary Share", + SupportedAccountTypes::Savings, + Money{Iso4217Codes::USD} + ) + }; + bbl.addAssociation(c1st.name_, savings.number(), SupportedAccountTypes::Savings); + const Money surveyAmount{5, 0u, Iso4217Codes::USD}; + const BudgetItemIdentifier id{BudgetItemTypes::Bill, item.source()}; + const auto budgetAccount{bbl.budgetLedgers().lookUpAccountCode(id)}; + const auto bankAccount{*bbl.findBankAccount(c1st.name_, savings.number())}; + bbl.completedSurvey( + QDate::currentDate(), + bankAccount, + {}, + { + { + Transaction{ + QDate::currentDate(), + savings, + budgetAccount, + surveyAmount + } + } + }, + { + { + {id, surveyAmount} + } + } + ); + const BudgetSource newSource{"New Source Name"}; + QVERIFY_NO_THROW(bbl.renameBill(originalSource, newSource)); + const auto survey{*bbl.surveys().cbegin()}; + QVERIFY_THAT( + survey.second.distribution().cbegin()->first.source_, + equals(newSource) + ); + } + + void renameDebt_hasCompletedSurvey_ShouldBeRenamed() + { + BudgetBankLedgers bbl{}; + const BudgetSource originalSource{"Original Source Name"}; + const Debt item{ + originalSource, + Money{1500, 0u, Iso4217Codes::USD}, + EventFrequency::Monthly, + {2020, 11, 29}, + Money{15000, 0u, Iso4217Codes::USD}, + Percentage{15.00} + }; + bbl.add(item); + const Bank c1st{BankName{"Community 1st"}}; + bbl.add(c1st); + const auto savings{ + bbl.addAccount( + "Primary Share", + SupportedAccountTypes::Savings, + Money{Iso4217Codes::USD} + ) + }; + bbl.addAssociation(c1st.name_, savings.number(), SupportedAccountTypes::Savings); + const Money surveyAmount{5, 0u, Iso4217Codes::USD}; + const BudgetItemIdentifier id{BudgetItemTypes::Debt, item.source()}; + const auto budgetAccount{bbl.budgetLedgers().lookUpAccountCode(id)}; + const auto bankAccount{*bbl.findBankAccount(c1st.name_, savings.number())}; + bbl.completedSurvey( + QDate::currentDate(), + bankAccount, + {}, + { + { + Transaction{ + QDate::currentDate(), + savings, + budgetAccount, + surveyAmount + } + } + }, + { + { + {id, surveyAmount} + } + } + ); + const BudgetSource newSource{"New Source Name"}; + QVERIFY_NO_THROW(bbl.renameDebt(originalSource, newSource)); + const auto survey{*bbl.surveys().cbegin()}; + QVERIFY_THAT( + survey.second.distribution().cbegin()->first.source_, + equals(newSource) + ); + } + + void renameGoal_hasCompletedSurvey_ShouldBeRenamed() + { + BudgetBankLedgers bbl{}; + const BudgetSource originalSource{"Original Source Name"}; + const Goal item{ + originalSource, + Money{1500, 0u, Iso4217Codes::USD}, + EventFrequency::Monthly, + {2020, 11, 29}, + Money{15000, 0u, Iso4217Codes::USD} + }; + bbl.add(item); + const Bank c1st{BankName{"Community 1st"}}; + bbl.add(c1st); + const auto savings{ + bbl.addAccount( + "Primary Share", + SupportedAccountTypes::Savings, + Money{Iso4217Codes::USD} + ) + }; + bbl.addAssociation(c1st.name_, savings.number(), SupportedAccountTypes::Savings); + const Money surveyAmount{5, 0u, Iso4217Codes::USD}; + const BudgetItemIdentifier id{BudgetItemTypes::Goal, item.source()}; + const auto budgetAccount{bbl.budgetLedgers().lookUpAccountCode(id)}; + const auto bankAccount{*bbl.findBankAccount(c1st.name_, savings.number())}; + bbl.completedSurvey( + QDate::currentDate(), + bankAccount, + {}, + { + { + Transaction{ + QDate::currentDate(), + savings, + budgetAccount, + surveyAmount + } + } + }, + { + { + {id, surveyAmount} + } + } + ); + const BudgetSource newSource{"New Source Name"}; + QVERIFY_NO_THROW(bbl.renameGoal(originalSource, newSource)); + const auto survey{*bbl.surveys().cbegin()}; + QVERIFY_THAT( + survey.second.distribution().cbegin()->first.source_, + equals(newSource) + ); + } + + void renameNontrack_hasCompletedSurvey_ShouldBeRenamed() + { + BudgetBankLedgers bbl{}; + const BudgetSource originalSource{"Original Source Name"}; + const Nontrack item{ + originalSource, + Money{1500, 0u, Iso4217Codes::USD}, + EventFrequency::Monthly, + {2020, 11, 29} + }; + bbl.add(item); + const Bank c1st{BankName{"Community 1st"}}; + bbl.add(c1st); + const auto savings{ + bbl.addAccount( + "Primary Share", + SupportedAccountTypes::Savings, + Money{Iso4217Codes::USD} + ) + }; + bbl.addAssociation(c1st.name_, savings.number(), SupportedAccountTypes::Savings); + const Money surveyAmount{5, 0u, Iso4217Codes::USD}; + const BudgetItemIdentifier id{BudgetItemTypes::Nontrack, item.source()}; + const auto budgetAccount{bbl.budgetLedgers().lookUpAccountCode(id)}; + const auto bankAccount{*bbl.findBankAccount(c1st.name_, savings.number())}; + bbl.completedSurvey( + QDate::currentDate(), + bankAccount, + {}, + { + { + Transaction{ + QDate::currentDate(), + savings, + budgetAccount, + surveyAmount + } + } + }, + { + { + {id, surveyAmount} + } + } + ); + const BudgetSource newSource{"New Source Name"}; + QVERIFY_NO_THROW(bbl.renameNontrack(originalSource, newSource)); + const auto survey{*bbl.surveys().cbegin()}; + QVERIFY_THAT( + survey.second.distribution().cbegin()->first.source_, + equals(newSource) + ); + } + + void renameWage_hasCompletedSurvey_ShouldBeRenamed() + { + BudgetBankLedgers bbl{}; + const BudgetSource originalSource{"Original Source Name"}; + const Wage item{ + originalSource, + Money{1500, 0u, Iso4217Codes::USD}, + EventFrequency::Monthly, + {2020, 11, 29} + }; + bbl.add(item); + const Bank c1st{BankName{"Community 1st"}}; + bbl.add(c1st); + const auto savings{ + bbl.addAccount( + "Primary Share", + SupportedAccountTypes::Savings, + Money{Iso4217Codes::USD} + ) + }; + bbl.addAssociation(c1st.name_, savings.number(), SupportedAccountTypes::Savings); + const Money surveyAmount{5, 0u, Iso4217Codes::USD}; + const BudgetItemIdentifier id{BudgetItemTypes::Wage, item.source()}; + const auto budgetAccount{bbl.budgetLedgers().lookUpAccountCode(id)}; + const auto bankAccount{*bbl.findBankAccount(c1st.name_, savings.number())}; + bbl.completedSurvey( + QDate::currentDate(), + bankAccount, + {}, + { + { + Transaction{ + QDate::currentDate(), + savings, + budgetAccount, + surveyAmount + } + } + }, + { + { + {id, surveyAmount} + } + } + ); + const BudgetSource newSource{"New Source Name"}; + QVERIFY_NO_THROW(bbl.renameWage(originalSource, newSource)); + const auto survey{*bbl.surveys().cbegin()}; + QVERIFY_THAT( + survey.second.distribution().cbegin()->first.source_, + equals(newSource) + ); + } + //} //{ add Account Tests