updatePrimaryCurrencyAmount($budgetLimit); $this->updateAvailableBudget($budgetLimit); // this is a lame trick to communicate with the observer. $singleton = PreferencesSingleton::getInstance(); if (true === $singleton->getPreference('fire_webhooks_bl_store')) { $user = $budgetLimit->budget->user; /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); $engine->setObjects(new Collection()->push($budgetLimit)); $engine->setTrigger(WebhookTrigger::STORE_UPDATE_BUDGET_LIMIT); $engine->generateMessages(); Log::debug(sprintf('send event RequestedSendWebhookMessages from %s', __METHOD__)); event(new RequestedSendWebhookMessages()); } } private function updatePrimaryCurrencyAmount(BudgetLimit $budgetLimit): void { if (!Amount::convertToPrimary($budgetLimit->budget->user)) { // Log::debug('Do not update primary currency amount of the budget limit.'); return; } $userCurrency = app('amount')->getPrimaryCurrencyByUserGroup($budgetLimit->budget->user->userGroup); $budgetLimit->native_amount = null; if ($budgetLimit->transactionCurrency->id !== $userCurrency->id) { $converter = new ExchangeRateConverter(); $converter->setUserGroup($budgetLimit->budget->user->userGroup); $converter->setIgnoreSettings(true); $budgetLimit->native_amount = $converter->convert($budgetLimit->transactionCurrency, $userCurrency, today(), $budgetLimit->amount); } $budgetLimit->saveQuietly(); Log::debug('Budget limit primary currency amounts are updated.'); } public function updated(BudgetLimit $budgetLimit): void { Log::debug('Observe "updated" of a budget limit.'); $this->updatePrimaryCurrencyAmount($budgetLimit); $this->updateAvailableBudget($budgetLimit); // this is a lame trick to communicate with the observer. $singleton = PreferencesSingleton::getInstance(); if (true === $singleton->getPreference('fire_webhooks_bl_update')) { $user = $budgetLimit->budget->user; /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); $engine->setObjects(new Collection()->push($budgetLimit)); $engine->setTrigger(WebhookTrigger::STORE_UPDATE_BUDGET_LIMIT); $engine->generateMessages(); Log::debug(sprintf('send event RequestedSendWebhookMessages from %s', __METHOD__)); event(new RequestedSendWebhookMessages()); } } }