diff --git a/app/Helpers/Csv/Converter/AssetAccountIban.php b/app/Helpers/Csv/Converter/AssetAccountIban.php index cec0a730e0..327d6e882e 100644 --- a/app/Helpers/Csv/Converter/AssetAccountIban.php +++ b/app/Helpers/Csv/Converter/AssetAccountIban.php @@ -29,7 +29,7 @@ class AssetAccountIban extends BasicConverter implements ConverterInterface return $account; } - + if (strlen($this->value) > 0) { // find or create new account: $set = $repository->getAccounts(['Default account', 'Asset account']); diff --git a/app/Helpers/Csv/Converter/BillId.php b/app/Helpers/Csv/Converter/BillId.php index fa939852de..77e9efa000 100644 --- a/app/Helpers/Csv/Converter/BillId.php +++ b/app/Helpers/Csv/Converter/BillId.php @@ -2,7 +2,6 @@ declare(strict_types = 1); namespace FireflyIII\Helpers\Csv\Converter; -use Auth; use FireflyIII\Models\Bill; use FireflyIII\Repositories\Bill\BillRepositoryInterface; diff --git a/app/Helpers/Csv/Converter/BudgetId.php b/app/Helpers/Csv/Converter/BudgetId.php index 77a334130c..896178e822 100644 --- a/app/Helpers/Csv/Converter/BudgetId.php +++ b/app/Helpers/Csv/Converter/BudgetId.php @@ -2,7 +2,6 @@ declare(strict_types = 1); namespace FireflyIII\Helpers\Csv\Converter; -use Auth; use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; diff --git a/app/Helpers/Csv/Converter/CategoryId.php b/app/Helpers/Csv/Converter/CategoryId.php index f205f9edfe..67c91fdb2b 100644 --- a/app/Helpers/Csv/Converter/CategoryId.php +++ b/app/Helpers/Csv/Converter/CategoryId.php @@ -2,8 +2,8 @@ declare(strict_types = 1); namespace FireflyIII\Helpers\Csv\Converter; -use Auth; use FireflyIII\Models\Category; +use FireflyIII\Repositories\Category\SingleCategoryRepositoryInterface; /** * Class CategoryId @@ -18,11 +18,14 @@ class CategoryId extends BasicConverter implements ConverterInterface */ public function convert() { + /** @var SingleCategoryRepositoryInterface $repository */ + $repository = app('FireflyIII\Repositories\Category\SingleCategoryRepositoryInterface'); + // is mapped? Then it's easy! if (isset($this->mapped[$this->index][$this->value])) { - $category = Auth::user()->categories()->find($this->mapped[$this->index][$this->value]); + $category = $repository->find($this->mapped[$this->index][$this->value]); } else { - $category = Auth::user()->categories()->find($this->value); + $category = $repository->find($this->value); } return $category; diff --git a/app/Helpers/Csv/Converter/CategoryName.php b/app/Helpers/Csv/Converter/CategoryName.php index c7d7b27aca..8ce036eddc 100644 --- a/app/Helpers/Csv/Converter/CategoryName.php +++ b/app/Helpers/Csv/Converter/CategoryName.php @@ -4,6 +4,7 @@ namespace FireflyIII\Helpers\Csv\Converter; use Auth; use FireflyIII\Models\Category; +use FireflyIII\Repositories\Category\SingleCategoryRepositoryInterface; /** * Class CategoryName @@ -18,16 +19,20 @@ class CategoryName extends BasicConverter implements ConverterInterface */ public function convert() { + /** @var SingleCategoryRepositoryInterface $repository */ + $repository = app('FireflyIII\Repositories\Category\SingleCategoryRepositoryInterface'); + // is mapped? Then it's easy! if (isset($this->mapped[$this->index][$this->value])) { - $category = Auth::user()->categories()->find($this->mapped[$this->index][$this->value]); + $category = $repository->find($this->mapped[$this->index][$this->value]); } else { - $category = Category::firstOrCreateEncrypted( // See issue #180 - [ - 'name' => $this->value, - 'user_id' => Auth::user()->id, - ] - ); + + $data = [ + 'name' => $this->value, + 'user' => Auth::user()->id, + ]; + + $category = $repository->store($data); } return $category; diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php index 3c3b00f4fa..93b7a12e07 100644 --- a/app/Helpers/Report/ReportHelper.php +++ b/app/Helpers/Report/ReportHelper.php @@ -257,6 +257,7 @@ class ReportHelper implements ReportHelperInterface if ($set->count() === 0) { return $collection; } + /** @var Tag $entry */ foreach ($set as $entry) { // less than zero? multiply to be above zero. $amount = $entry->amount; diff --git a/app/Providers/CategoryServiceProvider.php b/app/Providers/CategoryServiceProvider.php index 7840fe6071..6e8ce7decd 100644 --- a/app/Providers/CategoryServiceProvider.php +++ b/app/Providers/CategoryServiceProvider.php @@ -45,5 +45,21 @@ class CategoryServiceProvider extends ServiceProvider return app('FireflyIII\Repositories\Category\CategoryRepository', $arguments); } ); + + $this->app->bind( + 'FireflyIII\Repositories\Category\SingleCategoryRepositoryInterface', + function (Application $app, array $arguments) { + if (!isset($arguments[0]) && Auth::check()) { + return app('FireflyIII\Repositories\Category\SingleCategoryRepository', [Auth::user()]); + } else { + if (!isset($arguments[0]) && !Auth::check()) { + throw new FireflyException('There is no user present.'); + } + } + + return app('FireflyIII\Repositories\Category\SingleCategoryRepository', $arguments); + } + ); + } } diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index 1318dafce1..40018fdb48 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -82,7 +82,7 @@ class FireflyServiceProvider extends ServiceProvider } ); - $this->app->bind('FireflyIII\Repositories\Category\SingleCategoryRepositoryInterface', 'FireflyIII\Repositories\Category\SingleCategoryRepository'); + $this->app->bind('FireflyIII\Repositories\Currency\CurrencyRepositoryInterface', 'FireflyIII\Repositories\Currency\CurrencyRepository'); $this->app->bind('FireflyIII\Support\Search\SearchInterface', 'FireflyIII\Support\Search\Search'); $this->app->bind('FireflyIII\Repositories\User\UserRepositoryInterface', 'FireflyIII\Repositories\User\UserRepository'); diff --git a/app/Repositories/Category/SingleCategoryRepository.php b/app/Repositories/Category/SingleCategoryRepository.php index ffc819ee1e..5637b94e26 100644 --- a/app/Repositories/Category/SingleCategoryRepository.php +++ b/app/Repositories/Category/SingleCategoryRepository.php @@ -9,6 +9,7 @@ use FireflyIII\Models\Category; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Shared\ComponentRepository; +use FireflyIII\User; use Illuminate\Support\Collection; /** @@ -18,6 +19,19 @@ use Illuminate\Support\Collection; */ class SingleCategoryRepository extends ComponentRepository implements SingleCategoryRepositoryInterface { + /** @var User */ + private $user; + + /** + * BillRepository constructor. + * + * @param User $user + */ + public function __construct(User $user) + { + $this->user = $user; + } + /** * @param Category $category * @@ -87,6 +101,23 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate return $return; } + /** + * Find a category + * + * @param int $categoryId + * + * @return Category + */ + public function find(int $categoryId) : Category + { + $category = $this->user->categories()->find($categoryId); + if (is_null($category)) { + $category = new Category; + } + + return $category; + } + /** * @param Category $category * @@ -146,7 +177,6 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate ->get(TransactionJournal::QUERYFIELDS); } - /** * @param Category $category * @@ -206,7 +236,7 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate */ public function store(array $data) { - $newCategory = new Category( + $newCategory = Category::firstOrCreateEncrypted( [ 'user_id' => $data['user'], 'name' => $data['name'], @@ -231,6 +261,4 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate return $category; } - - } diff --git a/app/Repositories/Category/SingleCategoryRepositoryInterface.php b/app/Repositories/Category/SingleCategoryRepositoryInterface.php index b954a0684a..1a4bb6273c 100644 --- a/app/Repositories/Category/SingleCategoryRepositoryInterface.php +++ b/app/Repositories/Category/SingleCategoryRepositoryInterface.php @@ -14,6 +14,7 @@ use Illuminate\Support\Collection; */ interface SingleCategoryRepositoryInterface { + /** * @param Category $category * @@ -54,6 +55,14 @@ interface SingleCategoryRepositoryInterface */ public function earnedPerDay(Category $category, Carbon $start, Carbon $end); + /** + * Find a category + * + * @param int $categoryId + * + * @return Category + */ + public function find(int $categoryId) : Category; /** * @param Category $category