. */ declare(strict_types=1); namespace FireflyIII\Services\Internal\Destroy; use Exception; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceTransaction; /** * @codeCoverageIgnore * Class RecurrenceDestroyService */ class RecurrenceDestroyService { /** * Delete recurrence by ID * * @param int $recurrenceId */ public function destroyById(int $recurrenceId): void { $recurrence = Recurrence::find($recurrenceId); if (null === $recurrence) { return; } $this->destroy($recurrence); } /** * Delete recurrence. * * @param Recurrence $recurrence * */ public function destroy(Recurrence $recurrence): void { try { // delete all meta data $recurrence->recurrenceMeta()->delete(); } catch (Exception $e) { // @phpstan-ignore-line // @ignoreException } // delete all transactions. /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions as $transaction) { $transaction->recurrenceTransactionMeta()->delete(); try { $transaction->delete(); } catch (Exception $e) { // @phpstan-ignore-line // @ignoreException } } // delete all repetitions $recurrence->recurrenceRepetitions()->delete(); // delete recurrence try { $recurrence->delete(); } catch (Exception $e) { // @phpstan-ignore-line // @ignoreException } } }