2016-01-13 01:14:14 -06:00
< ? php
/**
* SetBudget . php
2017-10-21 01:40:00 -05:00
* Copyright ( c ) 2017 thegrumpydictator @ gmail . com
2016-01-13 01:14:14 -06:00
*
2017-10-21 01:40:00 -05:00
* This file is part of Firefly III .
2016-10-04 23:52:15 -05:00
*
2017-10-21 01:40:00 -05:00
* Firefly III is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* Firefly III 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with Firefly III . If not , see < http :// www . gnu . org / licenses />.
2016-01-13 01:14:14 -06:00
*/
2017-04-09 00:44:22 -05:00
declare ( strict_types = 1 );
2016-05-20 05:41:23 -05:00
2017-09-13 00:49:58 -05:00
namespace FireflyIII\TransactionRules\Actions ;
2016-01-13 01:14:14 -06:00
use FireflyIII\Models\Budget ;
use FireflyIII\Models\RuleAction ;
use FireflyIII\Models\TransactionJournal ;
2016-09-24 02:12:17 -05:00
use FireflyIII\Models\TransactionType ;
2016-01-13 01:14:14 -06:00
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface ;
2016-09-21 13:12:04 -05:00
use Log ;
2016-01-15 16:12:52 -06:00
2016-01-13 01:14:14 -06:00
/**
* Class SetBudget
*
2017-09-13 00:49:58 -05:00
* @ package FireflyIII\TransactionRules\Action
2016-01-13 01:14:14 -06:00
*/
class SetBudget implements ActionInterface
{
private $action ;
2016-02-17 12:56:05 -06:00
2016-01-13 01:14:14 -06:00
/**
* TriggerInterface constructor .
*
2016-03-14 14:53:56 -05:00
* @ param RuleAction $action
2016-01-13 01:14:14 -06:00
*/
2016-02-17 12:56:05 -06:00
public function __construct ( RuleAction $action )
2016-01-13 01:14:14 -06:00
{
2016-03-14 14:53:56 -05:00
$this -> action = $action ;
2016-01-13 01:14:14 -06:00
}
/**
2016-02-17 12:56:05 -06:00
* @ param TransactionJournal $journal
*
2016-01-13 01:14:14 -06:00
* @ return bool
*/
2016-04-05 15:00:03 -05:00
public function act ( TransactionJournal $journal ) : bool
2016-01-13 01:14:14 -06:00
{
/** @var BudgetRepositoryInterface $repository */
2017-02-05 09:16:15 -06:00
$repository = app ( BudgetRepositoryInterface :: class );
$repository -> setUser ( $journal -> user );
2017-02-16 23:42:36 -06:00
$search = $this -> action -> action_value ;
$budgets = $repository -> getActiveBudgets ();
$budget = $budgets -> filter (
2016-01-13 01:14:14 -06:00
function ( Budget $current ) use ( $search ) {
2017-07-15 09:41:07 -05:00
return $current -> name === $search ;
2016-01-13 01:14:14 -06:00
}
) -> first ();
2016-09-24 02:12:17 -05:00
if ( is_null ( $budget )) {
Log :: debug ( sprintf ( 'RuleAction SetBudget could not set budget of journal #%d to "%s" because no such budget exists.' , $journal -> id , $search ));
2016-09-21 13:12:04 -05:00
2016-09-24 02:12:17 -05:00
return true ;
2016-01-13 01:14:14 -06:00
}
2016-05-20 04:02:07 -05:00
2017-10-13 11:26:05 -05:00
if ( $journal -> transactionType -> type !== TransactionType :: WITHDRAWAL ) {
Log :: debug ( sprintf ( 'RuleAction SetBudget could not set budget of journal #%d to "%s" because journal is a %s.' , $journal -> id , $search , $journal -> transactionType -> type ));
2016-09-24 02:12:17 -05:00
return true ;
}
Log :: debug ( sprintf ( 'RuleAction SetBudget set the budget of journal #%d to budget #%d ("%s").' , $journal -> id , $budget -> id , $budget -> name ));
$journal -> budgets () -> sync ([ $budget -> id ]);
2016-09-21 13:12:04 -05:00
2016-01-13 01:14:14 -06:00
return true ;
}
2016-01-28 14:50:20 -06:00
}