From: <vo...@us...> - 2012-10-13 16:55:35
|
Revision: 3044 http://moneymanagerex.svn.sourceforge.net/moneymanagerex/?rev=3044&view=rev Author: vomikan Date: 2012-10-13 16:55:29 +0000 (Sat, 13 Oct 2012) Log Message: ----------- category relocation dialog update Modified Paths: -------------- trunk/mmex/src/dbwrapper.cpp trunk/mmex/src/dbwrapper.h trunk/mmex/src/mmcategory.cpp trunk/mmex/src/mmex.cpp trunk/mmex/src/mmtransaction.cpp trunk/mmex/src/mmtransaction.h trunk/mmex/src/relocatecategorydialog.cpp trunk/mmex/src/relocatecategorydialog.h Modified: trunk/mmex/src/dbwrapper.cpp =================================================================== --- trunk/mmex/src/dbwrapper.cpp 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/dbwrapper.cpp 2012-10-13 16:55:29 UTC (rev 3044) @@ -959,7 +959,7 @@ const int destPayeeID, const int sourcePayeeID) { int changedPayees_, err = SQLITE_OK; - static const char SET_PAYEEID_CHECKINGACCOUNT_V1[] = "UPDATE CHECKINGACCOUNT_V1 SET PAYEEID = ? WHERE PAYEEID = ? "; + //static const char SET_PAYEEID_CHECKINGACCOUNT_V1[] = "UPDATE CHECKINGACCOUNT_V1 SET PAYEEID = ? WHERE PAYEEID = ? "; wxSQLite3Statement st = db->PrepareStatement(SET_PAYEEID_CHECKINGACCOUNT_V1); st.Bind(1, destPayeeID); st.Bind(2, sourcePayeeID); @@ -976,6 +976,40 @@ return err; } +int mmDBWrapper::relocateCategory(wxSQLite3Database* db, + 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 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(); + //db_.get()->Commit(); + } catch(const wxSQLite3Exception& e) + { + err = e.GetExtendedErrorCode(); + wxLogDebug(wxT("update checkingaccount_v1 : Exception"), e.GetMessage().c_str()); + wxLogError(wxString::Format(_("Error: %s"), e.GetMessage().c_str())); + } + return err; +} + bool mmDBWrapper::deletePayeeWithConstraints(wxSQLite3Database* db, int payeeID) { try { Modified: trunk/mmex/src/dbwrapper.h =================================================================== --- trunk/mmex/src/dbwrapper.h 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/dbwrapper.h 2012-10-13 16:55:29 UTC (rev 3044) @@ -478,6 +478,7 @@ bool updateTransactionWithStatus(wxSQLite3Database &db, int transID, const wxString& status); bool deleteTransaction(wxSQLite3Database* db, int transID); int relocatePayee(wxSQLite3Database* db, const int destPayeeID, const int sourcePayeeID); +int relocateCategory(wxSQLite3Database* db, const int destCatID, const int destSubCatID, const int sourceCatID, const int sourceSubCatID); wxString getSplitTrxNotes(wxSQLite3Database* db_, int trxID); /* Bills & Deposits API */ Modified: trunk/mmex/src/mmcategory.cpp =================================================================== --- trunk/mmex/src/mmcategory.cpp 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/mmcategory.cpp 2012-10-13 16:55:29 UTC (rev 3044) @@ -239,12 +239,12 @@ wxString mmCategoryList::GetFullCategoryString(int categID, int subCategID) const { + if (categID > -1) { wxString category = GetCategoryString(categID); - wxString subCategory = GetSubCategoryString(categID, subCategID); - if (!subCategory.IsEmpty()) - category<< wxT(":") << subCategory; + if (subCategID > -1) + category << wxT(":") << GetSubCategoryString(categID, subCategID); return category; } else Modified: trunk/mmex/src/mmex.cpp =================================================================== --- trunk/mmex/src/mmex.cpp 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/mmex.cpp 2012-10-13 16:55:29 UTC (rev 3044) @@ -4034,7 +4034,7 @@ void mmGUIFrame::OnCategoryRelocation(wxCommandEvent& /*event*/) { - relocateCategoryDialog* dlg = new relocateCategoryDialog(m_core.get(), m_db.get(), this); + relocateCategoryDialog* dlg = new relocateCategoryDialog(m_core.get(), this); if (dlg->ShowModal() == wxID_OK) { wxString msgStr; Modified: trunk/mmex/src/mmtransaction.cpp =================================================================== --- trunk/mmex/src/mmtransaction.cpp 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/mmtransaction.cpp 2012-10-13 16:55:29 UTC (rev 3044) @@ -1198,3 +1198,48 @@ } return 0; } + +int mmBankTransactionList::RelocateCategory(mmCoreDB* core, + const int destCatID, const int destSubCatID, const int sourceCatID, const int sourceSubCatID, + int& changedCats, int& changedSubCats) +{ + int err = mmDBWrapper::relocateCategory(db_.get(), + destCatID, destSubCatID, sourceCatID, sourceSubCatID); + if ( err == 0 ) + { + + changedCats=0; + changedSubCats=0; + for (const_iterator i = transactions_.begin(); i != transactions_.end(); ++i) + { + boost::shared_ptr<mmBankTransaction> pBankTransaction = *i; + if (pBankTransaction && (pBankTransaction->categID_ == sourceCatID) + && pBankTransaction->subcategID_== sourceSubCatID) + { + pBankTransaction->category_ = core->categoryList_.GetCategorySharedPtr(destCatID, destSubCatID); + pBankTransaction->catStr_ = core->categoryList_.GetCategoryName(destCatID); + pBankTransaction->subCatStr_ = core->categoryList_.GetSubCategoryName(destCatID, destSubCatID); + pBankTransaction->categID_ = destCatID; + pBankTransaction->subcategID_ = destSubCatID; + changedCats++; + } + else if (pBankTransaction && (pBankTransaction->categID_ == -1)) + { + mmSplitTransactionEntries* splits = pBankTransaction->splitEntries_.get(); + pBankTransaction->getSplitTransactions(core, splits); + + for (int i = 0; i < (int)splits->entries_.size(); ++i) + { + if (splits->entries_[i]->categID_==sourceCatID && splits->entries_[i]->subCategID_==sourceSubCatID) + { + splits->entries_[i]->categID_ = destCatID; + splits->entries_[i]->subCategID_ = destSubCatID; + changedSubCats++; + } + } + + } + } + } + return err; +} Modified: trunk/mmex/src/mmtransaction.h =================================================================== --- trunk/mmex/src/mmtransaction.h 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/mmtransaction.h 2012-10-13 16:55:29 UTC (rev 3044) @@ -156,6 +156,9 @@ bool deleteTransaction(int accountID, int transactionID); void deleteTransactions(int accountID); int RelocatePayee(mmCoreDB* core, const int destPayeeID, const int sourcePayeeID, int& changedPayees_); + int RelocateCategory(mmCoreDB* core, + const int destCatID, const int destSubCatID, const int sourceCatID, const int sourceSubCatID, + int& changedCats, int& changedSubCats); /* Query Functions */ void getExpensesIncome(const mmCoreDB* core, int accountID, double& expenses, double& income, bool ignoreDate, const wxDateTime &dtBegin, const wxDateTime &dtEnd, bool ignoreFuture = false) const; Modified: trunk/mmex/src/relocatecategorydialog.cpp =================================================================== --- trunk/mmex/src/relocatecategorydialog.cpp 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/relocatecategorydialog.cpp 2012-10-13 16:55:29 UTC (rev 3044) @@ -27,13 +27,12 @@ BEGIN_EVENT_TABLE( relocateCategoryDialog, wxDialog ) EVT_BUTTON(ID_DIALOG_CATEG_SELECT_BUTTON_SOURCE, relocateCategoryDialog::OnSelectSource) EVT_BUTTON(ID_DIALOG_CATEG_SELECT_BUTTON_DEST, relocateCategoryDialog::OnSelectDest) - EVT_BUTTON(ID_DIALOG_CATEG_RELOCATE_BUTTON_OK, relocateCategoryDialog::OnOk) + EVT_BUTTON(wxID_OK, relocateCategoryDialog::OnOk) END_EVENT_TABLE() relocateCategoryDialog::relocateCategoryDialog( ) { core_ = 0; - db_ = 0; sourceCatID_ = -1; sourceSubCatID_ = -1; @@ -45,12 +44,11 @@ } -relocateCategoryDialog::relocateCategoryDialog( mmCoreDB* core, wxSQLite3Database* db, +relocateCategoryDialog::relocateCategoryDialog( mmCoreDB* core, wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { core_ = core; - db_ = db; sourceCatID_ = -1; sourceSubCatID_ = -1; @@ -82,17 +80,12 @@ { wxSize btnSize = wxSize(180,-1); wxStaticText* headerText = new wxStaticText( this, wxID_STATIC, - _("Relocate all source categories to the destination category"), - wxDefaultPosition, wxDefaultSize, 0); + _("Relocate all source categories to the destination category")); wxStaticLine* lineTop = new wxStaticLine(this,wxID_STATIC,wxDefaultPosition, wxDefaultSize,wxLI_HORIZONTAL); - wxStaticText* staticText_1 = new wxStaticText( this, wxID_STATIC,_("Relocate:"), - wxDefaultPosition, wxDefaultSize, 0 ); - sourceBtn_ = new wxButton( this, ID_DIALOG_CATEG_SELECT_BUTTON_SOURCE,_("Source Category"), - wxDefaultPosition, btnSize, 0 ); - wxStaticText* staticText_2 = new wxStaticText( this, wxID_STATIC,_("to:"), - wxDefaultPosition, wxDefaultSize, 0 ); - destBtn_ = new wxButton( this, ID_DIALOG_CATEG_SELECT_BUTTON_DEST,_("Destination Category"), - wxDefaultPosition, btnSize, 0 ); + wxStaticText* staticText_1 = new wxStaticText( this, wxID_STATIC,_("Relocate:")); + sourceBtn_ = new wxButton( this, ID_DIALOG_CATEG_SELECT_BUTTON_SOURCE,_("Source Category")); + wxStaticText* staticText_2 = new wxStaticText( this, wxID_STATIC,_("to:")); + destBtn_ = new wxButton( this, ID_DIALOG_CATEG_SELECT_BUTTON_DEST,_("Destination Category")); wxStaticLine* lineBottom = new wxStaticLine(this,wxID_STATIC,wxDefaultPosition, wxDefaultSize,wxLI_HORIZONTAL); wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); @@ -113,8 +106,8 @@ boxSizer->Add(5,5,0,wxALIGN_CENTER_HORIZONTAL|wxALL,5); boxSizer->Add(lineBottom,0,wxGROW|wxALL,5); - wxButton* okButton = new wxButton(this,ID_DIALOG_CATEG_RELOCATE_BUTTON_OK,_("OK"),wxDefaultPosition,wxDefaultSize); - wxButton* cancelButton = new wxButton(this,wxID_CANCEL,_("Cancel"),wxDefaultPosition,wxDefaultSize); + wxButton* okButton = new wxButton(this, wxID_OK); + wxButton* cancelButton = new wxButton(this,wxID_CANCEL); cancelButton-> SetFocus () ; wxBoxSizer* buttonBoxSizer = new wxBoxSizer(wxHORIZONTAL); buttonBoxSizer->Add(okButton,0,wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL,5); @@ -128,10 +121,10 @@ if (sourceCat->ShowModal() == wxID_OK) { sourceCatID_ = sourceCat->categID_; - sourceSubCatID_ = sourceCat->subcategID_; - - sourceBtn_->SetLabel(core_->categoryList_.GetFullCategoryString(destCatID_, destSubCatID_)); + sourceSubCatID_ = sourceCat->subcategID_; + sourceBtn_->SetLabel(core_->categoryList_.GetFullCategoryString(sourceCatID_, sourceSubCatID_)); } + sourceCat->Destroy(); } void relocateCategoryDialog::OnSelectDest(wxCommandEvent& /*event*/) @@ -144,6 +137,7 @@ destBtn_->SetLabel(core_->categoryList_.GetFullCategoryString(destCatID_, destSubCatID_)); } + destCat->Destroy(); } wxString relocateCategoryDialog::updatedCategoriesCount() @@ -156,34 +150,18 @@ void relocateCategoryDialog::OnOk(wxCommandEvent& /*event*/) { - if ((sourceCatID_ > 0) && (destCatID_ > 0) ) + if ((sourceCatID_ > 0) && (destCatID_ > 0) ) { wxString msgStr = _("Please Confirm:"); - msgStr << wxT("\n\n") << _("Changing all categories of: ") << sourceBtn_->GetLabelText() << wxT("\n\n") << _("to category: ") << destBtn_->GetLabelText(); + msgStr << wxT("\n\n") << _("Changing all categories of: ") + << sourceBtn_->GetLabelText() << wxT("\n\n") << _("to category: ") << destBtn_->GetLabelText(); - int ans = wxMessageBox(msgStr,_("Category Relocation Confirmation"),wxOK|wxCANCEL|wxICON_QUESTION); + int ans = wxMessageBox(msgStr,_("Category Relocation Confirmation"), wxOK|wxCANCEL|wxICON_QUESTION); if (ans == wxOK) { - 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_); - changedCats_ = stCat.ExecuteUpdate(); - stCat.Finalize(); - - 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_); - changedSubCats_ = stSubCat.ExecuteUpdate(); - stSubCat.Finalize(); - EndModal(wxID_OK); + if (core_->bTransactionList_.RelocateCategory(core_, + destCatID_, destSubCatID_, sourceCatID_, sourceSubCatID_, changedCats_, changedSubCats_) == 0) + EndModal(wxID_OK); } } } Modified: trunk/mmex/src/relocatecategorydialog.h =================================================================== --- trunk/mmex/src/relocatecategorydialog.h 2012-10-13 09:25:56 UTC (rev 3043) +++ trunk/mmex/src/relocatecategorydialog.h 2012-10-13 16:55:29 UTC (rev 3044) @@ -38,7 +38,7 @@ public: relocateCategoryDialog(); - relocateCategoryDialog( mmCoreDB* core, wxSQLite3Database* db, + relocateCategoryDialog( mmCoreDB* core, wxWindow* parent, wxWindowID id = SYMBOL_RELOCATECATEGORYDIALOG_IDNAME, const wxString& caption = SYMBOL_RELOCATECATEGORYDIALOG_TITLE, const wxPoint& pos = SYMBOL_RELOCATECATEGORYDIALOG_POSITION, @@ -62,7 +62,6 @@ private: mmCoreDB* core_; - wxSQLite3Database* db_; int sourceCatID_; int sourceSubCatID_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |