. */ declare(strict_types=1); namespace FireflyIII\Handlers\Observer; use FireflyIII\Enums\WebhookTrigger; use FireflyIII\Events\RequestedSendWebhookMessages; use FireflyIII\Generator\Webhook\MessageGeneratorInterface; use FireflyIII\Models\Attachment; use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; use FireflyIII\Support\Observers\RecalculatesAvailableBudgetsTrait; use FireflyIII\Support\Singleton\PreferencesSingleton; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; /** * Class BudgetObserver */ class BudgetObserver { use RecalculatesAvailableBudgetsTrait; public function created(Budget $budget): void { Log::debug(sprintf('Observe "created" of budget #%d ("%s").', $budget->id, $budget->name)); // this is a lame trick to communicate with the observer. $singleton = PreferencesSingleton::getInstance(); if (true === $singleton->getPreference('fire_webhooks_budget_create')) { // fire event. $user = $budget->user; /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); $engine->setObjects(new Collection()->push($budget)); $engine->setTrigger(WebhookTrigger::STORE_BUDGET); $engine->generateMessages(); Log::debug(sprintf('send event RequestedSendWebhookMessages from %s', __METHOD__)); event(new RequestedSendWebhookMessages()); } } public function updated(Budget $budget): void { Log::debug(sprintf('Observe "updated" of budget #%d ("%s").', $budget->id, $budget->name)); // this is a lame trick to communicate with the observer. $singleton = PreferencesSingleton::getInstance(); if (true === $singleton->getPreference('fire_webhooks_budget_update')) { $user = $budget->user; /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); $engine->setObjects(new Collection()->push($budget)); $engine->setTrigger(WebhookTrigger::UPDATE_BUDGET); $engine->generateMessages(); Log::debug(sprintf('send event RequestedSendWebhookMessages from %s', __METHOD__)); event(new RequestedSendWebhookMessages()); } } public function deleting(Budget $budget): void { Log::debug('Observe "deleting" of a budget.'); $user = $budget->user; /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); $engine->setObjects(new Collection()->push($budget)); $engine->setTrigger(WebhookTrigger::DESTROY_BUDGET); $engine->generateMessages(); Log::debug(sprintf('send event RequestedSendWebhookMessages from %s', __METHOD__)); event(new RequestedSendWebhookMessages()); $repository = app(AttachmentRepositoryInterface::class); $repository->setUser($budget->user); /** @var Attachment $attachment */ foreach ($budget->attachments()->get() as $attachment) { $repository->destroy($attachment); } $budgetLimits = $budget->budgetlimits()->get(); /** @var BudgetLimit $budgetLimit */ foreach ($budgetLimits as $budgetLimit) { // this loop exists so several events are fired. $copy = clone $budgetLimit; $copy->id = 0; $this->updateAvailableBudget($copy); $budgetLimit->deleteQuietly(); // delete is quietly when in a loop. } $budget->notes()->delete(); $budget->autoBudgets()->delete(); // recalculate available budgets. } }