From: <vo...@us...> - 2013-01-20 14:52:16
|
Revision: 3379 http://moneymanagerex.svn.sourceforge.net/moneymanagerex/?rev=3379&view=rev Author: vomikan Date: 2013-01-20 14:52:08 +0000 (Sun, 20 Jan 2013) Log Message: ----------- update Modified Paths: -------------- trunk/mmex/src/dbwrapper.cpp trunk/mmex/src/dbwrapper.h trunk/mmex/src/reportsummary.cpp trunk/mmex/src/reportsummarystocks.cpp trunk/mmex/src/stockspanel.cpp Modified: trunk/mmex/src/dbwrapper.cpp =================================================================== --- trunk/mmex/src/dbwrapper.cpp 2013-01-20 12:03:21 UTC (rev 3378) +++ trunk/mmex/src/dbwrapper.cpp 2013-01-20 14:52:08 UTC (rev 3379) @@ -182,7 +182,7 @@ wxSortedArrayString currencies; currencies.Add(wxT("US Dollar ;$;;.;,;dollar;cents;100;1;USD")); // currencies.Add(wxT("EURO;€;;.;,;euro;cent;100;1;EUR")); - // Euro symbol € incorrectly displayed in windows. Correct when using \u20ac equivalent. + // Euro symbol € incorrectly displayed in windows. Correct when using \u20ac equivalent. // MS-VC++ 2010: Ignore warning C4428: universal-character-name encountered in source #pragma warning( push ) #pragma warning( disable : 4428 ) @@ -949,27 +949,27 @@ const int destCatID, const int destSubCatID, const int sourceCatID, const int sourceSubCatID) { int err = SQLITE_OK; - static const char sqlCat[] = "update checkingaccount_v1 set categid= ?, subcategid= ? " - "where categid= ? and subcategid= ?"; - wxSQLite3Statement stCat = db->PrepareStatement(sqlCat); - stCat.Bind(1, destCatID); - stCat.Bind(2, destSubCatID); - stCat.Bind(3, sourceCatID); - stCat.Bind(4, sourceSubCatID); + static const char sqlCat[] = "update checkingaccount_v1 set categid= ?, subcategid= ? " + "where categid= ? and subcategid= ?"; + wxSQLite3Statement stCat = db->PrepareStatement(sqlCat); + stCat.Bind(1, destCatID); + stCat.Bind(2, destSubCatID); + stCat.Bind(3, sourceCatID); + stCat.Bind(4, sourceSubCatID); - static const char sqlSubCat[] = "update splittransactions_v1 set categid= ?, subcategid= ? " - "where categid= ? and subcategid= ?"; - wxSQLite3Statement stSubCat = db->PrepareStatement(sqlSubCat); - stSubCat.Bind(1, destCatID); - stSubCat.Bind(2, destSubCatID); - stSubCat.Bind(3, sourceCatID); - stSubCat.Bind(4, sourceSubCatID); + static const char sqlSubCat[] = "update splittransactions_v1 set categid= ?, subcategid= ? " + "where categid= ? and subcategid= ?"; + wxSQLite3Statement stSubCat = db->PrepareStatement(sqlSubCat); + stSubCat.Bind(1, destCatID); + stSubCat.Bind(2, destSubCatID); + stSubCat.Bind(3, sourceCatID); + stSubCat.Bind(4, sourceSubCatID); try { - stCat.ExecuteUpdate(); - stSubCat.ExecuteUpdate(); - stCat.Finalize(); - stSubCat.Finalize(); + stCat.ExecuteUpdate(); + stSubCat.ExecuteUpdate(); + stCat.Finalize(); + stSubCat.Finalize(); //db_.get()->Commit(); } catch(const wxSQLite3Exception& e) @@ -1021,36 +1021,6 @@ return true; } - -double mmDBWrapper::getCurrencyBaseConvRate(wxSQLite3Database* db, int accountID) -{ - static const char sql[] = - "select f.BASECONVRATE " - "from ACCOUNTLIST_V1 acl " - "join CURRENCYFORMATS_V1 f " - "on f.CURRENCYID = acl.CURRENCYID " - "where acl.ACCOUNTID = ?"; - - double rate = g_defBASECONVRATE; - - wxSQLite3Statement st = db->PrepareStatement(sql); - st.Bind(1, accountID); - - wxSQLite3ResultSet q1 = st.ExecuteQuery(); - if (q1.NextRow()) - { - rate = q1.GetDouble(wxT("BASECONVRATE"), g_defBASECONVRATE); - } - else - { - /* cannot find accountid */ - wxASSERT(true); - } - - st.Finalize(); - - return rate; -} //-------------------------------------------------------------------- bool mmDBWrapper::updateTransactionWithStatus(wxSQLite3Database &db, int transID, const wxString& status) @@ -1512,27 +1482,9 @@ return true; } -double mmDBWrapper::getStockInvestmentBalance(wxSQLite3Database* db, double& invested) +double mmDBWrapper::getStockInvestmentBalance(wxSQLite3Database* db + , int accountID, double& originalVal) { - double balance = 0.0; - invested = 0.0; - - wxSQLite3ResultSet q1 = db->ExecuteQuery(SELECT_ALL_INVESTMENT_FROM_ACCOUNTLIST_V1); - while (q1.NextRow()) - { - double originalVal = 0; - balance += getStockInvestmentBalance(db, q1.GetInt(wxT("ACCOUNTID")), true, originalVal); - invested += originalVal; - } - - q1.Finalize(); - - return balance; -} - -double mmDBWrapper::getStockInvestmentBalance(wxSQLite3Database* db, int accountID, - bool convertToBase, double& originalVal) -{ wxASSERT(accountID != -1); double balance = 0.0; @@ -1557,147 +1509,9 @@ st.Finalize(); - double convRate = g_defBASECONVRATE; - if (convertToBase) - { - convRate = getCurrencyBaseConvRate(db, accountID); - } - originalVal = originalVal * convRate; - return balance * convRate; -} - -void mmDBWrapper::deleteAsset(wxSQLite3Database* db, int assetID) -{ - try - { - wxSQLite3Statement st = db->PrepareStatement(DELETE_ASSETID_ASSETS_V1); - st.Bind(1, assetID); - st.ExecuteUpdate(); - st.Finalize(); - mmOptions::instance().databaseUpdated_ = true; - - } - catch(const wxSQLite3Exception& e) - { - wxLogDebug(wxT("Function::deleteAsset: Exception"), e.GetMessage().c_str()); - wxLogError(wxT("delete from ASSETS_V1. ") + wxString::Format(_("Error: %s"), e.GetMessage().c_str())); - } -} - -double mmDBWrapper::getAssetBalance(wxSQLite3Database* db) -{ - double balance = 0.0; - - wxSQLite3ResultSet q1 = db->ExecuteQuery(SELECT_ALL_FROM_ASSETS_V1); - - while (q1.NextRow()) - { - int assetID = q1.GetInt(wxT("ASSETID")); - balance += getAssetValue(db, assetID); - } - q1.Finalize(); - return balance; } -double mmDBWrapper::getAssetValue(wxSQLite3Database* db, int assetID) -{ - double assetValue = 0.0; - - wxSQLite3Statement st = db->PrepareStatement(SELECT_ROW_FROM_ASSETS_V1); - st.Bind(1, assetID); - - wxSQLite3ResultSet q1 = st.ExecuteQuery(); - - if (q1.NextRow()) - { - wxString valChange = q1.GetString(wxT("VALUECHANGE")); - double value = q1.GetDouble(wxT("VALUE")); - double valueChangeRate = q1.GetDouble(wxT("VALUECHANGERATE")); - wxString startDateStr = q1.GetString(wxT("STARTDATE")); - wxDateTime startDate = mmGetStorageStringAsDate(startDateStr); - wxDateTime todayDate = wxDateTime::Now(); - - if (valChange == wxT("None")) - { - assetValue = value; - } - else if (valChange == wxT("Appreciates")) - { - if (todayDate > startDate) - { - int numYears = todayDate.GetYear() - startDate.GetYear(); - -// improve the accuracy of number of years calculation - int numMonths = todayDate.GetMonth() - startDate.GetMonth(); - int numDays = todayDate.GetDay() - startDate.GetDay(); - if ( (numMonths >= 0 ) && (numDays < 0) ) numMonths --; - if ( (numYears > 0 ) && (numMonths < 0 )) numYears -- ; - - if (numYears > 0) - { -// double appreciation = numYears * valueChangeRate * value / 100; -// assetValue = value + appreciation; - -// Calculation changed to compound interest. - while (numYears > 0) - { - double appreciation = valueChangeRate * value / 100; - assetValue = value + appreciation; - value = assetValue; - numYears --; - } - } - else - { - assetValue = value; - } - } - else - { - assetValue = value; - } - } - else if (valChange == wxT("Depreciates")) - { - if (todayDate > startDate) - { - int numYears = todayDate.GetYear() - startDate.GetYear(); - if (numYears > 0) - { -// double depreciation = numYears * valueChangeRate * value / 100; -// assetValue = value - depreciation; - -// Calculation changed to compound interest. - while (numYears > 0) - { - double depreciation = valueChangeRate * value / 100; - assetValue = value - depreciation; - value = assetValue; - numYears --; - } - } - else - { - assetValue = value; - } - } - else - { - assetValue = value; - } - } - else - { - wxASSERT(false); - } - } - - st.Finalize(); - - return assetValue; -} - wxString mmDBWrapper::getSplitTrxNotes(wxSQLite3Database* db_, int trxID) { wxString infoStr = wxEmptyString; @@ -1939,3 +1753,137 @@ // SQLITE_DONE 101 /* sqlite3_step() has finished executing */ //---------------------------------------------------------------------------- + +//All assets functions temporary grouped here + +double mmDBWrapper::getAssetValue(wxSQLite3Database* db, int assetID) +{ + double assetValue = 0.0; + + wxSQLite3Statement st = db->PrepareStatement(SELECT_ROW_FROM_ASSETS_V1); + st.Bind(1, assetID); + + wxSQLite3ResultSet q1 = st.ExecuteQuery(); + + if (q1.NextRow()) + { + wxString valChange = q1.GetString(wxT("VALUECHANGE")); + double value = q1.GetDouble(wxT("VALUE")); + double valueChangeRate = q1.GetDouble(wxT("VALUECHANGERATE")); + wxString startDateStr = q1.GetString(wxT("STARTDATE")); + wxDateTime startDate = mmGetStorageStringAsDate(startDateStr); + wxDateTime todayDate = wxDateTime::Now(); + + if (valChange == wxT("None")) + { + assetValue = value; + } + else if (valChange == wxT("Appreciates")) + { + if (todayDate > startDate) + { + int numYears = todayDate.GetYear() - startDate.GetYear(); + +// improve the accuracy of number of years calculation + int numMonths = todayDate.GetMonth() - startDate.GetMonth(); + int numDays = todayDate.GetDay() - startDate.GetDay(); + if ( (numMonths >= 0 ) && (numDays < 0) ) numMonths --; + if ( (numYears > 0 ) && (numMonths < 0 )) numYears -- ; + + if (numYears > 0) + { +// double appreciation = numYears * valueChangeRate * value / 100; +// assetValue = value + appreciation; + +// Calculation changed to compound interest. + while (numYears > 0) + { + double appreciation = valueChangeRate * value / 100; + assetValue = value + appreciation; + value = assetValue; + numYears --; + } + } + else + { + assetValue = value; + } + } + else + { + assetValue = value; + } + } + else if (valChange == wxT("Depreciates")) + { + if (todayDate > startDate) + { + int numYears = todayDate.GetYear() - startDate.GetYear(); + if (numYears > 0) + { +// double depreciation = numYears * valueChangeRate * value / 100; +// assetValue = value - depreciation; + +// Calculation changed to compound interest. + while (numYears > 0) + { + double depreciation = valueChangeRate * value / 100; + assetValue = value - depreciation; + value = assetValue; + numYears --; + } + } + else + { + assetValue = value; + } + } + else + { + assetValue = value; + } + } + else + { + wxASSERT(false); + } + } + + st.Finalize(); + + return assetValue; +} + +void mmDBWrapper::deleteAsset(wxSQLite3Database* db, int assetID) +{ + try + { + wxSQLite3Statement st = db->PrepareStatement(DELETE_ASSETID_ASSETS_V1); + st.Bind(1, assetID); + st.ExecuteUpdate(); + st.Finalize(); + mmOptions::instance().databaseUpdated_ = true; + + } + catch(const wxSQLite3Exception& e) + { + wxLogDebug(wxT("Function::deleteAsset: Exception"), e.GetMessage().c_str()); + wxLogError(wxT("delete from ASSETS_V1. ") + wxString::Format(_("Error: %s"), e.GetMessage().c_str())); + } +} + +double mmDBWrapper::getAssetBalance(wxSQLite3Database* db) +{ + double balance = 0.0; + + wxSQLite3ResultSet q1 = db->ExecuteQuery(SELECT_ALL_FROM_ASSETS_V1); + + while (q1.NextRow()) + { + int assetID = q1.GetInt(wxT("ASSETID")); + balance += getAssetValue(db, assetID); + } + q1.Finalize(); + + return balance; +} Modified: trunk/mmex/src/dbwrapper.h =================================================================== --- trunk/mmex/src/dbwrapper.h 2013-01-20 12:03:21 UTC (rev 3378) +++ trunk/mmex/src/dbwrapper.h 2013-01-20 14:52:08 UTC (rev 3379) @@ -478,7 +478,7 @@ /* Operations on the CURRENCY */ void loadCurrencySettings(wxSQLite3Database* db, int currencyID); -double getCurrencyBaseConvRate(wxSQLite3Database* db, int accountID); +//double getCurrencyBaseConvRate(wxSQLite3Database* db, int accountID); bool deleteCurrency(wxSQLite3Database* db, int currencyID); int addCurrency(wxSQLite3Database* db, std::vector<wxString> data); @@ -487,8 +487,7 @@ /* Stocks API */ void deleteStockInvestment(wxSQLite3Database* db, int stockID); bool moveStockInvestment(wxSQLite3Database* db, int stockID, int toAccountID); -double getStockInvestmentBalance(wxSQLite3Database* db, double& invested); -double getStockInvestmentBalance(wxSQLite3Database* db, int accountID, bool convertToBase, double& originalVal); +double getStockInvestmentBalance(wxSQLite3Database* db, int accountID, double& originalVal); /* Assets API */ void deleteAsset(wxSQLite3Database* db, int assetID); Modified: trunk/mmex/src/reportsummary.cpp =================================================================== --- trunk/mmex/src/reportsummary.cpp 2013-01-20 12:03:21 UTC (rev 3378) +++ trunk/mmex/src/reportsummary.cpp 2013-01-20 14:52:08 UTC (rev 3379) @@ -5,12 +5,12 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -23,10 +23,10 @@ #include "reportbase.h" #include "util.h" -mmReportSummary::mmReportSummary(mmCoreDB* core, mmGUIFrame* frame) : - mmPrintableBase(core), +mmReportSummary::mmReportSummary(mmCoreDB* core, mmGUIFrame* frame) : + mmPrintableBase(core), frame_(frame), - db_(core_->db_.get()) + db_(core_->db_.get()) { } @@ -56,7 +56,7 @@ if (pCA->acctType_ == ACCOUNT_TYPE_BANK && pCA->status_ == mmAccount::MMEX_Open) { double bal = pCA->initialBalance_ + core_->bTransactionList_.getBalance(pCA->id_, mmIniOptions::instance().ignoreFutureTransactions_); - + boost::shared_ptr<mmCurrency> pCurrencyPtr = core_->accountList_.getCurrencyWeakPtr(pCA->id_).lock(); wxASSERT(pCurrencyPtr); mmex::CurrencyFormatter::instance().loadSettings(*pCurrencyPtr); @@ -78,13 +78,13 @@ core_->currencyList_.LoadBaseCurrencySettings(core_->dbInfoSettings_.get()); wxString tBalanceStr; - mmex::formatDoubleToCurrency(tBalance, tBalanceStr); + mmex::formatDoubleToCurrency(tBalance, tBalanceStr); hb.startTableRow(); - hb.addTotalRow(_("Bank Accounts Total:"), 2, tBalanceStr); - hb.endTableRow(); + hb.addTotalRow(_("Bank Accounts Total:"), 2, tBalanceStr); + hb.endTableRow(); - hb.addRowSeparator(2); + hb.addRowSeparator(2); /* Terms */ double tTBalance = 0.0; @@ -96,7 +96,7 @@ if (pTA->status_== mmAccount::MMEX_Open && pTA->acctType_ == ACCOUNT_TYPE_TERM) { double bal = pTA->initialBalance_ + core_->bTransactionList_.getBalance(pTA->id_, mmIniOptions::instance().ignoreFutureTransactions_); - + boost::shared_ptr<mmCurrency> pCurrencyPtr = core_->accountList_.getCurrencyWeakPtr(pTA->id_).lock(); wxASSERT(pCurrencyPtr); mmex::CurrencyFormatter::instance().loadSettings(*pCurrencyPtr); @@ -107,10 +107,10 @@ wxString balance; mmex::formatDoubleToCurrency(bal, balance); - hb.startTableRow(); - hb.addTableCell(pTA->name_, false, true); - hb.addTableCell(balance, true); - hb.endTableRow(); + hb.startTableRow(); + hb.addTableCell(pTA->name_, false, true); + hb.addTableCell(balance, true); + hb.endTableRow(); } } @@ -118,49 +118,61 @@ core_->currencyList_.LoadBaseCurrencySettings(core_->dbInfoSettings_.get()); wxString tTBalanceStr; - mmex::formatDoubleToCurrency(tTBalance, tTBalanceStr); + mmex::formatDoubleToCurrency(tTBalance, tTBalanceStr); if ( frame_->hasActiveTermAccounts() ) { - hb.startTableRow(); - hb.addTotalRow(_("Term Accounts Total:"), 2, tTBalanceStr); - hb.endTableRow(); - hb.addRowSeparator(2); + hb.startTableRow(); + hb.addTotalRow(_("Term Accounts Total:"), 2, tTBalanceStr); + hb.endTableRow(); + hb.addRowSeparator(2); } tBalance += tTBalance; /* Stocks */ - double invested; - double stockBalance = mmDBWrapper::getStockInvestmentBalance(db_, invested); + + wxArrayString accounts_type; + accounts_type.Add(ACCOUNT_TYPE_STOCK); + wxArrayInt accounts_id = core_->accountList_.getAccountsID(accounts_type); + + double original_val, stockBalance = 0; + int accountId = 0; + for (size_t i = 0; i < accounts_id.Count(); ++i) + { + double base_conv_rate = core_->accountList_.getAccountBaseCurrencyConvRate(accounts_id[i]); + double amount = mmDBWrapper::getStockInvestmentBalance(core_->db_.get(), accounts_id[i], original_val); + stockBalance += amount * base_conv_rate; + } + wxString stockBalanceStr; mmex::formatDoubleToCurrency(stockBalance, stockBalanceStr); - hb.startTableRow(); - hb.addTableCell(_("Stock Investments")); - hb.addTableCell(stockBalanceStr, true); - hb.endTableRow(); + hb.startTableRow(); + hb.addTableCell(_("Stock Investments")); + hb.addTableCell(stockBalanceStr, true); + hb.endTableRow(); /* Assets */ double assetBalance = mmDBWrapper::getAssetBalance(db_); wxString assetBalanceStr; mmex::formatDoubleToCurrency(assetBalance, assetBalanceStr); - hb.startTableRow(); - hb.addTableCell(_("Assets")); - hb.addTableCell(assetBalanceStr, true); - hb.endTableRow(); + hb.startTableRow(); + hb.addTableCell(_("Assets")); + hb.addTableCell(assetBalanceStr, true); + hb.endTableRow(); tBalance += stockBalance; tBalance += assetBalance; mmex::formatDoubleToCurrency(tBalance, tBalanceStr); - hb.addRowSeparator(2); + hb.addRowSeparator(2); - hb.addTotalRow(_("Total Balance on all Accounts"), 2, tBalanceStr); - hb.endTable(); + hb.addTotalRow(_("Total Balance on all Accounts"), 2, tBalanceStr); + hb.endTable(); - hb.endCenter(); + hb.endCenter(); hb.end(); Modified: trunk/mmex/src/reportsummarystocks.cpp =================================================================== --- trunk/mmex/src/reportsummarystocks.cpp 2013-01-20 12:03:21 UTC (rev 3378) +++ trunk/mmex/src/reportsummarystocks.cpp 2013-01-20 14:52:08 UTC (rev 3379) @@ -5,12 +5,12 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -24,7 +24,7 @@ #include "util.h" #include "stockspanel.h" -static const char SELECT_ROW_SYMBOL_FROM_STOCK_V1[] = +static const char SELECT_ROW_SYMBOL_FROM_STOCK_V1[] = "SELECT " "STOCKNAME, " "TOTAL(NUMSHARES) AS NUMSHARES, " @@ -47,6 +47,7 @@ hb.addDateNow(); double gain_loss_sum_total = 0.0; + double stockBalance = 0.0; wxArrayString account_type; account_type.Add(ACCOUNT_TYPE_STOCK); @@ -88,6 +89,7 @@ th.gainLoss_ = th.value_ - ((th.numShares_ * th.purchasePrice_) + commission); double base_conv_rate = core_->accountList_.getAccountBaseCurrencyConvRate(accountID); + stockBalance += base_conv_rate * th.value_; gain_loss_sum += th.gainLoss_; gain_loss_sum_total += th.gainLoss_ * base_conv_rate; @@ -111,15 +113,15 @@ hb.addTableCell(th.gainLossStr_, true, true, true, wxT("RED")); else hb.addTableCell(th.gainLossStr_, true, false, true); - + hb.addTableCell(th.valueStr_, true); hb.endTableRow(); - + } q2.Finalize(); double invested = 0; - double stockBalance = mmDBWrapper::getStockInvestmentBalance(db_, accountID, false, invested); + double stockBalance = mmDBWrapper::getStockInvestmentBalance(db_, accountID, invested); wxString stockBalanceStr; wxString gain_loss_sum_str; @@ -129,25 +131,20 @@ mmex::formatDoubleToCurrency(stockBalance, stockBalanceStr); mmex::formatDoubleToCurrency(gain_loss_sum, gain_loss_sum_str); - + hb.addRowSeparator(9); hb.addTotalRow(_("Total:"), 8, gain_loss_sum_str); hb.addTableCell(stockBalanceStr, true, true, true); //numeric, italic, bold - } core_->currencyList_.LoadBaseCurrencySettings(core_->dbInfoSettings_.get()); + wxString sStockBalance, sGainLossTotal; + mmex::formatDoubleToCurrency(gain_loss_sum_total, sGainLossTotal); + mmex::formatDoubleToCurrency(stockBalance, sStockBalance); - double invested = 0; - double stockBalance = mmDBWrapper::getStockInvestmentBalance(db_, invested); - wxString stockBalanceStr; - wxString gain_loss_sum_total_str; - mmex::formatDoubleToCurrency(gain_loss_sum_total, gain_loss_sum_total_str); - mmex::formatDoubleToCurrency(stockBalance, stockBalanceStr); - hb.addRowSeparator(9); - hb.addTotalRow(_("Grand Total:"), 8, gain_loss_sum_total_str); - hb.addTableCell(stockBalanceStr, true, true, true); //numeric, italic, bold + hb.addTotalRow(_("Grand Total:"), 8, sGainLossTotal); + hb.addTableCell(sStockBalance, true, true, true); //numeric, italic, bold hb.endTableRow(); hb.endTable(); @@ -157,15 +154,15 @@ } void mmReportSummaryStocks::display_header(mmHTMLBuilder& hb) { - hb.startTableRow(); - hb.addTableHeaderCell(_("Name")); - hb.addTableHeaderCell(_("Symbol")); - hb.addTableHeaderCell(_("Purchase Date")); - hb.addTableHeaderCell(_("Quantity"), true); - hb.addTableHeaderCell(_("Purchase Price"), true); - hb.addTableHeaderCell(_("Current Price"), true); - hb.addTableHeaderCell(_("Commission"), true); - hb.addTableHeaderCell(_("Gain/Loss"), true); - hb.addTableHeaderCell(_("Value"), true); - hb.endTableRow(); + hb.startTableRow(); + hb.addTableHeaderCell(_("Name")); + hb.addTableHeaderCell(_("Symbol")); + hb.addTableHeaderCell(_("Purchase Date")); + hb.addTableHeaderCell(_("Quantity"), true); + hb.addTableHeaderCell(_("Purchase Price"), true); + hb.addTableHeaderCell(_("Current Price"), true); + hb.addTableHeaderCell(_("Commission"), true); + hb.addTableHeaderCell(_("Gain/Loss"), true); + hb.addTableHeaderCell(_("Value"), true); + hb.endTableRow(); } Modified: trunk/mmex/src/stockspanel.cpp =================================================================== --- trunk/mmex/src/stockspanel.cpp 2013-01-20 12:03:21 UTC (rev 3378) +++ trunk/mmex/src/stockspanel.cpp 2013-01-20 14:52:08 UTC (rev 3379) @@ -258,7 +258,7 @@ // + Transfered from other accounts - Transfered to other accounts //Get Stock Investment Account Balance as Init Amount + sum (Value) - sum (Purchase Price) - double total = mmDBWrapper::getStockInvestmentBalance(core_->db_.get(), accountID_, false, originalVal); + double total = mmDBWrapper::getStockInvestmentBalance(core_->db_.get(), accountID_, originalVal); wxString balance; mmex::formatDoubleToCurrency(total+initVal, balance); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |