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
}