mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-15 16:57:09 +00:00
Fix #4198
This commit is contained in:
@@ -39,8 +39,11 @@ use FireflyIII\Events\UpdatedTransactionGroup;
|
||||
use FireflyIII\Events\UserChangedEmail;
|
||||
use FireflyIII\Events\WarnUserAboutBill;
|
||||
use FireflyIII\Mail\OAuthTokenCreatedMail;
|
||||
use FireflyIII\Models\BudgetLimit;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||
use Illuminate\Auth\Events\Login;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
@@ -150,6 +153,54 @@ class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
parent::boot();
|
||||
$this->registerCreateEvents();
|
||||
$this->registerBudgetEvents();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected function registerBudgetEvents(): void
|
||||
{
|
||||
$func = static function (BudgetLimit $limit) {
|
||||
Log::debug('Trigger budget limit event.');
|
||||
// find available budget with same period and same currency or create it.
|
||||
// then set it or add money:
|
||||
$user = $limit->budget->user;
|
||||
$availableBudget = $user
|
||||
->availableBudgets()
|
||||
->where('start_date', $limit->start_date->format('Y-m-d'))
|
||||
->where('end_date', $limit->end_date->format('Y-m-d'))
|
||||
->where('transaction_currency_id', $limit->transaction_currency_id)
|
||||
->first();
|
||||
// update!
|
||||
if (null !== $availableBudget) {
|
||||
|
||||
$repository = app(BudgetLimitRepositoryInterface::class);
|
||||
$repository->setUser($user);
|
||||
$set = $repository->getAllBudgetLimitsByCurrency($limit->transactionCurrency, $limit->start_date, $limit->end_date);
|
||||
$sum = (string) $set->sum('amount');
|
||||
|
||||
|
||||
Log::debug(sprintf('Because budget limit #%d had its amount changed to %s, available budget limit #%d will be updated.', $limit->id, $limit->amount, $availableBudget->id));
|
||||
$availableBudget->amount = $sum;
|
||||
$availableBudget->save();
|
||||
return;
|
||||
}
|
||||
Log::debug('Does not exist, create it.');
|
||||
// create it.
|
||||
$data = [
|
||||
'amount' => $limit->amount,
|
||||
'start' => $limit->start_date,
|
||||
'end' => $limit->end_date,
|
||||
'currency_id' => $limit->transaction_currency_id,
|
||||
];
|
||||
$repository = app(AvailableBudgetRepositoryInterface::class);
|
||||
$repository->setUser($user);
|
||||
$repository->store($data);
|
||||
};
|
||||
|
||||
BudgetLimit::created($func);
|
||||
BudgetLimit::updated($func);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -157,6 +208,8 @@ class EventServiceProvider extends ServiceProvider
|
||||
*/
|
||||
protected function registerCreateEvents(): void
|
||||
{
|
||||
|
||||
|
||||
// in case of repeated piggy banks and/or other problems.
|
||||
PiggyBank::created(
|
||||
static function (PiggyBank $piggyBank) {
|
||||
|
Reference in New Issue
Block a user