From: <sie...@us...> - 2013-12-14 18:36:38
|
Revision: 5579 http://sourceforge.net/p/moneymanagerex/code/5579 Author: siena123 Date: 2013-12-14 18:36:35 +0000 (Sat, 14 Dec 2013) Log Message: ----------- improvement to sorted reports - only get report data once Modified Paths: -------------- trunk/src/mmex.cpp trunk/src/reports/categexp.cpp trunk/src/reports/categexp.h trunk/src/reports/payee.cpp trunk/src/reports/payee.h trunk/src/reports/reportbase.h trunk/src/reports/summary.cpp trunk/src/reports/summary.h trunk/src/reports/summarystocks.cpp trunk/src/reports/summarystocks.h Modified: trunk/src/mmex.cpp =================================================================== --- trunk/src/mmex.cpp 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/mmex.cpp 2013-12-14 18:36:35 UTC (rev 5579) @@ -2235,6 +2235,7 @@ if (!rs) return; wxSizer *sizer = cleanupHomePanel(); + rs->RefreshData(); panelCurrent_ = new mmReportsPanel(rs, cleanup, homePanel_, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxTAB_TRAVERSAL); Modified: trunk/src/reports/categexp.cpp =================================================================== --- trunk/src/reports/categexp.cpp 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/categexp.cpp 2013-12-14 18:36:35 UTC (rev 5579) @@ -20,7 +20,6 @@ #include "budget.h" #include "htmlbuilder.h" -#include "util.h" #include "mmOption.h" #include "mmgraphpie.h" #include <algorithm> @@ -30,13 +29,16 @@ #define CATEGORY_SORT_BY_AMOUNT 2 mmReportCategoryExpenses::mmReportCategoryExpenses -( mmDateRange* date_range, const wxString& title, int type) +(mmDateRange* date_range, const wxString& title, int type) : mmPrintableBase(CATEGORY_SORT_BY_NAME) , date_range_(date_range) , title_(title) , type_(type) , ignoreFutureDate_(mmIniOptions::instance().ignoreFutureTransactions_) +, with_date_(false) +, grandtotal_(0) { + with_date_ = date_range_->is_with_date(); } mmReportCategoryExpenses::~mmReportCategoryExpenses() @@ -50,25 +52,22 @@ return "$Rev$"; } -wxString mmReportCategoryExpenses::getHTMLText() +void mmReportCategoryExpenses::RefreshData() { - // structure for sorting of data - struct data_holder {wxString name; double amount; int categs;} line; - std::vector<data_holder> data; + data_.clear(); + valueList_.clear(); + valueListTotals_.clear(); + grandtotal_ = 0.0; - bool with_date = date_range_->is_with_date(); - double grandtotal = 0.0; - - std::vector<ValuePair> valueList; - std::vector<ValuePair> valueListTotals; std::map<int, std::map<int, std::map<int, double> > > categoryStats; Model_Category::instance().getCategoryStats(categoryStats , date_range_ , ignoreFutureDate_ , false - , with_date); + , with_date_); - for (const auto& category: Model_Category::instance().all(Model_Category::COL_CATEGNAME)) + data_holder line; + for (const auto& category : Model_Category::instance().all(Model_Category::COL_CATEGNAME)) { int categs = 0; double categtotal = 0.0; @@ -79,19 +78,19 @@ if (type_ == COME && amt > 0.0) amt = 0; categtotal += amt; - grandtotal += amt; + grandtotal_ += amt; if (amt != 0) { ValuePair vp; vp.label = sCategName; vp.amount = amt; - valueList.push_back(vp); + valueList_.push_back(vp); line.name = sCategName; line.amount = amt; line.categs = 0; - data.push_back(line); + data_.push_back(line); } Model_Subcategory::Data_Set subcategories = Model_Category::sub_category(category); @@ -107,7 +106,7 @@ if (type_ == COME && amt > 0.0) amt = 0; categtotal += amt; - grandtotal += amt; + grandtotal_ += amt; if (amt != 0) { @@ -115,12 +114,12 @@ ValuePair vp; vp.label = sFullCategName; vp.amount = amt; - valueList.push_back(vp); + valueList_.push_back(vp); line.name = sFullCategName; line.amount = amt; line.categs = 0; - data.push_back(line); + data_.push_back(line); } } @@ -129,7 +128,7 @@ ValuePair vp_total; vp_total.label = category.CATEGNAME; vp_total.amount = categtotal; - valueListTotals.push_back(vp_total); + valueListTotals_.push_back(vp_total); } if (categs > 1) @@ -137,7 +136,7 @@ line.name = _("Category Total: "); line.amount = categtotal; line.categs = categs; - data.push_back(line); + data_.push_back(line); } else if (categs > 0 || amt != 0) { @@ -145,14 +144,18 @@ line.name = ""; line.amount = 0; line.categs = categs; - data.push_back(line); + data_.push_back(line); } } +} +wxString mmReportCategoryExpenses::getHTMLText() +{ // Data is presorted by name + std::vector<data_holder> sortedData(data_); if (CATEGORY_SORT_BY_AMOUNT == sortColumn_) { - std::stable_sort(data.begin(), data.end() + std::stable_sort(sortedData.begin(), sortedData.end() , [] (const data_holder& x, const data_holder& y) { if (x.amount != y.amount) return x.amount < y.amount; @@ -165,18 +168,18 @@ hb.init(); hb.addHeader(2, title_); - hb.DisplayDateHeading(date_range_->start_date(), date_range_->end_date(), with_date); + hb.DisplayDateHeading(date_range_->start_date(), date_range_->end_date(), with_date_); hb.startCenter(); // Add the graph mmGraphPie ggtotal; hb.addImage(ggtotal.getOutputFileName()); - ggtotal.init(valueListTotals); + ggtotal.init(valueListTotals_); ggtotal.Generate(_("Categories")); mmGraphPie gg; hb.addImage(gg.getOutputFileName()); - gg.init(valueList); + gg.init(valueList_); gg.Generate(_("Subcategories")); hb.startTable("60%"); @@ -192,7 +195,7 @@ hb.endTableRow(); bool endSeparator = false; - for (const auto& entry : data) + for (const auto& entry : sortedData) { endSeparator = false; if (entry.categs > 0) @@ -232,7 +235,7 @@ if (!endSeparator) hb.addRowSeparator(2); - hb.addTotalRow(_("Grand Total: "), 1, grandtotal); + hb.addTotalRow(_("Grand Total: "), 1, grandtotal_); hb.endTable(); hb.endCenter(); Modified: trunk/src/reports/categexp.h =================================================================== --- trunk/src/reports/categexp.h 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/categexp.h 2013-12-14 18:36:35 UTC (rev 5579) @@ -21,6 +21,8 @@ #include "reportbase.h" #include "mmDateRange.h" +#include "util.h" +#include <vector> class mmReportCategoryExpenses : public mmPrintableBase { @@ -28,6 +30,7 @@ mmReportCategoryExpenses(mmDateRange* date_range, const wxString& title, int type); virtual ~mmReportCategoryExpenses(); + virtual void RefreshData(); virtual wxString getHTMLText(); virtual wxString version(); @@ -39,6 +42,15 @@ bool ignoreFutureDate_; wxString title_; int type_; + +private: + // structure for sorting of data + struct data_holder { wxString name; double amount; int categs; }; + std::vector<data_holder> data_; + std::vector<ValuePair> valueList_; + std::vector<ValuePair> valueListTotals_; + bool with_date_; + double grandtotal_; }; class mmReportCategoryExpensesGoes: public mmReportCategoryExpenses Modified: trunk/src/reports/payee.cpp =================================================================== --- trunk/src/reports/payee.cpp 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/payee.cpp 2013-12-14 18:36:35 UTC (rev 5579) @@ -19,7 +19,6 @@ #include "payee.h" #include "htmlbuilder.h" -#include "util.h" #include "mmgraphpie.h" #include "model/Model_Currency.h" #include "model/Model_Payee.h" @@ -36,6 +35,8 @@ : mmPrintableBase(PAYEE_SORT_BY_NAME) , title_(title) , date_range_(date_range) + , positiveTotal_(0.0) + , negativeTotal_(0.0) { } @@ -49,35 +50,46 @@ return "$Rev$"; } -wxString mmReportPayeeExpenses::getHTMLText() +void mmReportPayeeExpenses::RefreshData() { - double positiveTotal = 0.0, negativeTotal = 0.0; - std::vector<ValuePair> valueList; - valueList.clear(); - struct data_holder {wxString name; double incomes; double expences;} line; - std::vector<data_holder> data; + data_.clear(); + valueList_.clear(); + positiveTotal_ = 0.0; + negativeTotal_ = 0.0; std::map<int, std::pair<double, double> > payeeStats; getPayeeStats(payeeStats, date_range_ - , mmIniOptions::instance().ignoreFutureTransactions_ ); + , mmIniOptions::instance().ignoreFutureTransactions_); + data_holder line; for (const auto& entry : payeeStats) { - positiveTotal += entry.second.first; - negativeTotal += entry.second.second; + positiveTotal_ += entry.second.first; + negativeTotal_ += entry.second.second; Model_Payee::Data* payee = Model_Payee::instance().get(entry.first); if (payee) line.name = payee->PAYEENAME; line.incomes = entry.second.first; line.expences = entry.second.second; - data.push_back(line); + data_.push_back(line); + + if (line.incomes + line.expences < 0) + { + ValuePair vp; + vp.label = line.name; + vp.amount = line.incomes + line.expences; + valueList_.push_back(vp); + } } +} +wxString mmReportPayeeExpenses::getHTMLText() +{ switch (sortColumn_) { case PAYEE_SORT_BY_NAME: - std::stable_sort(data.begin(), data.end() + std::stable_sort(data_.begin(), data_.end() , [] (const data_holder& x, const data_holder& y) { return x.name < y.name; @@ -85,7 +97,7 @@ ); break; case PAYEE_SORT_BY_INCOME: - std::stable_sort(data.begin(), data.end() + std::stable_sort(data_.begin(), data_.end() , [] (const data_holder& x, const data_holder& y) { if (x.incomes != y.incomes) return x.incomes < y.incomes; @@ -94,7 +106,7 @@ ); break; case PAYEE_SORT_BY_EXPENSE: - std::stable_sort(data.begin(), data.end() + std::stable_sort(data_.begin(), data_.end() , [] (const data_holder& x, const data_holder& y) { if (x.expences != y.expences) return x.expences < y.expences; @@ -104,7 +116,7 @@ break; default: sortColumn_ = PAYEE_SORT_BY_DIFF; - std::stable_sort(data.begin(), data.end() + std::stable_sort(data_.begin(), data_.end() , [] (const data_holder& x, const data_holder& y) { if (x.expences+x.incomes != y.expences+y.incomes) return x.expences+x.incomes < y.expences+y.incomes; @@ -143,7 +155,7 @@ hb.addTableHeaderCellLink(wxString::Format("SORT:%d", PAYEE_SORT_BY_DIFF), _("Difference"), true); hb.endTableRow(); - for (const auto& entry : data) + for (const auto& entry : data_) { hb.startTableRow(); hb.addTableCell(entry.name); @@ -151,28 +163,20 @@ hb.addMoneyCell(entry.expences); hb.addMoneyCell(entry.incomes + entry.expences); hb.endTableRow(); - - if (entry.incomes + entry.expences < 0) - { - ValuePair vp; - vp.label = entry.name; - vp.amount = entry.incomes + entry.expences; - valueList.push_back(vp); - } } hb.addRowSeparator(4); std::vector <double> totals; - totals.push_back(positiveTotal); - totals.push_back(negativeTotal); - totals.push_back(positiveTotal + negativeTotal); + totals.push_back(positiveTotal_); + totals.push_back(negativeTotal_); + totals.push_back(positiveTotal_ + negativeTotal_); hb.addTotalRow(_("Total:"), 3, totals); hb.endTable(); hb.endCenter(); hb.end(); - gg.init(valueList); + gg.init(valueList_); gg.Generate(title_); return hb.getHTMLText(); Modified: trunk/src/reports/payee.h =================================================================== --- trunk/src/reports/payee.h 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/payee.h 2013-12-14 18:36:35 UTC (rev 5579) @@ -21,7 +21,9 @@ #include "reportbase.h" #include "mmDateRange.h" +#include "util.h" #include <map> +#include <vector> class mmReportPayeeExpenses : public mmPrintableBase { @@ -29,6 +31,7 @@ mmReportPayeeExpenses(const wxString& title = _("Payee Report"), mmDateRange* date_range = new mmAllTime()); ~mmReportPayeeExpenses(); + virtual void RefreshData(); virtual wxString getHTMLText(); virtual wxString version(); @@ -39,7 +42,14 @@ wxString title_; enum TYPE {INCOME = 0, EXPENCES, MAX}; - //static const wxString type_names[] = {_("Incomes"), _("Expences")}; + +private: + // structure for sorting of data + struct data_holder { wxString name; double incomes; double expences; }; + std::vector<data_holder> data_; + std::vector<ValuePair> valueList_; + double positiveTotal_; + double negativeTotal_; }; class mmReportPayeeExpensesCurrentMonth: public mmReportPayeeExpenses Modified: trunk/src/reports/reportbase.h =================================================================== --- trunk/src/reports/reportbase.h 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/reportbase.h 2013-12-14 18:36:35 UTC (rev 5579) @@ -32,6 +32,7 @@ virtual ~mmPrintableBase() {} virtual wxString getHTMLText() = 0; void setSortColumn(const int sort_by) { sortColumn_ = sort_by; } + virtual void RefreshData() {} public: mmPrintableBase(int sort_column = 0): sortColumn_(sort_column) {} Modified: trunk/src/reports/summary.cpp =================================================================== --- trunk/src/reports/summary.cpp 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/summary.cpp 2013-12-14 18:36:35 UTC (rev 5579) @@ -29,12 +29,15 @@ mmReportSummary::mmReportSummary() : mmPrintableBase(SUMMARY_SORT_BY_NAME) +, tBalance_(0.0) +, tTBalance_(0.0) +, stockBalance_(0.0) +, asset_balance_(0.0) +, totalBalance_(0.0) { } -// structure for sorting of data -struct data_holder {wxString name; wxString link; double balance;}; -bool mmSummarySortBalance (const data_holder& x, const data_holder& y) +bool mmSummarySortBalance(const summary_data_holder& x, const summary_data_holder& y) { if (x.balance != y.balance) return x.balance < y.balance; else return x.name < y.name; @@ -45,13 +48,15 @@ return "$Rev$"; } -wxString mmReportSummary::getHTMLText() +void mmReportSummary::RefreshData() { - data_holder line; - std::vector<data_holder> dataChecking, dataTerm; + dataChecking_.clear(); + dataTerm_.clear(); + summary_data_holder line; + /* Checking */ - double tBalance = 0.0; + tBalance_ = 0.0; for (const auto& account: Model_Account::instance().all(Model_Account::COL_ACCOUNTNAME)) { if (Model_Account::type(account) == Model_Account::CHECKING && Model_Account::status(account) == Model_Account::OPEN) @@ -59,17 +64,17 @@ double bal = Model_Account::balance(account); Model_Currency::Data* currency = Model_Account::currency(account); - tBalance += bal * currency->BASECONVRATE; + tBalance_ += bal * currency->BASECONVRATE; line.name = account.ACCOUNTNAME; line.link = wxString::Format("ACCT:%d", account.ACCOUNTID); line.balance = bal; - dataChecking.push_back(line); + dataChecking_.push_back(line); } } /* Terms */ - double tTBalance = 0.0; + tTBalance_ = 0.0; for (const auto& account: Model_Account::instance().all(Model_Account::COL_ACCOUNTNAME)) { if (Model_Account::type(account) == Model_Account::TERM && Model_Account::status(account) == Model_Account::OPEN) @@ -77,24 +82,40 @@ double bal = Model_Account::balance(account); Model_Currency::Data* currency = Model_Account::currency(account); - tTBalance += bal * currency->BASECONVRATE; + tTBalance_ += bal * currency->BASECONVRATE; line.name = account.ACCOUNTNAME; line.link = wxString::Format("ACCT:%d", account.ACCOUNTID); line.balance = bal; - dataTerm.push_back(line); + dataTerm_.push_back(line); } } - if (SUMMARY_SORT_BY_BALANCE == sortColumn_) + /* Stocks */ + stockBalance_ = 0.0; + for (const auto& account : Model_Account::instance().all()) { - std::stable_sort(dataChecking.begin(), dataChecking.end(), mmSummarySortBalance); - std::stable_sort(dataTerm.begin(), dataTerm.end(), mmSummarySortBalance); + if (Model_Account::type(account) != Model_Account::INVESTMENT) continue; + Model_Currency::Data* currency = Model_Account::currency(account); + stockBalance_ += currency->BASECONVRATE * Model_Account::investment_balance(account).first; } - else + + /* Assets */ + asset_balance_ = Model_Asset::instance().balance(); + + totalBalance_ = tBalance_ + tTBalance_ + stockBalance_ + asset_balance_; +} + +wxString mmReportSummary::getHTMLText() +{ + std::vector<summary_data_holder> sortedDataChecking(dataChecking_); + std::vector<summary_data_holder> sortedDataTerm(dataTerm_); + + // List is presorted by account name + if (SUMMARY_SORT_BY_BALANCE == sortColumn_) { - // List is presorted by account name - sortColumn_ = SUMMARY_SORT_BY_NAME; + std::stable_sort(sortedDataChecking.begin(), sortedDataChecking.end(), mmSummarySortBalance); + std::stable_sort(sortedDataTerm.begin(), sortedDataTerm.end(), mmSummarySortBalance); } mmHTMLBuilder hb; @@ -118,7 +139,7 @@ hb.endTableRow(); /* Checking */ - for (const auto& entry : dataChecking) + for (const auto& entry : sortedDataChecking) { hb.startTableRow(); hb.addTableCellLink(entry.link, entry.name, false, true); @@ -127,13 +148,13 @@ } hb.startTableRow(); - hb.addTotalRow(_("Bank Accounts Total:"), 2, tBalance); + hb.addTotalRow(_("Bank Accounts Total:"), 2, tBalance_); hb.endTableRow(); hb.addRowSeparator(2); /* Terms */ - for (const auto& entry : dataTerm) + for (const auto& entry : sortedDataTerm) { hb.startTableRow(); hb.addTableCellLink(entry.link, entry.name, false, true); @@ -144,42 +165,25 @@ if (Model_Account::hasActiveTermAccount()) { hb.startTableRow(); - hb.addTotalRow(_("Term Accounts Total:"), 2, tTBalance); + hb.addTotalRow(_("Term Accounts Total:"), 2, tTBalance_); hb.endTableRow(); hb.addRowSeparator(2); } - tBalance += tTBalance; - - /* Stocks */ - double stockBalance = 0.0; - for (const auto& account: Model_Account::instance().all()) - { - if (Model_Account::type(account) != Model_Account::INVESTMENT) continue; - Model_Currency::Data* currency = Model_Account::currency(account); - stockBalance += currency->BASECONVRATE * Model_Account::investment_balance(account).first; - } - hb.startTableRow(); hb.addTableCell(_("Stocks Total:")); - hb.addMoneyCell(stockBalance); + hb.addMoneyCell(stockBalance_); hb.endTableRow(); hb.addRowSeparator(2); - /* Assets */ - double asset_balance = Model_Asset::instance().balance(); - hb.startTableRow(); hb.addTableCellLink("Assets", _("Assets"), false, true); - hb.addMoneyCell(asset_balance); + hb.addMoneyCell(asset_balance_); hb.endTableRow(); - tBalance += stockBalance; - tBalance += asset_balance; - hb.addRowSeparator(2); - hb.addTotalRow(_("Total Balance on all Accounts"), 2, tBalance); + hb.addTotalRow(_("Total Balance on all Accounts"), 2, totalBalance_); hb.endTable(); hb.endCenter(); Modified: trunk/src/reports/summary.h =================================================================== --- trunk/src/reports/summary.h 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/summary.h 2013-12-14 18:36:35 UTC (rev 5579) @@ -20,13 +20,27 @@ #define _MM_EX_REPORTSUMMARY_H_ #include "reportbase.h" +#include <vector> +// structure for sorting of data +struct summary_data_holder { wxString name; wxString link; double balance; }; + class mmReportSummary : public mmPrintableBase { public: mmReportSummary(); + virtual void RefreshData(); virtual wxString getHTMLText(); virtual wxString version(); + +private: + std::vector<summary_data_holder> dataChecking_; + std::vector<summary_data_holder> dataTerm_; + double tBalance_; + double tTBalance_; + double stockBalance_; + double asset_balance_; + double totalBalance_; }; #endif //_MM_EX_REPORTSUMMARY_H_ Modified: trunk/src/reports/summarystocks.cpp =================================================================== --- trunk/src/reports/summarystocks.cpp 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/summarystocks.cpp 2013-12-14 18:36:35 UTC (rev 5579) @@ -39,6 +39,8 @@ mmReportSummaryStocks::mmReportSummaryStocks() : mmPrintableBase(STOCK_SORT_BY_NAME) +, gain_loss_sum_total_(0.0) +, stockBalance_(0.0) { } @@ -47,32 +49,30 @@ return "$Rev$"; } -wxString mmReportSummaryStocks::getHTMLText() +void mmReportSummaryStocks::RefreshData() { - // structure for sorting of data - struct data_holder {wxString name; wxString symbol; wxString date; double qty; double purchase; double current; double commission; double gainloss; double value;} line; - struct account_holder {wxString name; std::vector<data_holder> data; double gainloss; double total;} account; - std::vector<account_holder> stocks; + stocks_.clear(); + gain_loss_sum_total_ = 0.0; + stockBalance_ = 0.0; - double gain_loss_sum_total = 0.0; - double stockBalance = 0.0; - - for (const auto& a: Model_Account::instance().all(Model_Account::COL_ACCOUNTNAME)) + data_holder line; + account_holder account; + for (const auto& a : Model_Account::instance().all(Model_Account::COL_ACCOUNTNAME)) { if (Model_Account::type(a) != Model_Account::INVESTMENT) continue; if (Model_Account::status(a) != Model_Account::OPEN) continue; account.name = a.ACCOUNTNAME; account.gainloss = 0.0; - account.total = Model_Account::investment_balance(a).second; + account.total = Model_Account::investment_balance(a).second; account.data.clear(); - for (const auto& stock: Model_Stock::instance().find(Model_Stock::HELDAT(a.ACCOUNTID))) + for (const auto& stock : Model_Stock::instance().find(Model_Stock::HELDAT(a.ACCOUNTID))) { const Model_Currency::Data* currency = Model_Account::currency(a); - stockBalance += currency->BASECONVRATE * stock.VALUE; + stockBalance_ += currency->BASECONVRATE * stock.VALUE; account.gainloss += stock.VALUE - Model_Stock::value(stock); - gain_loss_sum_total += (stock.VALUE - Model_Stock::value(stock)) * currency->BASECONVRATE; + gain_loss_sum_total_ += (stock.VALUE - Model_Stock::value(stock)) * currency->BASECONVRATE; line.name = stock.STOCKNAME; line.symbol = stock.SYMBOL; @@ -85,10 +85,13 @@ line.value = stock.VALUE; account.data.push_back(line); } - stocks.push_back(account); + stocks_.push_back(account); } +} - for (auto& acct : stocks) +wxString mmReportSummaryStocks::getHTMLText() +{ + for (auto& acct : stocks_) { switch (sortColumn_) { @@ -181,7 +184,7 @@ hb.addDateNow(); hb.startTable("95%"); - for (const auto& acct : stocks) + for (const auto& acct : stocks_) { hb.addTotalRow("", 9, ""); hb.addTotalRow(acct.name, 9, ""); @@ -209,8 +212,8 @@ } hb.addRowSeparator(9); - hb.addTotalRow(_("Grand Total:"), 8, gain_loss_sum_total); - hb.addMoneyCell(stockBalance); + hb.addTotalRow(_("Grand Total:"), 8, gain_loss_sum_total_); + hb.addMoneyCell(stockBalance_); hb.endTableRow(); hb.endTable(); Modified: trunk/src/reports/summarystocks.h =================================================================== --- trunk/src/reports/summarystocks.h 2013-12-14 18:36:05 UTC (rev 5578) +++ trunk/src/reports/summarystocks.h 2013-12-14 18:36:35 UTC (rev 5579) @@ -20,6 +20,7 @@ #define _MM_EX_REPORTSUMMARYSTOCKS_H_ #include "reportbase.h" +#include <vector> class mmHTMLBuilder; @@ -27,11 +28,18 @@ { public: mmReportSummaryStocks(); + virtual void RefreshData(); virtual wxString getHTMLText(); virtual wxString version(); private: void display_header(mmHTMLBuilder& hb); + // structure for sorting of data + struct data_holder { wxString name; wxString symbol; wxString date; double qty; double purchase; double current; double commission; double gainloss; double value; }; + struct account_holder { wxString name; std::vector<data_holder> data; double gainloss; double total; }; + std::vector<account_holder> stocks_; + double gain_loss_sum_total_; + double stockBalance_; }; #endif // _MM_EX_REPORTSUMMARYSTOCKS_H_ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |