예제 #1
0
void Model_Checking::getFrequentUsedNotes(std::vector<wxString> &frequentNotes, int accountID)
{
    frequentNotes.clear();
    int max = 20;

    const auto notes = instance().find(NOTES("", NOT_EQUAL)
        , accountID > 0 ? ACCOUNTID(accountID) : ACCOUNTID(-1, NOT_EQUAL));

    std::map <wxString, int> counterMap;
    for (const auto& entry : notes)
        counterMap[entry.NOTES]--;

    std::map <int, std::vector<wxString> > notesMap;
    for (const auto& entry : counterMap)
        notesMap[entry.second].push_back(entry.first);
    
    for (auto& v : notesMap)
    {
        std::reverse(v.second.begin(), v.second.end());
        for (const auto& i : v.second) {
            frequentNotes.push_back(i);
            if (frequentNotes.size() >= static_cast<size_t>(max)) break;
        }
        if (frequentNotes.size() >= static_cast<size_t>(max)) break;
    }

    std::stable_sort(frequentNotes.begin(), frequentNotes.end());
}
void Model_Checking::getFrequentUsedNotes(std::vector<wxString> &frequentNotes, int accountID)
{
    frequentNotes.clear();
    size_t max = 20;

    const auto notes = instance().find(NOTES("", NOT_EQUAL)
        , accountID > 0 ? ACCOUNTID(accountID) : ACCOUNTID(-1, NOT_EQUAL));

    std::map <wxString, int> counterMap;
    for (const auto& entry : notes)
        counterMap[entry.NOTES]--;

    std::priority_queue<std::pair<int, wxString> > q; // largest element to appear as the top
    for (const auto & kv: counterMap)
    {
        q.push(std::make_pair(kv.second, kv.first));
        if (q.size() > max) q.pop(); // keep fixed queue as max
    }

    while(!q.empty())
    {
        const auto & kv = q.top();
        frequentNotes.push_back(kv.second);
        q.pop();
    }
}
예제 #3
0
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;
            }
        }
    }
}
예제 #4
0
void Model_Checking::getFrequentUsedNotes(std::vector<wxString> &frequentNotes, int accountID)
{
    frequentNotes.clear();
    int max = 20;
    for (const auto& entry : instance().find(NOTES("", NOT_EQUAL)
        , accountID > 0 ? ACCOUNTID(accountID) : ACCOUNTID(-1, NOT_EQUAL)))
    {
        const wxString& notes = entry.NOTES;
        if (std::find(frequentNotes.begin(), frequentNotes.end(), notes) == frequentNotes.end())
            frequentNotes.push_back(notes);
    }
    std::reverse(frequentNotes.begin(), frequentNotes.end());
    if (frequentNotes.size() > static_cast<size_t>(max))
        frequentNotes.erase(frequentNotes.begin() + max, frequentNotes.end());
    std::stable_sort(frequentNotes.begin(), frequentNotes.end());
}