Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(#5752): check split notes in txn filter #5754

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
42 changes: 33 additions & 9 deletions src/filtertransdialog.cpp
Expand Up @@ -1212,18 +1212,42 @@ bool mmFilterTransactionsDialog::mmIsPayeeMatches(const DATA &tran)
}

template<class MODEL, class DATA>
bool mmFilterTransactionsDialog::mmIsNoteMatches(const DATA& tran)
bool mmFilterTransactionsDialog::mmIsNoteMatches(const DATA& tran, const std::map<int, typename MODEL::Split_Data_Set>& splits)
{
const wxString value = mmGetNotes();
wxArrayString trx_notes;
trx_notes.Add(tran.NOTES);
const auto& it = splits.find(tran.id());
if (it != splits.end()) {
for (const auto& split : it->second) {
trx_notes.Add(split.NOTES);
}
}
if (!value.empty()) {
if (value.StartsWith("regex:")) {
wxRegEx pattern("^(" + value.Right(value.length() - 6).ToStdString() + ")$", wxRE_ICASE | wxRE_EXTENDED);
if (pattern.IsValid() && pattern.Matches(tran.NOTES)) return true;
else return false;
bool match = false;
bool use_regex = false;
wxRegEx pattern;
if (value.StartsWith("regex:"))
{
if (!pattern.Compile("^(" + value.Right(value.length() - 6).ToStdString() + ")$", wxRE_ICASE | wxRE_EXTENDED))
return false;
else use_regex = true;
}
else return tran.NOTES.Lower().Matches(value.Lower());
for (const auto& note : trx_notes) {
if (use_regex)
match |= pattern.Matches(note);
else
match |= note.Lower().Matches(value.Lower());
}
return match;
}
else
{
for (const auto& note : trx_notes) {
if (!note.IsEmpty()) return false;
}
return true;
}
else return tran.NOTES.empty();
}

template<class MODEL, class DATA>
Expand Down Expand Up @@ -1266,7 +1290,7 @@ bool mmFilterTransactionsDialog::mmIsRecordMatches(const Model_Checking::Data &t
else if (mmIsNumberChecked() && (mmGetNumber().empty() ? !tran.TRANSACTIONNUMBER.empty()
: tran.TRANSACTIONNUMBER.empty() || !tran.TRANSACTIONNUMBER.Lower().Matches(mmGetNumber().Lower())))
ok = false;
else if (mmIsNotesChecked() && !mmIsNoteMatches<Model_Checking>(tran)) ok = false;
else if (mmIsNotesChecked() && !mmIsNoteMatches<Model_Checking>(tran, split)) ok = false;
else if (mmIsColorChecked() && (m_color_value != tran.FOLLOWUPID))
ok = false;
else if (mmIsCustomFieldChecked() && !mmIsCustomFieldMatches(tran))
Expand All @@ -1292,7 +1316,7 @@ bool mmFilterTransactionsDialog::mmIsRecordMatches(const Model_Billsdeposits::Da
? !tran.TRANSACTIONNUMBER.empty()
: tran.TRANSACTIONNUMBER.empty() || !tran.TRANSACTIONNUMBER.Lower().Matches(mmGetNumber().Lower())))
ok = false;
else if (mmIsNotesChecked() && !mmIsNoteMatches<Model_Billsdeposits>(tran)) ok = false;
else if (mmIsNotesChecked() && !mmIsNoteMatches<Model_Billsdeposits>(tran, split)) ok = false;
return ok;
}

Expand Down
2 changes: 1 addition & 1 deletion src/filtertransdialog.h
Expand Up @@ -97,7 +97,7 @@ class mmFilterTransactionsDialog: public wxDialog
template<class MODEL, class DATA = typename MODEL::Data>
bool mmIsCategoryMatches(const DATA& tran, const std::map<int, typename MODEL::Split_Data_Set>& splits);
template<class MODEL, class DATA = typename MODEL::DATA>
bool mmIsNoteMatches(const DATA& tran);
bool mmIsNoteMatches(const DATA& tran, const std::map<int, typename MODEL::Split_Data_Set>& splits);

void setTransferTypeCheckBoxes();

Expand Down