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); } }