From: <vo...@us...> - 2013-07-07 08:26:19
|
Revision: 4314 http://sourceforge.net/p/moneymanagerex/code/4314 Author: vomikan Date: 2013-07-07 08:26:13 +0000 (Sun, 07 Jul 2013) Log Message: ----------- for (const auto&... usage Modified Paths: -------------- trunk/src/import_export/qif_export.cpp trunk/src/import_export/qif_export.h Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-07-07 08:00:17 UTC (rev 4313) +++ trunk/src/import_export/qif_export.cpp 2013-07-07 08:26:13 UTC (rev 4314) @@ -52,11 +52,15 @@ accounts_type.Add(ACCOUNT_TYPE_TERM); accounts_id_ = core_->accountList_.getAccountsID(accounts_type); - for (size_t i = 0; i < accounts_id_.Count(); ++i) + for (const auto &entry : accounts_id_) { - accounts_name_.Add(core_->accountList_.GetAccountName(accounts_id_[i])); - items_index_.Add(i); + accounts_name_.Add(core_->accountList_.GetAccountName(entry)); + items_index_.Add(entry); } + + // redirect logs to text control + //logger_ = wxLog::SetActiveTarget(new wxLogTextCtrl(log_field_)); + //wxLogMessage( "This is the log window" ); } void mmQIFExportDialog::CreateControls() @@ -207,9 +211,9 @@ { bSelectedAccounts_->SetLabel("..."); } - for (size_t i = 0; i < items_index_.GetCount(); ++i) + for (const auto &entry : items_index_) { - *log_field_ << (core_->accountList_.GetAccountName(accounts_id_[items_index_[i]])); + *log_field_ << (core_->accountList_.GetAccountName(accounts_id_[entry])); *log_field_ << "\n"; } } @@ -220,12 +224,13 @@ const bool qif_csv = m_radio_box_->GetSelection() == 0; const wxString choose_ext = qif_csv ? _("QIF Files") : _("CSV Files"); - fileName = wxFileSelector(qif_csv - ? _("Choose QIF data file to Export") - : _("Choose CSV data file to Export"), - wxEmptyString, fileName, wxEmptyString, - choose_ext + (qif_csv ? " (*.qif)|*.qif;*.QIF" : " (*.csv)|*.csv;*.CSV") - , wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + fileName = wxFileSelector( + (qif_csv + ? _("Choose QIF data file to Export") + : _("Choose CSV data file to Export")) + , wxEmptyString, fileName, wxEmptyString + , choose_ext + (qif_csv ? " (*.qif)|*.qif;*.QIF" : " (*.csv)|*.csv;*.CSV") + , wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (!fileName.IsEmpty()) correctEmptyFileExt(qif_csv ? "qif":"csv" , fileName); @@ -399,21 +404,20 @@ if (exp_transactions) { wxArrayInt selected_accounts_id; - for (size_t a = 0; a < items_index_.Count() ; ++a) + for (const auto &entry : items_index_) { - selected_accounts_id.Add(accounts_id_[items_index_[a]]); + selected_accounts_id.Add(accounts_id_[entry]); } - for (size_t a = 0; a < selected_accounts_id.Count(); ++a) + for (const auto &entry : selected_accounts_id) { - int fromAccountID = selected_accounts_id[a]; - wxString acctName = core_->accountList_.GetAccountName(fromAccountID); + wxString acctName = core_->accountList_.GetAccountName(entry); - buffer << writeAccHeader(fromAccountID, qif_csv); + buffer << writeAccHeader(entry, qif_csv); for (const auto& pBankTransaction : core_->bTransactionList_.transactions_) { - if ((pBankTransaction->accountID_ != fromAccountID) && (pBankTransaction->toAccountID_ != fromAccountID)) + if ((pBankTransaction->accountID_ != entry) && (pBankTransaction->toAccountID_ != entry)) continue; if (dateFromCheckBox_->GetValue() && pBankTransaction->date_ < fromDateCtrl_->GetValue() ) @@ -453,12 +457,12 @@ toamount = /*adjustedExportAmount(amtSeparator,*/ wxString()<<tovalue/*)*/; wxString amount_temp = amount; - if (tAccountID == fromAccountID) { + if (tAccountID == entry) { categ = wxString::Format("[%s]", fromAccount); amount = toamount; toamount = amount_temp; toamount.Prepend("-"); - } else if (fAccountID == fromAccountID) { + } else if (fAccountID == entry) { categ = wxString::Format("[%s]", toAccount); amount.Prepend("-"); } @@ -555,5 +559,8 @@ const wxString msg = wxString::Format(sErrorMsg, numRecords); wxMessageDialog msgDlg(parent_, wxGetTranslation(msg) , _("Export to QIF"), wxOK|wxICON_INFORMATION); + + //FIXME: Can't close this dialog msgDlg.ShowModal(); + } Modified: trunk/src/import_export/qif_export.h =================================================================== --- trunk/src/import_export/qif_export.h 2013-07-07 08:00:17 UTC (rev 4313) +++ trunk/src/import_export/qif_export.h 2013-07-07 08:26:13 UTC (rev 4314) @@ -67,6 +67,7 @@ wxButton* button_search_; wxTextCtrl* m_text_ctrl_; wxTextCtrl* log_field_; + //wxLog *logger_; wxRadioBox* m_radio_box_; wxString delimit_; wxArrayString accounts_name_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-11 12:45:32
|
Revision: 4350 http://sourceforge.net/p/moneymanagerex/code/4350 Author: vomikan Date: 2013-07-11 12:45:28 +0000 (Thu, 11 Jul 2013) Log Message: ----------- Empty classes for export Added Paths: ----------- trunk/src/import_export/export.cpp trunk/src/import_export/export.h Added: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp (rev 0) +++ trunk/src/import_export/export.cpp 2013-07-11 12:45:28 UTC (rev 4350) @@ -0,0 +1,19 @@ +/******************************************************* + Copyright (C) 2013 Nikolay + ********************************************************/ + +#include "export.h" + +mmExportTransaction::mmExportTransaction(mmCoreDB* core, mmBankTransaction* pBankTransaction) + : mmPrintableBase(core) + , pBankTransaction_(pBankTransaction) +{} + +mmExportTransaction::~mmExportTransaction() +{}; + +wxString mmExportTransaction::getTransactionQIF() +{ + core_->currencyList_.LoadBaseCurrencySettings(); + return "test"; +} Added: trunk/src/import_export/export.h =================================================================== --- trunk/src/import_export/export.h (rev 0) +++ trunk/src/import_export/export.h 2013-07-11 12:45:28 UTC (rev 4350) @@ -0,0 +1,34 @@ +/******************************************************* + Copyright (C) 2013 Nikolay + ********************************************************/ + +#ifndef _MM_EX_EXPORT_H_ +#define _MM_EX_EXPORT_H_ + +#include "../reports/reportbase.h" + +class mmExportTransaction : public mmPrintableBase +{ + +public: + ~mmExportTransaction(); + mmExportTransaction(mmCoreDB* core + , mmBankTransaction* pBankTransaction); + + wxString getTransactionQIF(); + +protected: + wxString data_; + mmBankTransaction* pBankTransaction_; + mmCoreDB* core_; +}; + +class mmExportTransactionQIF: public mmExportTransaction +{ +public: + mmExportTransactionQIF(mmCoreDB* core, mmBankTransaction* pBankTransaction) + : mmExportTransaction(core, pBankTransaction) + {} +}; + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-11 15:54:23
|
Revision: 4356 http://sourceforge.net/p/moneymanagerex/code/4356 Author: vomikan Date: 2013-07-11 15:54:19 +0000 (Thu, 11 Jul 2013) Log Message: ----------- export classes usage Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/export.h trunk/src/import_export/qif_export.cpp Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2013-07-11 14:19:38 UTC (rev 4355) +++ trunk/src/import_export/export.cpp 2013-07-11 15:54:19 UTC (rev 4356) @@ -5,9 +5,10 @@ #include "export.h" #include "../constants.h" #include "../util.h" +#include "model/Model_Infotable.h" mmExportTransaction::mmExportTransaction(mmCoreDB* core, mmBankTransaction* pBankTransaction) - : mmPrintableBase(core) + : mmExportBase(core) , pBankTransaction_(pBankTransaction) {} @@ -72,3 +73,59 @@ return buffer; } +wxString mmExportTransaction::getTransactionCSV() +{ + mmBankTransaction* &transaction = pBankTransaction_; + wxString delimit = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); + wxString buffer = ""; + wxString acctName = core_->accountList_.GetAccountName(transaction->accountID_); + int trans_id = transaction->transactionID(); + wxString categ = transaction->fullCatStr_; + wxString payee = transaction->payeeStr_; + wxString transNum = transaction->transNum_; + wxString notes = (transaction->notes_); + notes.Replace("''", "'"); + notes.Replace("\n", " "); + + if (transaction->transType_ == TRANS_TYPE_TRANSFER_STR) + { + categ = wxString::Format("[%s]", transaction->payeeStr_); + payee = ""; + //Transaction number used to make transaction unique + // to proper merge transfer records + if (transNum.IsEmpty() && notes.IsEmpty()) + transNum = wxString::Format("#%i", trans_id); + } + + if (transaction->categID_ == -1) + { + mmSplitTransactionEntries* splits = transaction->splitEntries_; + transaction->getSplitTransactions(splits); + + for (const auto &split_entry : splits->entries_) + { + double value = split_entry->splitAmount_; + if (transaction->transType_ == "Withdrawal") + value = -value; + const wxString split_amount = wxString()<<value; + + const wxString split_categ = core_->categoryList_.GetFullCategoryString( + split_entry->categID_, split_entry->subCategID_); + + buffer << trans_id << delimit + << inQuotes(acctName, delimit) << delimit + << inQuotes(mmGetDateForDisplay(transaction->date_), delimit) << delimit + << inQuotes(payee, delimit) << delimit + << transaction->status_ << delimit + << transaction->transType_ << delimit + << inQuotes(split_categ, delimit) << delimit + << inQuotes(split_amount, delimit) << delimit + << "" << delimit + << inQuotes(notes, delimit) + << "\n"; + } + + } + return buffer; + +} Modified: trunk/src/import_export/export.h =================================================================== --- trunk/src/import_export/export.h 2013-07-11 14:19:38 UTC (rev 4355) +++ trunk/src/import_export/export.h 2013-07-11 15:54:19 UTC (rev 4356) @@ -5,17 +5,30 @@ #ifndef _MM_EX_EXPORT_H_ #define _MM_EX_EXPORT_H_ -#include "../reports/reportbase.h" +#include "../mmcoredb.h" +#include "../mmOption.h" -class mmExportTransaction : public mmPrintableBase +class mmExportBase { public: + mmExportBase(mmCoreDB* core): core_(core) {} + virtual wxString version() { return "$Rev: 4335 $"; } + +protected: + const mmCoreDB* core_; +}; + +class mmExportTransaction : public mmExportBase +{ + +public: ~mmExportTransaction(); mmExportTransaction(mmCoreDB* core , mmBankTransaction* pBankTransaction); wxString getTransactionQIF(); + wxString getTransactionCSV(); protected: wxString data_; @@ -31,4 +44,12 @@ {} }; +class mmExportTransactionCSV: public mmExportTransaction +{ +public: + mmExportTransactionCSV(mmCoreDB* core, mmBankTransaction* pBankTransaction) + : mmExportTransaction(core, pBankTransaction) + {} +}; + #endif Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-07-11 14:19:38 UTC (rev 4355) +++ trunk/src/import_export/qif_export.cpp 2013-07-11 15:54:19 UTC (rev 4356) @@ -4,6 +4,7 @@ #include "qif_export.h" #include "../util.h" #include "../paths.h" +#include "export.h" #include "model/Model_Infotable.h" IMPLEMENT_DYNAMIC_CLASS( mmQIFExportDialog, wxDialog ) @@ -400,7 +401,6 @@ const bool write_to_file = toFileCheckBox_->GetValue(); wxString sErrorMsg; wxString buffer; - delimit_ = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); long numRecords = 0; //Export categories @@ -416,7 +416,6 @@ if (exp_transactions) { - for (const auto &entry : items_index_) { const wxString acctName = core_->accountList_.GetAccountName(entry); @@ -433,98 +432,20 @@ if (dateToCheckBox_->IsChecked() && transaction->date_ > toDateCtrl_->GetValue() ) continue; - int trans_id = transaction->transactionID(); - wxString categ = transaction->fullCatStr_; - wxString payee = transaction->payeeStr_; - wxString transNum = transaction->transNum_; - wxString notes = (transaction->notes_); - notes.Replace("''", "'"); - notes.Replace("\n", " "); + if (transferTrxId.Index(transaction->transactionID()) == wxNOT_FOUND) + numRecords++; - if (transferTrxId.Index(trans_id) == wxNOT_FOUND) - numRecords++; if (transaction->transType_ == TRANS_TYPE_TRANSFER_STR) { - categ = wxString::Format("[%s]", transaction->payeeStr_); - payee = ""; - if (items_index_.Index(transaction->toAccountID_) == wxNOT_FOUND) - transferTrxId.Add(trans_id); - - //Transaction number used to make transaction unique - // to proper merge transfer records - if (transNum.IsEmpty() && notes.IsEmpty()) - transNum = wxString::Format("#%i", trans_id); + transferTrxId.Add(transaction->transactionID()); } + mmExportTransaction data(core_, transaction); if (qif_csv) - { - wxString transaction_buffer = ""; - transaction_buffer << "D" << mmGetDateForDisplay(transaction->date_) << "\n"; - transaction_buffer << "T" << transaction->value(entry) << "\n"; - if (!payee.IsEmpty()) - transaction_buffer << "P" << payee << "\n"; - if (!transNum.IsEmpty()) - transaction_buffer << "N" << transNum << "\n"; - if (!categ.IsEmpty()) - transaction_buffer << "L" << categ << "\n"; - if (!notes.IsEmpty()) - transaction_buffer << "M" << notes << "\n"; - buffer << transaction_buffer; - } - - //if categ id is empty that mean this is split transaction - if (transaction->categID_ == -1) - { - mmSplitTransactionEntries* splits = transaction->splitEntries_; - transaction->getSplitTransactions(splits); - - for (const auto &split_entry : splits->entries_) - { - double value = split_entry->splitAmount_; - if (transaction->transType_ == "Withdrawal") - value = -value; - const wxString split_amount = wxString()<<value; - - const wxString split_categ = core_->categoryList_.GetFullCategoryString( - split_entry->categID_, split_entry->subCategID_); - if (qif_csv) - { - buffer << "S" << split_categ << "\n" - << "$" << split_amount << "\n"; - } - else - { - buffer << trans_id << delimit_ - << inQuotes(acctName, delimit_) << delimit_ - << inQuotes(mmGetDateForDisplay(transaction->date_), delimit_) << delimit_ - << inQuotes(payee, delimit_) << delimit_ - << transaction->status_ << delimit_ - << transaction->transType_ << delimit_ - << inQuotes(split_categ, delimit_) << delimit_ - << inQuotes(split_amount, delimit_) << delimit_ - << "" << delimit_ - << inQuotes(notes, delimit_) - << "\n"; - } - } - } + buffer << data.getTransactionQIF(); else - { - if (!qif_csv) - buffer << trans_id << delimit_ - << inQuotes(acctName, delimit_) << delimit_ - << inQuotes(mmGetDateForDisplay(transaction->date_), delimit_) << delimit_ - << inQuotes(payee, delimit_) << delimit_ - << transaction->status_ << delimit_ - << transaction->transType_ << delimit_ - << inQuotes(categ, delimit_) << delimit_ - << inQuotes(wxString()<<transaction->value(entry), delimit_) << delimit_ - << inQuotes(wxString()<<transaction->toAmt_, delimit_) << delimit_ - << inQuotes(notes, delimit_) - << "\n"; - } - buffer << "^" << "\n"; + buffer << data.getTransactionCSV(); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-11 21:50:39
|
Revision: 4358 http://sourceforge.net/p/moneymanagerex/code/4358 Author: vomikan Date: 2013-07-11 21:50:36 +0000 (Thu, 11 Jul 2013) Log Message: ----------- more slasses usage for export Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/export.h trunk/src/import_export/qif_export.cpp trunk/src/import_export/qif_export.h Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2013-07-11 17:38:16 UTC (rev 4357) +++ trunk/src/import_export/export.cpp 2013-07-11 21:50:36 UTC (rev 4358) @@ -6,14 +6,29 @@ #include "../constants.h" #include "../util.h" #include "model/Model_Infotable.h" + +mmExportTransaction::mmExportTransaction(mmCoreDB* core) + : mmExportBase(core) + , pBankTransaction_(0) + , accountID_(-1) +{} mmExportTransaction::mmExportTransaction(mmCoreDB* core, mmBankTransaction* pBankTransaction) : mmExportBase(core) - , pBankTransaction_(pBankTransaction) + , pBankTransaction_(pBankTransaction) + , accountID_(pBankTransaction->accountID_) {} + +mmExportTransaction::mmExportTransaction(mmCoreDB* core, int accountID) + : mmExportBase(core) + , pBankTransaction_(0) + , accountID_(accountID) +{ + if (!core) wxASSERT(false); +} mmExportTransaction::~mmExportTransaction() -{}; +{} wxString mmExportTransaction::getTransactionQIF() { @@ -129,3 +144,87 @@ return buffer; } + +wxString mmExportTransaction::getAccountHeaderQIF() +{ + wxString buffer = ""; + const wxString sAccName = core_->accountList_.GetAccountName(accountID_); + mmAccount* pAccount = core_->accountList_.GetAccountSharedPtr(accountID_); + wxASSERT(pAccount); + mmCurrency* pCurrency = pAccount->currency_; + wxASSERT(pCurrency); + double dInitBalance = pAccount->initialBalance_; + const wxString sInitBalance = wxString::Format("%f", dInitBalance); + const wxString sCurrencyCode = "[" + pCurrency->currencySymbol_ + "]"; + + buffer = wxString("!Account") << "\n" + << "N" << sAccName << "\n" + << "TBank" << "\n" + << "D" << sCurrencyCode << "\n" + << (dInitBalance != 0 ? wxString("$") << sInitBalance << "\n" : "") + << "^" << "\n" + << "!Type:Cash" << "\n"; + + return buffer; +} + +wxString mmExportTransaction::getCategoriesQIF() +{ + wxString buffer_qif = ""; + + buffer_qif << "!Type:Cat" << "\n"; + for (const auto& category: core_->categoryList_.entries_) + { + const wxString categ_name = category->categName_; + bool bIncome = false; + core_->bTransactionList_.IsCategoryUsed(category->categID_ + , -1, bIncome, false); + buffer_qif << "N" << categ_name << "\n" + << (bIncome ? "I" : "E") << "\n" + << "^" << "\n"; + + for (const auto& sub_category: category->children_) + { + bIncome = false; + bool bSubcateg = sub_category->categID_ != -1; + core_->bTransactionList_.IsCategoryUsed(category->categID_ + , sub_category->categID_, bIncome, false); + wxString full_categ_name = wxString() + << categ_name << (bSubcateg ? wxString()<<":" : wxString()<<"") + << sub_category->categName_; + buffer_qif << "N" << full_categ_name << "\n" + << (bIncome ? "I" : "E") << "\n" + << "^" << "\n"; + } + } + return buffer_qif; + +} + +wxString mmExportTransaction::getCategoriesCSV() +{ + wxString buffer_csv =""; + wxString delimit = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); + + for (const auto& category: core_->categoryList_.entries_) + { + const wxString categ_name = category->categName_; + bool bIncome = false; + core_->bTransactionList_.IsCategoryUsed(category->categID_ + , -1, bIncome, false); + buffer_csv << categ_name << delimit << "\n"; + + for (const auto& sub_category: category->children_) + { + bIncome = false; + core_->bTransactionList_.IsCategoryUsed(category->categID_ + , sub_category->categID_, bIncome, false); + wxString full_categ_name = wxString() + << categ_name << delimit + << sub_category->categName_; + buffer_csv << full_categ_name << "\n"; + } + } + return buffer_csv; +} + Modified: trunk/src/import_export/export.h =================================================================== --- trunk/src/import_export/export.h 2013-07-11 17:38:16 UTC (rev 4357) +++ trunk/src/import_export/export.h 2013-07-11 21:50:36 UTC (rev 4358) @@ -13,7 +13,6 @@ public: mmExportBase(mmCoreDB* core): core_(core) {} - virtual wxString version() { return "$Rev: 4335 $"; } protected: const mmCoreDB* core_; @@ -24,32 +23,20 @@ public: ~mmExportTransaction(); - mmExportTransaction(mmCoreDB* core - , mmBankTransaction* pBankTransaction); + mmExportTransaction(mmCoreDB* core); + mmExportTransaction(mmCoreDB* core , int accountID); + mmExportTransaction(mmCoreDB* core , mmBankTransaction* pBankTransaction); wxString getTransactionQIF(); wxString getTransactionCSV(); + wxString getAccountHeaderQIF(); + wxString getCategoriesQIF(); + wxString getCategoriesCSV(); protected: - wxString data_; mmBankTransaction* pBankTransaction_; - mmCoreDB* core_; + int accountID_; }; -class mmExportTransactionQIF: public mmExportTransaction -{ -public: - mmExportTransactionQIF(mmCoreDB* core, mmBankTransaction* pBankTransaction) - : mmExportTransaction(core, pBankTransaction) - {} -}; -class mmExportTransactionCSV: public mmExportTransaction -{ -public: - mmExportTransactionCSV(mmCoreDB* core, mmBankTransaction* pBankTransaction) - : mmExportTransaction(core, pBankTransaction) - {} -}; - #endif Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-07-11 17:38:16 UTC (rev 4357) +++ trunk/src/import_export/qif_export.cpp 2013-07-11 21:50:36 UTC (rev 4358) @@ -333,66 +333,6 @@ this->GetEventHandler()->AddPendingEvent(evt); } -wxString mmQIFExportDialog::writeAccHeader(int accountID, bool qif) -{ - wxString buffer = ""; - if (qif) - { - mmAccount* pAccount = core_->accountList_.GetAccountSharedPtr(accountID); - wxASSERT(pAccount); - mmCurrency* pCurrency = pAccount->currency_; - wxASSERT(pCurrency); - - const wxString sAccName = core_->accountList_.GetAccountName(accountID); - double dInitBalance = pAccount->initialBalance_; - const wxString sInitBalance = wxString::Format("%f", dInitBalance); - const wxString sCurrencyCode = "[" + pCurrency->currencySymbol_ + "]"; - - buffer = wxString("!Account") << "\n" - << "N" << sAccName << "\n" - << "TBank" << "\n" - << "D" << sCurrencyCode << "\n" - << (dInitBalance != 0 ? wxString("$") << sInitBalance << "\n" : "") - << "^" << "\n" - << "!Type:Cash" << "\n"; - } - return buffer; -} - -wxString mmQIFExportDialog::exportCategories(bool qif) -{ - wxString buffer_qif, buffer_csv; - - buffer_qif << "!Type:Cat" << "\n"; - for (const auto& category: core_->categoryList_.entries_) - { - const wxString categ_name = category->categName_; - bool bIncome = false; - core_->bTransactionList_.IsCategoryUsed(category->categID_ - , -1, bIncome, false); - buffer_qif << "N" << categ_name << "\n" - << (bIncome ? "I" : "E") << "\n" - << "^" << "\n"; - buffer_csv << categ_name << delimit_ << "\n"; - - for (const auto& sub_category: category->children_) - { - bIncome = false; - bool bSubcateg = sub_category->categID_ != -1; - core_->bTransactionList_.IsCategoryUsed(category->categID_ - , sub_category->categID_, bIncome, false); - wxString full_categ_name = wxString() - << categ_name << (qif ? (bSubcateg ? wxString()<<":" : wxString()<<"") : delimit_) - << sub_category->categName_; - buffer_qif << "N" << full_categ_name << "\n" - << (bIncome ? "I" : "E") << "\n" - << "^" << "\n"; - buffer_csv << full_categ_name << "\n"; - } - } - return qif ? buffer_qif : buffer_csv; -} - void mmQIFExportDialog::mmExportQIF() { const bool qif_csv = m_radio_box_->GetSelection() == 0; @@ -406,7 +346,11 @@ //Export categories if (exp_categ) { - buffer << exportCategories(qif_csv); + mmExportTransaction categories(core_); + if (qif_csv) + buffer << categories.getCategoriesQIF(); + else + buffer << categories.getCategoriesCSV(); sErrorMsg << _("Categories exported") << "\n"; } @@ -418,8 +362,9 @@ { for (const auto &entry : items_index_) { - const wxString acctName = core_->accountList_.GetAccountName(entry); - buffer << writeAccHeader(entry, qif_csv); + mmExportTransaction header(core_, entry); + if (qif_csv) + buffer << header.getAccountHeaderQIF(); double account_balance = 0.0, reconciled_balance = 0.0; core_->bTransactionList_.LoadAccountTransactions(entry, account_balance, reconciled_balance); Modified: trunk/src/import_export/qif_export.h =================================================================== --- trunk/src/import_export/qif_export.h 2013-07-11 17:38:16 UTC (rev 4357) +++ trunk/src/import_export/qif_export.h 2013-07-11 21:50:36 UTC (rev 4358) @@ -73,6 +73,4 @@ wxArrayString accounts_name_; void mmExportQIF(wxWindow* parent_, mmCoreDB* core); - wxString writeAccHeader(int accountID, bool qif); - wxString exportCategories(bool qif); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-12 12:06:46
|
Revision: 4365 http://sourceforge.net/p/moneymanagerex/code/4365 Author: vomikan Date: 2013-07-12 12:06:42 +0000 (Fri, 12 Jul 2013) Log Message: ----------- added functionality for export transfer transaction second part if to account does not selected (not finished) Modified Paths: -------------- trunk/src/import_export/qif_export.cpp trunk/src/import_export/qif_export.h Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-07-12 09:40:21 UTC (rev 4364) +++ trunk/src/import_export/qif_export.cpp 2013-07-12 12:06:42 UTC (rev 4365) @@ -58,7 +58,7 @@ for (const auto &entry : accounts_id_) { accounts_name_.Add(core_->accountList_.GetAccountName(entry)); - items_index_.Add(entry); + selected_accounts_id_.Add(entry); } // redirect logs to text control @@ -201,7 +201,7 @@ void mmQIFExportDialog::OnAccountsButton(wxCommandEvent& /*event*/) { - items_index_.clear(); + selected_accounts_id_.clear(); bSelectedAccounts_->UnsetToolTip(); wxMultiChoiceDialog s_acc(this, _("Choose Account to Export from:") , _("QIF Export"), accounts_name_); @@ -216,23 +216,23 @@ int index = entry; const wxString accounts_name = accounts_name_[index]; int account_id = core_->accountList_.GetAccountId(accounts_name); - items_index_.Add(account_id); + selected_accounts_id_.Add(account_id); baloon += accounts_name + "\n"; } } *log_field_ << baloon; - if (items_index_.GetCount() == 0) + if (selected_accounts_id_.GetCount() == 0) { fillControls(); } - else if (items_index_.GetCount() == 1) + else if (selected_accounts_id_.GetCount() == 1) { int account_id = accounts_id_[selected_items[0]]; const wxString account_name = core_->accountList_.GetAccountName(account_id); bSelectedAccounts_->SetLabel(account_name); } - else if (items_index_.GetCount() > 1) + else if (selected_accounts_id_.GetCount() > 1) { bSelectedAccounts_->SetLabel("..."); bSelectedAccounts_->SetToolTip(baloon); @@ -267,7 +267,7 @@ { sErrorMsg =_("No Account available for export"); } - else if (items_index_.Count() < 1 && accountsCheckBox_->GetValue()) + else if (selected_accounts_id_.Count() < 1 && accountsCheckBox_->GetValue()) { sErrorMsg =_("No Accounts selected for export"); } @@ -345,11 +345,11 @@ { const bool qif_csv = m_radio_box_->GetSelection() == 0; const bool exp_categ = cCategs_->GetValue(); - const bool exp_transactions = (accountsCheckBox_->GetValue() && items_index_.GetCount()>0); + const bool exp_transactions = (accountsCheckBox_->GetValue() && selected_accounts_id_.GetCount()>0); const bool write_to_file = toFileCheckBox_->GetValue(); wxString sErrorMsg; wxString buffer; - long numRecords = 0; + int numRecords = 0; //Export categories if (exp_categ) @@ -362,13 +362,12 @@ sErrorMsg << _("Categories exported") << "\n"; } - //Export transactions - numRecords = 0; - wxArrayInt transferTrxId; - if (exp_transactions) { - for (const auto &entry : items_index_) + /* Array with transfer transactions */ + std::map <int, wxString> transferTransactions; + + for (const auto &entry : selected_accounts_id_) { mmExportTransaction header(core_, entry); if (qif_csv) @@ -385,15 +384,19 @@ if (dateToCheckBox_->IsChecked() && transaction->date_ > toDateCtrl_->GetValue() ) continue; - if (transferTrxId.Index(transaction->transactionID()) == wxNOT_FOUND) - numRecords++; - if (transaction->transType_ == TRANS_TYPE_TRANSFER_STR) { - if (items_index_.Index(transaction->toAccountID_) == wxNOT_FOUND) - transferTrxId.Add(transaction->transactionID()); + int index = transaction->arrow_ == "> " ? transaction->toAccountID_ : transaction->accountID_; + if (selected_accounts_id_.Index(index) == wxNOT_FOUND) + { + //TODO: get second part of transfer transaction + wxString second_part = ""; + transferTransactions[index] += second_part; + } } + if (transaction->arrow_ != "> ") numRecords++; + mmExportTransaction data(core_, transaction); if (qif_csv) buffer << data.getTransactionQIF(); @@ -401,6 +404,13 @@ buffer << data.getTransactionCSV(); } } + //Export second part of transfer transactions + for (const auto &entry : transferTransactions) + { + mmExportTransaction header(core_, entry.first); + buffer << header.getAccountHeaderQIF(); + buffer << entry.second; + } } if (write_to_file) Modified: trunk/src/import_export/qif_export.h =================================================================== --- trunk/src/import_export/qif_export.h 2013-07-12 09:40:21 UTC (rev 4364) +++ trunk/src/import_export/qif_export.h 2013-07-12 12:06:42 UTC (rev 4365) @@ -53,7 +53,8 @@ mmCoreDB* core_; wxWindow* parent_; wxArrayInt accounts_id_; - wxArrayInt items_index_; + /* Selected accounts id */ + wxArrayInt selected_accounts_id_; wxCheckBox* cCategs_; wxCheckBox* accountsCheckBox_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-12 14:52:34
|
Revision: 4366 http://sourceforge.net/p/moneymanagerex/code/4366 Author: vomikan Date: 2013-07-12 14:52:30 +0000 (Fri, 12 Jul 2013) Log Message: ----------- QIF transfer transactions export completed Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/export.h trunk/src/import_export/qif_export.cpp Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2013-07-12 12:06:42 UTC (rev 4365) +++ trunk/src/import_export/export.cpp 2013-07-12 14:52:30 UTC (rev 4366) @@ -30,7 +30,7 @@ mmExportTransaction::~mmExportTransaction() {} -wxString mmExportTransaction::getTransactionQIF() +wxString mmExportTransaction::getTransactionQIF(bool from) { mmBankTransaction* &transaction = pBankTransaction_; wxString buffer = ""; @@ -38,6 +38,7 @@ int account_id = transaction->accountID_; wxString categ = transaction->fullCatStr_; wxString payee = transaction->payeeStr_; + wxString toAccountName = core_->accountList_.GetAccountName(transaction->toAccountID_); wxString transNum = transaction->transNum_; wxString notes = (transaction->notes_); notes.Replace("''", "'"); @@ -45,7 +46,7 @@ if (transaction->transType_ == TRANS_TYPE_TRANSFER_STR) { - categ = wxString::Format("[%s]", transaction->payeeStr_); + categ = wxString::Format("[%s]", from ? payee : toAccountName); payee = ""; //Transaction number used to make transaction unique @@ -55,7 +56,7 @@ } buffer << "D" << mmGetDateForDisplay(transaction->date_) << "\n"; - buffer << "T" << transaction->value(account_id) << "\n"; + buffer << "T" << transaction->value(!from ? account_id : transaction->toAccountID_) << "\n"; if (!payee.IsEmpty()) buffer << "P" << payee << "\n"; if (!transNum.IsEmpty()) @@ -88,7 +89,7 @@ return buffer; } -wxString mmExportTransaction::getTransactionCSV() +wxString mmExportTransaction::getTransactionCSV(bool from) { mmBankTransaction* &transaction = pBankTransaction_; wxString delimit = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); Modified: trunk/src/import_export/export.h =================================================================== --- trunk/src/import_export/export.h 2013-07-12 12:06:42 UTC (rev 4365) +++ trunk/src/import_export/export.h 2013-07-12 14:52:30 UTC (rev 4366) @@ -27,8 +27,8 @@ mmExportTransaction(mmCoreDB* core , int accountID); mmExportTransaction(mmCoreDB* core , mmBankTransaction* pBankTransaction); - wxString getTransactionQIF(); - wxString getTransactionCSV(); + wxString getTransactionQIF(bool from = false); + wxString getTransactionCSV(bool from = false); wxString getAccountHeaderQIF(); wxString getCategoriesQIF(); wxString getCategoriesCSV(); Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-07-12 12:06:42 UTC (rev 4365) +++ trunk/src/import_export/qif_export.cpp 2013-07-12 14:52:30 UTC (rev 4366) @@ -384,6 +384,14 @@ if (dateToCheckBox_->IsChecked() && transaction->date_ > toDateCtrl_->GetValue() ) continue; + if (transaction->arrow_ != "< ") numRecords++; + + mmExportTransaction data(core_, transaction); + if (qif_csv) + buffer << data.getTransactionQIF(); + else + buffer << data.getTransactionCSV(); + if (transaction->transType_ == TRANS_TYPE_TRANSFER_STR) { int index = transaction->arrow_ == "> " ? transaction->toAccountID_ : transaction->accountID_; @@ -391,17 +399,14 @@ { //TODO: get second part of transfer transaction wxString second_part = ""; + if (qif_csv) + second_part = data.getTransactionQIF(true); + else + second_part = data.getTransactionCSV(true); transferTransactions[index] += second_part; } } - - if (transaction->arrow_ != "> ") numRecords++; - - mmExportTransaction data(core_, transaction); - if (qif_csv) - buffer << data.getTransactionQIF(); - else - buffer << data.getTransactionCSV(); + // } } //Export second part of transfer transactions This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-13 06:43:53
|
Revision: 4369 http://sourceforge.net/p/moneymanagerex/code/4369 Author: vomikan Date: 2013-07-13 06:43:50 +0000 (Sat, 13 Jul 2013) Log Message: ----------- csv export update Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/qif_export.cpp Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2013-07-13 01:17:06 UTC (rev 4368) +++ trunk/src/import_export/export.cpp 2013-07-13 06:43:50 UTC (rev 4369) @@ -36,9 +36,9 @@ wxString buffer = ""; int trans_id = transaction->transactionID(); int account_id = transaction->accountID_; + wxString accountName = core_->accountList_.GetAccountName(account_id); wxString categ = transaction->fullCatStr_; wxString payee = transaction->payeeStr_; - wxString accountName = core_->accountList_.GetAccountName(transaction->accountID_); wxString transNum = transaction->transNum_; wxString notes = (transaction->notes_); notes.Replace("''", "'"); @@ -94,7 +94,8 @@ mmBankTransaction* &transaction = pBankTransaction_; wxString delimit = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); wxString buffer = ""; - wxString acctName = core_->accountList_.GetAccountName(transaction->accountID_); + int account_id = transaction->accountID_; + wxString accountName = core_->accountList_.GetAccountName(account_id); int trans_id = transaction->transactionID(); wxString categ = transaction->fullCatStr_; wxString payee = transaction->payeeStr_; @@ -105,7 +106,7 @@ if (transaction->transType_ == TRANS_TYPE_TRANSFER_STR) { - categ = wxString::Format("[%s]", transaction->payeeStr_); + categ = wxString::Format("[%s]", from ? accountName : payee); payee = ""; //Transaction number used to make transaction unique // to proper merge transfer records @@ -129,7 +130,7 @@ split_entry->categID_, split_entry->subCategID_); buffer << trans_id << delimit - << inQuotes(acctName, delimit) << delimit + << inQuotes(accountName, delimit) << delimit << inQuotes(mmGetDateForDisplay(transaction->date_), delimit) << delimit << inQuotes(payee, delimit) << delimit << transaction->status_ << delimit @@ -142,6 +143,20 @@ } } + else + { + buffer << trans_id << delimit + << inQuotes(accountName, delimit) << delimit + << inQuotes(mmGetDateForDisplay(transaction->date_), delimit) << delimit + << inQuotes(payee, delimit) << delimit + << transaction->status_ << delimit + << transaction->transType_ << delimit + << inQuotes(categ, delimit) << delimit + << transaction->value(!from ? account_id : transaction->toAccountID_) << delimit + << "" << delimit + << inQuotes(notes, delimit) + << "\n"; + } return buffer; } Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-07-13 01:17:06 UTC (rev 4368) +++ trunk/src/import_export/qif_export.cpp 2013-07-13 06:43:50 UTC (rev 4369) @@ -413,7 +413,8 @@ for (const auto &entry : transferTransactions) { mmExportTransaction header(core_, entry.first); - buffer << header.getAccountHeaderQIF(); + if (qif_csv) + buffer << header.getAccountHeaderQIF(); buffer << entry.second; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gua...@us...> - 2013-07-23 05:09:32
|
Revision: 4402 http://sourceforge.net/p/moneymanagerex/code/4402 Author: guanlisheng Date: 2013-07-23 05:09:30 +0000 (Tue, 23 Jul 2013) Log Message: ----------- include once Modified Paths: -------------- trunk/src/import_export/qif_export.h trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_export.h =================================================================== --- trunk/src/import_export/qif_export.h 2013-07-21 04:16:53 UTC (rev 4401) +++ trunk/src/import_export/qif_export.h 2013-07-23 05:09:30 UTC (rev 4402) @@ -1,8 +1,9 @@ /******************************************************* Copyright (C) 2012 Nikolay ********************************************************/ +#ifndef QIF_EXPORT_H +#define QIF_EXPORT_H - #define SYMBOL_QIFDIALOG_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX #define SYMBOL_QIFDIALOG_TITLE _("QIF Export") #define SYMBOL_QIFDIALOG_IDNAME wxID_HIGHEST+1 @@ -75,3 +76,4 @@ void mmExportQIF(wxWindow* parent_, mmCoreDB* core); }; +#endif // Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-07-21 04:16:53 UTC (rev 4401) +++ trunk/src/import_export/qif_import.h 2013-07-23 05:09:30 UTC (rev 4402) @@ -1,3 +1,7 @@ + +#ifndef QIF_IMPORT_H +#define QIF_IMPORT_H + #define SYMBOL_QIFIMPORT_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX #define SYMBOL_QIFIMPORT_TITLE _("QIF Import") #define SYMBOL_QIFIMPORT_IDNAME wxID_HIGHEST+1 @@ -78,4 +82,4 @@ wxBitmapButton* bbAccounts_; int last_imported_acc_id_; }; - +#endif // This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-07-28 13:34:10
|
Revision: 4432 http://sourceforge.net/p/moneymanagerex/code/4432 Author: vomikan Date: 2013-07-28 13:34:06 +0000 (Sun, 28 Jul 2013) Log Message: ----------- New UI (not finished yet) Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-07-28 12:08:25 UTC (rev 4431) +++ trunk/src/import_export/qif_import.cpp 2013-07-28 13:34:06 UTC (rev 4432) @@ -108,6 +108,7 @@ EVT_CHECKBOX(wxID_ANY, mmQIFImportDialog::OnCheckboxClick ) EVT_BUTTON(wxID_OK, mmQIFImportDialog::OnOk) EVT_BUTTON(wxID_CANCEL, mmQIFImportDialog::OnCancel) + EVT_BUTTON(wxID_OPEN, mmQIFImportDialog::OnTest) EVT_CLOSE(mmQIFImportDialog::OnQuit) END_EVENT_TABLE() @@ -130,6 +131,14 @@ SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); wxDialog::Create( parent, id, caption, pos, size, style ); + ColName_[COL_DATE] = _("Date"); + ColName_[COL_NUMBER] = _("Number"); + ColName_[COL_PAYEE] = _("Payee"); + ColName_[COL_STATUS] = _("Status"); + ColName_[COL_CATEGORY] = _("Category"); + ColName_[COL_VALUE] = _("Value"); + ColName_[COL_NOTES] = _("Notes"); + CreateControls(); GetSizer()->Fit(this); GetSizer()->SetSizeHints(this); @@ -150,7 +159,7 @@ wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); this->SetSizer(main_sizer); - wxBoxSizer* box_sizer1 = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* left_sizer = new wxBoxSizer(wxVERTICAL); wxFlexGridSizer* flex_sizer = new wxFlexGridSizer(0, 3, 0, 0); //flex_sizer->AddGrowableCol(1); @@ -169,7 +178,7 @@ flex_sizer->Add(button_search_, flags); flex_sizer->Add(bbFile_, flags); main_sizer->Add(file_name_ctrl_, 0, wxALL|wxGROW, 5); - box_sizer1->Add(flex_sizer, flagsExpand); + left_sizer->Add(flex_sizer, flagsExpand); // Date Format Settings dateFormat_ = mmOptions::instance().dateFormat_; @@ -217,8 +226,45 @@ flex_sizer->Add(toDateCtrl_, flags); flex_sizer->AddSpacer(1); - main_sizer->Add(box_sizer1, flagsExpand); + btnTest_ = new wxButton( this, wxID_OPEN, _("&Test")); + flex_sizer->AddSpacer(1); + flex_sizer->Add(btnTest_); + + //Log viewer + wxBoxSizer* log_sizer = new wxBoxSizer(wxVERTICAL); + + log_field_ = new wxTextCtrl( this, wxID_STATIC, "", wxDefaultPosition, wxSize(300, -1), wxTE_MULTILINE|wxHSCROLL ); + log_sizer->Add(log_field_, 1, wxGROW|wxALL, 5); + + wxButton* itemClearButton = new wxButton(this, wxID_CLEAR, _("Clear")); + log_sizer->Add(itemClearButton, 0, wxALIGN_CENTER|wxALL, 5); + itemClearButton->Connect(wxID_CLEAR, wxEVT_COMMAND_BUTTON_CLICKED + , wxCommandEventHandler(mmQIFImportDialog::OnButtonClear), NULL, this); + + //Data viewer + wxPanel* data_panel = new wxPanel(this, wxID_ANY); + wxBoxSizer* data_sizer = new wxBoxSizer(wxHORIZONTAL); + data_panel->SetSizer(data_sizer); + + dataListBox_ = new wxDataViewListCtrl(data_panel + , wxID_ANY, wxDefaultPosition, wxSize(100, 200)); + dataListBox_->AppendTextColumn( ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 100); + dataListBox_->AppendTextColumn( ColName_[COL_NUMBER], wxDATAVIEW_CELL_INERT, 80); + dataListBox_->AppendTextColumn( ColName_[COL_PAYEE], wxDATAVIEW_CELL_INERT, 120); + dataListBox_->AppendTextColumn( ColName_[COL_STATUS], wxDATAVIEW_CELL_INERT, 60); + dataListBox_->AppendTextColumn( ColName_[COL_CATEGORY], wxDATAVIEW_CELL_INERT, 120); + dataListBox_->AppendTextColumn( ColName_[COL_VALUE], wxDATAVIEW_CELL_INERT, 100); + dataListBox_->AppendTextColumn( ColName_[COL_NOTES], wxDATAVIEW_CELL_INERT, 300); + data_sizer->Add(dataListBox_, flagsExpand); + + //Compose all sizers togethe + wxBoxSizer* top_sizer = new wxBoxSizer(wxHORIZONTAL); + main_sizer->Add(top_sizer, flagsExpand); + top_sizer->Add(left_sizer, flags); + top_sizer->Add(log_sizer, flagsExpand); + main_sizer->Add(data_panel, flagsExpand); + /********************************************************************************************** Button Panel with OK and Cancel Buttons ***********************************************************************************************/ @@ -307,7 +353,7 @@ int mmQIFImportDialog::mmImportQIF() { wxString acctName = core_->accountList_.GetAccountName(last_imported_acc_id_); - int fromAccountID = core_->accountList_.GetAccountId(acctName); + fromAccountID_ = core_->accountList_.GetAccountId(acctName); wxString sMsg; //Check date restrictions @@ -323,9 +369,7 @@ wxString sDefCurrencyName = core_->currencyList_.getCurrencyName(core_->currencyList_.GetBaseCurrencySettings()); - fileviewer file_dlg("", parent_); - file_dlg.Show(); - wxTextCtrl*& logWindow = file_dlg.textCtrl_; + wxTextCtrl*& logWindow = log_field_; bool canceledbyuser = false; wxFileInputStream input(sFileName_); @@ -344,7 +388,6 @@ double val = 0.0, dSplitAmount = 0.0; bool bTrxComplited = true; - std::vector< std::shared_ptr<mmBankTransaction> > vQIF_trxs; mmSplitTransactionEntries* mmSplit(new mmSplitTransactionEntries()); while(!input.Eof() && !canceledbyuser) @@ -474,7 +517,7 @@ logWindow->AppendText(wxString()<< sMsg << "\n"); } - fromAccountID = core_->accountList_.GetAccountId(acctName); + fromAccountID_ = core_->accountList_.GetAccountId(acctName); sMsg = wxString::Format(_("Line: %ld"), numLines) << " : " << wxString::Format(_("Account name: %s"), acctName); @@ -509,7 +552,7 @@ } to_account_id = -1; - from_account_id = fromAccountID; + from_account_id = fromAccountID_; bool bValid = true; if (lineType(readLine) == Date) // 'D' @@ -664,7 +707,7 @@ if (val > 0.0) { from_account_id = to_account_id; - to_account_id = fromAccountID; + to_account_id = fromAccountID_; } payeeID = -1; if (to_account_id == -1 || from_account_id == -1) @@ -722,7 +765,7 @@ sMsg = wxString::Format( "Line:%ld Trx:%ld %s D:%s Acc:'%s' %s P:'%s%s' Amt:%s C:'%s' \n" , trxNumLine - , vQIF_trxs.size() + 1 + , vQIF_trxs_.size() + 1 , sValid , convDate , core_->accountList_.GetAccountName(from_account_id) @@ -773,7 +816,7 @@ //Just take alternate amount and skip it if (type == TRANS_TYPE_TRANSFER_STR) { - for (const auto& refTrans : vQIF_trxs) + for (const auto& refTrans : vQIF_trxs_) { if (refTrans->transType_ != TRANS_TYPE_TRANSFER_STR) continue; if (refTrans->status_ == "D") continue; @@ -803,50 +846,29 @@ if (bValid) { - vQIF_trxs.push_back(pTransaction); + vQIF_trxs_.push_back(pTransaction); } } } - sMsg = wxString::Format(_("Transactions imported from QIF: %ld"), vQIF_trxs.size()); + sMsg = wxString::Format(_("Transactions imported from QIF: %ld"), vQIF_trxs_.size()); logWindow->AppendText(sMsg << "\n"); - canceledbyuser = file_dlg.ShowModal() == wxID_CANCEL; - // Since all database transactions are only in memory, - if (!canceledbyuser) + int num = 0; + for (const auto& transaction : vQIF_trxs_) { - core_->db_.get()->Begin(); - - //TODO: Update transfer transactions toAmount - - for (const auto& refTrans : vQIF_trxs) - { - //fromAccountID = refTrans->accountID_; - mmCurrency* pCurrencyPtr = core_->accountList_.getCurrencySharedPtr(fromAccountID); - wxASSERT(pCurrencyPtr); - refTrans->amt_ = fabs(refTrans->amt_); - refTrans->toAmt_ = fabs(refTrans->toAmt_); - //refTrans->updateAllData(core_, fromAccountID, pCurrencyPtr); - if (!core_->bTransactionList_.checkForExistingTransaction(refTrans.get())) - refTrans->status_ = "F"; - else - refTrans->status_ = "D"; - core_->bTransactionList_.addTransaction(refTrans.get()); - } - - core_->db_.get()->Commit(); - sMsg = _("Import finished successfully"); + wxVector<wxVariant> data; + data.push_back(wxVariant(transaction.get()->date_)); + data.push_back(wxVariant(transaction.get()->transNum_)); + data.push_back(wxVariant(transaction.get()->payeeStr_)); + data.push_back(wxVariant(transaction.get()->status_)); + data.push_back(wxVariant(core_->categoryList_.GetFullCategoryString(transaction.get()->categID_, transaction.get()->subcategID_))); + data.push_back(wxVariant(transaction.get()->value(-1))); + data.push_back(wxVariant(transaction.get()->notes_)); + dataListBox_->AppendItem(data, (wxUIntPtr)num++); } - else - { - sMsg = _("Imported transactions discarded by user!"); - } - wxMessageDialog(parent_, sMsg, _("QIF Import"), wxOK|wxICON_WARNING).ShowModal(); - //clear the vector to avoid memory leak - done at same level created. - vQIF_trxs.clear(); - - return fromAccountID; + return fromAccountID_; } void mmQIFImportDialog::OnFileSearch(wxCommandEvent& /*event*/) @@ -983,12 +1005,50 @@ toDateCtrl_->Enable(dateToCheckBox_->GetValue()); } -void mmQIFImportDialog::OnOk(wxCommandEvent& /*event*/) +void mmQIFImportDialog::OnTest(wxCommandEvent& /*event*/) { last_imported_acc_id_ = mmImportQIF(); - btnOK_->Enable(false); } +void mmQIFImportDialog::OnOk(wxCommandEvent& /*event*/) +{ + wxString sMsg; + wxMessageDialog msgDlg(this, _("Do you want to import all transaction ?"), + _("Confirm Import"), + wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION); + if (msgDlg.ShowModal() == wxID_YES) + { + core_->db_.get()->Begin(); + + //TODO: Update transfer transactions toAmount + + for (const auto& refTrans : vQIF_trxs_) + { + //fromAccountID_ = refTrans->accountID_; + mmCurrency* pCurrencyPtr = core_->accountList_.getCurrencySharedPtr(fromAccountID_); + wxASSERT(pCurrencyPtr); + refTrans->amt_ = fabs(refTrans->amt_); + refTrans->toAmt_ = fabs(refTrans->toAmt_); + //refTrans->updateAllData(core_, fromAccountID_, pCurrencyPtr); + if (!core_->bTransactionList_.checkForExistingTransaction(refTrans.get())) + refTrans->status_ = "F"; + else + refTrans->status_ = "D"; + core_->bTransactionList_.addTransaction(refTrans.get()); + } + + core_->db_.get()->Commit(); + sMsg = _("Import finished successfully"); + } + else + { + sMsg = _("Imported transactions discarded by user!"); + } + wxMessageDialog(parent_, sMsg, _("QIF Import"), wxOK|wxICON_WARNING).ShowModal(); + //clear the vector to avoid memory leak - done at same level created. + +} + void mmQIFImportDialog::OnCancel(wxCommandEvent& /*event*/) { EndModal(wxID_CANCEL); @@ -999,3 +1059,7 @@ EndModal(wxID_CANCEL); } +void mmQIFImportDialog::OnButtonClear(wxCommandEvent& /*event*/) +{ + log_field_->Clear(); +} Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-07-28 12:08:25 UTC (rev 4431) +++ trunk/src/import_export/qif_import.h 2013-07-28 13:34:06 UTC (rev 4432) @@ -2,13 +2,14 @@ #ifndef QIF_IMPORT_H #define QIF_IMPORT_H -#define SYMBOL_QIFIMPORT_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX +#define SYMBOL_QIFIMPORT_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX #define SYMBOL_QIFIMPORT_TITLE _("QIF Import") #define SYMBOL_QIFIMPORT_IDNAME wxID_HIGHEST+1 #define SYMBOL_QIFIMPORT_SIZE wxSize(500, 300) #define SYMBOL_QIFIMPORT_POSITION wxDefaultPosition #include "mmcoredb.h" +#include <wx/dataview.h> class wxDatePickerCtrl; @@ -49,16 +50,20 @@ bool checkQIFFile(wxString fileName); void OnCheckboxClick(wxCommandEvent& /*event*/); void OnDateMaskChange(wxCommandEvent& event); + void OnButtonClear(wxCommandEvent& event); void OnQuit(wxCloseEvent& event); void OnCancel(wxCommandEvent& event); void OnOk(wxCommandEvent& /*event*/); + void OnTest(wxCommandEvent& /*event*/); + std::vector< std::shared_ptr<mmBankTransaction> > vQIF_trxs_; mmCoreDB* core_; wxWindow* parent_; wxString dateFormat_; wxArrayInt accounts_id_; wxArrayInt items_index_; wxArrayString accounts_name_; + int fromAccountID_; bool isLineOK(const wxString& line); wxString getLineData(const wxString& line); @@ -67,8 +72,10 @@ bool warning_message(); wxString sFileName_; + wxDataViewListCtrl* dataListBox_; wxButton* button_search_; wxTextCtrl* file_name_ctrl_; + wxTextCtrl* log_field_; wxCheckBox* dateFromCheckBox_; wxCheckBox* dateToCheckBox_; wxDatePickerCtrl* fromDateCtrl_; @@ -76,10 +83,24 @@ wxComboBox* choiceDateFormat_; wxChoice* newAccounts_; wxButton* btnOK_; + wxButton* btnTest_; wxBitmapButton* bbFile_; wxBitmapButton* bbFormat_; wxBitmapButton* bbAccounts_; int last_imported_acc_id_; + + enum EColumn + { + COL_DATE = 0, + COL_NUMBER, + COL_PAYEE, + COL_STATUS, + COL_CATEGORY, + COL_VALUE, + COL_NOTES, + COL_MAX, // number of columns + }; + std::map<int, wxString> ColName_; }; #endif // This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-09-13 05:12:45
|
Revision: 4478 http://sourceforge.net/p/moneymanagerex/code/4478 Author: vomikan Date: 2013-09-13 05:12:42 +0000 (Fri, 13 Sep 2013) Log Message: ----------- Account field added Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-09-13 03:23:43 UTC (rev 4477) +++ trunk/src/import_export/qif_import.cpp 2013-09-13 05:12:42 UTC (rev 4478) @@ -130,6 +130,7 @@ SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); wxDialog::Create( parent, id, caption, pos, size, style ); + ColName_[COL_ACCOUNT] = _("Account"); ColName_[COL_DATE] = _("Date"); ColName_[COL_NUMBER] = _("Number"); ColName_[COL_PAYEE] = _("Payee"); @@ -243,7 +244,8 @@ dataListBox_ = new wxDataViewListCtrl(data_panel , wxID_ANY, wxDefaultPosition, wxSize(100, 200)); - dataListBox_->AppendTextColumn( ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 140); + dataListBox_->AppendTextColumn( ColName_[COL_ACCOUNT], wxDATAVIEW_CELL_INERT, 120); + dataListBox_->AppendTextColumn( ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 100); dataListBox_->AppendTextColumn( ColName_[COL_NUMBER], wxDATAVIEW_CELL_INERT, 80); dataListBox_->AppendTextColumn( ColName_[COL_PAYEE], wxDATAVIEW_CELL_INERT, 120); dataListBox_->AppendTextColumn( ColName_[COL_STATUS], wxDATAVIEW_CELL_INERT, 60); @@ -848,12 +850,13 @@ for (const auto& transaction : vQIF_trxs_) { wxVector<wxVariant> data; + data.push_back(wxVariant(core_->accountList_.GetAccountName(transaction.get()->accountID_))); data.push_back(wxVariant(transaction.get()->date_.FormatISODate())); data.push_back(wxVariant(transaction.get()->transNum_)); data.push_back(wxVariant(transaction.get()->payeeStr_)); data.push_back(wxVariant(transaction.get()->status_)); data.push_back(wxVariant(core_->categoryList_.GetFullCategoryString(transaction.get()->categID_, transaction.get()->subcategID_))); - data.push_back(wxVariant(wxString::Format("%.2f",transaction.get()->value(-1)))); + data.push_back(wxVariant(wxString::Format("%.2f",transaction.get()->value(-1)))); data.push_back(wxVariant(transaction.get()->notes_)); dataListBox_->AppendItem(data, (wxUIntPtr)num++); } Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-09-13 03:23:43 UTC (rev 4477) +++ trunk/src/import_export/qif_import.h 2013-09-13 05:12:42 UTC (rev 4478) @@ -90,7 +90,8 @@ enum EColumn { - COL_DATE = 0, + COL_ACCOUNT = 0, + COL_DATE, COL_NUMBER, COL_PAYEE, COL_STATUS, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gua...@us...> - 2013-09-16 13:51:08
|
Revision: 4495 http://sourceforge.net/p/moneymanagerex/code/4495 Author: guanlisheng Date: 2013-09-16 13:51:05 +0000 (Mon, 16 Sep 2013) Log Message: ----------- less wxSharedPtr in container Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-09-16 13:41:38 UTC (rev 4494) +++ trunk/src/import_export/qif_import.cpp 2013-09-16 13:51:05 UTC (rev 4495) @@ -785,23 +785,23 @@ bTrxComplited = true; if (!bValid) continue; - wxSharedPtr<mmBankTransaction> pTransaction(new mmBankTransaction(core_)); - pTransaction->date_ = dtdt; - pTransaction->accountID_ = from_account_id; - pTransaction->toAccountID_ = to_account_id; - pTransaction->payeeID_ = payeeID; - pTransaction->payeeStr_ = core_->payeeList_.GetPayeeName(payeeID); - pTransaction->transType_ = type; - pTransaction->amt_ = val; - pTransaction->status_ = status; - pTransaction->transNum_ = transNum; - pTransaction->notes_ = notes; - pTransaction->toAmt_ = val; + mmBankTransaction transaction(core_); + transaction.date_ = dtdt; + transaction.accountID_ = from_account_id; + transaction.toAccountID_ = to_account_id; + transaction.payeeID_ = payeeID; + transaction.payeeStr_ = core_->payeeList_.GetPayeeName(payeeID); + transaction.transType_ = type; + transaction.amt_ = val; + transaction.status_ = status; + transaction.transNum_ = transNum; + transaction.notes_ = notes; + transaction.toAmt_ = val; if (mmSplit->numEntries()) categID = -1; - pTransaction->categID_ = categID; - pTransaction->subcategID_ = subCategID; - pTransaction->fullCatStr_ = core_->categoryList_.GetFullCategoryString(categID, subCategID); - *pTransaction->splitEntries_ = *mmSplit; + transaction.categID_ = categID; + transaction.subcategID_ = subCategID; + transaction.fullCatStr_ = core_->categoryList_.GetFullCategoryString(categID, subCategID); + *transaction.splitEntries_ = *mmSplit; mmCurrency* pCurrencyPtr = core_->accountList_.getCurrencySharedPtr(from_account_id); wxASSERT(pCurrencyPtr); @@ -810,27 +810,27 @@ //Just take alternate amount and skip it if (type == TRANS_TYPE_TRANSFER_STR) { - for (const auto& refTrans : vQIF_trxs_) + for (auto& refTrans : vQIF_trxs_) { - if (refTrans->transType_ != TRANS_TYPE_TRANSFER_STR) continue; - if (refTrans->status_ == "D") continue; - if (refTrans->date_!= dtdt) continue; - if (((refTrans->amt_ < 0) && (val < 0)) || ((refTrans->amt_ > 0) && (val >0))) continue; - if (refTrans->accountID_!= from_account_id) continue; - if (refTrans->transNum_ != transNum) continue; - if (refTrans->notes_ != notes) continue; + if (refTrans.transType_ != TRANS_TYPE_TRANSFER_STR) continue; + if (refTrans.status_ == "D") continue; + if (refTrans.date_!= dtdt) continue; + if (((refTrans.amt_ < 0) && (val < 0)) || ((refTrans.amt_ > 0) && (val >0))) continue; + if (refTrans.accountID_!= from_account_id) continue; + if (refTrans.transNum_ != transNum) continue; + if (refTrans.notes_ != notes) continue; if (val > 0.0) - refTrans->toAmt_ = val; + refTrans.toAmt_ = val; else - refTrans->amt_ = val; - refTrans->status_ = "D"; + refTrans.amt_ = val; + refTrans.status_ = "D"; - sMsg = wxString::Format("%f -> %f (%f)\n", refTrans->amt_ - , refTrans->toAmt_ - , (fabs(refTrans->amt_)/fabs(refTrans->toAmt_)<1) - ? fabs(refTrans->toAmt_)/fabs(refTrans->amt_) - : fabs(refTrans->amt_)/fabs(refTrans->toAmt_)); + sMsg = wxString::Format("%f -> %f (%f)\n", refTrans.amt_ + , refTrans.toAmt_ + , (fabs(refTrans.amt_)/fabs(refTrans.toAmt_)<1) + ? fabs(refTrans.toAmt_)/fabs(refTrans.amt_) + : fabs(refTrans.amt_)/fabs(refTrans.toAmt_)); logWindow->AppendText(sMsg); bValid = false; @@ -840,7 +840,7 @@ if (bValid) { - vQIF_trxs_.push_back(pTransaction); + vQIF_trxs_.push_back(transaction); } } } @@ -852,14 +852,14 @@ for (const auto& transaction : vQIF_trxs_) { wxVector<wxVariant> data; - data.push_back(wxVariant(core_->accountList_.GetAccountName(transaction.get()->accountID_))); - data.push_back(wxVariant(transaction.get()->date_.FormatISODate())); - data.push_back(wxVariant(transaction.get()->transNum_)); - data.push_back(wxVariant(transaction.get()->payeeStr_)); - data.push_back(wxVariant(transaction.get()->status_)); - data.push_back(wxVariant(core_->categoryList_.GetFullCategoryString(transaction.get()->categID_, transaction.get()->subcategID_))); - data.push_back(wxVariant(wxString::Format("%.2f",transaction.get()->value(-1)))); - data.push_back(wxVariant(transaction.get()->notes_)); + data.push_back(wxVariant(core_->accountList_.GetAccountName(transaction.accountID_))); + data.push_back(wxVariant(transaction.date_.FormatISODate())); + data.push_back(wxVariant(transaction.transNum_)); + data.push_back(wxVariant(transaction.payeeStr_)); + data.push_back(wxVariant(transaction.status_)); + data.push_back(wxVariant(core_->categoryList_.GetFullCategoryString(transaction.categID_, transaction.subcategID_))); + data.push_back(wxVariant(wxString::Format("%.2f", transaction.value(-1)))); + data.push_back(wxVariant(transaction.notes_)); dataListBox_->AppendItem(data, (wxUIntPtr)num++); } @@ -1024,17 +1024,17 @@ //TODO: Update transfer transactions toAmount - for (const auto& refTrans : vQIF_trxs_) + for (auto& refTrans : vQIF_trxs_) { - //fromAccountID_ = refTrans->accountID_; + //fromAccountID_ = refTrans.accountID_; mmCurrency* pCurrencyPtr = core_->accountList_.getCurrencySharedPtr(fromAccountID_); wxASSERT(pCurrencyPtr); - refTrans->amt_ = fabs(refTrans->amt_); - refTrans->toAmt_ = fabs(refTrans->toAmt_); - //refTrans->updateAllData(core_, fromAccountID_, pCurrencyPtr); + refTrans.amt_ = fabs(refTrans.amt_); + refTrans.toAmt_ = fabs(refTrans.toAmt_); + //refTrans.updateAllData(core_, fromAccountID_, pCurrencyPtr); - core_->bTransactionList_.addTransaction(refTrans.get()); - last_imported_acc_id_ = refTrans->accountID_; + core_->bTransactionList_.addTransaction(&refTrans); + last_imported_acc_id_ = refTrans.accountID_; } core_->db_.get()->Commit(); Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-09-16 13:41:38 UTC (rev 4494) +++ trunk/src/import_export/qif_import.h 2013-09-16 13:51:05 UTC (rev 4495) @@ -55,7 +55,7 @@ void OnCancel(wxCommandEvent& event); void OnOk(wxCommandEvent& /*event*/); - std::vector< wxSharedPtr<mmBankTransaction> > vQIF_trxs_; + std::vector<mmBankTransaction> vQIF_trxs_; mmCoreDB* core_; wxWindow* parent_; wxString dateFormat_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-10-14 14:21:47
|
Revision: 4857 http://sourceforge.net/p/moneymanagerex/code/4857 Author: vomikan Date: 2013-10-14 14:21:39 +0000 (Mon, 14 Oct 2013) Log Message: ----------- cleanup Modified Paths: -------------- trunk/src/import_export/univcsvdialog.cpp trunk/src/import_export/univcsvdialog.h Modified: trunk/src/import_export/univcsvdialog.cpp =================================================================== --- trunk/src/import_export/univcsvdialog.cpp 2013-10-14 11:49:38 UTC (rev 4856) +++ trunk/src/import_export/univcsvdialog.cpp 2013-10-14 14:21:39 UTC (rev 4857) @@ -64,7 +64,6 @@ core_(core), is_importer_(is_importer), delimit_(","), - db_ (core->db_.get()), importSuccessful_(false) { CSVFieldName_[UNIV_CSV_DATE] = _("Date"); @@ -592,7 +591,7 @@ wxProgressDialog progressDlg(_("Universal CSV Import"), _("Transactions imported from CSV: "), 100, NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_CAN_ABORT); - db_->Begin(); + core_->db_.get()->Begin(); wxString line; for (line = tFile.GetFirstLine(); !tFile.Eof(); line = tFile.GetNextLine()) @@ -674,27 +673,25 @@ wxString status = "F"; int toAccountID = -1; - mmBankTransaction* pTransaction(new mmBankTransaction(core_)); - pTransaction->accountID_ = fromAccountID_; - pTransaction->toAccountID_ = toAccountID; - pTransaction->payeeID_ = payeeID_; - Model_Payee::Data* payee = Model_Payee::instance().get(payeeID_); - if (payee) - pTransaction->payeeStr_ = payee->PAYEENAME; - pTransaction->transType_ = type_; - pTransaction->amt_ = val_; - pTransaction->status_ = status; - pTransaction->transNum_ = transNum_; - pTransaction->notes_ = notes_; - pTransaction->date_ = dtdt_; - pTransaction->toAmt_ = 0.0; + Model_Checking::Data *pTransaction = Model_Checking::instance().create(); + pTransaction->ACCOUNTID = fromAccountID_; + pTransaction->TOACCOUNTID = toAccountID; + pTransaction->PAYEEID = payeeID_; + pTransaction->TRANSCODE = type_; + pTransaction->TRANSAMOUNT = val_; + pTransaction->STATUS = status; + pTransaction->TRANSACTIONNUMBER = transNum_; + pTransaction->NOTES = notes_; + pTransaction->TRANSDATE = dtdt_.FormatISODate(); + pTransaction->TOTRANSAMOUNT = 0.0; - int transID = core_->bTransactionList_.addTransaction(pTransaction); + Model_Checking::instance().save(pTransaction); + int transID = pTransaction->TRANSID; CSV_transID.push_back(transID); countImported++; - log << _("Line : ") << wxString::Format("%ld", countNumTotal) << _(" imported OK.") << endl; - *log_field_ << _("Line : ") << wxString::Format("%ld", countNumTotal) << _(" imported OK.") << "\n"; + log << _("Line : %ld imported OK.", countNumTotal) << endl; + *log_field_ << _("Line : %ld imported OK.", countNumTotal) << "\n"; } progressDlg.Destroy(); @@ -718,7 +715,7 @@ if (!canceledbyuser) { // we need to save them to the database. - db_->Commit(); + core_->db_.get()->Commit(); importSuccessful_ = true; msg << _("Transactions saved to database in account: ") << acctName; } @@ -732,7 +729,7 @@ core_->bTransactionList_.removeTransaction(fromAccountID_,transID); } // and discard the database changes. - db_->Rollback(); + core_->db_.get()->Rollback(); msg << _("Imported transactions discarded by user!"); } Modified: trunk/src/import_export/univcsvdialog.h =================================================================== --- trunk/src/import_export/univcsvdialog.h 2013-10-14 11:49:38 UTC (rev 4856) +++ trunk/src/import_export/univcsvdialog.h 2013-10-14 14:21:39 UTC (rev 4857) @@ -96,7 +96,7 @@ mmCoreDB* core_; bool is_importer_; wxString delimit_; - wxSQLite3Database* db_; + std::vector<int> csvFieldOrder_; wxListBox* csvFieldCandicate_; wxListBox* csvListBox_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-11-01 10:07:02
|
Revision: 5056 http://sourceforge.net/p/moneymanagerex/code/5056 Author: vomikan Date: 2013-11-01 10:06:58 +0000 (Fri, 01 Nov 2013) Log Message: ----------- export fixes Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/export.h trunk/src/import_export/qif_export.cpp Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2013-11-01 10:06:31 UTC (rev 5055) +++ trunk/src/import_export/export.cpp 2013-11-01 10:06:58 UTC (rev 5056) @@ -8,6 +8,7 @@ #include "model/Model_Infotable.h" #include "model/Model_Account.h" #include "model/Model_Category.h" +#include "model/Model_Payee.h" mmExportTransaction::mmExportTransaction() {} @@ -25,11 +26,24 @@ mmExportTransaction::~mmExportTransaction() {} -wxString mmExportTransaction::getTransactionQIF(bool from) +wxString mmExportTransaction::getTransactionQIF() { Model_Checking::Data *transaction = Model_Checking::instance().get(m_transaction_id); if (!transaction) return ""; - Model_Checking::Full_Data full_tran(*transaction); + Model_Checking::Full_Data full_tran(*transaction); + bool out = transaction->ACCOUNTID == m_account_id; + + if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) + { + const Model_Account::Data* account = Model_Account::instance().get(out ? transaction->TOACCOUNTID : transaction->ACCOUNTID); + if (account) full_tran.PAYEENAME = account->ACCOUNTNAME; + } + else + { + const Model_Payee::Data* payee = Model_Payee::instance().get(transaction->PAYEEID); + if (payee) full_tran.PAYEENAME = payee->PAYEENAME; + } + full_tran.CATEGNAME = Model_Category::instance().full_name(transaction->CATEGID, transaction->SUBCATEGID); wxString buffer = ""; int trans_id = transaction->TRANSID; @@ -43,7 +57,7 @@ if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - categ = "[" + (from ? accountName : payee) + "]"; + categ = "[" + (out ? accountName : payee) + "]"; payee = ""; //Transaction number used to make transaction unique @@ -53,7 +67,7 @@ } buffer << "D" << full_tran.TRANSDATE << "\n"; - buffer << "T" << Model_Checking::balance(*transaction, (!from ? transaction->ACCOUNTID : transaction->TOACCOUNTID)) << "\n"; + buffer << "T" << Model_Checking::balance(*transaction, (out ? transaction->ACCOUNTID : transaction->TOACCOUNTID)) << "\n"; if (!payee.IsEmpty()) buffer << "P" << payee << "\n"; if (!transNum.IsEmpty()) @@ -83,11 +97,24 @@ return buffer; } -wxString mmExportTransaction::getTransactionCSV(bool from) +wxString mmExportTransaction::getTransactionCSV() { Model_Checking::Data *transaction = Model_Checking::instance().get(m_transaction_id); if (!transaction) return ""; Model_Checking::Full_Data full_tran(*transaction); + bool out = transaction->ACCOUNTID == m_account_id; + + if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) + { + const Model_Account::Data* account = Model_Account::instance().get(out ? transaction->TOACCOUNTID : transaction->ACCOUNTID); + if (account) full_tran.PAYEENAME = account->ACCOUNTNAME; + } + else + { + const Model_Payee::Data* payee = Model_Payee::instance().get(transaction->PAYEEID); + if (payee) full_tran.PAYEENAME = payee->PAYEENAME; + } + full_tran.CATEGNAME = Model_Category::instance().full_name(transaction->CATEGID, transaction->SUBCATEGID); wxString delimit = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); @@ -103,7 +130,7 @@ if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - categ = "[" + (from ? accountName : payee) + "]"; + categ = "[" + (out ? accountName : payee) + "]"; payee = ""; //Transaction number used to make transaction unique @@ -147,7 +174,7 @@ << transaction->STATUS << delimit << transaction->TRANSCODE << delimit << inQuotes(categ, delimit) << delimit - << Model_Checking::balance(*transaction, (!from ? transaction->ACCOUNTID : transaction->TOACCOUNTID)) << delimit + << Model_Checking::balance(*transaction, (out ? transaction->ACCOUNTID : transaction->TOACCOUNTID)) << delimit << "" << delimit << inQuotes(notes, delimit) << "\n"; Modified: trunk/src/import_export/export.h =================================================================== --- trunk/src/import_export/export.h 2013-11-01 10:06:31 UTC (rev 5055) +++ trunk/src/import_export/export.h 2013-11-01 10:06:58 UTC (rev 5056) @@ -26,8 +26,8 @@ mmExportTransaction(int accountID); mmExportTransaction(int transactionID, int accountID); - wxString getTransactionQIF(bool from = false); - wxString getTransactionCSV(bool from = false); + wxString getTransactionQIF(); + wxString getTransactionCSV(); wxString getAccountHeaderQIF(); wxString getCategoriesQIF(); wxString getCategoriesCSV(); Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-11-01 10:06:31 UTC (rev 5055) +++ trunk/src/import_export/qif_export.cpp 2013-11-01 10:06:58 UTC (rev 5056) @@ -104,8 +104,8 @@ tab1_sizer->Add(flex_sizer, flags.Left()); // Categories ------------------------------------------------- - cCategs_ = new wxCheckBox(main_tab, wxID_ANY, - _("Categories"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); + cCategs_ = new wxCheckBox(main_tab, wxID_ANY + , _("Categories"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); cCategs_->SetValue(FALSE); flex_sizer->Add(cCategs_, flags); flex_sizer->AddSpacer(1); @@ -394,15 +394,15 @@ if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - int index = transaction.ACCOUNTID == account_id ? transaction.TOACCOUNTID : transaction.ACCOUNTID; + int index = transaction.ACCOUNTID == account_id ? transaction.ACCOUNTID : transaction.TOACCOUNTID; if (selected_accounts_id_.Index(index) == wxNOT_FOUND) { //get second part of transfer transaction wxString second_part = ""; if (qif_csv) - second_part = data.getTransactionQIF(true); + second_part = data.getTransactionQIF(); else - second_part = data.getTransactionCSV(true); + second_part = data.getTransactionCSV(); transferTransactions[index] += second_part; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-11-01 14:17:45
|
Revision: 5060 http://sourceforge.net/p/moneymanagerex/code/5060 Author: vomikan Date: 2013-11-01 14:17:41 +0000 (Fri, 01 Nov 2013) Log Message: ----------- fix for transfers Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/qif_export.cpp Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2013-11-01 12:56:56 UTC (rev 5059) +++ trunk/src/import_export/export.cpp 2013-11-01 14:17:41 UTC (rev 5060) @@ -35,7 +35,9 @@ if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - const Model_Account::Data* account = Model_Account::instance().get(out ? transaction->TOACCOUNTID : transaction->ACCOUNTID); + const Model_Account::Data* account = Model_Account::instance().get(transaction->ACCOUNTID); + if (account) full_tran.ACCOUNTNAME = account->ACCOUNTNAME; + account = Model_Account::instance().get(transaction->TOACCOUNTID); if (account) full_tran.PAYEENAME = account->ACCOUNTNAME; } else @@ -57,7 +59,7 @@ if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - categ = "[" + (out ? accountName : payee) + "]"; + categ = "[" + (!out ? accountName : payee) + "]"; payee = ""; //Transaction number used to make transaction unique Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-11-01 12:56:56 UTC (rev 5059) +++ trunk/src/import_export/qif_export.cpp 2013-11-01 14:17:41 UTC (rev 5060) @@ -394,15 +394,16 @@ if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - int index = transaction.ACCOUNTID == account_id ? transaction.ACCOUNTID : transaction.TOACCOUNTID; + int index = transaction.ACCOUNTID == account_id ? transaction.TOACCOUNTID : transaction.ACCOUNTID; if (selected_accounts_id_.Index(index) == wxNOT_FOUND) { //get second part of transfer transaction + mmExportTransaction data2(transaction.TRANSID, index); wxString second_part = ""; if (qif_csv) - second_part = data.getTransactionQIF(); + second_part = data2.getTransactionQIF(); else - second_part = data.getTransactionCSV(); + second_part = data2.getTransactionCSV(); transferTransactions[index] += second_part; } } @@ -418,7 +419,6 @@ buffer << header.getAccountHeaderQIF(); } buffer << entry.second; - numRecords--; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sie...@us...> - 2013-11-05 02:52:28
|
Revision: 5104 http://sourceforge.net/p/moneymanagerex/code/5104 Author: siena123 Date: 2013-11-05 02:52:23 +0000 (Tue, 05 Nov 2013) Log Message: ----------- Feature Request[136] (partial): CSV Export - Account balance Modified Paths: -------------- trunk/src/import_export/univcsvdialog.cpp trunk/src/import_export/univcsvdialog.h Modified: trunk/src/import_export/univcsvdialog.cpp =================================================================== --- trunk/src/import_export/univcsvdialog.cpp 2013-11-05 02:49:54 UTC (rev 5103) +++ trunk/src/import_export/univcsvdialog.cpp 2013-11-05 02:52:23 UTC (rev 5104) @@ -1,1339 +1,1356 @@ -/******************************************************* - Copyright (C) 2006 Madhan Kanagavel - - This program is free software; you can redistribute it and/or modify - 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 - ********************************************************/ -#include "constants.h" -#include "univcsvdialog.h" -#include "util.h" -#include "paths.h" -#include "platfdep.h" -#include "mmCurrencyFormatter.h" -#include <algorithm> -#include "model/Model_Infotable.h" -#include "model/Model_Payee.h" -#include "model/Model_Account.h" -#include "model/Model_Category.h" -#include "model/Model_Checking.h" - -IMPLEMENT_DYNAMIC_CLASS(mmUnivCSVDialog, wxDialog) - -BEGIN_EVENT_TABLE(mmUnivCSVDialog, wxDialog) - EVT_BUTTON(wxID_ADD, mmUnivCSVDialog::OnAdd) - EVT_BUTTON(ID_UNIVCSVBUTTON_IMPORT, mmUnivCSVDialog::OnImport) - EVT_BUTTON(ID_UNIVCSVBUTTON_EXPORT, mmUnivCSVDialog::OnExport) - EVT_BUTTON(wxID_REMOVE, mmUnivCSVDialog::OnRemove) - EVT_BUTTON(wxID_OPEN, mmUnivCSVDialog::OnLoad) - EVT_BUTTON(wxID_SAVEAS, mmUnivCSVDialog::OnSave) - EVT_BUTTON(wxID_UP, mmUnivCSVDialog::OnMoveUp) - EVT_BUTTON(wxID_DOWN, mmUnivCSVDialog::OnMoveDown) - EVT_BUTTON(wxID_STANDARD, mmUnivCSVDialog::OnStandard) - EVT_BUTTON(wxID_SEARCH, mmUnivCSVDialog::OnSearch) - EVT_CHOICE(wxID_ACCOUNT, mmUnivCSVDialog::OnAccountChange) - EVT_LISTBOX(ID_LISTBOX, mmUnivCSVDialog::OnListBox) - EVT_RADIOBOX(wxID_RADIO_BOX, mmUnivCSVDialog::OnCheckOrRadioBox) - EVT_CHOICE(ID_DIALOG_OPTIONS_DATE_FORMAT, mmUnivCSVDialog::OnDateFormatChanged) -END_EVENT_TABLE() - -//---------------------------------------------------------------------------- -mmUnivCSVDialog::mmUnivCSVDialog() -{ -} - -mmUnivCSVDialog::mmUnivCSVDialog( - wxWindow* parent, - bool is_importer, - wxWindowID id, - const wxString& caption, - const wxPoint& pos, - const wxSize& size, - long style -) : - is_importer_(is_importer), - delimit_(","), - importSuccessful_(false) -{ - CSVFieldName_[UNIV_CSV_DATE] = _("Date"); - CSVFieldName_[UNIV_CSV_PAYEE] = _("Payee"); - CSVFieldName_[UNIV_CSV_AMOUNT] = _("Amount(+/-)"); - CSVFieldName_[UNIV_CSV_CATEGORY] = _("Category"); - CSVFieldName_[UNIV_CSV_SUBCATEGORY] = _("SubCategory"); - CSVFieldName_[UNIV_CSV_TRANSNUM] = _("Number"); - CSVFieldName_[UNIV_CSV_NOTES] = _("Notes"); - CSVFieldName_[UNIV_CSV_DONTCARE] = _("Don't Care"); - CSVFieldName_[UNIV_CSV_WITHDRAWAL] = _("Withdrawal"); - CSVFieldName_[UNIV_CSV_DEPOSIT] = _("Deposit"); - CSVFieldName_[UNIV_CSV_TOAMOUNT] = _("To/From(+/-)"); - - Create(parent, id, caption, pos, size, style); -} - -bool mmUnivCSVDialog::Create(wxWindow* parent, wxWindowID id, - const wxString& caption, - const wxPoint& pos, - const wxSize& size, - long style) -{ - SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); - wxDialog::Create(parent, id, caption, pos, size, style); - - CreateControls(); - GetSizer()->Fit(this); - GetSizer()->SetSizeHints(this); - - SetIcon(mmex::getProgramIcon()); - - Centre(); - - return TRUE; -} - -void mmUnivCSVDialog::CreateControls() -{ - wxSizerFlags flags, flagsExpand; - flags.Align(wxALIGN_LEFT|wxALIGN_TOP).Border(wxLEFT|wxRIGHT|wxTOP, 5); - flagsExpand.Align(wxALIGN_LEFT|wxALIGN_TOP).Border(wxLEFT|wxRIGHT|wxTOP, 5); - - // Define the staticBox font and set it as wxFONTWEIGHT_BOLD - wxFont staticBoxFontSetting = this->GetFont(); - staticBoxFontSetting.SetWeight(wxFONTWEIGHT_BOLD); - - wxBoxSizer* itemBoxSizer0 = new wxBoxSizer(wxVERTICAL); - this->SetSizer(itemBoxSizer0); - wxBoxSizer* itemBoxSizer1 = new wxBoxSizer(wxHORIZONTAL); - itemBoxSizer0->Add(itemBoxSizer1, 7, wxGROW|wxALL, 0); - wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer1->Add(itemBoxSizer2, 8, wxGROW|wxALL, 5); - wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer1->Add(itemBoxSizer11, 5, wxGROW|wxALL, 5); - - wxStaticText* itemStaticText3 = new wxStaticText(this, wxID_STATIC, - _("Specify the order of fields in the CSV file")); - itemBoxSizer2->Add(itemStaticText3, flags); - itemStaticText3->SetFont(staticBoxFontSetting); - - wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); - itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5); - - //CSV fields candicate - csvFieldCandicate_ = new wxListBox(this, ID_LISTBOX_CANDICATE, - wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE|wxLB_NEEDED_SB); - itemBoxSizer3->Add(csvFieldCandicate_, 1, wxGROW|wxALL, 1); - for (const auto& it : CSVFieldName_) - csvFieldCandicate_->Append(it.second, new mmListBoxItem(it.first, it.second)); - - //Add Remove Area - wxPanel* itemPanel_AddRemove = new wxPanel(this, ID_PANEL10, - wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - itemBoxSizer3->Add(itemPanel_AddRemove, flags); - - wxBoxSizer* itemBoxSizer_AddRemove = new wxBoxSizer(wxVERTICAL); - itemPanel_AddRemove->SetSizer(itemBoxSizer_AddRemove); - - //Add button - m_button_add_= new wxButton(itemPanel_AddRemove, wxID_ADD); - itemBoxSizer_AddRemove->Add(m_button_add_, flags); - - //Remove button - m_button_remove_ = new wxButton(itemPanel_AddRemove, wxID_REMOVE); - itemBoxSizer_AddRemove->Add(m_button_remove_, flags); - - //Standard MMEX CSV - wxButton* itemButton_standard = new wxButton(itemPanel_AddRemove, wxID_STANDARD, _("&MMEX format")); - itemBoxSizer_AddRemove->Add(itemButton_standard, flags); - itemButton_standard->SetToolTip(_("MMEX standard format")); - - //ListBox of attribute order - csvListBox_ = new wxListBox(this, ID_LISTBOX, - wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE|wxLB_NEEDED_SB); - itemBoxSizer3->Add(csvListBox_, 1, wxGROW|wxALL, 1); - - //Arranger Area - wxPanel* itemPanel_Arranger = new wxPanel(this, ID_PANEL10, - wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - itemBoxSizer3->Add(itemPanel_Arranger, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 1); - - wxBoxSizer* itemBoxSizer_Arranger = new wxBoxSizer(wxVERTICAL); - itemPanel_Arranger->SetSizer(itemBoxSizer_Arranger); - - //Move Up button - wxButton* itemButton_MoveUp = new wxButton(itemPanel_Arranger, wxID_UP, _("&Up")); - itemBoxSizer_Arranger->Add(itemButton_MoveUp, flags); - itemButton_MoveUp -> SetToolTip (_("Move Up")); - - //Move down button - wxButton* itemButton_MoveDown = new wxButton(itemPanel_Arranger, wxID_DOWN, _("&Down")); - itemBoxSizer_Arranger->Add(itemButton_MoveDown, flags); - itemButton_MoveDown -> SetToolTip (_("Move &Down")); - - //Load Template button - wxButton* itemButton_Load = new wxButton(itemPanel_Arranger, wxID_OPEN, _("&Open")); - itemBoxSizer_Arranger->Add(itemButton_Load, flags); - itemButton_Load -> SetToolTip (_("Load Template")); - - //Save As Template button - wxButton* itemButton_Save = new wxButton(itemPanel_Arranger, wxID_SAVEAS, _("Save As...")); - itemBoxSizer_Arranger->Add(itemButton_Save, flags); - itemButton_Save -> SetToolTip (_("Save Template")); - - wxStaticLine* m_staticline1 = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - itemBoxSizer2->Add(m_staticline1, flagsExpand ); - - if (this->is_importer_) - { - //file to import, file path and search button - wxPanel* itemPanel6 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - itemBoxSizer2->Add(itemPanel6, 0, wxEXPAND|wxALL, 1); - - wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxHORIZONTAL); - itemPanel6->SetSizer(itemBoxSizer7); - - wxStaticText* itemStaticText5 = new wxStaticText(itemPanel6, wxID_ANY, _("File Name:"), wxDefaultPosition, wxDefaultSize, 0); - itemBoxSizer7->Add(itemStaticText5, flags); - itemStaticText5->SetFont(staticBoxFontSetting); - - m_text_ctrl_ = new wxTextCtrl(itemPanel6, ID_FILE_NAME, wxEmptyString, wxDefaultPosition, wxSize(300, -1), wxTE_PROCESS_ENTER ); - itemBoxSizer7->Add(m_text_ctrl_, 1, wxALL|wxGROW, 5); - m_text_ctrl_->Connect(ID_FILE_NAME, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(mmUnivCSVDialog::OnFileNameChanged), NULL, this); - m_text_ctrl_->Connect(ID_FILE_NAME, wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(mmUnivCSVDialog::OnFileNameEntered), NULL, this); - - wxButton* button_search = new wxButton(itemPanel6, wxID_SEARCH, _("&Search")); - itemBoxSizer7->Add(button_search, flags); - } - - // account to import or export - wxPanel* itemPanel7 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - itemBoxSizer2->Add(itemPanel7, 0, wxEXPAND|wxALL, 1); - - wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL); - itemPanel7->SetSizer(itemBoxSizer8); - - wxStaticText* itemStaticText6 = new wxStaticText(itemPanel7, wxID_ANY, _("Account: "), wxDefaultPosition, wxDefaultSize, 0); - itemBoxSizer8->Add(itemStaticText6, flags.Align(wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL)); - itemStaticText6->SetFont(staticBoxFontSetting); - - wxSortedArrayString accountArray; - for (const auto& account: Model_Account::instance().all()) accountArray.Add(account.ACCOUNTNAME); - - m_choice_account_ = new wxChoice(itemPanel7, wxID_ACCOUNT, wxDefaultPosition, wxSize(210, -1), accountArray, 0); - m_choice_account_->SetSelection(0); - itemBoxSizer8->Add(m_choice_account_, flags); - - wxStaticLine* m_staticline2 = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - itemBoxSizer2->Add(m_staticline2, flagsExpand ); - - wxStaticText* itemStaticText66 = new wxStaticText(itemPanel7, wxID_STATIC, wxString(_("Date Format: "))); - itemBoxSizer8->AddSpacer(10); - itemBoxSizer8->Add(itemStaticText66, flags); - itemStaticText66->SetFont(staticBoxFontSetting); - //itemStaticText66->Enable(!this->is_importer_); - - date_format_ = mmOptions::instance().dateFormat_; - choiceDateFormat_ = new wxChoice(itemPanel7, ID_DIALOG_OPTIONS_DATE_FORMAT); - for (const auto& i : date_formats_map()) - { - choiceDateFormat_->Append(i.second, new wxStringClientData(i.first)); - if (date_format_ == i.first) choiceDateFormat_->SetStringSelection(i.second); - } - itemBoxSizer8->Add(choiceDateFormat_, flags); - - // CSV Delimiter - wxString choices[] = { _("Comma"), _("Semicolon"), _("TAB"), _("User Defined")}; - int num = sizeof(choices) / sizeof(wxString); - m_radio_box_ = new wxRadioBox(this, wxID_RADIO_BOX, "", wxDefaultPosition, wxDefaultSize, num, choices, 4, wxRA_SPECIFY_COLS); - - delimit_ = Model_Infotable::instance().GetStringInfo("DELIMITER", mmex::DEFDELIMTER); - - textDelimiter4 = new wxTextCtrl( this, ID_UD_DELIMIT, delimit_, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); - textDelimiter4->SetToolTip(_("Specify the delimiter to use when importing/exporting CSV files")); - textDelimiter4->SetMaxLength(1); - textDelimiter4->Disable(); - textDelimiter4->Connect(ID_UD_DELIMIT, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(mmUnivCSVDialog::OnCheckOrRadioBox), NULL, this); - - if (delimit_ == ",") - m_radio_box_->SetSelection(0); - else if (delimit_ == ";") - m_radio_box_->SetSelection(1); - else if (delimit_ == "\t") - m_radio_box_->SetSelection(2); - else { - m_radio_box_->SetSelection(3); - textDelimiter4->Enable(); - } - - wxStaticBox* importExportStaticBox = new wxStaticBox(this, wxID_ANY, _("CSV Delimiter")); - importExportStaticBox->SetFont(staticBoxFontSetting); - wxStaticBoxSizer* importExportStaticBoxSizer = new wxStaticBoxSizer(importExportStaticBox, wxHORIZONTAL); - - itemBoxSizer2->Add(importExportStaticBoxSizer, 0, wxALL|wxEXPAND, 5); - - importExportStaticBoxSizer->Add(m_radio_box_, 0, wxALL|wxEXPAND, 3); - importExportStaticBoxSizer->Add(textDelimiter4, 0, wxALIGN_BOTTOM|wxALL, 8); - - // Preview - wxStaticBoxSizer* m_staticbox = new wxStaticBoxSizer(new wxStaticBox(this, wxID_STATIC, "&Preview"), wxVERTICAL); - - m_list_ctrl_ = new wxListCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT); - m_staticbox->Add(m_list_ctrl_, 1, wxGROW|wxALL, 5); - itemBoxSizer0->Add(m_staticbox, 3, wxALL|wxEXPAND, 5); - - //Import File button - wxPanel* itemPanel5 = new wxPanel(this, ID_PANEL10, - wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - itemBoxSizer0->Add(itemPanel5, 0, wxALIGN_RIGHT|wxALL, 1); - - wxBoxSizer* itemBoxSizer6 = new wxBoxSizer(wxHORIZONTAL); - itemPanel5->SetSizer(itemBoxSizer6); - - if (this->is_importer_) - { - wxButton* itemButton_Import = new wxButton(itemPanel5, ID_UNIVCSVBUTTON_IMPORT, _("&Import"), - wxDefaultPosition, wxDefaultSize, 0); - itemBoxSizer6->Add(itemButton_Import, 0, wxALIGN_CENTER|wxALL, 5); - itemButton_Import -> SetToolTip (_("Import File")); - } - else - { - wxButton* itemButton_Export = new wxButton(itemPanel5, ID_UNIVCSVBUTTON_EXPORT, _("&Export"), - wxDefaultPosition, wxDefaultSize, 0); - itemBoxSizer6->Add(itemButton_Export, 0, wxALIGN_CENTER|wxALL, 5); - itemButton_Export -> SetToolTip (_("Export File")); - } - - wxButton* itemCancelButton = new wxButton(itemPanel5, wxID_CANCEL, _("&Cancel")); - itemBoxSizer6->Add(itemCancelButton, 0, wxALIGN_CENTER|wxALL, 5); - itemCancelButton->SetFocus(); - - //Log viewer - wxBoxSizer* itemBoxSizer22 = new wxBoxSizer(wxVERTICAL); - - itemBoxSizer11->Add(itemBoxSizer22, 1, wxGROW|wxALL, 0); - - log_field_ = new wxTextCtrl( this, wxID_STATIC, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxHSCROLL ); - itemBoxSizer22->Add(log_field_, 1, wxGROW|wxALL, 5); - - wxButton* itemClearButton = new wxButton(this, wxID_CLEAR, _("Clear")); - itemBoxSizer22->Add(itemClearButton, 0, wxALIGN_CENTER|wxALL, 5); - itemClearButton->Connect(wxID_CLEAR, wxEVT_COMMAND_BUTTON_CLICKED - , wxCommandEventHandler(mmUnivCSVDialog::OnButtonClear), NULL, this); - -} - -bool mmUnivCSVDialog::ShowToolTips() -{ - return TRUE; -} - -void mmUnivCSVDialog::csv2tab_separated_values(wxString& line, const wxString& delimit) -{ - //csv line example: - //12.02.2010,Payee,-1105.08,Category,Subcategory,,"Fuel ""95"", 42.31 l (24.20) 212366" - int i=0; - //Single quotes will be used instead double quotes - //Replace all single quotes first - line.Replace("'", "\6"); - //Replace double quotes that used twice to replacer - line.Replace("\"\"\""+delimit+"\"\"\"", "\5\""+delimit+"\"\5"); - line.Replace("\"\"\""+delimit, "\5\""+delimit); - line.Replace(delimit+"\"\"\"", delimit+"\"\5"); - line.Replace("\"\""+delimit, "\5"+delimit); - line.Replace(delimit+"\"\"", delimit+"\5"); - - //replace delimiter to TAB and double quotes to single quotes - line.Replace("\""+delimit+"\"", "'\t'"); - line.Replace("\""+delimit, "'\t"); - line.Replace(delimit+"\"", "\t'"); - line.Replace("\"\"", "\5"); - line.Replace("\"", "'"); - - wxString temp_line = wxEmptyString; - wxString token; - wxStringTokenizer tkz1(line, "'"); - - while (tkz1.HasMoreTokens()) - { - token = tkz1.GetNextToken(); - if (0 == fmod((double)i,2)) - token.Replace(delimit,"\t"); - temp_line << token; - i++; - }; - //Replace back all replacers to the original value - temp_line.Replace("\5", "\""); - temp_line.Replace("\6", "'"); - line = temp_line; -} - -wxBitmap mmUnivCSVDialog::GetBitmapResource(const wxString& /*name*/) -{ - return wxNullBitmap; -} - -wxIcon mmUnivCSVDialog::GetIconResource(const wxString& /*name*/) -{ - return wxNullIcon; -} - -//Selection dialog for fields to be added to listbox -void mmUnivCSVDialog::OnAdd(wxCommandEvent& /*event*/) -{ - int index = csvFieldCandicate_->GetSelection(); - if (index != wxNOT_FOUND) - { - mmListBoxItem* item = (mmListBoxItem*)csvFieldCandicate_->GetClientObject(index); - - csvListBox_->Append(item->getName(), new mmListBoxItem(item->getIndex(), item->getName())); - csvFieldOrder_.push_back(item->getIndex()); - - if (item->getIndex() != UNIV_CSV_DONTCARE) - { - csvFieldCandicate_->Delete(index); - if (index < (int)csvFieldCandicate_->GetCount()) - csvFieldCandicate_->SetSelection(index, true); - else - csvFieldCandicate_->SetSelection(csvFieldCandicate_->GetCount() - 1, true); - } - - this->update_preview(); - } -} - -//Removes an item from the field list box -void mmUnivCSVDialog::OnRemove(wxCommandEvent& /*event*/) -{ - int index = csvListBox_->GetSelection(); - if (index != wxNOT_FOUND) - { - mmListBoxItem *item = (mmListBoxItem*)csvListBox_->GetClientObject(index); - int item_index = item->getIndex(); - wxString item_name = item->getName(); - - if (item_index != UNIV_CSV_DONTCARE) - { - int pos = 0; - for (pos = 0; pos < (int)csvFieldCandicate_->GetCount() - 1; pos ++) - { - mmListBoxItem *item = (mmListBoxItem*)csvFieldCandicate_->GetClientObject(pos); - if (item_index < item->getIndex()) - break; - } - csvFieldCandicate_->Insert(item_name, pos, new mmListBoxItem(item_index, item_name)); - } - - csvListBox_->Delete(index); - csvFieldOrder_.erase(csvFieldOrder_.begin() + index); - - if (index < (int)csvListBox_->GetCount()) - csvListBox_->SetSelection(index, true); - else - csvListBox_->SetSelection(csvListBox_->GetCount() - 1, true); - - this->update_preview(); - } -} - -bool mmUnivCSVDialog::isIndexPresent(int index) const -{ - for(std::vector<int>::const_iterator it = csvFieldOrder_.begin(); it != csvFieldOrder_.end(); ++ it) - { - if (*it == index) return true; - } - - return false; -} - -const wxString mmUnivCSVDialog::getCSVFieldName(int index) const -{ - std::map<int, wxString>::const_iterator it = CSVFieldName_.find(index); - if (it != CSVFieldName_.end()) - return it->second; - - return _("Unknown"); -} - -void mmUnivCSVDialog::OnLoad(wxCommandEvent& /*event*/) -{ - wxString fileName = wxFileSelector(_("Choose Universal CSV format file to load"), - wxEmptyString, wxEmptyString, wxEmptyString, "CSV Template(*.mcv)|*.mcv", wxFD_FILE_MUST_EXIST); - if (!fileName.empty()) - { - wxTextFile tFile(fileName); - if (!tFile.Open()) - { - wxMessageBox(_("Unable to open file."), _("Universal CSV Import"), wxOK|wxICON_WARNING); - return; - } - csvFieldOrder_.clear(); - csvListBox_->Clear(); - - wxString str; - for (str = tFile.GetFirstLine(); !tFile.Eof(); str = tFile.GetNextLine()) - { - long num = 0; - if (str.ToLong(&num)) - { - wxString item_name = getCSVFieldName(num); - csvListBox_->Append(item_name, new mmListBoxItem(num, item_name)); - csvFieldOrder_.push_back(num); - } - } - // update csvFieldCandicate_ - csvFieldCandicate_->Clear(); - for (std::map<int, wxString>::const_iterator it = CSVFieldName_.begin(); it != CSVFieldName_.end(); ++ it) - { - std::vector<int>::const_iterator loc = find(csvFieldOrder_.begin(), csvFieldOrder_.end(), it->first); - if (loc == csvFieldOrder_.end() || it->first == UNIV_CSV_DONTCARE) - csvFieldCandicate_->Append(it->second, new mmListBoxItem(it->first, it->second)); - } - - tFile.Write(); - tFile.Close(); - - this->update_preview(); - } -} - -//Saves the field order to a template file -void mmUnivCSVDialog::OnSave(wxCommandEvent& /*event*/) -{ - wxString fileName = wxFileSelector(_("Choose Universal CSV format file to save"), - wxEmptyString, wxEmptyString, wxEmptyString, "CSV Template(*.mcv)|*.mcv", wxFD_SAVE); - if (!fileName.empty()) - { - correctEmptyFileExt("mcv",fileName); - - wxTextFile tFile(fileName); - //if the file does not exist and cannot be created, throw an error - //if the file does exist, then skip to else section - if (!tFile.Exists() && !tFile.Create()) - { - wxMessageBox(_("Unable to write to file."), _("Universal CSV Import"), wxOK|wxICON_WARNING); - return; - } - else - { - //clear the contents of the current file - tFile.Clear(); - for (std::vector<int>::const_iterator it = csvFieldOrder_.begin(); it != csvFieldOrder_.end(); ++ it) - { - wxString line = wxString::Format("%d", *it); - tFile.AddLine(line); - } - } - tFile.Write(); - tFile.Close(); - } -} - -void mmUnivCSVDialog::OnImport(wxCommandEvent& /*event*/) -{ - // date, amount, payee are required - if (!isIndexPresent(UNIV_CSV_DATE) || - !isIndexPresent(UNIV_CSV_PAYEE) || - (!isIndexPresent(UNIV_CSV_AMOUNT) && (!isIndexPresent(UNIV_CSV_WITHDRAWAL) || - !isIndexPresent(UNIV_CSV_DEPOSIT)))) - { - wxMessageBox(_("Incorrect fields specified for CSV import! Requires at least Date, Amount and Payee."), - _("Universal CSV Import"), wxOK|wxICON_WARNING); - return; - } - - bool canceledbyuser = false; - wxString acctName = m_choice_account_->GetStringSelection(); - Model_Account::Data* from_account = Model_Account::instance().get(acctName); - - if (from_account) - { - wxString fileName = m_text_ctrl_->GetValue(); - wxFileName csv_file(fileName); - if (fileName.IsEmpty() || !csv_file.FileExists()) - { - return; - } - else - { - wxTextFile tFile(fileName); - if (!tFile.Open()) - { - wxMessageBox(_("Unable to open file."), _("Universal CSV Import"), wxOK|wxICON_WARNING); - return; - } - - wxFileName logFile = mmex::GetLogDir(true); - logFile.SetFullName(fileName); - logFile.SetExt("txt"); - - wxFileOutputStream outputLog(logFile.GetFullPath()); - wxTextOutputStream log(outputLog); - - /* date, payeename, amount(+/-), Number, status, category : subcategory, notes */ - long countNumTotal = 0; - long countImported = 0; - - std::vector<int> CSV_transID; - - wxProgressDialog progressDlg(_("Universal CSV Import"), - _("Transactions imported from CSV: "), 100, - NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_CAN_ABORT); - Model_Checking::instance().Begin(); - - wxString line; - for (line = tFile.GetFirstLine(); !tFile.Eof(); line = tFile.GetNextLine()) - { - wxString progressMsg; - progressMsg << _("Transactions imported from CSV\nto account ") << acctName << ": " << countImported; - if (!progressDlg.Update(static_cast<int>((static_cast<double>(countImported)/100.0 - - countNumTotal/100) *99), progressMsg)) - { - canceledbyuser = true; - break; // abort processing - } - - if (!line.IsEmpty()) - ++countNumTotal; - else - continue; - - dt_.clear(); - payee_.clear(); - type_.clear(); - amount_.clear(); - categ_.clear(); - subcateg_.clear(); - transNum_.clear(); - notes_.clear(); - payeeID_ = -1; - categID_ = -1; - subCategID_ = -1; - val_ = 0.0; - - this->csv2tab_separated_values(line, delimit_); - wxStringTokenizer tkz(line, "\t", wxTOKEN_RET_EMPTY_ALL); - int numTokens = (int)tkz.CountTokens(); - if (numTokens < (int)csvFieldOrder_.size()) - { - log << _("Line : ") << wxString::Format("%ld", countNumTotal) - << _(" file contains insufficient number of tokens") << endl; - *log_field_ << _("Line : ") << wxString::Format("%ld", countNumTotal) - << _(" file contains insufficient number of tokens") << "\n"; - continue; - } - - std::vector<wxString> tokens; - while (tkz.HasMoreTokens()) - { - wxString token = tkz.GetNextToken(); - tokens.push_back(token); - } - - for (size_t i = 0; i < csvFieldOrder_.size(); ++i) - { - if (tokens.size() >= i) - { - parseToken(csvFieldOrder_[i], tokens[i]); - } - } - - if (dt_.Trim().IsEmpty() || payeeID_ == -1 || - amount_.Trim().IsEmpty() || type_.Trim().IsEmpty()) - { - log << _("Line : ") << wxString::Format("%ld", countNumTotal) - << _(" One of the following fields: Date, Payee, Amount, Type is missing, skipping") << endl; - *log_field_ << _("Line : ") << wxString::Format("%ld", countNumTotal) - << _(" One of the following fields: Date, Payee, Amount, Type is missing, skipping") << "\n"; - continue; - } - - if (categID_ == -1) - { - Model_Payee::Data* payee = Model_Payee::instance().get(payeeID_); - if (payee) - { - categID_ = payee->CATEGID; - subCategID_ = payee->SUBCATEGID; - } - } - - wxString status = "F"; - int toAccountID = -1; - - Model_Checking::Data *pTransaction = Model_Checking::instance().create(); - pTransaction->ACCOUNTID = fromAccountID_; - pTransaction->TOACCOUNTID = toAccountID; - pTransaction->PAYEEID = payeeID_; - pTransaction->TRANSCODE = type_; - pTransaction->TRANSAMOUNT = val_; - pTransaction->STATUS = status; - pTransaction->TRANSACTIONNUMBER = transNum_; - pTransaction->NOTES = notes_; - pTransaction->TRANSDATE = dtdt_.FormatISODate(); - pTransaction->TOTRANSAMOUNT = 0.0; - - Model_Checking::instance().save(pTransaction); - int transID = pTransaction->TRANSID; - CSV_transID.push_back(transID); - - countImported++; - log << wxString::Format(_("Line : %ld imported OK."), countNumTotal) << endl; - *log_field_ << wxString::Format(_("Line : %ld imported OK."), countNumTotal) << "\n"; - } - - progressDlg.Destroy(); - - //FIXME: %ld - wxString msg = wxString::Format(_("Total Lines : %d"), countNumTotal); - msg << "\n"; - msg << wxString::Format(_("Total Imported : %d"), countImported); - msg << "\n\n"; - msg << wxString::Format(_("Log file written to : %s"), logFile.GetFullPath()); - msg << "\n\n"; - - wxString confirmMsg = msg + _("Please confirm saving..."); - if (!canceledbyuser && wxMessageBox(confirmMsg, _("Importing CSV"), wxOK|wxCANCEL|wxICON_INFORMATION) == wxCANCEL) - canceledbyuser = true; - - if (countImported > 0) - msg << _ ("Imported transactions have been flagged so you can review them."); - - // Since all database transactions are only in memory, - if (!canceledbyuser) - { - // we need to save them to the database. - Model_Checking::instance().Commit(); - importSuccessful_ = true; - msg << _("Transactions saved to database in account: ") << acctName; - } - else - { - // and discard the database changes. - Model_Checking::instance().Rollback(); - msg << _("Imported transactions discarded by user!"); - } - - *log_field_ << msg; - - outputLog.Close(); - //clear the vector to avoid memory leak - done at same level created. - CSV_transID.clear(); - } - } - - if (!canceledbyuser) Close(); -} - -void mmUnivCSVDialog::OnExport(wxCommandEvent& /*event*/) -{ - wxString delimit = this->delimit_; - wxString acctName = m_choice_account_->GetStringSelection(); - Model_Account::Data* from_account = Model_Account::instance().get(acctName); - int fromAccountID = from_account->ACCOUNTID; - - if(from_account) - { - wxString chooseExt; - chooseExt << _("CSV Files") << " (*.csv)|*.csv;*.CSV"; - wxString fileName = wxFileSelector(_("Choose CSV data file to Export"), - wxEmptyString, wxEmptyString, wxEmptyString, chooseExt, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); - if (fileName.empty()) return; - - correctEmptyFileExt("csv",fileName); - - wxFileOutputStream output(fileName); - wxTextOutputStream text(output); - wxString buffer; - wxDateTime trx_date; - - long numRecords = 0; - Model_Currency::Data* currency = Model_Account::currency(from_account); - - for (const auto& pBankTransaction: Model_Checking::instance().all()) - { - if (pBankTransaction.ACCOUNTID != fromAccountID && pBankTransaction.TOACCOUNTID == fromAccountID) continue; - { - Model_Payee::Data* payee = Model_Payee::instance().get(pBankTransaction.PAYEEID); - int fAccountID = pBankTransaction.ACCOUNTID; - int tAccountID = pBankTransaction.TOACCOUNTID; - const wxString& amtSeparator = currency->GROUP_SEPARATOR; - - double value = pBankTransaction.TRANSAMOUNT; - double tovalue = 0; - wxString toamount = ""; - double value_temp = value; - - if (Model_Checking::type(pBankTransaction) == Model_Checking::TRANSFER) - { - tovalue = pBankTransaction.TOTRANSAMOUNT; - - if (tAccountID == fromAccountID) { - value = tovalue; - tovalue = -value_temp; - } else if (fAccountID == fromAccountID) { - value = -value; - } - toamount = adjustedExportAmount(amtSeparator,wxString()<<tovalue); - CurrencyFormatter::formatCurrencyToDouble(toamount, tovalue); - toamount = CurrencyFormatter::float2String(tovalue); - } - else if (Model_Checking::type(pBankTransaction) == Model_Checking::WITHDRAWAL) - value = -value; - - wxString amount = adjustedExportAmount(amtSeparator, wxString()<<value); - CurrencyFormatter::formatCurrencyToDouble(amount, value); - amount = CurrencyFormatter::float2String(value); - - wxString amount_tmp = CurrencyFormatter::float2String(-value); - - buffer = ""; - Model_Category::Data* category = Model_Category::instance().get(pBankTransaction.CATEGID); - Model_Subcategory::Data* sub_category = Model_Subcategory::instance().get(pBankTransaction.SUBCATEGID); - for (std::vector<int>::const_iterator sit = csvFieldOrder_.begin(); sit != csvFieldOrder_.end(); ++ sit) - { - switch (*sit) - { - case UNIV_CSV_DATE: - trx_date = Model_Checking::TRANSDATE(pBankTransaction); - buffer << inQuotes(trx_date.Format(date_format_), delimit); - break; - case UNIV_CSV_PAYEE: - buffer << inQuotes(payee ? payee->PAYEENAME : "", delimit); - break; - case UNIV_CSV_AMOUNT: - buffer << inQuotes(amount, delimit); - break; - case UNIV_CSV_CATEGORY: - buffer << inQuotes(category ? category->CATEGNAME : "", delimit); - break; - case UNIV_CSV_SUBCATEGORY: - buffer << inQuotes(sub_category ? sub_category->SUBCATEGNAME : "" , delimit); - break; - case UNIV_CSV_TRANSNUM: - buffer << inQuotes(pBankTransaction.TRANSACTIONNUMBER, delimit); - break; - case UNIV_CSV_NOTES: - buffer << inQuotes(wxString(pBankTransaction.NOTES).Trim(), delimit); - break; - case UNIV_CSV_DEPOSIT: - buffer << inQuotes((value > 0.0) ? amount : "", delimit); - break; - case UNIV_CSV_WITHDRAWAL: - text << inQuotes(value >= 0.0 ? "" : amount_tmp, delimit); - break; - case UNIV_CSV_TOAMOUNT: - buffer << inQuotes(toamount, delimit); - break; - case UNIV_CSV_DONTCARE: - default: - break; - } - - buffer << delimit; - } - - buffer.RemoveLast(1); - text << buffer << endl; - *log_field_ << buffer << "\n"; - - ++ numRecords; - } - } - - wxString msg = wxString::Format(wxTRANSLATE("Transactions exported: %ld"), numRecords); - mmShowErrorMessage(this, wxGetTranslation(msg), _("Export to CSV")); - } -} - -void mmUnivCSVDialog::update_preview() -{ - this->m_list_ctrl_->ClearAll(); - long index = 0; - this->m_list_ctrl_->InsertColumn(index, _("#")); - this->m_list_ctrl_->SetColumnWidth(index, 30); - int date_position = 0; - - for (std::vector<int>::const_iterator it = csvFieldOrder_.begin(); it != csvFieldOrder_.end(); ++ it) - { - ++ index; - wxString item_name = this->getCSVFieldName(*it); - this->m_list_ctrl_->InsertColumn(index, item_name); - if (item_name == _("Notes")) - this->m_list_ctrl_->SetColumnWidth(index, 300); - else if (item_name == _("Date")) { - date_position = index; - } - - } - - //TODO re use code in OnImport & OnExport - if (this->is_importer_) - { - wxString fileName = m_text_ctrl_->GetValue(); - wxFileName csv_file(fileName); - - if (!fileName.IsEmpty() && csv_file.FileExists()) - { - wxTextFile tFile(fileName); - if (!tFile.Open()) - { - wxMessageBox(_("Unable to open file."), _("Universal CSV Import"), wxOK|wxICON_WARNING); - return; - } - - wxString delimit = this->delimit_; - wxString line; - size_t count = 0; - int row = 0; - for (line = tFile.GetFirstLine(); !tFile.Eof(); line = tFile.GetNextLine()) - { - this->csv2tab_separated_values(line, delimit); - wxStringTokenizer tkz(line, "\t", wxTOKEN_RET_EMPTY_ALL); - - int col = 0; - wxString buf; - buf.Printf(_T("%d"), col); - long itemIndex = m_list_ctrl_->InsertItem(row, buf, 0); - buf.Printf(_T("%d"), row + 1); - m_list_ctrl_->SetItem(itemIndex, col, buf); - while (tkz.HasMoreTokens()) - { - ++ col; - wxString token = tkz.GetNextToken(); - - if (col >= m_list_ctrl_->GetColumnCount()) - break; - else - { - m_list_ctrl_->SetItem(itemIndex, col, token); - } - } - - if (++ count >= 10) break; - ++ row; - } - } - } - else // exporter preview - { - wxString date_format = Model_Infotable::instance().GetStringInfo("DATEFORMAT", mmex::DEFDATEFORMAT); - wxString acctName = m_choice_account_->GetStringSelection(); - Model_Account::Data* from_account = Model_Account::instance().get(acctName); - int fromAccountID = from_account->ACCOUNTID; - - if (from_account) - { - size_t count = 0; - int row = 0; - wxString delimit = this->delimit_; - Model_Currency::Data* currency = Model_Account::currency(from_account); - - for (const auto& pBankTransaction: Model_Checking::instance().all()) - { - if (pBankTransaction.ACCOUNTID != fromAccountID && pBankTransaction.TOACCOUNTID == fromAccountID) continue; - { - Model_Payee::Data* payee = Model_Payee::instance().get(pBankTransaction.PAYEEID); - int fAccountID = pBankTransaction.ACCOUNTID; - int tAccountID = pBankTransaction.TOACCOUNTID; - const wxString amtSeparator = currency->GROUP_SEPARATOR; - - double value = pBankTransaction.TRANSAMOUNT; - double tovalue = 0; - wxString toamount = ""; - double value_temp = value; - - if (Model_Checking::type(pBankTransaction) == Model_Checking::TRANSFER) - { - Model_Account::Data* to_account = Model_Account::instance().get(tAccountID); - const wxString fromAccount = from_account->ACCOUNTNAME; - const wxString toAccount = to_account->ACCOUNTNAME; - tovalue = pBankTransaction.TOTRANSAMOUNT; - - if (tAccountID == fromAccountID) { - value = tovalue; - tovalue = -value_temp; - } else if (fAccountID == fromAccountID) { - value = -value; - } - toamount = adjustedExportAmount(amtSeparator,wxString()<<tovalue); - CurrencyFormatter::formatCurrencyToDouble(toamount, tovalue); - toamount = CurrencyFormatter::float2String(tovalue); - } - else if (Model_Checking::type(pBankTransaction) == Model_Checking::WITHDRAWAL) - value = -value; - - wxString amount = adjustedExportAmount(amtSeparator, wxString()<<value); - CurrencyFormatter::formatCurrencyToDouble(amount, value); - amount = CurrencyFormatter::float2String(value); - - wxString amount_tmp = CurrencyFormatter::float2String(-value); - - int col = 0; - wxString buf; - buf.Printf(_T("%d"), col); - long itemIndex = m_list_ctrl_->InsertItem(row, buf, 0); - buf.Printf(_T("%d"), row + 1); - m_list_ctrl_->SetItem(itemIndex, col, buf); - - Model_Category::Data* category = Model_Category::instance().get(pBankTransaction.CATEGID); - Model_Subcategory::Data* sub_category = Model_Subcategory::instance().get(pBankTransaction.SUBCATEGID); - for (std::vector<int>::const_iterator sit = csvFieldOrder_.begin(); sit != csvFieldOrder_.end(); ++ sit) - { - ++ col; - wxString text; - switch (*sit) - { - case UNIV_CSV_DATE: //TODO: Proper date format - text << inQuotes(mmGetDateForDisplay(Model_Checking::TRANSDATE(pBankTransaction)), delimit); - break; - case UNIV_CSV_PAYEE: - text << inQuotes( (Model_Checking::type(pBankTransaction) != Model_Checking::TRANSFER ? payee->PAYEENAME : "" ), delimit); - break; - case UNIV_CSV_AMOUNT: - text << inQuotes(amount, delimit); - break; - case UNIV_CSV_CATEGORY: - text << inQuotes(category->CATEGNAME, delimit); - break; - case UNIV_CSV_SUBCATEGORY: - text << inQuotes(sub_category ? sub_category->SUBCATEGNAME : "", delimit); - break; - case UNIV_CSV_TRANSNUM: - text << inQuotes(pBankTransaction.TRANSACTIONNUMBER, delimit); - break; - case UNIV_CSV_NOTES: - text << inQuotes(wxString(pBankTransaction.NOTES).Trim(), delimit); - break; - case UNIV_CSV_DEPOSIT: - text << inQuotes(value > 0.0 ? amount : "", delimit); - break; - case UNIV_CSV_WITHDRAWAL: - text << inQuotes(value >= 0.0 ? "" : amount_tmp, delimit); - break; - case UNIV_CSV_TOAMOUNT: - text << inQuotes(toamount, delimit); - break; - case UNIV_CSV_DONTCARE: - default: - break; - } - if (col >= m_list_ctrl_->GetColumnCount()) - break; - else - { - if (col == date_position) - { - wxDateTime dtdt; - mmParseDisplayStringToDate(dtdt, text, date_format); - text = dtdt.Format(date_format); - } - m_list_ctrl_->SetItem(itemIndex, col, text); - } - - } - if (++ count >= 10) break; - ++ row; - } - } - } - } -} - -void mmUnivCSVDialog::OnMoveUp(wxCommandEvent& /*event*/) -{ - int index = csvListBox_->GetSelection(); - if (index != wxNOT_FOUND && index != 0) - { - mmListBoxItem* item = (mmListBoxItem*)csvListBox_->GetClientObject(index); - int item_index = item->getIndex(); - wxString item_name = item->getName(); - - csvListBox_->Delete(index); - csvListBox_->Insert(item_name, index - 1, new mmListBoxItem(item_index, item_name)); - - csvListBox_->SetSelection(index - 1, true); - std::swap(csvFieldOrder_[index - 1], csvFieldOrder_[index]); - - this->update_preview(); - } -} - -void mmUnivCSVDialog::OnMoveDown(wxCommandEvent& /*event*/) -{ - int index = csvListBox_->GetSelection(); - if (index != wxNOT_FOUND && index != (int)csvListBox_->GetCount() - 1) - { - mmListBoxItem* item = (mmListBoxItem*)csvListBox_->GetClientObject(index); - int item_index = item->getIndex(); - wxString item_name = item->getName(); - - csvListBox_->Delete(index); - csvListBox_->Insert(item_name, index + 1, new mmListBoxItem(item_index, item_name)); - - csvListBox_->SetSelection(index + 1, true); - std::swap(csvFieldOrder_[index + 1], csvFieldOrder_[index]); - - this->update_preview(); - } -} - -void mmUnivCSVDialog::OnStandard(wxCommandEvent& /*event*/) -{ - csvListBox_->Clear(); - csvFieldOrder_.clear(); - int standard[] = {UNIV_CSV_DATE, UNIV_CSV_PAYEE, UNIV_CSV_AMOUNT, UNIV_CSV_CATEGORY, UNIV_CSV_SUBCATEGORY, UNIV_CSV_TRANSNUM, UNIV_CSV_NOTES, UNIV_CSV_TOAMOUNT}; - for (size_t i = 0; i < sizeof(standard)/sizeof(UNIV_CSV_DATE); ++ i) - { - csvListBox_->Append(CSVFieldName_[standard[i]], new mmListBoxItem(standard[i], CSVFieldName_[standard[i]])); - csvFieldOrder_.push_back(standard[i]); - } - - csvFieldCandicate_->Clear(); - int rest[] = {UNIV_CSV_DONTCARE, UNIV_CSV_WITHDRAWAL, UNIV_CSV_DEPOSIT}; - for (size_t i = 0; i < sizeof(rest)/sizeof(UNIV_CSV_DATE); ++ i) - { - csvFieldCandicate_->Append(CSVFieldName_[rest[i]], new mmListBoxItem(rest[i], CSVFieldName_[rest[i]])); - } - - update_preview(); -} - -void mmUnivCSVDialog::OnSearch(wxCommandEvent& /*event*/) -{ - wxString fileName = m_text_ctrl_->GetValue(); - - fileName = wxFileSelector(_("Choose CSV data file to import"), - wxEmptyString, fileName, wxEmptyString, "*.csv", wxFD_FILE_MUST_EXIST); - - if (!fileName.IsEmpty()) - { - m_text_ctrl_->SetValue(fileName); - - wxTextFile tFile(fileName); - if (!tFile.Open()) - { - *log_field_ << _("Unable to open file.") << "\n"; - return; - } - - wxString line; - size_t count = 0; - for (line = tFile.GetFirstLine(); !tFile.Eof(); line = tFile.GetNextLine()) - { - *log_field_ << line << "\n"; - if (++ count >= 10) break; - } - *log_field_ << "\n"; - this->update_preview(); - } -} - -void mmUnivCSVDialog::OnAccountChange(wxCommandEvent& event) -{ - int sel = event.GetInt(); - if (sel != wxNOT_FOUND) - { - update_preview(); - } - wxString acctName = m_choice_account_->GetStringSelection(); - Model_Account::Data* account = Model_Account::instance().get(acctName); - Model_Currency::Data* currency = Model_Account::currency(account); - *log_field_ << _("Currency:") << " " << currency->CURRENCYNAME << "\n"; -} - -void mmUnivCSVDialog::OnListBox(wxCommandEvent& event) -{ - int sel = event.GetInt(); - if (sel != wxNOT_FOUND) - { - //TODO update relate widget status - } -} - -void mmUnivCSVDialog::OnCheckOrRadioBox(wxCommandEvent& event) -{ - wxString ud_delimit = textDelimiter4->GetValue(); - - switch(m_radio_box_->GetSelection()) - { - case 0: - delimit_ = ","; - textDelimiter4->Disable(); - break; - case 1: - delimit_ = ";"; - textDelimiter4->Disable(); - break; - case 2: - delimit_ = "\t"; - textDelimiter4->Disable(); - break; - case 3: - delimit_ = ud_delimit; - textDelimiter4->Enable(); - break; - default: - break; - } - - textDelimiter4->SetEvtHandlerEnabled(false); - textDelimiter4->SetValue(delimit_); - textDelimiter4->SetEvtHandlerEnabled(true); - event.Skip(); - - if (!delimit_.IsEmpty()) this->update_preview(); -} - -void mmUnivCSVDialog::parseToken(int index, wxString& token) -{ - if (token.Trim().IsEmpty()) return; - Model_Payee::Data* payee = 0; - Model_Category::Data* category = 0; - Model_Subcategory::Data* sub_category = 0; - - switch (index) - { - case UNIV_CSV_DATE: - mmParseDisplayStringToDate(dtdt_, token, date_format_); - dt_ = dtdt_.GetDateOnly().FormatISODate(); - break; - - case UNIV_CSV_PAYEE: - payee = Model_Payee::instance().get(token); - if (!payee) - { - payee = Model_Payee::instance().create(); - payee->PAYEENAME = token; - Model_Payee::instance().save(payee); - } - - payeeID_ = payee->PAYEEID; - break; - - case UNIV_CSV_AMOUNT: - token.Replace(" ", wxEmptyString); - - if (! CurrencyFormatter::formatCurrencyToDouble(token, val_)) return; - - if (val_ <= 0.0) - type_ = TRANS_TYPE_WITHDRAWAL_STR; - else - type_ = TRANS_TYPE_DEPOSIT_STR; - - val_ = fabs(val_); - amount_ = token; - break; - - case UNIV_CSV_CATEGORY: - category = Model_Category::instance().get(token); - if (!category) - { - category = Model_Category::instance().create(); - category->CATEGNAME = token; - Model_Category::instance().save(category); - } - - categID_ = category->CATEGID; - break; - - case UNIV_CSV_SUBCATEGORY: - if (categID_ == -1) - return; - - sub_category = (!token.IsEmpty() ? Model_Subcategory::instance().get(token, categID_) : 0); - if (!sub_category) - { - sub_category = Model_Subcategory::instance().create(); - sub_category->CATEGID = categID_; - sub_category->SUBCATEGNAME = token; - Model_Subcategory::instance().save(sub_category); - } - subCategID_ = sub_category->SUBCATEGID; - break; - - case UNIV_CSV_NOTES: - notes_ = token; - break; - - case UNIV_CSV_TRANSNUM: - transNum_ = token; - break; - - case UNIV_CSV_DONTCARE: - // do nothing - break; - - case UNIV_CSV_DEPOSIT: - if (!token.ToDouble(&val_)) return; - if (val_ <= 0.0) return; - - type_ = TRANS_TYPE_DEPOSIT_STR; - amount_ = token; - break; - - case UNIV_CSV_WITHDRAWAL: - if (!token.ToDouble(&val_)) return; - if (val_ <= 0.0) return; - - type_ = TRANS_TYPE_WITHDRAWAL_STR; - amount_ = token; - break; - - default: - wxASSERT(true); - break; - } -} - -void mmUnivCSVDialog::OnButtonClear(wxCommandEvent& /*event*/) -{ - log_field_->Clear(); -} - -void mmUnivCSVDialog::OnFileNameChanged(wxCommandEvent& event) -{ - wxString file_name = m_text_ctrl_->GetValue(); - if (file_name.Contains("\n") || file_name.Contains("file://")) - { - - file_name.Replace("\n", ""); -#ifdef __WXGTK__ - file_name.Replace("file://", ""); - file_name.Trim(); -#endif - m_text_ctrl_->SetEvtHandlerEnabled(false); - m_text_ctrl_->SetValue(file_name); - m_text_ctrl_->SetEvtHandlerEnabled(true); - } - event.Skip(); - - wxFileName csv_file(file_name); - if (csv_file.FileExists()) - this->update_preview(); -} -void mmUnivCSVDialog::OnFileNameEntered(wxCommandEvent& event) -{ - wxString file_name = m_text_ctrl_->GetValue(); - file_name.Trim(); - - event.Skip(); - wxCommandEvent evt(wxEVT_COMMAND_BUTTON_CLICKED, wxID_SEARCH); - this->GetEventHandler()->AddPendingEvent(evt); -} - -void mmUnivCSVDialog::OnDateFormatChanged(wxCommandEvent& /*event*/) -{ - this->update_preview(); - wxStringClientData* data = (wxStringClientData*)(choiceDateFormat_->GetClientObject(choiceDateFormat_->GetSelection())); - if (data) date_format_ = data->GetData(); - *log_field_ << date_format_ << "\n"; -} +/******************************************************* + Copyright (C) 2006 Madhan Kanagavel + + This program is free software; you can redistribute it and/or modify + 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 + ********************************************************/ +#include "constants.h" +#include "univcsvdialog.h" +#include "util.h" +#include "paths.h" +#include "platfdep.h" +#include "mmCurrencyFormatter.h" +#include <algorithm> +#include "model/Model_Infotable.h" +#include "model/Model_Payee.h" +#include "model/Model_Account.h" +#include "model/Model_Category.h" +#include "model/Model_Checking.h" + +IMPLEMENT_DYNAMIC_CLASS(mmUnivCSVDialog, wxDialog) + +BEGIN_EVENT_TABLE(mmUnivCSVDialog, wxDialog) + EVT_BUTTON(wxID_ADD, mmUnivCSVDialog::OnAdd) + EVT_BUTTON(ID_UNIVCSVBUTTON_IMPORT, mmUnivCSVDialog::OnImport) + EVT_BUTTON(ID_UNIVCSVBUTTON_EXPORT, mmUnivCSVDialog::OnExport) + EVT_BUTTON(wxID_REMOVE, mmUnivCSVDialog::OnRemove) + EVT_BUTTON(wxID_OPEN, mmUnivCSVDialog::OnLoad) + EVT_BUTTON(wxID_SAVEAS, mmUnivCSVDialog::OnSave) + EVT_BUTTON(wxID_UP, mmUnivCSVDialog::OnMoveUp) + EVT_BUTTON(wxID_DOWN, mmUnivCSVDialog::OnMoveDown) + EVT_BUTTON(wxID_STANDARD, mmUnivCSVDialog::OnStandard) + EVT_BUTTON(wxID_SEARCH, mmUnivCSVDialog::OnSearch) + EVT_CHOICE(wxID_ACCOUNT, mmUnivCSVDialog::OnAccountChange) + EVT_LISTBOX(ID_LISTBOX, mmUnivCSVDialog::OnListBox) + EVT_RADIOBOX(wxID_RADIO_BOX, mmUnivCSVDialog::OnCheckOrRadioBox) + EVT_CHOICE(ID_DIALOG_OPTIONS_DATE_FORMAT, mmUnivCSVDialog::OnDateFormatChanged) +END_EVENT_TABLE() + +//---------------------------------------------------------------------------- +mmUnivCSVDialog::mmUnivCSVDialog() +{ +} + +mmUnivCSVDialog::mmUnivCSVDialog( + wxWindow* parent, + bool is_importer, + wxWindowID id, + const wxString& caption, + const wxPoint& pos, + const wxSize& size, + long style +) : + is_importer_(is_importer), + delimit_(","), + importSuccessful_(false) +{ + CSVFieldName_[UNIV_CSV_DATE] = _("Date"); + CSVFieldName_[UNIV_CSV_PAYEE] = _("Payee"); + CSVFieldName_[UNIV_CSV_AMOUNT] = _("Amount(+/-)"); + CSVFieldName_[UNIV_CSV_CATEGORY] = _("Category"); + CSVFieldName_[UNIV_CSV_SUBCATEGORY] = _("SubCategory"); + CSVFieldName_[UNIV_CSV_TRANSNUM] = _("Number"); + CSVFieldName_[UNIV_CSV_NOTES] = _("Notes"); + CSVFieldName_[UNIV_CSV_DONTCARE] = _("Don't Care"); + CSVFieldName_[UNIV_CSV_WITHDRAWAL] = _("Withdrawal"); + CSVFieldName_[UNIV_CSV_DEPOSIT] = _("Deposit"); + CSVFieldName_[UNIV_CSV_TOAMOUNT] = _("To/From(+/-)"); + CSVFieldName_[UNIV_CSV_BALANCE] = _("Balance"); + + Create(parent, id, caption, pos, size, style); +} + +bool mmUnivCSVDialog::Create(wxWindow* parent, wxWindowID id, + const wxString& caption, + const wxPoint& pos, + const wxSize& size, + long style) +{ + SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); + wxDialog::Create(parent, id, caption, pos, size, style); + + CreateControls(); + GetSizer()->Fit(this); + GetSizer()->SetSizeHints(this); + + SetIcon(mmex::getProgramIcon()); + + Centre(); + + return TRUE; +} + +void mmUnivCSVDialog::CreateControls() +{ + wxSizerFlags flags, flagsExpand; + flags.Align(wxALIGN_LEFT|wxALIGN_TOP).Border(wxLEFT|wxRIGHT|wxTOP, 5); + flagsExpand.Align(wxALIGN_LEFT|wxALIGN_TOP).Border(wxLEFT|wxRIGHT|wxTOP, 5); + + // Define the staticBox font and set it as wxFONTWEIGHT_BOLD + wxFont staticBoxFontSetting = this->GetFont(); + staticBoxFontSetting.SetWeight(wxFONTWEIGHT_BOLD); + + wxBoxSizer* itemBoxSizer0 = new wxBoxSizer(wxVERTICAL); + this->SetSizer(itemBoxSizer0); + wxBoxSizer* itemBoxSizer1 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer0->Add(itemBoxSizer1, 7, wxGROW|wxALL, 0); + wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer1->Add(itemBoxSizer2, 8, wxGROW|wxALL, 5); + wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer1->Add(itemBoxSizer11, 5, wxGROW|wxALL, 5); + + wxStaticText* itemStaticText3 = new wxStaticText(this, wxID_STATIC, + _("Specify the order of fields in the CSV file")); + itemBoxSizer2->Add(itemStaticText3, flags); + itemStaticText3->SetFont(staticBoxFontSetting); + + wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5); + + //CSV fields candicate + csvFieldCandicate_ = new wxListBox(this, ID_LISTBOX_CANDICATE, + wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE|wxLB_NEEDED_SB); + itemBoxSizer3->Add(csvFieldCandicate_, 1, wxGROW|wxALL, 1); + for (const auto& it : CSVFieldName_) + csvFieldCandicate_->Append(it.second, new mmListBoxItem(it.first, it.second)); + + //Add Remove Area + wxPanel* itemPanel_AddRemove = new wxPanel(this, ID_PANEL10, + wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + itemBoxSizer3->Add(itemPanel_AddRemove, flags); + + wxBoxSizer* itemBoxSizer_AddRemove = new wxBoxSizer(wxVERTICAL); + itemPanel_AddRemove->SetSizer(itemBoxSizer_AddRemove); + + //Add button + m_button_add_= new wxButton(itemPanel_AddRemove, wxID_ADD); + itemBoxSizer_AddRemove->Add(m_button_add_, flags); + + //Remove button + m_button_remove_ = new wxButton(itemPanel_AddRemove, wxID_REMOVE); + itemBoxSizer_AddRemove->Add(m_button_remove_, flags); + + //Standard MMEX CSV + wxButton* itemButton_standard = new wxButton(itemPanel_AddRemove, wxID_STANDARD, _("&MMEX format")); + itemBoxSizer_AddRemove->Add(itemButton_standard, flags); + itemButton_standard->SetToolTip(_("MMEX standard format")); + + //ListBox of attribute order + csvListBox_ = new wxListBox(this, ID_LISTBOX, + wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE|wxLB_NEEDED_SB); + itemBoxSizer3->Add(csvListBox_, 1, wxGROW|wxALL, 1); + + //Arranger Area + wxPanel* itemPanel_Arranger = new wxPanel(this, ID_PANEL10, + wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + itemBoxSizer3->Add(itemPanel_Arranger, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 1); + + wxBoxSizer* itemBoxSizer_Arranger = new wxBoxSizer(wxVERTICAL); + itemPanel_Arranger->SetSizer(itemBoxSizer_Arranger); + + //Move Up button + wxButton*... [truncated message content] |
From: <vo...@us...> - 2013-11-09 17:35:11
|
Revision: 5145 http://sourceforge.net/p/moneymanagerex/code/5145 Author: vomikan Date: 2013-11-09 17:35:07 +0000 (Sat, 09 Nov 2013) Log Message: ----------- update Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-11-09 15:25:59 UTC (rev 5144) +++ trunk/src/import_export/qif_import.cpp 2013-11-09 17:35:07 UTC (rev 5145) @@ -9,102 +9,6 @@ #include "model/Model_Category.h" #include "model/Model_Currency.h" -enum qifAccountInfoType -{ - Name = 1, // N - AccountType = 2, // T - Description = 3, // D - CreditLimit = 4, // L - BalanceDate = 5, // / - Balance = 6, // $ - EOT = 7, // ^ - UnknownInfo = 8 -}; - -enum qifLineType -{ - AcctType = 1, // ! - Date = 2, // D - Amount = 3, // T - Address = 4, // A - Payee = 5, // P - EOTLT = 6, // ^ - TransNumber = 7, // N - Status = 8, // C - UnknownType = 9, - Memo = 10, // M - Category = 11, // L - CategorySplit = 12, // S - MemoSplit = 13, // E - AmountSplit = 14 // '$' -}; - -qifAccountInfoType accountInfoType(const wxString& line) -{ - if (line.IsEmpty()) - return UnknownInfo; - - wxChar fChar = line.GetChar(0); - switch(fChar) - { - case 'N': - return Name; - case 'T': - return AccountType; - case 'D': - return Description; - case 'L': - return CreditLimit; - case '/': - return BalanceDate; - case '$': - return Balance; - case '^': - return EOT; - default: - return UnknownInfo; - } -} - -qifLineType lineType(const wxString& line) -{ - if (line.IsEmpty()) - return UnknownType; - - wxChar fChar = line.GetChar(0); - switch(fChar) - { - case '!': - return AcctType; - case 'D': - return Date; - case 'N': - return TransNumber; - case 'P': - return Payee; - case 'A': - return Address; - case 'T': - return Amount; - case '^': - return EOTLT; - case 'M': - return Memo; - case 'L': - return Category; - case 'S': - return CategorySplit; - case 'E': - return MemoSplit; - case '$': - return AmountSplit; - case 'C': - return Status; - default: - return UnknownType; - } -} - IMPLEMENT_DYNAMIC_CLASS( mmQIFImportDialog, wxDialog ) BEGIN_EVENT_TABLE( mmQIFImportDialog, wxDialog ) @@ -380,6 +284,7 @@ Model_Payee::Data* payee = 0; //mmSplitTransactionEntries* mmSplit(new mmSplitTransactionEntries()); + Model_Splittransaction::Data_Set mmSplit; for (readLine = tFile.GetFirstLine(); !tFile.Eof(); readLine = tFile.GetNextLine()) { @@ -388,7 +293,7 @@ { sSplitAmount.clear(); sSplitCategs.clear(); - //mmSplit->entries_.clear(); + mmSplit.clear(); sPayee.clear(); type.clear(); @@ -631,13 +536,17 @@ // if (type == TRANS_TYPE_WITHDRAWAL_STR) dSplitAmount = -dSplitAmount; - //Add split entry //TODO: - /*mmSplitTransactionEntry* pSplitEntry(new mmSplitTransactionEntry); - pSplitEntry->splitAmount_ = dSplitAmount; - pSplitEntry->categID_ = categID; - pSplitEntry->subCategID_ = subCategID; - - mmSplit->addSplit(pSplitEntry);*/ + //Add split entry + //mmSplitTransactionEntry* pSplitEntry(new mmSplitTransactionEntry); + Model_Splittransaction::Data * pSplitEntry = Model_Splittransaction().instance().create(); + //pSplitEntry->splitAmount_ = dSplitAmount; + pSplitEntry->SPLITTRANSAMOUNT = dSplitAmount; + //pSplitEntry->categID_ = categID; + pSplitEntry->CATEGID = categID; + //pSplitEntry->subCategID_ = subCategID; + pSplitEntry->SUBCATEGID = subCategID; + //mmSplit->addSplit(pSplitEntry); + //mmSplit.at.push_back(pSplitEntry); TODO: how to???? continue; } //MemoSplit @@ -683,7 +592,7 @@ } to_account_id = -1; - if (type == TRANS_TYPE_TRANSFER_STR) + if (type == Model_Checking::all_type()[Model_Checking::TRANSFER]) { Model_Account::Data* account = Model_Account::instance().get(sToAccountName); if (!account) @@ -723,9 +632,9 @@ else { if (val > 0.0) - type = TRANS_TYPE_DEPOSIT_STR; + type = Model_Checking::all_type()[Model_Checking::DEPOSIT]; else if (val < 0.0) - type = TRANS_TYPE_WITHDRAWAL_STR; + type = Model_Checking::all_type()[Model_Checking::WITHDRAWAL]; else bValid = false; @@ -753,13 +662,13 @@ } } - //if (!mmSplit->entries_.empty()) - //{ - // categID = -1; - // sFullCateg = _("Split Category"); - //} - //else + if (mmSplit.empty()) { + categID = -1; + sFullCateg = _("Split Category"); + } + else + { Model_Category::Data* category = Model_Category::instance().get(categID); Model_Subcategory::Data* sub_category = (subCategID != -1 ? Model_Subcategory::instance().get(subCategID) : 0); sFullCateg = Model_Category::full_name(category, sub_category); @@ -793,20 +702,21 @@ ); logWindow->AppendText(sMsg); - /*for (size_t i = 0; i < mmSplit->entries_.size(); ++i) + //for (size_t i = 0; i < mmSplit->entries_.size(); ++i) + for (const auto &split_entry : mmSplit) { - int c = mmSplit->entries_[i]->categID_; - int s = mmSplit->entries_[i]->subCategID_; + int c = split_entry.CATEGID; //mmSplit->entries_[i]->categID_; + int s = split_entry.SUBCATEGID; //mmSplit->entries_[i]->subCategID_; Model_Category::Data* category = Model_Category::instance().get(c); Model_Subcategory::Data* sub_category = (s != -1 ? Model_Subcategory::instance().get(s) : 0); wxString cn = category->CATEGNAME; wxString sn = (sub_category ? sub_category->SUBCATEGNAME : ""); - double v = mmSplit->entries_[i]->splitAmount_; + double v = split_entry.SPLITTRANSAMOUNT; // mmSplit->entries_[i]->splitAmount_; sMsg = (cn << ":" << sn << " " << v << "\n"); logWindow->AppendText(sMsg); - }*/ + } bTrxComplited = true; if (!bValid) continue; @@ -821,7 +731,7 @@ transaction->TRANSACTIONNUMBER = transNum; transaction->NOTES = notes; transaction->TOTRANSAMOUNT = val; - //if (mmSplit->numEntries()) categID = -1; + if (!mmSplit.empty()) categID = -1; transaction->CATEGID = categID; transaction->SUBCATEGID = subCategID; Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-11-09 15:25:59 UTC (rev 5144) +++ trunk/src/import_export/qif_import.h 2013-11-09 17:35:07 UTC (rev 5145) @@ -100,5 +100,102 @@ COL_MAX, // number of columns }; std::map<int, wxString> ColName_; + + enum qifAccountInfoType + { + Name = 1, // N + AccountType = 2, // T + Description = 3, // D + CreditLimit = 4, // L + BalanceDate = 5, // / + Balance = 6, // $ + EOT = 7, // ^ + UnknownInfo = 8 + }; + + enum qifLineType + { + AcctType = 1, // ! + Date = 2, // D + Amount = 3, // T + Address = 4, // A + Payee = 5, // P + EOTLT = 6, // ^ + TransNumber = 7, // N + Status = 8, // C + UnknownType = 9, + Memo = 10, // M + Category = 11, // L + CategorySplit = 12, // S + MemoSplit = 13, // E + AmountSplit = 14 // '$' + }; + + qifAccountInfoType accountInfoType(const wxString& line) + { + if (line.IsEmpty()) + return UnknownInfo; + + wxChar fChar = line.GetChar(0); + switch (fChar) + { + case 'N': + return Name; + case 'T': + return AccountType; + case 'D': + return Description; + case 'L': + return CreditLimit; + case '/': + return BalanceDate; + case '$': + return Balance; + case '^': + return EOT; + default: + return UnknownInfo; + } + } + + qifLineType lineType(const wxString& line) + { + if (line.IsEmpty()) + return UnknownType; + + wxChar fChar = line.GetChar(0); + switch (fChar) + { + case '!': + return AcctType; + case 'D': + return Date; + case 'N': + return TransNumber; + case 'P': + return Payee; + case 'A': + return Address; + case 'T': + return Amount; + case '^': + return EOTLT; + case 'M': + return Memo; + case 'L': + return Category; + case 'S': + return CategorySplit; + case 'E': + return MemoSplit; + case '$': + return AmountSplit; + case 'C': + return Status; + default: + return UnknownType; + } + } + }; #endif // This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-11-14 12:09:43
|
Revision: 5235 http://sourceforge.net/p/moneymanagerex/code/5235 Author: vomikan Date: 2013-11-14 12:09:37 +0000 (Thu, 14 Nov 2013) Log Message: ----------- split support Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-11-13 20:56:33 UTC (rev 5234) +++ trunk/src/import_export/qif_import.cpp 2013-11-14 12:09:37 UTC (rev 5235) @@ -192,8 +192,8 @@ wxStdDialogButtonSizer* buttons_sizer = new wxStdDialogButtonSizer; buttons_panel->SetSizer(buttons_sizer); - btnOK_ = new wxButton( buttons_panel, wxID_OK, _("&OK")); - wxButton* itemButtonCancel_ = new wxButton( buttons_panel, wxID_CANCEL, _("&Cancel")); + btnOK_ = new wxButton( buttons_panel, wxID_OK, _("&OK ")); + wxButton* itemButtonCancel_ = new wxButton( buttons_panel, wxID_CANCEL, _("&Cancel ")); btnOK_->Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler(mmQIFImportDialog::OnOk), NULL, this); @@ -770,8 +770,9 @@ //Just take alternate amount and skip it if (Model_Checking::type(transaction) == Model_Checking::TRANSFER) { - for (auto& refTrans : vQIF_trxs_) + for (auto& refTransaction : vQIF_trxs_) { + auto *refTrans(refTransaction.first); if (Model_Checking::type(refTrans) != Model_Checking::TRANSFER) continue; if (refTrans->STATUS == "D") continue; //TODO: if (Model_Checking::TRANSDATE(refTrans) != dtdt) continue; @@ -798,11 +799,9 @@ } } - //TODO: *transaction.splitEntries_ = *mmSplit; - if (bValid) - { - vQIF_trxs_.push_back(transaction); + { + vQIF_trxs_.push_back(std::make_pair(transaction, mmSplit)); } } } @@ -811,8 +810,9 @@ logWindow->AppendText(sMsg << "\n"); int num = 0; - for (const auto& transaction : vQIF_trxs_) + for (const auto& refTransaction : vQIF_trxs_) { + auto *transaction(refTransaction.first); const Model_Account::Data* account = Model_Account::instance().get(transaction->ACCOUNTID); wxVector<wxVariant> data; data.push_back(wxVariant(account->ACCOUNTNAME)); @@ -823,17 +823,23 @@ { account = Model_Account::instance().get(transaction->TOACCOUNTID); if (account) payee_name = account->ACCOUNTNAME; - if (transaction->TRANSAMOUNT < 0) transaction->TRANSAMOUNT = -transaction->TRANSAMOUNT; } else { payee = Model_Payee::instance().get(transaction->PAYEEID); if (payee) payee_name = payee->PAYEENAME; } + if (Model_Checking::type(transaction) != Model_Checking::DEPOSIT) + transaction->TRANSAMOUNT = -transaction->TRANSAMOUNT; data.push_back(wxVariant(payee_name)); data.push_back(wxVariant(transaction->STATUS)); - data.push_back(wxVariant(Model_Category::full_name(transaction->CATEGID, transaction->SUBCATEGID))); + wxString categs = Model_Category::full_name(transaction->CATEGID, transaction->SUBCATEGID); + for (const auto&split_item : refTransaction.second) categs + << Model_Category::full_name(split_item.CATEGID, split_item.SUBCATEGID) + << "|"; + + data.push_back(wxVariant(categs)); data.push_back(wxVariant(wxString::Format("%.2f", Model_Checking::balance(transaction, transaction->ACCOUNTID)))); data.push_back(wxVariant(transaction->NOTES)); dataListBox_->AppendItem(data, (wxUIntPtr)num++); @@ -1002,14 +1008,21 @@ if (msgDlg.ShowModal() == wxID_YES) { - //TODO: Update transfer transactions toAmount - - for (auto& refTrans : vQIF_trxs_) + for (auto& refTransaction : vQIF_trxs_) { + auto *refTrans(refTransaction.first); refTrans->TRANSAMOUNT = fabs(refTrans->TRANSAMOUNT); refTrans->TOTRANSAMOUNT = fabs(refTrans->TOTRANSAMOUNT); - Model_Checking::instance().save(refTrans); //TODO:fix speed + int transID = Model_Checking::instance().save(refTrans); //TODO:fix speed + for (auto& split : refTransaction.second) + { + split.TRANSID = transID; + if (Model_Checking::type(refTrans) != Model_Checking::DEPOSIT) + split.SPLITTRANSAMOUNT = -split.SPLITTRANSAMOUNT; + Model_Splittransaction::instance().save(&split); //TODO:fix speed + } + last_imported_acc_id_ = refTrans->ACCOUNTID; } Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-11-13 20:56:33 UTC (rev 5234) +++ trunk/src/import_export/qif_import.h 2013-11-14 12:09:37 UTC (rev 5235) @@ -72,7 +72,7 @@ void OnCancel(wxCommandEvent& event); void OnOk(wxCommandEvent& /*event*/); - std::vector<Model_Checking::Data*> vQIF_trxs_; + std::vector< std::pair<Model_Checking::Data*, Model_Splittransaction::Data_Set> > vQIF_trxs_; wxWindow* parent_; wxString dateFormat_; wxArrayInt accounts_id_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gua...@us...> - 2013-11-15 03:26:27
|
Revision: 5236 http://sourceforge.net/p/moneymanagerex/code/5236 Author: guanlisheng Date: 2013-11-15 03:26:24 +0000 (Fri, 15 Nov 2013) Log Message: ----------- reduce object copy Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-11-14 12:09:37 UTC (rev 5235) +++ trunk/src/import_export/qif_import.cpp 2013-11-15 03:26:24 UTC (rev 5236) @@ -299,7 +299,7 @@ Model_Payee::Data* payee = 0; //mmSplitTransactionEntries* mmSplit(new mmSplitTransactionEntries()); - Model_Splittransaction::Data_Set mmSplit; + Model_Splittransaction::Cache mmSplit; wxFileInputStream input(sFileName_); wxTextInputStream text(input, "\x09", wxConvUTF8); @@ -578,7 +578,7 @@ //pSplitEntry->subCategID_ = subCategID; pSplitEntry->SUBCATEGID = subCategID; //mmSplit->addSplit(pSplitEntry); - mmSplit.push_back(*pSplitEntry); + mmSplit.push_back(pSplitEntry); continue; } //MemoSplit @@ -736,15 +736,15 @@ for (const auto &split_entry : mmSplit) { - int c = split_entry.CATEGID; //mmSplit->entries_[i]->categID_; - int s = split_entry.SUBCATEGID; //mmSplit->entries_[i]->subCategID_; + int c = split_entry->CATEGID; //mmSplit->entries_[i]->categID_; + int s = split_entry->SUBCATEGID; //mmSplit->entries_[i]->subCategID_; Model_Category::Data* category = Model_Category::instance().get(c); Model_Subcategory::Data* sub_category = (s != -1 ? Model_Subcategory::instance().get(s) : 0); wxString cn = category->CATEGNAME; wxString sn = (sub_category ? sub_category->SUBCATEGNAME : ""); - double v = split_entry.SPLITTRANSAMOUNT; // mmSplit->entries_[i]->splitAmount_; + double v = split_entry->SPLITTRANSAMOUNT; // mmSplit->entries_[i]->splitAmount_; sMsg = (cn << ":" << sn << " " << v << "\n"); logWindow->AppendText(sMsg); } @@ -812,7 +812,7 @@ int num = 0; for (const auto& refTransaction : vQIF_trxs_) { - auto *transaction(refTransaction.first); + Model_Checking::Data* transaction = refTransaction.first; const Model_Account::Data* account = Model_Account::instance().get(transaction->ACCOUNTID); wxVector<wxVariant> data; data.push_back(wxVariant(account->ACCOUNTNAME)); @@ -835,9 +835,8 @@ data.push_back(wxVariant(transaction->STATUS)); wxString categs = Model_Category::full_name(transaction->CATEGID, transaction->SUBCATEGID); - for (const auto&split_item : refTransaction.second) categs - << Model_Category::full_name(split_item.CATEGID, split_item.SUBCATEGID) - << "|"; + for (const auto& split_item : refTransaction.second) + categs << Model_Category::full_name(split_item->CATEGID, split_item->SUBCATEGID) << "|"; data.push_back(wxVariant(categs)); data.push_back(wxVariant(wxString::Format("%.2f", Model_Checking::balance(transaction, transaction->ACCOUNTID)))); @@ -1017,10 +1016,10 @@ int transID = Model_Checking::instance().save(refTrans); //TODO:fix speed for (auto& split : refTransaction.second) { - split.TRANSID = transID; + split->TRANSID = transID; if (Model_Checking::type(refTrans) != Model_Checking::DEPOSIT) - split.SPLITTRANSAMOUNT = -split.SPLITTRANSAMOUNT; - Model_Splittransaction::instance().save(&split); //TODO:fix speed + split->SPLITTRANSAMOUNT = -split->SPLITTRANSAMOUNT; + Model_Splittransaction::instance().save(split); //TODO:fix speed } last_imported_acc_id_ = refTrans->ACCOUNTID; Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-11-14 12:09:37 UTC (rev 5235) +++ trunk/src/import_export/qif_import.h 2013-11-15 03:26:24 UTC (rev 5236) @@ -72,7 +72,7 @@ void OnCancel(wxCommandEvent& event); void OnOk(wxCommandEvent& /*event*/); - std::vector< std::pair<Model_Checking::Data*, Model_Splittransaction::Data_Set> > vQIF_trxs_; + std::vector< std::pair<Model_Checking::Data*, Model_Splittransaction::Cache> > vQIF_trxs_; wxWindow* parent_; wxString dateFormat_; wxArrayInt accounts_id_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-11-16 19:36:46
|
Revision: 5250 http://sourceforge.net/p/moneymanagerex/code/5250 Author: vomikan Date: 2013-11-16 19:36:43 +0000 (Sat, 16 Nov 2013) Log Message: ----------- cleanup Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-11-16 13:01:40 UTC (rev 5249) +++ trunk/src/import_export/qif_import.cpp 2013-11-16 19:36:43 UTC (rev 5250) @@ -41,7 +41,7 @@ , const wxSize& size, long style ) : parent_(parent) - , last_imported_acc_id_(-1) + , m_firstReferencedAccountID(-1) { Create(parent, id, caption, pos, size, style); } @@ -151,14 +151,10 @@ //Log viewer wxBoxSizer* log_sizer = new wxBoxSizer(wxVERTICAL); - log_field_ = new wxTextCtrl( this, wxID_STATIC, "", wxDefaultPosition, wxSize(300, -1), wxTE_MULTILINE|wxHSCROLL ); + log_field_ = new wxTextCtrl( this, wxID_STATIC, "" + , wxDefaultPosition, wxSize(500, -1), wxTE_MULTILINE|wxHSCROLL ); log_sizer->Add(log_field_, 1, wxGROW|wxALL, 5); - wxButton* itemClearButton = new wxButton(this, wxID_CLEAR, _("Clear")); - log_sizer->Add(itemClearButton, 0, wxALIGN_CENTER|wxALL, 5); - itemClearButton->Connect(wxID_CLEAR, wxEVT_COMMAND_BUTTON_CLICKED - , wxCommandEventHandler(mmQIFImportDialog::OnButtonClear), NULL, this); - //Data viewer wxPanel* data_panel = new wxPanel(this, wxID_ANY); wxBoxSizer* data_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -167,11 +163,11 @@ dataListBox_ = new wxDataViewListCtrl(data_panel , wxID_ANY, wxDefaultPosition, wxSize(100, 200)); dataListBox_->AppendTextColumn( ColName_[COL_ACCOUNT], wxDATAVIEW_CELL_INERT, 120); - dataListBox_->AppendTextColumn( ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 100); + dataListBox_->AppendTextColumn( ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 90); dataListBox_->AppendTextColumn( ColName_[COL_NUMBER], wxDATAVIEW_CELL_INERT, 80); dataListBox_->AppendTextColumn( ColName_[COL_PAYEE], wxDATAVIEW_CELL_INERT, 120); dataListBox_->AppendTextColumn( ColName_[COL_STATUS], wxDATAVIEW_CELL_INERT, 60); - dataListBox_->AppendTextColumn( ColName_[COL_CATEGORY], wxDATAVIEW_CELL_INERT, 120); + dataListBox_->AppendTextColumn( ColName_[COL_CATEGORY], wxDATAVIEW_CELL_INERT, 140); dataListBox_->AppendTextColumn( ColName_[COL_VALUE], wxDATAVIEW_CELL_INERT, 100); dataListBox_->AppendTextColumn( ColName_[COL_NOTES], wxDATAVIEW_CELL_INERT, 300); data_sizer->Add(dataListBox_, flagsExpand); @@ -181,7 +177,7 @@ main_sizer->Add(top_sizer, flagsExpand); top_sizer->Add(left_sizer, flags); top_sizer->Add(log_sizer, flagsExpand); - main_sizer->Add(data_panel, flagsExpand); + main_sizer->Add(data_panel, flagsExpand.Proportion(.75)); /********************************************************************************************** Button Panel with OK and Cancel Buttons @@ -259,9 +255,9 @@ return true; } -int mmQIFImportDialog::mmImportQIF(wxTextFile& tFile) +int mmQIFImportDialog::mmImportQIF() { - Model_Account::Data* account = Model_Account::instance().get(last_imported_acc_id_); + Model_Account::Data* account = Model_Account::instance().get(m_firstReferencedAccountID); wxString acctName; if (account) { @@ -408,46 +404,16 @@ } } - Model_Account::Data* account = Model_Account::instance().get(acctName); - if (!account) - { - //TODO: Repeated code - account = Model_Account::instance().create(); - - account->FAVORITEACCT = "TRUE"; - account->STATUS = Model_Account::all_status()[Model_Account::OPEN]; - account->ACCOUNTTYPE = Model_Account::all_type()[Model_Account::CHECKING]; - account->ACCOUNTNAME = acctName; - account->INITIALBAL = val; - account->CURRENCYID = Model_Currency::GetBaseCurrency()->CURRENCYID; - for (const auto& curr : Model_Currency::instance().all()) - { - if (wxString(curr.CURRENCY_SYMBOL).Prepend("[").Append("]") == sDescription) - account->CURRENCYID = curr.CURRENCYID; - } - - Model_Account::instance().save(account); - from_account_id = account->ACCOUNTID; - accountArray.Add(account->ACCOUNTNAME); - sMsg = wxString::Format(_("Added account '%s'"), acctName) - << "\n" << wxString::Format(_("Initial Balance: %s"), (wxString()<<val)); - logWindow->AppendText(wxString()<< sMsg << "\n"); - } - - fromAccountID_ = account->ACCOUNTID; - - sMsg = wxString::Format(_("Line: %ld"), numLines) << " : " - << wxString::Format(_("Account name: %s"), acctName); - logWindow->AppendText(wxString()<< sMsg << "\n"); - + wxString currency_name = sDescription; + fromAccountID_ = getOrCreateAccount(acctName, val, currency_name); continue; } // ignore these type of lines if ( accountType == "Option:AutoSwitch" ) { - readLine = tFile.GetNextLine(); - while(readLine != "^" || tFile.Eof()) + readLine = text.ReadLine(); + while(readLine != "^" || input.Eof()) { // ignore all lines } @@ -465,7 +431,6 @@ logWindow->AppendText(wxString()<< errLineMsgStr << "\n" << errMsgStr << "\n"); wxMessageBox( errLineMsgStr + "\n\n" + errMsgStr, _("QIF Import"), wxICON_ERROR); - // exit: while(!input.Eof()) loop and allow to exit routine and allow user to save or abort break; } @@ -524,7 +489,6 @@ if (sFullCateg.Contains("/")) transNum.Prepend(wxString::Format("[%s] ", getFinancistoProject(sFullCateg))); - //core_->categoryList_.parseCategoryString(sFullCateg, sCateg, categID, sSubCateg, subCategID); wxStringTokenizer cattkz(sFullCateg, ":"); sCateg = cattkz.GetNextToken(); sSubCateg = ""; @@ -567,15 +531,10 @@ if (type == TRANS_TYPE_WITHDRAWAL_STR) dSplitAmount = -dSplitAmount; //Add split entry - //mmSplitTransactionEntry* pSplitEntry(new mmSplitTransactionEntry); Model_Splittransaction::Data * pSplitEntry = Model_Splittransaction().instance().create(); - //pSplitEntry->splitAmount_ = dSplitAmount; pSplitEntry->SPLITTRANSAMOUNT = dSplitAmount; - //pSplitEntry->categID_ = categID; pSplitEntry->CATEGID = categID; - //pSplitEntry->subCategID_ = subCategID; pSplitEntry->SUBCATEGID = subCategID; - //mmSplit->addSplit(pSplitEntry); mmSplit.push_back(pSplitEntry); continue; } @@ -625,46 +584,15 @@ to_account_id = -1; if (type == Model_Checking::all_type()[Model_Checking::TRANSFER]) { - Model_Account::Data* account = Model_Account::instance().get(sToAccountName); - if (!account) - { - account = Model_Account::instance().create(); + to_account_id = getOrCreateAccount(sToAccountName, 0, sDescription); + accountArray.Add(sToAccountName); - account->FAVORITEACCT = "TRUE"; - account->STATUS = Model_Account::all_status()[Model_Account::OPEN]; - account->ACCOUNTTYPE = Model_Account::all_type()[Model_Account::CHECKING]; - account->ACCOUNTNAME = sToAccountName; - account->INITIALBAL = 0; - account->CURRENCYID = Model_Currency::GetBaseCurrency()->CURRENCYID; - for (const auto& curr : Model_Currency::instance().all()) - { - if (wxString(curr.CURRENCY_SYMBOL).Prepend("[").Append("]") == sDescription) - account->CURRENCYID = curr.CURRENCYID; - } - - Model_Account::instance().save(account); - from_account_id = account->ACCOUNTID; - accountArray.Add(account->ACCOUNTNAME); - - to_account_id = account->ACCOUNTID; - accountArray.Add(sToAccountName); - - sMsg = wxString::Format(_("Added account '%s'"), sToAccountName); - logWindow->AppendText(wxString()<< sMsg << "\n"); - } - to_account_id = account->ACCOUNTID; if (val > 0.0) { from_account_id = to_account_id; to_account_id = fromAccountID_; } payeeID = -1; - if (to_account_id == -1 || from_account_id == -1) - { - sMsg = _("Account missing"); - logWindow->AppendText(sMsg << "\n"); - bValid = false; - } } else //!=TRANSFER { @@ -779,7 +707,7 @@ { auto *refTrans(refTransaction.first); if (Model_Checking::type(refTrans) != Model_Checking::TRANSFER) continue; - if (refTrans->STATUS == "D") continue; //TODO: + if (refTrans->STATUS == "D") continue; if (Model_Checking::TRANSDATE(refTrans) != dtdt) continue; if (((refTrans->TRANSAMOUNT < 0) && (val < 0)) || ((refTrans->TRANSAMOUNT > 0) && (val >0))) continue; if (refTrans->ACCOUNTID!= from_account_id) continue; @@ -811,7 +739,7 @@ } } - sMsg = wxString::Format(_("Transactions imported from QIF: %ld"), vQIF_trxs_.size()); + sMsg = wxString::Format(_("Number of transactions has readed from QIF file: %ld"), vQIF_trxs_.size()); logWindow->AppendText(sMsg << "\n"); int num = 0; @@ -840,12 +768,16 @@ data.push_back(wxVariant(transaction->STATUS)); wxString categs = Model_Category::full_name(transaction->CATEGID, transaction->SUBCATEGID); - for (const auto& split_item : refTransaction.second) - categs << Model_Category::full_name(split_item->CATEGID, split_item->SUBCATEGID) << "|"; + size_t i = 0; + for (const auto& split_item : refTransaction.second) + categs << Model_Category::full_name(split_item->CATEGID, split_item->SUBCATEGID) + << (refTransaction.second.size() > ++i ? "|" : ""); data.push_back(wxVariant(categs)); data.push_back(wxVariant(wxString::Format("%.2f", Model_Checking::balance(transaction, transaction->ACCOUNTID)))); - data.push_back(wxVariant(transaction->NOTES)); + wxString notes = transaction->NOTES; + notes.Replace("\n", " "); + data.push_back(wxVariant(notes)); dataListBox_->AppendItem(data, (wxUIntPtr)num++); } @@ -887,11 +819,11 @@ << text.ReadLine() << "\n"; } - if (checkQIFFile(tFile)) - mmImportQIF(tFile); + if (checkQIFFile()) + mmImportQIF(); } -bool mmQIFImportDialog::checkQIFFile(wxTextFile& tFile) +bool mmQIFImportDialog::checkQIFFile() { bbFile_->Enable(false); bbFile_->SetBitmapLabel(wxBitmap(empty_xpm)); @@ -902,16 +834,22 @@ btnOK_->Enable(false); bool dateFormatIsOK = false; - wxString sAccountName; //Last parsed account name - for (wxString str = tFile.GetFirstLine(); !tFile.Eof(); str = tFile.GetNextLine()) + wxString sAccountName; + + wxFileInputStream input(sFileName_); + wxTextInputStream text(input, "\x09", wxConvUTF8); + + size_t line = 0; + while (input.IsOk() && !input.Eof()) { - if (str.empty()) - continue; + line++; + wxString str = text.ReadLine(); + if (str.empty()) continue; if (!isLineOK(str)) { wxString sError = wxString() - << wxString::Format(_("Line %i"), tFile.GetCurrentLine()+1) + << wxString::Format(_("Line %i"), line) << "\n" << str; mmShowErrorMessageInvalid(this, sError); @@ -921,9 +859,9 @@ if ( lineType(str) == AcctType && getLineData(str) == "Account") { bool reading = true; - while(!tFile.Eof() && reading ) + while (input.IsOk() && !input.Eof() && reading) { - str = tFile.GetNextLine(); + str = text.ReadLine(); if (accountInfoType(str) == Name) { sAccountName = getLineData(str); @@ -937,7 +875,7 @@ continue; } - if (lineType(str) == Date) + if (lineType(str) == Date && !dateFormatIsOK) { wxDateTime dtdt; wxString sDate = getLineData(str); @@ -955,14 +893,16 @@ else return false; - if (sAccountName.IsEmpty() && last_imported_acc_id_<0) + if (sAccountName.IsEmpty() && m_firstReferencedAccountID < 0) { sAccountName = wxGetSingleChoice(_("Choose Account to Import to") , _("Account"), Model_Account::instance().all_checking_account_names()); const Model_Account::Data* account = Model_Account::instance().get(sAccountName); - last_imported_acc_id_ = account->ACCOUNTID; - if (last_imported_acc_id_ < 0) return false; + if (account) + m_firstReferencedAccountID = account->ACCOUNTID; + else + return false; } if (newAccounts_->GetCount() > 0) @@ -991,13 +931,10 @@ { wxStringClientData* data = (wxStringClientData*)(choiceDateFormat_->GetClientObject(choiceDateFormat_->GetSelection())); if (data) dateFormat_ = data->GetData(); - wxTextFile tFile(sFileName_); if (sFileName_.IsEmpty()) return; - if (!tFile.IsOpened()) - tFile.Open(); - if (checkQIFFile(tFile)) - mmImportQIF(tFile); + if (checkQIFFile()) + mmImportQIF(); } void mmQIFImportDialog::OnCheckboxClick( wxCommandEvent& /*event*/ ) @@ -1020,6 +957,7 @@ auto *refTrans(refTransaction.first); refTrans->TRANSAMOUNT = fabs(refTrans->TRANSAMOUNT); refTrans->TOTRANSAMOUNT = fabs(refTrans->TOTRANSAMOUNT); + refTrans->STATUS = "F"; int transID = Model_Checking::instance().save(refTrans); //TODO:fix speed for (auto& split : refTransaction.second) @@ -1030,7 +968,7 @@ Model_Splittransaction::instance().save(split); //TODO:fix speed } - last_imported_acc_id_ = refTrans->ACCOUNTID; + if (m_firstReferencedAccountID < 0) m_firstReferencedAccountID = refTrans->ACCOUNTID; } sMsg = _("Import finished successfully"); @@ -1055,7 +993,33 @@ EndModal(wxID_CANCEL); } -void mmQIFImportDialog::OnButtonClear(wxCommandEvent& /*event*/) +int mmQIFImportDialog::getOrCreateAccount(const wxString& name, double init_balance, const wxString& currency_name) { - log_field_->Clear(); -} + int accountID = -1; + Model_Account::Data* account = Model_Account::instance().get(name); + if (!account) + { + + Model_Account::Data *account = Model_Account::instance().create(); + + account->FAVORITEACCT = "TRUE"; + account->STATUS = Model_Account::all_status()[Model_Account::OPEN]; + account->ACCOUNTTYPE = Model_Account::all_type()[Model_Account::CHECKING]; + account->ACCOUNTNAME = name; + account->INITIALBAL = init_balance; + account->CURRENCYID = Model_Currency::GetBaseCurrency()->CURRENCYID; + for (const auto& curr : Model_Currency::instance().all()) + { + if (curr.CURRENCY_SYMBOL == currency_name) + account->CURRENCYID = curr.CURRENCYID; + } + accountID = Model_Account::instance().save(account); + } + else + accountID = account->ACCOUNTID; + + wxString sMsg = wxString::Format(_("Account name: %s"), name); + log_field_->AppendText(wxString() << sMsg << "\n"); + + return accountID; +} \ No newline at end of file Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-11-16 13:01:40 UTC (rev 5249) +++ trunk/src/import_export/qif_import.h 2013-11-16 19:36:43 UTC (rev 5250) @@ -1,21 +1,21 @@ -/******************************************************* -Copyright (C) 2006-2012 - -This program is free software; you can redistribute it and/or modify -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 -********************************************************/ +/******************************************************* +Copyright (C) 2006-2012 +This program is free software; you can redistribute it and/or modify +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 +********************************************************/ + #ifndef QIF_IMPORT_H #define QIF_IMPORT_H @@ -54,23 +54,23 @@ long style = SYMBOL_QIFIMPORT_STYLE ); int get_last_imported_acc() { - return last_imported_acc_id_; + return m_firstReferencedAccountID; } private: - int mmImportQIF(wxTextFile& tFile); + int mmImportQIF(); void CreateControls(); void fillControls(); void OnFileSearch(wxCommandEvent& event); - bool checkQIFFile(wxTextFile& tFile); + bool checkQIFFile(); void OnCheckboxClick(wxCommandEvent& /*event*/); void OnDateMaskChange(wxCommandEvent& event); - void OnButtonClear(wxCommandEvent& event); void OnQuit(wxCloseEvent& event); void OnCancel(wxCommandEvent& event); void OnOk(wxCommandEvent& /*event*/); + int getOrCreateAccount(const wxString& name, double init_balance, const wxString& currency_name = ""); std::vector< std::pair<Model_Checking::Data*, Model_Splittransaction::Cache> > vQIF_trxs_; wxWindow* parent_; @@ -102,7 +102,7 @@ wxBitmapButton* bbFile_; wxBitmapButton* bbFormat_; wxBitmapButton* bbAccounts_; - int last_imported_acc_id_; + int m_firstReferencedAccountID; //The first available account in the QIF file enum EColumn { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-11-28 23:35:19
|
Revision: 5394 http://sourceforge.net/p/moneymanagerex/code/5394 Author: vomikan Date: 2013-11-28 23:35:15 +0000 (Thu, 28 Nov 2013) Log Message: ----------- fixes for empty category, format, cleanup Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2013-11-28 21:39:36 UTC (rev 5393) +++ trunk/src/import_export/qif_import.cpp 2013-11-28 23:35:15 UTC (rev 5394) @@ -163,14 +163,14 @@ dataListBox_ = new wxDataViewListCtrl(data_panel , wxID_ANY, wxDefaultPosition, wxSize(100, 200)); - dataListBox_->AppendTextColumn( ColName_[COL_ACCOUNT], wxDATAVIEW_CELL_INERT, 120); - dataListBox_->AppendTextColumn( ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 90); - dataListBox_->AppendTextColumn( ColName_[COL_NUMBER], wxDATAVIEW_CELL_INERT, 80); - dataListBox_->AppendTextColumn( ColName_[COL_PAYEE], wxDATAVIEW_CELL_INERT, 120); - dataListBox_->AppendTextColumn( ColName_[COL_STATUS], wxDATAVIEW_CELL_INERT, 60); - dataListBox_->AppendTextColumn( ColName_[COL_CATEGORY], wxDATAVIEW_CELL_INERT, 140); - dataListBox_->AppendTextColumn( ColName_[COL_VALUE], wxDATAVIEW_CELL_INERT, 100); - dataListBox_->AppendTextColumn( ColName_[COL_NOTES], wxDATAVIEW_CELL_INERT, 300); + dataListBox_->AppendTextColumn(ColName_[COL_ACCOUNT], wxDATAVIEW_CELL_INERT, 120, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_DATE], wxDATAVIEW_CELL_INERT, 90, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_NUMBER], wxDATAVIEW_CELL_INERT, 80, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_PAYEE], wxDATAVIEW_CELL_INERT, 120, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_STATUS], wxDATAVIEW_CELL_INERT, 60, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_CATEGORY], wxDATAVIEW_CELL_INERT, 140, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_VALUE], wxDATAVIEW_CELL_INERT, 100, wxALIGN_RIGHT); + dataListBox_->AppendTextColumn(ColName_[COL_NOTES], wxDATAVIEW_CELL_INERT, 300); data_sizer->Add(dataListBox_, flagsExpand); //Compose all sizers togethe @@ -268,7 +268,7 @@ wxString sMsg; //Check date restrictions - wxDateTime fromDate = wxDateTime::Now(), toDate = wxDateTime::Now(); + wxDateTime fromDate = wxDateTime::Today(), toDate = wxDateTime::Today(); bool bFromDate = dateFromCheckBox_->IsChecked(); bool bToDate = dateToCheckBox_->IsChecked(); if (bFromDate) @@ -276,59 +276,47 @@ if (bToDate) toDate = toDateCtrl_->GetValue().GetDateOnly(); - wxSortedArrayString accountArray; - for (const auto& account: Model_Account::instance().all()) accountArray.Add(account.ACCOUNTNAME); - wxTextCtrl*& logWindow = log_field_; int numLines = 0; - - wxString dt = wxDateTime::Now().FormatISODate(); - wxString sPayee, type, sAmount, transNum, notes, convDate, sToAccountName; - wxString sFullCateg, sCateg, sSubCateg, sSplitCategs, sSplitAmount, sValid, sDescription; - - wxDateTime dtdt = wxDateTime::Today(); - int payeeID = -1, categID = -1, subCategID = -1, to_account_id = -1, from_account_id = -1; - double val = 0.0, dSplitAmount = 0.0; - bool bTrxComplited = true; - bool bValid = true; vQIF_trxs_.clear(); + wxArrayString accountArray = Model_Account::instance().all_checking_account_names(); - Model_Payee::Data* payee = 0; Model_Splittransaction::Cache mmSplit; wxFileInputStream input(sFileName_); wxTextInputStream text(input, "\x09", wxConvUTF8); + m_data.trxComplited = true; while (input.IsOk() && !input.Eof()) { wxString readLine = text.ReadLine(); numLines++; //Init variables for each transaction - if (bTrxComplited) + if (m_data.trxComplited) { - bValid = true; - sDescription.clear(); - sSplitAmount.clear(); - sSplitCategs.clear(); + m_data.valid = true; + m_data.sDescription.clear(); + m_data.sSplitAmount.clear(); + m_data.sSplitCategs.clear(); mmSplit.clear(); - sPayee.clear(); - type.clear(); - sFullCateg.clear(); - sCateg.clear(); - sSubCateg.clear(); - subCategID = -1; - categID = -1; - sAmount.clear(); - val = 0.0; - dSplitAmount = 0.0; - transNum = ""; - notes = ""; - convDate = wxDateTime::Now().FormatISODate(); - - bTrxComplited = false; + m_data.payeeString.clear(); + m_data.type.clear(); + m_data.sFullCateg.clear(); + m_data.sCateg.clear(); + m_data.sSubCateg.clear(); + m_data.subCategID = -1; + m_data.categID = -1; + m_data.amountString.clear(); + m_data.val = 0.0; + m_data.dSplitAmount = 0.0; + m_data.transNum = ""; + m_data.notes = ""; + m_data.convDate = wxDateTime::Today().FormatISODate(); + m_data.dt = m_data.convDate; + m_data.trxComplited = false; sMsg = "-------------------------------------------------------------------------------------------------------------------------\n"; logWindow->AppendText(sMsg); } @@ -355,7 +343,7 @@ { sMsg = wxString::Format(_("Importing account type: %s"), accountType); logWindow->AppendText(sMsg << "\n"); - bTrxComplited = true; + m_data.trxComplited = true; continue; } @@ -379,7 +367,7 @@ wxString sBalance = ""; // account information // Need to read till we get to end of account information - while( (readLine = text.ReadLine() ) != "^") + while ((readLine = text.ReadLine()) != "^") { numLines++; @@ -392,14 +380,14 @@ else if (i == Description) { //TODO: Get currency symbol if provided (huck) - sDescription = getLineData(readLine); + m_data.sDescription = getLineData(readLine); continue; } else if (i == Balance) { sBalance = getLineData(readLine); - if (!sBalance.ToDouble(&val) && !Model_Currency::fromString(sBalance, val, Model_Account::currency(account))) - val = 0; + if (!sBalance.ToDouble(&m_data.val) && !Model_Currency::fromString(sBalance, m_data.val, Model_Account::currency(account))) + m_data.val = 0; continue; } else if (i == AccountType || i == CreditLimit || i == BalanceDate) @@ -408,8 +396,8 @@ } } - wxString currency_name = sDescription; - fromAccountID_ = getOrCreateAccount(acctName, val, currency_name); + wxString currency_name = m_data.sDescription; + fromAccountID_ = getOrCreateAccount(acctName, m_data.val, currency_name); continue; } @@ -439,23 +427,24 @@ break; } - to_account_id = -1; - from_account_id = fromAccountID_; + m_data.to_accountID = -1; + m_data.from_accountID = fromAccountID_; if (lineType(readLine) == Date) // 'D' { - dt = getLineData(readLine); + m_data.dt = getLineData(readLine); - bValid = mmParseDisplayStringToDate(dtdt, dt, dateFormat_); - dtdt = dtdt.GetDateOnly(); - convDate = dtdt.FormatISODate(); + m_data.valid = mmParseDisplayStringToDate(m_data.dtdt, m_data.dt, dateFormat_); + m_data.dtdt = m_data.dtdt.GetDateOnly(); + m_data.convDate = m_data.dtdt.FormatISODate(); continue; } else if (lineType(readLine) == Amount) // 'T' { - sAmount = getLineData(readLine); + m_data.amountString = getLineData(readLine); - if (!sAmount.ToDouble(&val) && !Model_Currency::fromString(sAmount, val, Model_Account::currency(account))) + if (!m_data.amountString.ToDouble(&m_data.val) + && !Model_Currency::fromString(m_data.amountString, m_data.val, Model_Account::currency(account))) { sMsg = wxString::Format(_("Line: %i invalid amount, skipping."), numLines); logWindow->AppendText(sMsg << "\n"); @@ -464,244 +453,237 @@ } else if (lineType(readLine) == Payee) // 'P' { - sPayee = getLineData(readLine); + m_data.payeeString = getLineData(readLine); continue; } else if (lineType(readLine) == TransNumber) // 'N' { - transNum = getLineData(readLine); + m_data.transNum = getLineData(readLine); continue; } else if (lineType(readLine) == Memo || lineType(readLine) == MemoSplit ) // 'M' // 'E' { - notes << getLineData(readLine) << "\n"; + m_data.notes << getLineData(readLine) << "\n"; continue; } else if (lineType(readLine) == Category || lineType(readLine) == CategorySplit) // 'S' // 'L' { - sFullCateg = getLineData(readLine); + m_data.sFullCateg = getLineData(readLine); - if (sFullCateg.Left(1).Contains("[") && sFullCateg.Right(1).Contains("]")) + if (m_data.sFullCateg.Left(1).Contains("[") && m_data.sFullCateg.Right(1).Contains("]")) { - sToAccountName = sFullCateg.substr(1, sFullCateg.Length()-2); - sFullCateg = _("Transfer"); - type = TRANS_TYPE_TRANSFER_STR; + m_data.sToAccountName = m_data.sFullCateg.substr(1, m_data.sFullCateg.Length()-2); + m_data.sFullCateg = _("Transfer"); + m_data.type = Model_Checking::all_type()[Model_Checking::TRANSFER]; } /* //Trick for cut non standart qif category usage in Financisto application //Category field may contains additional information like Project //Format Category[:Subcategory][/Project] //*/ - if (sFullCateg.Contains("/")) - transNum.Prepend(wxString::Format("[%s]", getFinancistoProject(sFullCateg))); + if (m_data.sFullCateg.Contains("/")) + m_data.transNum.Prepend(wxString::Format("[%s]", getFinancistoProject(m_data.sFullCateg))); - wxStringTokenizer cattkz(sFullCateg, ":"); - sCateg = cattkz.GetNextToken(); - sSubCateg = ""; + wxStringTokenizer cattkz(m_data.sFullCateg, ":"); + m_data.sCateg = cattkz.GetNextToken(); + m_data.sSubCateg = ""; if (cattkz.HasMoreTokens()) - sSubCateg = cattkz.GetNextToken(); + m_data.sSubCateg = cattkz.GetNextToken(); - Model_Category::Data* category = Model_Category::instance().get(sCateg); - if (!category && !sCateg.IsEmpty()) + if (m_data.sCateg.IsEmpty()) m_data.sCateg = _("Unknown"); + Model_Category::Data* category = Model_Category::instance().get(m_data.sCateg); + if (!category) { category = Model_Category::instance().create(); - category->CATEGNAME = sCateg; + category->CATEGNAME = m_data.sCateg; Model_Category::instance().save(category); - sMsg = wxString::Format(_("Added category: %s"), sCateg); + sMsg = wxString::Format(_("Added category: %s"), m_data.sCateg); logWindow->AppendText(sMsg << "\n"); } - if (category) categID = category->CATEGID; + if (category) m_data.categID = category->CATEGID; - Model_Subcategory::Data* sub_category = (Model_Subcategory::instance().get(sSubCateg, categID)); - if (!sub_category && !sSubCateg.IsEmpty()) + Model_Subcategory::Data* sub_category = (Model_Subcategory::instance().get(m_data.sSubCateg, m_data.categID)); + if (!sub_category && !m_data.sSubCateg.IsEmpty()) { sub_category = Model_Subcategory::instance().create(); - sub_category->CATEGID = categID; - sub_category->SUBCATEGNAME = sSubCateg; + sub_category->CATEGID = m_data.categID; + sub_category->SUBCATEGNAME = m_data.sSubCateg; Model_Subcategory::instance().save(sub_category); - sMsg = wxString::Format(_("Added subcategory: %s"), sSubCateg); + sMsg = wxString::Format(_("Added subcategory: %s"), m_data.sSubCateg); logWindow->AppendText(sMsg << "\n"); } - if (sub_category) subCategID = sub_category->SUBCATEGID; + if (sub_category) m_data.subCategID = sub_category->SUBCATEGID; continue; } else if (lineType(readLine) == AmountSplit) // '$' { - sSplitAmount = getLineData(readLine); + m_data.sSplitAmount = getLineData(readLine); //get amount - if (!sSplitAmount.ToDouble(&dSplitAmount) && !Model_Currency::fromString(sSplitAmount, dSplitAmount, Model_Account::currency(account))) - dSplitAmount = 0; //wrong amount + if (!m_data.sSplitAmount.ToDouble(&m_data.dSplitAmount) + && !Model_Currency::fromString(m_data.sSplitAmount, m_data.dSplitAmount, Model_Account::currency(account))) + m_data.dSplitAmount = 0; //wrong amount // - if (type == TRANS_TYPE_WITHDRAWAL_STR) - dSplitAmount = -dSplitAmount; + if (m_data.type == Model_Checking::all_type()[Model_Checking::TRANSFER]) + m_data.dSplitAmount = -m_data.dSplitAmount; //Add split entry Model_Splittransaction::Data * pSplitEntry = Model_Splittransaction().instance().create(); - pSplitEntry->SPLITTRANSAMOUNT = dSplitAmount; - pSplitEntry->CATEGID = categID; - pSplitEntry->SUBCATEGID = subCategID; + pSplitEntry->SPLITTRANSAMOUNT = m_data.dSplitAmount; + pSplitEntry->CATEGID = m_data.categID; + pSplitEntry->SUBCATEGID = m_data.subCategID; mmSplit.push_back(pSplitEntry); continue; } //MemoSplit else if (lineType(readLine) == Address) // 'A' { - notes << getLineData(readLine) << "\n"; + m_data.notes << getLineData(readLine) << "\n"; continue; } else if (lineType(readLine) == EOTLT) // ^ { wxString status = "F"; - if (dt.Trim().IsEmpty()) + if (m_data.dt.Trim().IsEmpty()) { sMsg = _("Date is missing"); logWindow->AppendText(wxString()<< sMsg << "\n"); - bValid = false; + m_data.valid = false; } - if (sAmount.Trim().IsEmpty()) + if (m_data.amountString.Trim().IsEmpty()) { sMsg = _("Amount is missing"); logWindow->AppendText(sMsg << "\n"); - bValid = false; + m_data.valid = false; } - if (sFullCateg.Trim().IsEmpty() && type != Model_Checking::all_type()[Model_Checking::TRANSFER]) + if (m_data.sFullCateg.Trim().IsEmpty() && m_data.type != Model_Checking::all_type()[Model_Checking::TRANSFER]) { sMsg = _("Category is missing"); logWindow->AppendText(sMsg << "\n"); - sFullCateg = _("Unknown"); + m_data.sCateg = _("Unknown"); - Model_Category::Data* category = Model_Category::instance().get(sCateg); + Model_Category::Data* category = Model_Category::instance().get(m_data.sCateg); if (!category) { category = Model_Category::instance().create(); - category->CATEGNAME = sCateg; - Model_Category::instance().save(category); - categID = category->CATEGID; + category->CATEGNAME = m_data.sCateg; + m_data.categID = Model_Category::instance().save(category); - sMsg = wxString::Format(_("Added category: %s"), sCateg); + sMsg = wxString::Format(_("Added category: %s"), m_data.sCateg); logWindow->AppendText(sMsg << "\n"); } + if (category) m_data.categID = category->CATEGID; } - to_account_id = -1; - if (type == Model_Checking::all_type()[Model_Checking::TRANSFER]) + m_data.to_accountID = -1; + if (m_data.type == Model_Checking::all_type()[Model_Checking::TRANSFER]) { - to_account_id = getOrCreateAccount(sToAccountName, 0, sDescription); - accountArray.Add(sToAccountName); + m_data.to_accountID = getOrCreateAccount(m_data.sToAccountName, 0, m_data.sDescription); + accountArray.Add(m_data.sToAccountName); - if (val > 0.0) + if (m_data.val > 0.0) { - from_account_id = to_account_id; - to_account_id = fromAccountID_; + m_data.from_accountID = m_data.to_accountID; + m_data.to_accountID = fromAccountID_; } - payeeID = -1; + m_data.payeeID = -1; } else //!=TRANSFER { - if (val > 0.0) - type = Model_Checking::all_type()[Model_Checking::DEPOSIT]; - else if (val < 0.0) - type = Model_Checking::all_type()[Model_Checking::WITHDRAWAL]; + if (m_data.val > 0.0) + m_data.type = Model_Checking::all_type()[Model_Checking::DEPOSIT]; + else if (m_data.val < 0.0) + m_data.type = Model_Checking::all_type()[Model_Checking::WITHDRAWAL]; else - bValid = false; + m_data.valid = false; - to_account_id = -1; - if (sPayee.IsEmpty()) + m_data.to_accountID = -1; + if (m_data.payeeString.IsEmpty()) { sMsg = _("Payee missing"); logWindow->AppendText(sMsg << "\n"); - sPayee = _("Unknown"); + m_data.payeeString = _("Unknown"); } - payee = Model_Payee::instance().get(sPayee); + payee = Model_Payee::instance().get(m_data.payeeString); if (payee) { - payeeID = payee->PAYEEID; + m_data.payeeID = payee->PAYEEID; } else { payee = Model_Payee::instance().create(); - payee->PAYEENAME = sPayee; + payee->PAYEENAME = m_data.payeeString; Model_Payee::instance().save(payee); - payeeID = payee->PAYEEID; - logWindow->AppendText(wxString::Format(_("Payee Added: %s"), sPayee) + "\n"); + m_data.payeeID = payee->PAYEEID; + logWindow->AppendText(wxString::Format(_("Payee Added: %s"), m_data.payeeString) + "\n"); } } if (!mmSplit.empty()) { - categID = -1; - sFullCateg = _("Split Category"); + m_data.categID = m_data.subCategID = -1; + m_data.sFullCateg = _("Split Category"); } else { - Model_Category::Data* category = Model_Category::instance().get(categID); - Model_Subcategory::Data* sub_category = (Model_Subcategory::instance().get(subCategID)); - sFullCateg = Model_Category::full_name(category, sub_category); + m_data.sFullCateg = Model_Category::full_name(m_data.categID, m_data.subCategID); } - if (bValid) - sValid = "OK"; - else - sValid = "NO"; + m_data.sValid = m_data.valid ? "OK" : "NO"; - if ((bValid) && (bFromDate) && ((dtdt < fromDate) || (bToDate && (dtdt > toDate)))) + if ((m_data.valid) && (bFromDate) && ((m_data.dtdt < fromDate) || (bToDate && (m_data.dtdt > toDate)))) { - sValid = "SKIP"; - bValid = false; + m_data.sValid = "SKIP"; + m_data.valid = false; } - const Model_Account::Data* from_account = Model_Account::instance().get(from_account_id); - const Model_Account::Data* to_account = Model_Account::instance().get(to_account_id); + const Model_Account::Data* from_account = Model_Account::instance().get(m_data.from_accountID); + const Model_Account::Data* to_account = Model_Account::instance().get(m_data.to_accountID); sMsg = wxString::Format( "Line:%i Trx:%i %s D:%s Acc:'%s' %s P:'%s%s' Amt:%s C:'%s' \n" , numLines , int(vQIF_trxs_.size() + 1) - , sValid - , convDate + , m_data.sValid + , m_data.convDate , wxString(from_account ? from_account->ACCOUNTNAME : "") - , wxString(type == Model_Checking::all_type()[Model_Checking::TRANSFER] ? "<->" : "") + , wxString(m_data.type == Model_Checking::all_type()[Model_Checking::TRANSFER] ? "<->" : "") , wxString(to_account ? to_account->ACCOUNTNAME : "") , wxString(payee ? payee->PAYEENAME : "") - , (wxString()<<val) - , sFullCateg - ); + , (wxString() << m_data.val) + , m_data.sFullCateg + ); logWindow->AppendText(sMsg); for (const auto &split_entry : mmSplit) { - int c = split_entry->CATEGID; //mmSplit->entries_[i]->categID_; - int s = split_entry->SUBCATEGID; //mmSplit->entries_[i]->subCategID_; + int c = split_entry->CATEGID; + int s = split_entry->SUBCATEGID; Model_Category::Data* category = Model_Category::instance().get(c); Model_Subcategory::Data* sub_category = (s != -1 ? Model_Subcategory::instance().get(s) : 0); - - wxString cn = category->CATEGNAME; - wxString sn = (sub_category ? sub_category->SUBCATEGNAME : ""); - double v = split_entry->SPLITTRANSAMOUNT; // mmSplit->entries_[i]->splitAmount_; - sMsg = (cn << ":" << sn << " " << v << "\n"); + double v = split_entry->SPLITTRANSAMOUNT; + sMsg = (Model_Category::full_name(category, sub_category) << " " << v << "\n"); logWindow->AppendText(sMsg); } - bTrxComplited = true; - if (!bValid) continue; + m_data.trxComplited = true; + if (!m_data.valid) continue; Model_Checking::Data *transaction = Model_Checking::instance().create(); - transaction->TRANSDATE = dtdt.FormatISODate(); - transaction->ACCOUNTID = from_account_id; - transaction->TOACCOUNTID = to_account_id; - transaction->PAYEEID = payeeID; - transaction->TRANSCODE = type; - transaction->TRANSAMOUNT = val; + transaction->TRANSDATE = m_data.dtdt.FormatISODate(); + transaction->ACCOUNTID = m_data.from_accountID; + transaction->TOACCOUNTID = m_data.to_accountID; + transaction->PAYEEID = m_data.payeeID; + transaction->TRANSCODE = m_data.type; + transaction->TRANSAMOUNT = m_data.val; transaction->STATUS = status; - transaction->TRANSACTIONNUMBER = transNum; - transaction->NOTES = notes; - transaction->TOTRANSAMOUNT = val; - if (!mmSplit.empty()) categID = -1; - transaction->CATEGID = categID; - transaction->SUBCATEGID = subCategID; + transaction->TRANSACTIONNUMBER = m_data.transNum; + transaction->NOTES = m_data.notes; + transaction->TOTRANSAMOUNT = m_data.val; + transaction->CATEGID = m_data.categID; + transaction->SUBCATEGID = m_data.subCategID; //For any transfer transaction always mirrored transaction present //Just take alternate amount and skip it @@ -712,16 +694,16 @@ auto *refTrans(refTransaction.first); if (Model_Checking::type(refTrans) != Model_Checking::TRANSFER) continue; if (refTrans->STATUS == "D") continue; - if (Model_Checking::TRANSDATE(refTrans) != dtdt) continue; - if (((refTrans->TRANSAMOUNT < 0) && (val < 0)) || ((refTrans->TRANSAMOUNT > 0) && (val >0))) continue; - if (refTrans->ACCOUNTID!= from_account_id) continue; - if (refTrans->TRANSACTIONNUMBER != transNum) continue; - if (refTrans->NOTES != notes) continue; + if (Model_Checking::TRANSDATE(refTrans) != m_data.dtdt) continue; + if (((refTrans->TRANSAMOUNT < 0) && (m_data.val < 0)) || ((refTrans->TRANSAMOUNT > 0) && (m_data.val >0))) continue; + if (refTrans->ACCOUNTID != m_data.from_accountID) continue; + if (refTrans->TRANSACTIONNUMBER != m_data.transNum) continue; + if (refTrans->NOTES != m_data.notes) continue; - if (val > 0.0) - refTrans->TOTRANSAMOUNT = val; + if (m_data.val > 0.0) + refTrans->TOTRANSAMOUNT = m_data.val; else - refTrans->TRANSAMOUNT = val; + refTrans->TRANSAMOUNT = m_data.val; refTrans->STATUS = "D"; sMsg = wxString::Format("%f -> %f (%f)\n", refTrans->TRANSAMOUNT @@ -731,12 +713,12 @@ : fabs(refTrans->TRANSAMOUNT) / fabs(refTrans->TOTRANSAMOUNT)); logWindow->AppendText(sMsg); - bValid = false; + m_data.valid = false; break; } } - if (bValid) + if (m_data.valid) { vQIF_trxs_.push_back(std::make_pair(transaction, mmSplit)); } Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2013-11-28 21:39:36 UTC (rev 5393) +++ trunk/src/import_export/qif_import.h 2013-11-28 23:35:15 UTC (rev 5394) @@ -119,6 +119,23 @@ }; std::map<int, wxString> ColName_; + struct m_data + { + wxDateTime dtdt; + bool valid; + bool trxComplited; + int payeeID; + int categID; + int subCategID; + int to_accountID; + int from_accountID; + wxString payeeString, type, amountString, transNum, notes; + wxString dt, convDate, accountName, dateString, sToAccountName; + wxString sFullCateg, sCateg, sSubCateg, sSplitCategs, sSplitAmount, sValid, sDescription; + double val = 0.0, dSplitAmount = 0.0; + } m_data; + + //QIF specific data enum qifAccountInfoType { Name = 1, // N This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2013-12-22 10:34:10
|
Revision: 5681 http://sourceforge.net/p/moneymanagerex/code/5681 Author: vomikan Date: 2013-12-22 10:34:06 +0000 (Sun, 22 Dec 2013) Log Message: ----------- cleanup Modified Paths: -------------- trunk/src/import_export/qif_export.cpp trunk/src/import_export/qif_export.h Modified: trunk/src/import_export/qif_export.cpp =================================================================== --- trunk/src/import_export/qif_export.cpp 2013-12-22 08:49:48 UTC (rev 5680) +++ trunk/src/import_export/qif_export.cpp 2013-12-22 10:34:06 UTC (rev 5681) @@ -33,21 +33,17 @@ EVT_CLOSE(mmQIFExportDialog::OnQuit) END_EVENT_TABLE() -mmQIFExportDialog::mmQIFExportDialog( - wxWindow* parent, wxWindowID id, - const wxString& caption, const wxPoint& pos, - const wxSize& size, long style -) : - parent_(parent) +mmQIFExportDialog::mmQIFExportDialog(wxWindow* parent) { - Create(parent, id, caption, pos, size, style); + long style = wxCAPTION | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCLOSE_BOX; + Create(parent, wxID_ANY, _("QIF Export"), wxDefaultPosition, wxSize(500, 300), style); } -bool mmQIFExportDialog::Create( wxWindow* parent, wxWindowID id, const wxString& caption, - const wxPoint& pos, const wxSize& size, long style ) +bool mmQIFExportDialog::Create(wxWindow* parent, wxWindowID id, const wxString& caption + , const wxPoint& pos, const wxSize& size, long style) { - SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); - wxDialog::Create( parent, id, caption, pos, size, style ); + SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS); + wxDialog::Create(parent, id, caption, pos, size, style); CreateControls(); GetSizer()->Fit(this); @@ -382,7 +378,7 @@ /* Array with transfer transactions */ std::map <int, wxString> transferTransactions; - wxProgressDialog progressDlg(_("Please wait"), _("Exporting") + wxProgressDialog progressDlg(_("Please wait"), _("Exporting") , 100, this, wxPD_APP_MODAL | wxPD_CAN_ABORT); for (const auto &account_id : selected_accounts_id_) @@ -402,7 +398,7 @@ if (dateToCheckBox_->IsChecked() && Model_Checking::TRANSDATE(transaction) > toDateCtrl_->GetValue()) continue; - if (!progressDlg.Pulse(wxString::Format(_("Exporting transaction %i"), ++numRecords))) // if cancel clicked + if (!progressDlg.Pulse(wxString::Format(_("Exporting transaction %i"), ++numRecords))) // if cancel clicked break; // abort processing mmExportTransaction data(transaction.TRANSID, account_id); @@ -453,14 +449,12 @@ else *log_field_ << buffer; - sErrorMsg << wxTRANSLATE("Number of transactions exported: %ld"); - const wxString msg = wxString::Format(sErrorMsg, numRecords); - wxMessageDialog msgDlg(parent_, wxGetTranslation(msg) - , _("Export to QIF"), wxOK|wxICON_INFORMATION); - wxButton* ok = (wxButton*)FindWindow(wxID_OK); - ok->Disable(); + wxMessageDialog msgDlg(this + , wxString::Format(_("Number of transactions exported: %ld"), numRecords) + , _("Export to QIF"), wxOK | wxICON_INFORMATION); - //FIXME: Can't close this dialog (Ubuntu 64x ???) + (wxButton*)FindWindow(wxID_OK)->Disable(); + msgDlg.ShowModal(); } Modified: trunk/src/import_export/qif_export.h =================================================================== --- trunk/src/import_export/qif_export.h 2013-12-22 08:49:48 UTC (rev 5680) +++ trunk/src/import_export/qif_export.h 2013-12-22 10:34:06 UTC (rev 5681) @@ -1,30 +1,24 @@ -/******************************************************* -Copyright (C) 2012 Nikolay - -This program is free software; you can redistribute it and/or modify -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 -********************************************************/ - +/******************************************************* +Copyright (C) 2012 Nikolay + +This program is free software; you can redistribute it and/or modify +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 +********************************************************/ + #ifndef QIF_EXPORT_H #define QIF_EXPORT_H -#define SYMBOL_QIFDIALOG_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX -#define SYMBOL_QIFDIALOG_TITLE _("QIF Export") -#define SYMBOL_QIFDIALOG_IDNAME wxID_HIGHEST+1 -#define SYMBOL_QIFDIALOG_SIZE wxSize(500, 300) -#define SYMBOL_QIFDIALOG_POSITION wxDefaultPosition - #include "defs.h" class wxDatePickerCtrl; @@ -37,19 +31,14 @@ public: mmQIFExportDialog() {} - mmQIFExportDialog( - wxWindow* parent, - wxWindowID id = SYMBOL_QIFDIALOG_IDNAME, - const wxString& caption = SYMBOL_QIFDIALOG_TITLE, - const wxPoint& pos = SYMBOL_QIFDIALOG_POSITION, - const wxSize& size = SYMBOL_QIFDIALOG_SIZE, - long style = SYMBOL_QIFDIALOG_STYLE ); + mmQIFExportDialog(wxWindow* parent); - bool Create( wxWindow* parent, wxWindowID id = SYMBOL_QIFDIALOG_IDNAME, - const wxString& caption = SYMBOL_QIFDIALOG_TITLE, - const wxPoint& pos = SYMBOL_QIFDIALOG_POSITION, - const wxSize& size = SYMBOL_QIFDIALOG_SIZE, - long style = SYMBOL_QIFDIALOG_STYLE ); + bool Create(wxWindow* parent + , wxWindowID id + , const wxString& + , const wxPoint& pos + , const wxSize& size + , long style); private: void OnQuit(wxCloseEvent& event); @@ -65,7 +54,6 @@ void CreateControls(); void fillControls(); - wxWindow* parent_; wxArrayInt accounts_id_; /* Selected accounts id */ wxArrayInt selected_accounts_id_; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2014-01-02 20:10:02
|
Revision: 5784 http://sourceforge.net/p/moneymanagerex/code/5784 Author: vomikan Date: 2014-01-02 20:09:59 +0000 (Thu, 02 Jan 2014) Log Message: ----------- translation fix Modified Paths: -------------- branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp branches/version_1.0.0.0/src/relocatecategorydialog.cpp trunk/src/import_export/univcsvdialog.cpp trunk/src/relocatecategorydialog.cpp Modified: branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp =================================================================== --- branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp 2014-01-02 14:51:06 UTC (rev 5783) +++ branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp 2014-01-02 20:09:59 UTC (rev 5784) @@ -143,11 +143,11 @@ itemPanel_AddRemove->SetSizer(itemBoxSizer_AddRemove); //Add button - m_button_add_= new wxButton(itemPanel_AddRemove, wxID_ADD); + m_button_add_ = new wxButton(itemPanel_AddRemove, wxID_ADD, _("&Add ")); itemBoxSizer_AddRemove->Add(m_button_add_, flags); //Remove button - m_button_remove_ = new wxButton(itemPanel_AddRemove, wxID_REMOVE); + m_button_remove_ = new wxButton(itemPanel_AddRemove, wxID_REMOVE, _("&Remove ")); itemBoxSizer_AddRemove->Add(m_button_remove_, flags); //Standard MMEX CSV Modified: branches/version_1.0.0.0/src/relocatecategorydialog.cpp =================================================================== --- branches/version_1.0.0.0/src/relocatecategorydialog.cpp 2014-01-02 14:51:06 UTC (rev 5783) +++ branches/version_1.0.0.0/src/relocatecategorydialog.cpp 2014-01-02 20:09:59 UTC (rev 5784) @@ -108,8 +108,8 @@ boxSizer->Add(lineBottom, flagsExpand); - wxButton* okButton = new wxButton(this, wxID_OK); - wxButton* cancelButton = new wxButton(this, wxID_CANCEL); + wxButton* okButton = new wxButton(this, wxID_OK, _("&OK ")); + wxButton* cancelButton = new wxButton(this, wxID_CANCEL, _("&Cancel ")); cancelButton-> SetFocus(); wxBoxSizer* buttonBoxSizer = new wxBoxSizer(wxHORIZONTAL); buttonBoxSizer->Add(okButton, flags); Modified: trunk/src/import_export/univcsvdialog.cpp =================================================================== --- trunk/src/import_export/univcsvdialog.cpp 2014-01-02 14:51:06 UTC (rev 5783) +++ trunk/src/import_export/univcsvdialog.cpp 2014-01-02 20:09:59 UTC (rev 5784) @@ -143,11 +143,11 @@ itemPanel_AddRemove->SetSizer(itemBoxSizer_AddRemove); //Add button - m_button_add_= new wxButton(itemPanel_AddRemove, wxID_ADD); + m_button_add_= new wxButton(itemPanel_AddRemove, wxID_ADD, _("&Add ")); itemBoxSizer_AddRemove->Add(m_button_add_, flags); //Remove button - m_button_remove_ = new wxButton(itemPanel_AddRemove, wxID_REMOVE); + m_button_remove_ = new wxButton(itemPanel_AddRemove, wxID_REMOVE, _("&Remove ")); itemBoxSizer_AddRemove->Add(m_button_remove_, flags); //Standard MMEX CSV Modified: trunk/src/relocatecategorydialog.cpp =================================================================== --- trunk/src/relocatecategorydialog.cpp 2014-01-02 14:51:06 UTC (rev 5783) +++ trunk/src/relocatecategorydialog.cpp 2014-01-02 20:09:59 UTC (rev 5784) @@ -109,8 +109,8 @@ boxSizer->Add(lineBottom, flagsExpand); - wxButton* okButton = new wxButton(this, wxID_OK); - wxButton* cancelButton = new wxButton(this, wxID_CANCEL); + wxButton* okButton = new wxButton(this, wxID_OK, _("&OK ")); + wxButton* cancelButton = new wxButton(this, wxID_CANCEL, _("&Cancel ")); cancelButton-> SetFocus(); wxBoxSizer* buttonBoxSizer = new wxBoxSizer(wxHORIZONTAL); buttonBoxSizer->Add(okButton, flags); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2014-01-11 00:28:25
|
Revision: 5889 http://sourceforge.net/p/moneymanagerex/code/5889 Author: vomikan Date: 2014-01-11 00:28:21 +0000 (Sat, 11 Jan 2014) Log Message: ----------- [bugs:#276] fix Ticket Links: ------------ https://sourceforge.net/p/moneymanagerex/bugs/276 Modified Paths: -------------- branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp branches/version_1.0.0.0/src/util.cpp trunk/src/import_export/univcsvdialog.cpp trunk/src/util.cpp Modified: branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp =================================================================== --- branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp 2014-01-11 00:00:24 UTC (rev 5888) +++ branches/version_1.0.0.0/src/import_export/univcsvdialog.cpp 2014-01-11 00:28:21 UTC (rev 5889) @@ -1224,8 +1224,8 @@ switch (index) { case UNIV_CSV_DATE: - mmParseDisplayStringToDate(dtdt_, token, date_format_); - dt_ = dtdt_.GetDateOnly().FormatISODate(); + if (mmParseDisplayStringToDate(dtdt_, token, date_format_)) + dt_ = dtdt_.GetDateOnly().FormatISODate(); break; case UNIV_CSV_PAYEE: Modified: branches/version_1.0.0.0/src/util.cpp =================================================================== --- branches/version_1.0.0.0/src/util.cpp 2014-01-11 00:00:24 UTC (rev 5888) +++ branches/version_1.0.0.0/src/util.cpp 2014-01-11 00:28:21 UTC (rev 5889) @@ -416,8 +416,8 @@ date_regex["%d/%m/%Y"] = wxString::Format("^%s/%s/%s$", dd, mm, yyyy); date_regex["%d-%m-%y"] = wxString::Format("^%s-%s-%s$", dd, mm, yy); date_regex["%d-%m-%Y"] = wxString::Format("^%s-%s-%s$", dd, mm, yyyy); - date_regex["%d.%m.%y"] = wxString::Format("^%s\\x2E%s\\x2E%s$", dd, mm, yy); - date_regex["%d.%m.%Y"] = wxString::Format("^%s\\x2E%s\\x2E%s$", dd, mm, yyyy); + date_regex["%d.%m.%y"] = wxString::Format("^%s\x2E%s\x2E%s$", dd, mm, yy); + date_regex["%d.%m.%Y"] = wxString::Format("^%s\x2E%s\x2E%s$", dd, mm, yyyy); date_regex["%d,%m,%y"] = wxString::Format("^%s,%s,%s$", dd, mm, yyyy); date_regex["%d/%m'%Y"] = wxString::Format("^%s/%s'%s$", dd, mm, yyyy); date_regex["%d/%m %Y"] = wxString::Format("^%s/%s %s$", dd, mm, yyyy); @@ -431,7 +431,7 @@ date_regex["%y-%m-%d"] = wxString::Format("^%s-%s-%s$", dd, mm, yy); date_regex["%Y/%m/%d"] = wxString::Format("^%s/%s/%s$", yyyy, mm, dd); date_regex["%Y-%m-%d"] = wxString::Format("^%s-%s-%s$", yyyy, mm, dd); - date_regex["%Y.%m.%d"] = wxString::Format("^%s\\x2E%s\\x2E%s$", yyyy, mm, dd); + date_regex["%Y.%m.%d"] = wxString::Format("^%s\x2E%s\x2E%s$", yyyy, mm, dd); date_regex["%Y %m %d"] = wxString::Format("^%s %s %s$", yyyy, mm, dd); return date_regex; Modified: trunk/src/import_export/univcsvdialog.cpp =================================================================== --- trunk/src/import_export/univcsvdialog.cpp 2014-01-11 00:00:24 UTC (rev 5888) +++ trunk/src/import_export/univcsvdialog.cpp 2014-01-11 00:28:21 UTC (rev 5889) @@ -1224,8 +1224,8 @@ switch (index) { case UNIV_CSV_DATE: - mmParseDisplayStringToDate(dtdt_, token, date_format_); - dt_ = dtdt_.GetDateOnly().FormatISODate(); + if (mmParseDisplayStringToDate(dtdt_, token, date_format_)) + dt_ = dtdt_.GetDateOnly().FormatISODate(); break; case UNIV_CSV_PAYEE: Modified: trunk/src/util.cpp =================================================================== --- trunk/src/util.cpp 2014-01-11 00:00:24 UTC (rev 5888) +++ trunk/src/util.cpp 2014-01-11 00:28:21 UTC (rev 5889) @@ -369,8 +369,8 @@ date_regex["%d/%m/%Y"] = wxString::Format("^%s/%s/%s$", dd, mm, yyyy); date_regex["%d-%m-%y"] = wxString::Format("^%s-%s-%s$", dd, mm, yy); date_regex["%d-%m-%Y"] = wxString::Format("^%s-%s-%s$", dd, mm, yyyy); - date_regex["%d.%m.%y"] = wxString::Format("^%s\\x2E%s\\x2E%s$", dd, mm, yy); - date_regex["%d.%m.%Y"] = wxString::Format("^%s\\x2E%s\\x2E%s$", dd, mm, yyyy); + date_regex["%d.%m.%y"] = wxString::Format("^%s\x2E%s\x2E%s$", dd, mm, yy); + date_regex["%d.%m.%Y"] = wxString::Format("^%s\x2E%s\x2E%s$", dd, mm, yyyy); date_regex["%d,%m,%y"] = wxString::Format("^%s,%s,%s$", dd, mm, yyyy); date_regex["%d/%m'%Y"] = wxString::Format("^%s/%s'%s$", dd, mm, yyyy); date_regex["%d/%m %Y"] = wxString::Format("^%s/%s %s$", dd, mm, yyyy); @@ -384,7 +384,7 @@ date_regex["%y-%m-%d"] = wxString::Format("^%s-%s-%s$", dd, mm, yy); date_regex["%Y/%m/%d"] = wxString::Format("^%s/%s/%s$", yyyy, mm, dd); date_regex["%Y-%m-%d"] = wxString::Format("^%s-%s-%s$", yyyy, mm, dd); - date_regex["%Y.%m.%d"] = wxString::Format("^%s\\x2E%s\\x2E%s$", yyyy, mm, dd); + date_regex["%Y.%m.%d"] = wxString::Format("^%s\x2E%s\x2E%s$", yyyy, mm, dd); date_regex["%Y %m %d"] = wxString::Format("^%s %s %s$", yyyy, mm, dd); return date_regex; This was sent by MMEX an easy to use, money management application. |
From: <vo...@us...> - 2014-02-22 21:21:57
|
Revision: 6155 http://sourceforge.net/p/moneymanagerex/code/6155 Author: vomikan Date: 2014-02-22 21:21:50 +0000 (Sat, 22 Feb 2014) Log Message: ----------- cleanup Modified Paths: -------------- trunk/src/import_export/qif_import.cpp trunk/src/import_export/qif_import.h Modified: trunk/src/import_export/qif_import.cpp =================================================================== --- trunk/src/import_export/qif_import.cpp 2014-02-22 20:45:26 UTC (rev 6154) +++ trunk/src/import_export/qif_import.cpp 2014-02-22 21:21:50 UTC (rev 6155) @@ -79,10 +79,6 @@ void mmQIFImportDialog::CreateControls() { - wxSizerFlags flags, flagsExpand; - flags.Align(wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL).Border(wxALL, 5); - flagsExpand.Align(wxALIGN_CENTER).Border(wxALL, 5).Expand().Proportion(1); - wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); this->SetSizer(main_sizer); wxBoxSizer* left_sizer = new wxBoxSizer(wxVERTICAL); @@ -101,11 +97,11 @@ bbFile_ = new wxBitmapButton(this, wxID_ANY, wxNullBitmap, wxDefaultPosition , wxSize(file_name_ctrl_->GetSize().GetHeight(), file_name_ctrl_->GetSize().GetHeight())); - flex_sizer->Add(file_name_label, flags); - flex_sizer->Add(button_search_, flags); - flex_sizer->Add(bbFile_, flags); + flex_sizer->Add(file_name_label, g_flags); + flex_sizer->Add(button_search_, g_flags); + flex_sizer->Add(bbFile_, g_flags); main_sizer->Add(file_name_ctrl_, 0, wxALL|wxGROW, 5); - left_sizer->Add(flex_sizer, flagsExpand); + left_sizer->Add(flex_sizer, g_flagsExpand); // Date Format Settings dateFormat_ = mmOptions::instance().dateFormat_; @@ -122,18 +118,18 @@ bbFormat_ = new wxBitmapButton(this, wxID_ANY, wxNullBitmap, wxDefaultPosition , wxSize(file_name_ctrl_->GetSize().GetHeight(), file_name_ctrl_->GetSize().GetHeight())); - flex_sizer->Add(dateFormat, flags); - flex_sizer->Add(choiceDateFormat_, flags); - flex_sizer->Add(bbFormat_, flags); + flex_sizer->Add(dateFormat, g_flags); + flex_sizer->Add(choiceDateFormat_, g_flags); + flex_sizer->Add(bbFormat_, g_flags); // Accounts wxStaticText* newAccountsText = new wxStaticText(this, wxID_STATIC, _("Missing Accounts")); newAccounts_ = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxSize(150,-1)); bbAccounts_ = new wxBitmapButton(this, wxID_ANY, wxNullBitmap, wxDefaultPosition , wxSize(file_name_ctrl_->GetSize().GetHeight(), file_name_ctrl_->GetSize().GetHeight())); - flex_sizer->Add(newAccountsText, flags); - flex_sizer->Add(newAccounts_, flags); - flex_sizer->Add(bbAccounts_, flags); + flex_sizer->Add(newAccountsText, g_flags); + flex_sizer->Add(newAccounts_, g_flags); + flex_sizer->Add(bbAccounts_, g_flags); // From Date -------------------------------------------- dateFromCheckBox_ = new wxCheckBox( this, wxID_ANY, _("From Date") @@ -141,8 +137,8 @@ fromDateCtrl_ = new wxDatePickerCtrl( this, wxID_STATIC, wxDefaultDateTime , wxDefaultPosition, wxSize(150, -1), wxDP_DROPDOWN); fromDateCtrl_->Enable(false); - flex_sizer->Add(dateFromCheckBox_, flags); - flex_sizer->Add(fromDateCtrl_, flags); + flex_sizer->Add(dateFromCheckBox_, g_flags); + flex_sizer->Add(fromDateCtrl_, g_flags); flex_sizer->AddSpacer(1); // To Date -------------------------------------------- @@ -151,8 +147,8 @@ toDateCtrl_ = new wxDatePickerCtrl( this, wxID_STATIC, wxDefaultDateTime , wxDefaultPosition, wxSize(150, -1), wxDP_DROPDOWN); toDateCtrl_->Enable(false); - flex_sizer->Add(dateToCheckBox_, flags); - flex_sizer->Add(toDateCtrl_, flags); + flex_sizer->Add(dateToCheckBox_, g_flags); + flex_sizer->Add(toDateCtrl_, g_flags); flex_sizer->AddSpacer(1); //Log viewer @@ -160,7 +156,7 @@ log_field_ = new wxTextCtrl( this, wxID_STATIC, "" , wxDefaultPosition, wxSize(500, -1), wxTE_MULTILINE|wxHSCROLL ); - log_sizer->Add(log_field_, 1, wxGROW|wxALL, 5); + log_sizer->Add(log_field_, g_flagsExpand); //Data viewer wxPanel* data_panel = new wxPanel(this, wxID_ANY); @@ -177,20 +173,20 @@ dataListBox_->AppendTextColumn(ColName_[COL_CATEGORY], wxDATAVIEW_CELL_INERT, 140, wxALIGN_RIGHT); dataListBox_->AppendTextColumn(ColName_[COL_VALUE], wxDATAVIEW_CELL_INERT, 100, wxALIGN_RIGHT); dataListBox_->AppendTextColumn(ColName_[COL_NOTES], wxDATAVIEW_CELL_INERT, 300); - data_sizer->Add(dataListBox_, flagsExpand); + data_sizer->Add(dataListBox_, g_flagsExpand); //Compose all sizers togethe wxBoxSizer* top_sizer = new wxBoxSizer(wxHORIZONTAL); - main_sizer->Add(top_sizer, flagsExpand); - top_sizer->Add(left_sizer, flags); - top_sizer->Add(log_sizer, flagsExpand); - main_sizer->Add(data_panel, flagsExpand); + main_sizer->Add(top_sizer, g_flagsExpand); + top_sizer->Add(left_sizer, g_flags); + top_sizer->Add(log_sizer, g_flagsExpand); + main_sizer->Add(data_panel, g_flagsExpand); /********************************************************************************************** Button Panel with OK and Cancel Buttons ***********************************************************************************************/ wxPanel* buttons_panel = new wxPanel(this, wxID_ANY); - main_sizer->Add(buttons_panel, flags.Center()); + main_sizer->Add(buttons_panel, wxSizerFlags(g_flags).Center()); wxStdDialogButtonSizer* buttons_sizer = new wxStdDialogButtonSizer; buttons_panel->SetSizer(buttons_sizer); @@ -200,8 +196,8 @@ btnOK_->Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler(mmQIFImportDialog::OnOk), NULL, this); - buttons_sizer->Add(btnOK_, flags); - buttons_sizer->Add(itemButtonCancel_, flags); + buttons_sizer->Add(btnOK_, g_flags); + buttons_sizer->Add(itemButtonCancel_, g_flags); buttons_sizer->Realize(); Fit(); @@ -226,13 +222,12 @@ return wxString("!DNPAT^MLSE$C/UI").Contains(line.Left(1)); } -wxString mmQIFImportDialog::getLineData(const wxString& line) +wxString mmQIFImportDialog::getLineData(const wxString& line) const { - wxString dataString = line.substr(1, line.Length()-1); - return dataString; + return line.substr(1, line.Length()-1); } -wxString mmQIFImportDialog::getFileLine(wxTextInputStream& textFile, int& lineNumber) +wxString mmQIFImportDialog::getFileLine(wxTextInputStream& textFile, int& lineNumber) const { wxString textLine = textFile.ReadLine(); lineNumber ++; @@ -241,7 +236,7 @@ return textLine; } -wxString mmQIFImportDialog::getFinancistoProject(wxString& sSubCateg) +wxString mmQIFImportDialog::getFinancistoProject(wxString& sSubCateg) const { //Additional parsint for Financisto wxString sProject = ""; Modified: trunk/src/import_export/qif_import.h =================================================================== --- trunk/src/import_export/qif_import.h 2014-02-22 20:45:26 UTC (rev 6154) +++ trunk/src/import_export/qif_import.h 2014-02-22 21:21:50 UTC (rev 6155) @@ -72,9 +72,9 @@ int fromAccountID_; bool isLineOK(const wxString& line); - wxString getLineData(const wxString& line); - wxString getFileLine(wxTextInputStream& textFile, int& lineNumber); - wxString getFinancistoProject(wxString& sSubCateg); + wxString getLineData(const wxString& line) const; + wxString getFileLine(wxTextInputStream& textFile, int& lineNumber) const; + wxString getFinancistoProject(wxString& sSubCateg) const; wxString sFileName_; wxDataViewListCtrl* dataListBox_; @@ -108,7 +108,7 @@ wxString payeeString, type, amountString, transNum, notes; wxString dt, convDate, accountName, dateString, sToAccountName; wxString sFullCateg, sCateg, sSubCateg, sSplitCategs, sSplitAmount, sValid, sDescription; - double val = 0.0, dSplitAmount = 0.0; + double val, dSplitAmount; } m_data; //QIF specific data This was sent by MMEX an easy to use, money management application. |
From: <gua...@us...> - 2014-03-04 09:03:47
|
Revision: 6177 http://sourceforge.net/p/moneymanagerex/code/6177 Author: guanlisheng Date: 2014-03-04 09:03:42 +0000 (Tue, 04 Mar 2014) Log Message: ----------- dos2unix Modified Paths: -------------- trunk/src/import_export/export.cpp trunk/src/import_export/export.h Modified: trunk/src/import_export/export.cpp =================================================================== --- trunk/src/import_export/export.cpp 2014-03-03 12:38:18 UTC (rev 6176) +++ trunk/src/import_export/export.cpp 2014-03-04 09:03:42 UTC (rev 6177) @@ -1,21 +1,21 @@ -/******************************************************* -Copyright (C) 2013 Nikolay - -This program is free software; you can redistribute it and/or modify -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 -********************************************************/ +/******************************************************* +Copyright (C) 2013 Nikolay +This program is free software; you can redistribute it and/or modify +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 +********************************************************/ + #include "export.h" #include "constants.h" #include "util.h" Modified: trunk/src/import_export/export.h =================================================================== --- trunk/src/import_export/export.h 2014-03-03 12:38:18 UTC (rev 6176) +++ trunk/src/import_export/export.h 2014-03-04 09:03:42 UTC (rev 6177) @@ -1,21 +1,21 @@ -/******************************************************* -Copyright (C) 2013 Nikolay - -This program is free software; you can redistribute it and/or modify -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 -********************************************************/ +/******************************************************* +Copyright (C) 2013 Nikolay +This program is free software; you can redistribute it and/or modify +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 +********************************************************/ + #ifndef _MM_EX_EXPORT_H_ #define _MM_EX_EXPORT_H_ This was sent by MMEX an easy to use, money management application. |