2023-09-21 11:29:09 +02:00
<? php
2023-09-21 11:32:56 +02:00
2023-09-21 11:29:09 +02:00
/*
* TransactionObserver.php
* Copyright (c) 2023 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
2023-09-21 11:32:56 +02:00
declare ( strict_types = 1 );
2023-09-21 11:29:09 +02:00
namespace FireflyIII\Handlers\Observer ;
2024-05-12 06:24:11 +02:00
use DB ;
use FireflyIII\Models\AccountBalance ;
2023-09-21 11:29:09 +02:00
use FireflyIII\Models\Transaction ;
2024-05-12 06:24:11 +02:00
use stdClass ;
2023-09-21 11:29:09 +02:00
/**
* Class TransactionObserver
*/
class TransactionObserver
{
2023-11-04 06:52:40 +01:00
public function deleting ( ? Transaction $transaction ) : void
2023-09-21 11:29:09 +02:00
{
app ( 'log' ) -> debug ( 'Observe "deleting" of a transaction.' );
2023-09-21 15:50:49 +02:00
$transaction ?-> transactionJournal ?-> delete ();
2023-09-21 11:29:09 +02:00
}
2024-05-12 06:24:11 +02:00
public function updated ( Transaction $transaction ) : void
{
app ( 'log' ) -> debug ( 'Observe "updated" of a transaction.' );
// refresh account balance:
/** @var stdClass $result */
$result = Transaction :: groupBy ([ 'account_id' , 'transaction_currency_id' ]) -> where ( 'account_id' , $transaction -> account_id ) -> first ([ 'account_id' , 'transaction_currency_id' , DB :: raw ( 'SUM(amount) as amount_sum' )]);
if ( null !== $result ) {
$account = ( int ) $result -> account_id ;
$currency = ( int ) $result -> transaction_currency_id ;
$sum = $result -> amount_sum ;
2024-05-12 08:09:50 +02:00
AccountBalance :: updateOrCreate ([ 'title' => 'balance' , 'account_id' => $account , 'transaction_currency_id' => $currency ], [ 'balance' => $sum ]);
2024-05-12 06:24:11 +02:00
}
}
2023-09-21 11:29:09 +02:00
}