Small adjustments to fix tests.

This commit is contained in:
James Cole
2018-02-23 16:21:28 +01:00
parent d804093f8b
commit 6591fa9fb4
13 changed files with 192 additions and 41 deletions

View File

@@ -424,7 +424,7 @@ class ReconcileController extends Controller
'interest_date' => null, 'interest_date' => null,
'book_date' => null, 'book_date' => null,
'transactions' => [[ 'transactions' => [[
'currency_id' => $journal->transaction_currency_id, 'currency_id' => intval($journal->transaction_currency_id),
'currency_code' => null, 'currency_code' => null,
'description' => null, 'description' => null,
'amount' => app('steam')->positive($submitted['amount']), 'amount' => app('steam')->positive($submitted['amount']),

View File

@@ -150,23 +150,22 @@ class BulkController extends Controller
foreach ($journalIds as $journalId) { foreach ($journalIds as $journalId) {
$journal = $repository->find(intval($journalId)); $journal = $repository->find(intval($journalId));
if (!is_null($journal)) { if (!is_null($journal)) {
// TODO need to move this to update service.
$count++; $count++;
Log::debug(sprintf('Found journal #%d', $journal->id)); Log::debug(sprintf('Found journal #%d', $journal->id));
// update category if not told to ignore // update category if not told to ignore
if ($ignoreCategory === false) { if ($ignoreCategory === false) {
Log::debug(sprintf('Set category to %s', $request->string('category'))); Log::debug(sprintf('Set category to %s', $request->string('category')));
$service->updateCategory($journal, $request->string('category')); $repository->updateCategory($journal, $request->string('category'));
} }
// update budget if not told to ignore (and is withdrawal) // update budget if not told to ignore (and is withdrawal)
if ($ignoreBudget === false) { if ($ignoreBudget === false) {
Log::debug(sprintf('Set budget to %d', $request->integer('budget_id'))); Log::debug(sprintf('Set budget to %d', $request->integer('budget_id')));
$service->updateBudget($journal, $request->integer('budget_id')); $repository->updateBudget($journal, $request->integer('budget_id'));
} }
if ($ignoreTags === false) { if ($ignoreTags === false) {
Log::debug(sprintf('Set tags to %s', $request->string('budget_id'))); Log::debug(sprintf('Set tags to %s', $request->string('budget_id')));
$service->updateTags($journal, explode(',', $request->string('tags'))); $repository->updateTags($journal, explode(',', $request->string('tags')));
} }
// update tags if not told to ignore (and is withdrawal) // update tags if not told to ignore (and is withdrawal)
} }

View File

@@ -26,7 +26,6 @@ use Carbon\Carbon;
use ExpandedForm; use ExpandedForm;
use FireflyIII\Events\StoredTransactionJournal; use FireflyIII\Events\StoredTransactionJournal;
use FireflyIII\Events\UpdatedTransactionJournal; use FireflyIII\Events\UpdatedTransactionJournal;
use FireflyIII\Factory\TransactionJournalFactory;
use FireflyIII\Helpers\Attachments\AttachmentHelperInterface; use FireflyIII\Helpers\Attachments\AttachmentHelperInterface;
use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\JournalFormRequest; use FireflyIII\Http\Requests\JournalFormRequest;
@@ -366,13 +365,7 @@ class SingleController extends Controller
'foreign_amount' => null, 'foreign_amount' => null,
], ],
]; ];
var_dump($data);exit; $journal = $repository->store($data);
// todo call factory instead of repository
/** @var TransactionJournalFactory $factory */
$factory = app(TransactionJournalFactory::class);
$factory->setUser(auth()->user());
$journal = $factory->create($data);
//$journal = $repository->store($data);
if (null === $journal->id) { if (null === $journal->id) {
// error! // error!
Log::error('Could not store transaction journal: ', $journal->getErrors()->toArray()); Log::error('Could not store transaction journal: ', $journal->getErrors()->toArray());

View File

@@ -61,13 +61,13 @@ class AccountRepository implements AccountRepositoryInterface
* Moved here from account CRUD. * Moved here from account CRUD.
* *
* @param Account $account * @param Account $account
* @param Account $moveTo * @param Account|null $moveTo
* *
* @return bool * @return bool
* *
* @throws \Exception * @throws \Exception
*/ */
public function destroy(Account $account, Account $moveTo): bool public function destroy(Account $account, ?Account $moveTo): bool
{ {
/** @var AccountDestroyService $service */ /** @var AccountDestroyService $service */
$service = app(AccountDestroyService::class); $service = app(AccountDestroyService::class);

View File

@@ -48,11 +48,11 @@ interface AccountRepositoryInterface
* Moved here from account CRUD. * Moved here from account CRUD.
* *
* @param Account $account * @param Account $account
* @param Account $moveTo * @param Account|null $moveTo
* *
* @return bool * @return bool
*/ */
public function destroy(Account $account, Account $moveTo): bool; public function destroy(Account $account, ?Account $moveTo): bool;
/** /**
* @param int $accountId * @param int $accountId

View File

@@ -106,8 +106,8 @@ class BillRepository implements BillRepositoryInterface
/** @var Collection $set */ /** @var Collection $set */
$set = $this->user->bills() $set = $this->user->bills()
->where('active', 1) ->where('active', 1)
->sortBy('name') ->get(['bills.*', DB::raw('((bills.amount_min + bills.amount_max) / 2) AS expectedAmount'),])
->get(['bills.*', DB::raw('((bills.amount_min + bills.amount_max) / 2) AS expectedAmount'),]); ->sortBy('name');
return $set; return $set;
} }

View File

@@ -195,6 +195,18 @@ class JournalRepository implements JournalRepositoryInterface
return null; return null;
} }
/**
* Get account of transaction that is more than zero. Only works with unsplit journals.
*
* @param TransactionJournal $journal
*
* @return Account
*/
public function getDestinationAccount(TransactionJournal $journal): Account
{
return $journal->transactions()->where('amount', '<', 0)->first()->account;
}
/** /**
* @param TransactionJournal $journal * @param TransactionJournal $journal
* *
@@ -205,6 +217,18 @@ class JournalRepository implements JournalRepositoryInterface
return $journal->notes()->first(); return $journal->notes()->first();
} }
/**
* Get account of transaction that is less than zero. Only works with unsplit journals.
*
* @param TransactionJournal $journal
*
* @return Account
*/
public function getSourceAccount(TransactionJournal $journal): Account
{
return $journal->transactions()->where('amount', '>', 0)->first()->account;
}
/** /**
* @return Collection * @return Collection
*/ */
@@ -318,26 +342,55 @@ class JournalRepository implements JournalRepositoryInterface
} }
/** /**
* Get account of transaction that is more than zero. Only works with unsplit journals. * Update budget for a journal.
* *
* @param TransactionJournal $journal * @param TransactionJournal $journal
* @param int $budgetId
* *
* @return Account * @return TransactionJournal
*/ */
public function getDestinationAccount(TransactionJournal $journal): Account public function updateBudget(TransactionJournal $journal, int $budgetId): TransactionJournal
{ {
return $journal->transactions()->where('amount','<',0)->first()->account; /** @var JournalUpdateService $service */
$service = app(JournalUpdateService::class);
$service->setUser($this->user);
return $service->updateBudget($journal, $budgetId);
} }
/** /**
* Get account of transaction that is less than zero. Only works with unsplit journals. * Update category for a journal.
* *
* @param TransactionJournal $journal * @param TransactionJournal $journal
* @param string $category
* *
* @return Account * @return TransactionJournal
*/ */
public function getSourceAccount(TransactionJournal $journal): Account public function updateCategory(TransactionJournal $journal, string $category): TransactionJournal
{ {
return $journal->transactions()->where('amount','>',0)->first()->account; /** @var JournalUpdateService $service */
$service = app(JournalUpdateService::class);
$service->setUser($this->user);
return $service->updateCategory($journal, $category);
}
/**
* Update tag(s) for a journal.
*
* @param TransactionJournal $journal
* @param array $tags
*
* @return TransactionJournal
*/
public function updateTags(TransactionJournal $journal, array $tags): TransactionJournal
{
/** @var JournalUpdateService $service */
$service = app(JournalUpdateService::class);
$service->setUser($this->user);
$service->connectTags($journal, $tags);
return $journal;
} }
} }

View File

@@ -171,4 +171,34 @@ interface JournalRepositoryInterface
* @return TransactionJournal * @return TransactionJournal
*/ */
public function update(TransactionJournal $journal, array $data): TransactionJournal; public function update(TransactionJournal $journal, array $data): TransactionJournal;
/**
* Update budget for a journal.
*
* @param TransactionJournal $journal
* @param int $budgetId
*
* @return TransactionJournal
*/
public function updateBudget(TransactionJournal $journal, int $budgetId): TransactionJournal;
/**
* Update category for a journal.
*
* @param TransactionJournal $journal
* @param string $category
*
* @return TransactionJournal
*/
public function updateCategory(TransactionJournal $journal, string $category): TransactionJournal;
/**
* Update tag(s) for a journal.
*
* @param TransactionJournal $journal
* @param array $tags
*
* @return TransactionJournal
*/
public function updateTags(TransactionJournal $journal, array $tags): TransactionJournal;
} }

View File

@@ -73,6 +73,9 @@ trait JournalServiceTrait
$factory = app(TagFactory::class); $factory = app(TagFactory::class);
$factory->setUser($journal->user); $factory->setUser($journal->user);
$set = []; $set = [];
if (!is_array($data['tags'])) {
return;
}
foreach ($data['tags'] as $string) { foreach ($data['tags'] as $string) {
if (strlen($string) > 0) { if (strlen($string) > 0) {
$tag = $factory->findOrCreate($string); $tag = $factory->findOrCreate($string);

View File

@@ -23,10 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Services\Internal\Update; namespace FireflyIII\Services\Internal\Update;
use FireflyIII\Factory\BillFactory;
use FireflyIII\Factory\TagFactory;
use FireflyIII\Factory\TransactionFactory; use FireflyIII\Factory\TransactionFactory;
use FireflyIII\Factory\TransactionJournalMetaFactory;
use FireflyIII\Models\Transaction; use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Services\Internal\Support\JournalServiceTrait; use FireflyIII\Services\Internal\Support\JournalServiceTrait;
@@ -128,4 +125,48 @@ class JournalUpdateService
return $journal; return $journal;
} }
/**
* Update budget for a journal.
*
* @param TransactionJournal $journal
* @param int $budgetId
*
* @return TransactionJournal
*/
public function updateBudget(TransactionJournal $journal, int $budgetId): TransactionJournal
{
/** @var TransactionUpdateService $service */
$service = app(TransactionUpdateService::class);
$service->setUser($this->user);
/** @var Transaction $transaction */
foreach ($journal->transactions as $transaction) {
$service->updateBudget($transaction, $budgetId);
}
return $journal;
}
/**
* Update category for a journal.
*
* @param TransactionJournal $journal
* @param string $category
*
* @return TransactionJournal
*/
public function updateCategory(TransactionJournal $journal, string $category): TransactionJournal
{
/** @var TransactionUpdateService $service */
$service = app(TransactionUpdateService::class);
$service->setUser($this->user);
/** @var Transaction $transaction */
foreach ($journal->transactions as $transaction) {
$service->updateCategory($transaction, $category);
}
return $journal;
}
} }

View File

@@ -38,7 +38,6 @@ class TransactionUpdateService
/** @var User */ /** @var User */
private $user; private $user;
/** /**
* @param int $transactionId * @param int $transactionId
* *
@@ -130,5 +129,36 @@ class TransactionUpdateService
return $transaction; return $transaction;
} }
/**
* Update budget for a journal.
*
* @param Transaction $transaction
* @param int $budgetId
*
* @return Transaction
*/
public function updateBudget(Transaction $transaction, int $budgetId): Transaction
{
$budget = $this->findBudget($budgetId, null);
$this->setBudget($transaction, $budget);
return $transaction;
}
/**
* Update category for a journal.
*
* @param Transaction $transaction
* @param string $category
*
* @return Transaction
*/
public function updateCategory(Transaction $transaction, string $category): Transaction
{
$category = $this->findCategory(0, $category);
$this->setCategory($transaction, $category);
return $category;
}
} }

View File

@@ -139,6 +139,7 @@ class SetDestinationAccount implements ActionInterface
$data = [ $data = [
'name' => $this->action->action_value, 'name' => $this->action->action_value,
'accountType' => 'expense', 'accountType' => 'expense',
'account_type_id' => null,
'virtualBalance' => 0, 'virtualBalance' => 0,
'active' => true, 'active' => true,
'iban' => null, 'iban' => null,

View File

@@ -138,6 +138,7 @@ class SetSourceAccount implements ActionInterface
$data = [ $data = [
'name' => $this->action->action_value, 'name' => $this->action->action_value,
'accountType' => 'revenue', 'accountType' => 'revenue',
'account_type_id' => null,
'virtualBalance' => 0, 'virtualBalance' => 0,
'active' => true, 'active' => true,
'iban' => null, 'iban' => null,