From: <vo...@us...> - 2013-07-01 08:07:14
|
Revision: 4220 http://sourceforge.net/p/moneymanagerex/code/4220 Author: vomikan Date: 2013-07-01 08:07:10 +0000 (Mon, 01 Jul 2013) Log Message: ----------- raw sql removed from home page Top Transaction function (stage #1) Modified Paths: -------------- trunk/src/mmhomepagepanel.cpp trunk/src/mmtransaction.cpp trunk/src/mmtransaction.h Modified: trunk/src/mmhomepagepanel.cpp =================================================================== --- trunk/src/mmhomepagepanel.cpp 2013-07-01 07:48:14 UTC (rev 4219) +++ trunk/src/mmhomepagepanel.cpp 2013-07-01 08:07:10 UTC (rev 4220) @@ -611,7 +611,7 @@ th.amt_ = q1.GetDouble("TRANSAMOUNT"); th.toAmt_ = q1.GetDouble("TOTRANSAMOUNT"); - th.transAmtString_ = CurrencyFormatter::float2String(th.amt_); + th.transAmtString_ = CurrencyFormatter::float2String(th.amt_); //for Withdrawal amount should be negative if (th.transType_== TRANS_TYPE_WITHDRAWAL_STR) { @@ -619,7 +619,7 @@ th.amt_ = -th.amt_; } - th.transToAmtString_ = CurrencyFormatter::float2String(th.toAmt_); + th.transToAmtString_ = CurrencyFormatter::float2String(th.toAmt_); th.payeeStr_ = core_->payeeList_.GetPayeeName(th.payeeID_); @@ -697,70 +697,37 @@ wxString mmHomePagePanel::displayTopTransactions() { mmHTMLBuilder hb; - CurrencyFormatter::instance().loadDefaultSettings(); core_->currencyList_.LoadBaseCurrencySettings(); - static const char sql3[] = - "select NUMBER, " - "CATEG|| (Case SUBCATEG when '' then '' else ':'|| SUBCATEG end ) as SUBCATEGORY " - ", AMOUNT " - "from ( " - "select coalesce(CAT.CATEGNAME, SCAT.CATEGNAME) as CATEG, " - "CANS.ACCOUNTID as ACCOUNTID, " - "coalesce(SUBCAT.SUBCATEGNAME, SSCAT.SUBCATEGNAME,'') as SUBCATEG, " - "count(*) as NUMBER, " - "total((ROUND((case CANS.TRANSCODE when 'Withdrawal' then -1 else 1 end) " - "* (case CANS.CATEGID when -1 then ST.SPLITTRANSAMOUNT else CANS.TRANSAMOUNT end),2) " - "* CF.BASECONVRATE " - ")) as AMOUNT " - "from CHECKINGACCOUNT_V1 CANS " - "left join CATEGORY_V1 CAT on CAT.CATEGID = CANS.CATEGID " - "left join SUBCATEGORY_V1 SUBCAT on SUBCAT.SUBCATEGID = CANS.SUBCATEGID and SUBCAT.CATEGID = CANS.CATEGID " - "left join ACCOUNTLIST_V1 ACC on ACC.ACCOUNTID = CANS.ACCOUNTID " - "left join SPLITTRANSACTIONS_V1 ST on CANS.TRANSID = ST.TRANSID " - "left join CATEGORY_V1 SCAT on SCAT.CATEGID = ST.CATEGID and CANS.TRANSID=ST.TRANSID " - "left join SUBCATEGORY_V1 SSCAT on SSCAT.SUBCATEGID = ST.SUBCATEGID and SSCAT.CATEGID = ST.CATEGID and CANS.TRANSID=ST.TRANSID " - "left join CURRENCYFORMATS_V1 CF on CF.CURRENCYID = ACC.CURRENCYID " - "where CANS.TRANSCODE <> 'Transfer' " - "and CANS.TRANSDATE > date('now','localtime', '-1 month') and CANS.TRANSDATE <= date('now','localtime') " - "and CANS.STATUS <> 'V' " - "group by CATEG, SUBCATEG " - "order by ABS (AMOUNT) DESC, CATEG, SUBCATEG " - ") where AMOUNT < 0 " - "limit 7 "; - - wxSQLite3ResultSet q1 = core_->db_.get()->ExecuteQuery(sql3); - - std::vector<CategInfo> categList; - - wxString headerMsg = wxString() << _("Top Withdrawals: ") << _("Last 30 Days"); - hb.startTable("100%", "", "1"); hb.startTableRow(); hb.startTableCell(); + + wxString headerMsg = wxString::Format(_("Top Withdrawals: %s"), _("Last 30 Days")); + hb.startTable("100%"); - hb.addTableHeaderRow(headerMsg, 3); + hb.addTableHeaderRow(headerMsg, 2); hb.startTableRow(); hb.addTableCell(_("Category"), false, false, true); - hb.addTableCell(_("Quantity"), true, false, true); + //hb.addTableCell(_("QTY"), true, false, true); hb.addTableCell(_("Summary"), true, false, true); hb.endTableRow(); - while(q1.NextRow()) + //Get statistic + std::vector<std::pair<wxString, double> > topCategoryStats; + core_->bTransactionList_.getTopCategoryStats( + topCategoryStats + , date_range_ + , mmIniOptions::instance().ignoreFutureTransactions_ + ); + + for (const auto& i : topCategoryStats) { - double category_total = q1.GetDouble("AMOUNT"); - wxString category_total_str = wxEmptyString; - core_->currencyList_.LoadBaseCurrencySettings(); - category_total_str = CurrencyFormatter::float2Money(category_total); - hb.startTableRow(); - hb.addTableCell(q1.GetString("SUBCATEGORY"), false, true); - hb.addTableCell(q1.GetString("NUMBER"), true, true); - hb.addTableCell(category_total_str, true); + hb.addTableCell(i.first, false, true); + hb.addMoneyCell(i.second); hb.endTableRow(); } - q1.Finalize(); - hb.endTable(); hb.endTableCell(); hb.endTableRow(); @@ -862,7 +829,7 @@ // Display the grand total from all sections wxString tBalanceStr; core_->currencyList_.LoadBaseCurrencySettings(); - tBalanceStr = CurrencyFormatter::float2Money(tBalance); + tBalanceStr = CurrencyFormatter::float2Money(tBalance); hb.startTable("100%", "", "1"); hb.startTableRow(); Modified: trunk/src/mmtransaction.cpp =================================================================== --- trunk/src/mmtransaction.cpp 2013-07-01 07:48:14 UTC (rev 4219) +++ trunk/src/mmtransaction.cpp 2013-07-01 08:07:10 UTC (rev 4220) @@ -201,7 +201,7 @@ categID_ = -1; subcategID_ = -1; } - else + else { fullCatStr_ = core_->categoryList_.GetFullCategoryString(categID_, subcategID_); } @@ -515,7 +515,7 @@ reconciled_balance = pAccount->initialBalance_; double balance = pAccount->initialBalance_; //TODO: get parameter mmIniOptions::instance().ignoreFutureTransactions_; - bool calculate_future = true; + bool calculate_future = true; accountTransactions_.clear(); for (const auto& pBankTransaction: transactions_) @@ -648,8 +648,27 @@ } } -void mmBankTransactionList::getCategoryStats - (std::map<int, std::map<int, std::map<int, double> > > &categoryStats +void mmBankTransactionList::getTopCategoryStats( + std::vector<std::pair<wxString, double> > &categoryStats + , mmDateRange* date_range, bool ignoreFuture) const +{ + //TODO: now it fake function. + categoryStats.clear(); + int i = 0; + for (const auto& category: core_->categoryList_.entries_) + { + if (i> 7) break; + i++; + + std::pair<wxString, double> pair; + pair.first = core_->categoryList_.GetFullCategoryString(category->categID_, -1); + pair.second = (double)i; + categoryStats.push_back(pair); + } +} + +void mmBankTransactionList::getCategoryStats( + std::map<int, std::map<int, std::map<int, double> > > &categoryStats , mmDateRange* date_range, bool ignoreFuture , bool group_by_month, bool with_date) const { Modified: trunk/src/mmtransaction.h =================================================================== --- trunk/src/mmtransaction.h 2013-07-01 07:48:14 UTC (rev 4219) +++ trunk/src/mmtransaction.h 2013-07-01 08:07:10 UTC (rev 4220) @@ -166,10 +166,15 @@ , bool group_by_account = false , bool group_by_month = false) const; - void getCategoryStats(std::map<int, std::map<int, std::map<int, double> > > &categoryStats - , mmDateRange* date_range, bool ignoreFuture - , bool group_by_month = true, bool with_date = true) const; + void getTopCategoryStats( + std::vector<std::pair<wxString, double> > &categoryStats + , mmDateRange* date_range, bool ignoreFuture) const; + void getCategoryStats( + std::map<int, std::map<int, std::map<int, double> > > &categoryStats + , mmDateRange* date_range, bool ignoreFuture + , bool group_by_month = true, bool with_date = true) const; + // The setting asDeposit is only valid if evaluateTransfer is true double getAmountForCategory(int categID, int subcategID, bool ignoreDate, const wxDateTime &dtBegin, const wxDateTime &dtEnd, bool evaluateTransfer = false, bool asDeposit = false, bool ignoreFuture = false) const; double getAmountForPayee(int payeeID, bool ignoreDate, const wxDateTime &dtbegin, const wxDateTime &dtEnd, bool ignoreFuture = false) const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |