示例#1
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;
            }
        }
    }
}
void Model_Billsdeposits::completeBDInSeries(int bdID)
{
    Data* bill = get(bdID);
    if (bill)
    {
        int repeats = bill->REPEATS;
        // DeMultiplex the Auto Executable fields.
        if (repeats >= BD_REPEATS_MULTIPLEX_BASE)    // Auto Execute User Acknowlegement required
            repeats -= BD_REPEATS_MULTIPLEX_BASE;
        if (repeats >= BD_REPEATS_MULTIPLEX_BASE)    // Auto Execute Silent mode
            repeats -= BD_REPEATS_MULTIPLEX_BASE;
        int numRepeats = bill->NUMOCCURRENCES;
        const wxDateTime& payment_date_current = NEXTOCCURRENCEDATE(bill);
        const wxDateTime& payment_date_update = nextOccurDate(repeats, numRepeats, payment_date_current);

        const wxDateTime& due_date_current = TRANSDATE(bill);
        const wxDateTime& due_date_update = nextOccurDate(repeats, numRepeats, due_date_current);

        if (numRepeats != REPEAT_TYPE::REPEAT_INACTIVE)
        {
            if ((repeats < REPEAT_TYPE::REPEAT_IN_X_DAYS) || (repeats > REPEAT_TYPE::REPEAT_EVERY_X_MONTHS))
                numRepeats--;
        }

        if (repeats == REPEAT_TYPE::REPEAT_NONE)
            numRepeats = 0;
        else if ((repeats == REPEAT_TYPE::REPEAT_IN_X_DAYS)
            || (repeats == REPEAT_TYPE::REPEAT_IN_X_MONTHS))
        {
            if (numRepeats != -1) numRepeats = -1;
        }

        bill->NEXTOCCURRENCEDATE = payment_date_update.FormatISODate();
        bill->TRANSDATE = due_date_update.FormatISODate();

        // Ensure that TRANDSATE is set correctly
        if (payment_date_current > due_date_current)
            bill->TRANSDATE = payment_date_update.FormatISODate();

        bill->NUMOCCURRENCES = numRepeats;
        save(bill);

        if (bill->NUMOCCURRENCES == REPEAT_TYPE::REPEAT_NONE)
            remove(bdID);
    }
}