void Model_Checking::getEmptyTransaction(Data &data, int accountID) { data.TRANSID = -1; wxDateTime trx_date = wxDateTime::Today(); if (mmIniOptions::instance().transDateDefault_ != 0) { auto trans = instance().find(ACCOUNTID(accountID), TRANSDATE(trx_date, LESS_OR_EQUAL)); std::stable_sort(trans.begin(), trans.end(), SorterByTRANSDATE()); std::reverse(trans.begin(), trans.end()); if (!trans.empty()) trx_date = to_date(trans.begin()->TRANSDATE); wxDateTime trx_date_b = wxDateTime::Today(); auto trans_b = instance().find(TOACCOUNTID(accountID), TRANSDATE(trx_date_b, LESS_OR_EQUAL)); std::stable_sort(trans_b.begin(), trans_b.end(), SorterByTRANSDATE()); std::reverse(trans_b.begin(), trans_b.end()); if (!trans_b.empty()) { trx_date_b = to_date(trans_b.begin()->TRANSDATE); if (!trans.empty() && (trx_date_b > trx_date)) trx_date = trx_date_b; } } data.TRANSDATE = trx_date.FormatISODate(); data.ACCOUNTID = accountID; data.STATUS = toShortStatus(all_status()[mmIniOptions::instance().transStatusReconciled_]); data.TRANSCODE = all_type()[WITHDRAWAL]; data.CATEGID = -1; data.SUBCATEGID = -1; data.FOLLOWUPID = -1; data.TRANSAMOUNT = 0; data.TOTRANSAMOUNT = 0; data.TRANSACTIONNUMBER = ""; if (mmIniOptions::instance().transPayeeSelectionNone_ != 0) { auto trx = instance().find(TRANSCODE(TRANSFER, NOT_EQUAL) , ACCOUNTID(accountID, EQUAL), TRANSDATE(trx_date, LESS_OR_EQUAL)); if (!trx.empty()) { std::stable_sort(trx.begin(), trx.end(), SorterByTRANSDATE()); Model_Payee::Data* payee = Model_Payee::instance().get(trx.rbegin()->PAYEEID); if (payee) data.PAYEEID = payee->PAYEEID; if (payee && mmIniOptions::instance().transCategorySelectionNone_ != 0) { data.CATEGID = payee->CATEGID; data.SUBCATEGID = payee->SUBCATEGID; } } } }
void mmReportTransactions::Run(mmFilterTransactionsDialog* dlg) { const auto splits = Model_Splittransaction::instance().get_all(); for (const auto& tran : Model_Checking::instance().all()) //TODO: find should be faster { if (!dlg->checkAll(tran, refAccountID_, splits)) continue; Model_Checking::Full_Data full_tran(tran, splits); full_tran.PAYEENAME = full_tran.real_payee_name(refAccountID_); if (transDialog_->getCategoryCheckBox() && full_tran.has_split()) { full_tran.CATEGNAME.clear(); full_tran.TRANSAMOUNT = 0; for (const auto& split : full_tran.m_splits) { const wxString split_info = wxString::Format("%s = %s | " , Model_Category::full_name(split.CATEGID, split.SUBCATEGID) , wxString::Format("%.2f", split.SPLITTRANSAMOUNT)); full_tran.CATEGNAME.Append(split_info); if (split.CATEGID != transDialog_->getCategId() ) continue; if (split.SUBCATEGID != transDialog_->getSubCategId() && !transDialog_->getSimilarStatus()) continue; full_tran.TRANSAMOUNT += split.SPLITTRANSAMOUNT; } full_tran.CATEGNAME.RemoveLast(2); } trans_.push_back(full_tran); } std::stable_sort(trans_.begin(), trans_.end(), SorterByTRANSDATE()); }
void mmBillsDepositsPanel::sortTable() { std::sort(bills_.begin(), bills_.end()); switch (listCtrlAccount_->m_selected_col) { case COL_ID: std::stable_sort(bills_.begin(), bills_.end(), SorterByBDID()); break; case COL_PAYMENT_DATE: std::stable_sort(bills_.begin(), bills_.end(), SorterByNEXTOCCURRENCEDATE()); break; case COL_DUE_DATE: std::stable_sort(bills_.begin(), bills_.end(), SorterByTRANSDATE()); break; case COL_ACCOUNT: std::stable_sort(bills_.begin(), bills_.end(), SorterByACCOUNTNAME()); break; case COL_PAYEE: std::stable_sort(bills_.begin(), bills_.end(), SorterByPAYEENAME()); break; case COL_STATUS: std::stable_sort(bills_.begin(), bills_.end(), SorterBySTATUS()); break; case COL_CATEGORY: std::stable_sort(bills_.begin(), bills_.end(), SorterByCATEGNAME()); break; case COL_TYPE: std::stable_sort(bills_.begin(), bills_.end(), SorterByTRANSCODE()); break; case COL_AMOUNT: std::stable_sort(bills_.begin(), bills_.end(), SorterByTRANSAMOUNT()); break; case COL_FREQUENCY: std::stable_sort(bills_.begin(), bills_.end() , [&](const Model_Billsdeposits::Full_Data& x, const Model_Billsdeposits::Full_Data& y) { wxString x_text = this->GetFrequency(&x); wxString y_text = this->GetFrequency(&y); return x_text < y_text; }); break; case COL_REPEATS: std::stable_sort(bills_.begin(), bills_.end(), SorterByREPEATS()); break; case COL_DAYS: std::stable_sort(bills_.begin(), bills_.end() , [&](const Model_Billsdeposits::Data& x, const Model_Billsdeposits::Data& y) { bool x_useText = false; wxString x_text = this->GetRemainingDays(&x); long x_num = 0; if (isdigit(x_text[0])) { x_num = wxAtoi(x_text); wxString removed; if (x_text.EndsWith(wxString("!"), &removed)) x_num = -x_num; } else x_useText = true; bool y_useText = false; wxString y_text = this->GetRemainingDays(&y); long y_num = 0; if (isdigit(y_text[0])) { y_num = wxAtoi(y_text); wxString removed; if (y_text.EndsWith(wxString("!"), &removed)) y_num = -y_num; } else y_useText = true; return ((!x_useText && !y_useText) ? x_num < y_num : x_text < y_text); }); break; case COL_NOTES: std::stable_sort(bills_.begin(), bills_.end(), SorterByNOTES()); break; default: break; } if (!listCtrlAccount_->m_asc) std::reverse(bills_.begin(), bills_.end()); }