addWhere('id', '=', (int) $id)->setSelect(['creditnote_id'])->execute()->first(); if ($existing['creditnote_id']) { // Since we have it adding it makes is clearer. $params['creditnote_id'] = $existing['creditnote_id']; return; } } $params['creditnote_id'] = sequentialcreditnotes_create_credit_note_id(); } } } /** * Generate credit note id with next available number * * @return string * Credit Note Id. * * @throws \CiviCRM_API3_Exception */ function sequentialcreditnotes_create_credit_note_id() { $creditNoteNum = CRM_Core_DAO::singleValueQuery("SELECT count(creditnote_id) as creditnote_number FROM civicrm_contribution WHERE creditnote_id IS NOT NULL"); $creditNoteId = NULL; do { $creditNoteNum++; $creditNoteId = Civi::settings()->get('credit_notes_prefix') . '' . $creditNoteNum; $result = civicrm_api3('Contribution', 'getcount', [ 'sequential' => 1, 'creditnote_id' => $creditNoteId, ]); } while ($result > 0); return $creditNoteId; }