2016-01-13 08:14:14 +01:00
< ? php
/**
* SetCategory . php
2020-02-16 13:57:05 +01:00
* Copyright ( c ) 2019 james @ firefly - iii . org
2016-01-13 08:14:14 +01:00
*
2019-10-02 06:37:26 +02:00
* This file is part of Firefly III ( https :// github . com / firefly - iii ) .
2016-10-05 06:52:15 +02:00
*
2019-10-02 06:37:26 +02:00
* 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 .
2017-10-21 08:40:00 +02:00
*
2019-10-02 06:37:26 +02:00
* This program is distributed in the hope that it will be useful ,
2017-10-21 08:40:00 +02:00
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
2019-10-02 06:37:26 +02:00
* GNU Affero General Public License for more details .
2017-10-21 08:40:00 +02:00
*
2019-10-02 06:37:26 +02:00
* 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 />.
2016-01-13 08:14:14 +01:00
*/
2017-04-09 07:44:22 +02:00
declare ( strict_types = 1 );
2016-05-20 12:41:23 +02:00
2017-09-13 07:49:58 +02:00
namespace FireflyIII\TransactionRules\Actions ;
2016-01-13 08:14:14 +01:00
2018-07-22 16:35:46 +02:00
use FireflyIII\Factory\CategoryFactory ;
2016-01-13 08:14:14 +01:00
use FireflyIII\Models\RuleAction ;
use FireflyIII\Models\TransactionJournal ;
2020-08-23 09:21:50 +02:00
use FireflyIII\Models\TransactionType ;
use FireflyIII\User ;
2016-09-21 20:12:04 +02:00
use Log ;
2020-08-23 09:21:50 +02:00
use DB ;
2016-01-13 08:14:14 +01:00
/**
2017-11-15 12:25:49 +01:00
* Class SetCategory .
2016-01-13 08:14:14 +01:00
*/
class SetCategory implements ActionInterface
{
2020-08-23 09:21:50 +02:00
private RuleAction $action ;
2016-02-17 19:56:05 +01:00
2016-01-13 08:14:14 +01:00
/**
* TriggerInterface constructor .
*
2016-03-14 20:53:56 +01:00
* @ param RuleAction $action
2016-01-13 08:14:14 +01:00
*/
2016-02-17 19:56:05 +01:00
public function __construct ( RuleAction $action )
2016-01-13 08:14:14 +01:00
{
2016-03-14 20:53:56 +01:00
$this -> action = $action ;
2016-01-13 08:14:14 +01:00
}
/**
2017-11-25 15:20:53 +01:00
* Set category X
*
2016-02-17 19:56:05 +01:00
* @ param TransactionJournal $journal
2020-08-23 09:21:50 +02:00
* @ deprecated
* @ codeCoverageIgnore
2016-01-13 08:14:14 +01:00
* @ return bool
*/
2016-04-05 22:00:03 +02:00
public function act ( TransactionJournal $journal ) : bool
2016-01-13 08:14:14 +01:00
{
2018-07-22 16:35:46 +02:00
$name = $this -> action -> action_value ;
/** @var CategoryFactory $factory */
$factory = app ( CategoryFactory :: class );
$factory -> setUser ( $journal -> user );
$category = $factory -> findOrCreate ( null , $name );
2018-07-28 10:45:16 +02:00
if ( null === $category ) {
Log :: error ( sprintf ( 'Action SetCategory did not fire because "%s" did not result in a valid category.' , $name ));
2018-03-04 16:42:29 +01:00
2019-08-01 06:21:44 +02:00
return false ;
2018-07-28 10:45:16 +02:00
}
2018-03-04 16:42:29 +01:00
2019-08-01 06:21:44 +02:00
$journal -> categories () -> sync ([ $category -> id ]);
2018-03-04 16:42:29 +01:00
2019-02-09 20:44:31 +01:00
Log :: debug ( sprintf ( 'RuleAction SetCategory set the category of journal #%d to category #%d ("%s").' , $journal -> id , $category -> id , $category -> name ));
2016-09-21 20:12:04 +02:00
2016-01-13 08:14:14 +01:00
return true ;
}
2020-08-23 07:42:14 +02:00
/**
* @ inheritDoc
*/
public function actOnArray ( array $journal ) : bool
{
2020-08-23 09:21:50 +02:00
$user = User :: find ( $journal [ 'user_id' ]);
$search = $this -> action -> action_value ;
$category = $user -> categories () -> where ( 'name' , $search ) -> first ();
if ( null === $category ) {
Log :: debug ( sprintf ( 'RuleAction SetCategory could not set category of journal #%d to "%s" because no such category exists.' , $journal [ 'transaction_journal_id' ], $search ));
return false ;
}
Log :: debug ( sprintf ( 'RuleAction SetCategory set the category of journal #%d to category #%d ("%s").' , $journal [ 'transaction_journal_id' ], $category -> id , $category -> name ));
DB :: table ( 'category_transaction_journal' ) -> where ( 'transaction_journal_id' , '=' , $journal [ 'transaction_journal_id' ]) -> delete ();
DB :: table ( 'category_transaction_journal' ) -> insert ([ 'transaction_journal_id' => $journal [ 'transaction_journal_id' ], 'category_id' => $category -> id ]);
return true ;
2020-08-23 07:42:14 +02:00
}
2016-01-28 21:50:20 +01:00
}