. */ declare(strict_types=1); namespace FireflyIII\Services\Internal\Destroy; use Exception; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceTransaction; use Log; /** * @codeCoverageIgnore * Class RecurrenceDestroyService */ class RecurrenceDestroyService { /** * Constructor. */ public function __construct() { if ('testing' === config('app.env')) { Log::warning(sprintf('%s should not be instantiated in the TEST environment!', get_class($this))); } } /** * Delete recurrence. * * @param Recurrence $recurrence * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function destroy(Recurrence $recurrence): void { try { // delete all meta data $recurrence->recurrenceMeta()->delete(); } catch (Exception $e) { // @codeCoverageIgnore Log::info(sprintf('Could not delete recurrence meta: %s', $e->getMessage())); // @codeCoverageIgnore } // delete all transactions. /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions as $transaction) { $transaction->recurrenceTransactionMeta()->delete(); try { $transaction->delete(); } catch (Exception $e) { // @codeCoverageIgnore Log::info(sprintf('Could not delete recurrence transaction: %s', $e->getMessage())); // @codeCoverageIgnore } } // delete all repetitions $recurrence->recurrenceRepetitions()->delete(); // delete recurrence try { $recurrence->delete(); } catch (Exception $e) { // @codeCoverageIgnore Log::info(sprintf('Could not delete recurrence: %s', $e->getMessage())); // @codeCoverageIgnore } } /** * Delete recurrence by ID * * @param int $recurrenceId */ public function destroyById(int $recurrenceId): void { $recurrence = Recurrence::find($recurrenceId); if (null === $recurrence) { return; } $this->destroy($recurrence); } }