mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-16 01:06:46 +00:00
Various last minute bug fixes.
Signed-off-by: James Cole <thegrumpydictator@gmail.com>
This commit is contained in:
@@ -18,9 +18,13 @@ use FireflyIII\Events\TransactionJournalUpdated;
|
||||
use FireflyIII\Helpers\Attachments\AttachmentHelperInterface;
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
use FireflyIII\Http\Requests\SplitJournalFormRequest;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
use Preferences;
|
||||
use Session;
|
||||
use Steam;
|
||||
@@ -225,9 +229,99 @@ class SplitController extends Controller
|
||||
'budget_id' => [],
|
||||
'category' => [],
|
||||
];
|
||||
$index = 0;
|
||||
/** @var Transaction $transaction */
|
||||
foreach ($journal->transactions()->get() as $transaction) {
|
||||
|
||||
// number of transactions present in old input:
|
||||
$previousCount = count($request->old('description'));
|
||||
|
||||
if ($previousCount === 0) {
|
||||
// build from scratch
|
||||
$transactions = $this->transactionsFromJournal($request, $journal);
|
||||
$array['description'] = $transactions['description'];
|
||||
$array['source_account_id'] = $transactions['source_account_id'];
|
||||
$array['source_account_name'] = $transactions['source_account_name'];
|
||||
$array['destination_account_id'] = $transactions['destination_account_id'];
|
||||
$array['destination_account_name'] = $transactions['destination_account_name'];
|
||||
$array['amount'] = $transactions['amount'];
|
||||
$array['budget_id'] = $transactions['budget_id'];
|
||||
$array['category'] = $transactions['category'];
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
$index = 0;
|
||||
while ($index < $previousCount) {
|
||||
$description = $request->old('description')[$index] ?? '';
|
||||
$destinationId = $request->old('destination_account_id')[$index] ?? 0;
|
||||
$destinationName = $request->old('destination_account_name')[$index] ?? '';
|
||||
$sourceId = $request->old('source_account_id')[$index] ?? 0;
|
||||
$sourceName = $request->old('source_account_name')[$index] ?? '';
|
||||
$amount = $request->old('amount')[$index] ?? '';
|
||||
$budgetId = $request->old('budget_id')[$index] ?? 0;
|
||||
$categoryName = $request->old('category')[$index] ?? '';
|
||||
|
||||
|
||||
// any transfer not from the source:
|
||||
$array['description'][] = $description;
|
||||
$array['source_account_id'][] = $sourceId;
|
||||
$array['source_account_name'][] = $sourceName;
|
||||
$array['destination_account_id'][] = $destinationId;
|
||||
$array['destination_account_name'][] = $destinationName;
|
||||
$array['amount'][] = $amount;
|
||||
$array['budget_id'][] = intval($budgetId);
|
||||
$array['category'][] = $categoryName;
|
||||
$index++;
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function transactionsFromJournal(Request $request, TransactionJournal $journal): array
|
||||
{
|
||||
/** @var Collection $transactions */
|
||||
$transactions = $journal->transactions()->get();
|
||||
|
||||
/*
|
||||
* Splitted journals always have ONE source OR ONE destination.
|
||||
* Withdrawals have ONE source (asset account)
|
||||
* Deposits have ONE destination (asset account)
|
||||
* Transfers have ONE of both (asset account)
|
||||
*/
|
||||
/** @var Account $singular */
|
||||
$singular = TransactionJournal::sourceAccountList($journal)->first();
|
||||
if ($journal->transactionType->type == TransactionType::DEPOSIT) {
|
||||
/** @var Account $singular */
|
||||
$singular = TransactionJournal::destinationAccountList($journal)->first();
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop all transactions. Collect info ONLY from the transaction that is NOT related to
|
||||
* the singular account.
|
||||
*/
|
||||
$index = 0;
|
||||
$return = [
|
||||
'description' => [],
|
||||
'source_account_id' => [],
|
||||
'source_account_name' => [],
|
||||
'destination_account_id' => [],
|
||||
'destination_account_name' => [],
|
||||
'amount' => [],
|
||||
'budget_id' => [],
|
||||
'category' => [],
|
||||
];
|
||||
|
||||
Log::debug('now at transactionsFromJournal');
|
||||
|
||||
/**
|
||||
* @var int $current
|
||||
* @var Transaction $transaction
|
||||
*/
|
||||
foreach ($transactions as $current => $transaction) {
|
||||
$budget = $transaction->budgets()->first();
|
||||
$category = $transaction->categories()->first();
|
||||
$budgetId = 0;
|
||||
@@ -245,22 +339,23 @@ class SplitController extends Controller
|
||||
$amount = $request->old('amount')[$index] ?? $transaction->amount;
|
||||
$description = $request->old('description')[$index] ?? $transaction->description;
|
||||
$destinationName = $request->old('destination_account_name')[$index] ?? $transaction->account->name;
|
||||
$sourceName = $request->old('source_account_name')[$index] ?? $transaction->account->name;
|
||||
$amount = bccomp($amount, '0') === -1 ? bcmul($amount, '-1') : $amount;
|
||||
|
||||
// any transfer not from the source:
|
||||
if ($transaction->account_id !== $sourceAccounts->first()->id) {
|
||||
$array['description'][] = $description;
|
||||
$array['destination_account_id'][] = $transaction->account_id;
|
||||
$array['destination_account_name'][] = $destinationName;
|
||||
$array['amount'][] = $amount;
|
||||
$array['budget_id'][] = intval($budgetId);
|
||||
$array['category'][] = $categoryName;
|
||||
if ($transaction->account_id !== $singular->id) {
|
||||
$return['description'][] = $description;
|
||||
$return['destination_account_id'][] = $transaction->account_id;
|
||||
$return['destination_account_name'][] = $destinationName;
|
||||
$return['source_account_name'][] = $sourceName;
|
||||
$return['amount'][] = $amount;
|
||||
$return['budget_id'][] = intval($budgetId);
|
||||
$return['category'][] = $categoryName;
|
||||
// only add one when "valid" transaction
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $array;
|
||||
return $return;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user