mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-16 17:33:45 +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\Helpers\Attachments\AttachmentHelperInterface;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Http\Requests\SplitJournalFormRequest;
|
use FireflyIII\Http\Requests\SplitJournalFormRequest;
|
||||||
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Log;
|
||||||
use Preferences;
|
use Preferences;
|
||||||
use Session;
|
use Session;
|
||||||
use Steam;
|
use Steam;
|
||||||
@@ -225,9 +229,99 @@ class SplitController extends Controller
|
|||||||
'budget_id' => [],
|
'budget_id' => [],
|
||||||
'category' => [],
|
'category' => [],
|
||||||
];
|
];
|
||||||
$index = 0;
|
|
||||||
/** @var Transaction $transaction */
|
// number of transactions present in old input:
|
||||||
foreach ($journal->transactions()->get() as $transaction) {
|
$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();
|
$budget = $transaction->budgets()->first();
|
||||||
$category = $transaction->categories()->first();
|
$category = $transaction->categories()->first();
|
||||||
$budgetId = 0;
|
$budgetId = 0;
|
||||||
@@ -245,22 +339,23 @@ class SplitController extends Controller
|
|||||||
$amount = $request->old('amount')[$index] ?? $transaction->amount;
|
$amount = $request->old('amount')[$index] ?? $transaction->amount;
|
||||||
$description = $request->old('description')[$index] ?? $transaction->description;
|
$description = $request->old('description')[$index] ?? $transaction->description;
|
||||||
$destinationName = $request->old('destination_account_name')[$index] ?? $transaction->account->name;
|
$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 !== $singular->id) {
|
||||||
if ($transaction->account_id !== $sourceAccounts->first()->id) {
|
$return['description'][] = $description;
|
||||||
$array['description'][] = $description;
|
$return['destination_account_id'][] = $transaction->account_id;
|
||||||
$array['destination_account_id'][] = $transaction->account_id;
|
$return['destination_account_name'][] = $destinationName;
|
||||||
$array['destination_account_name'][] = $destinationName;
|
$return['source_account_name'][] = $sourceName;
|
||||||
$array['amount'][] = $amount;
|
$return['amount'][] = $amount;
|
||||||
$array['budget_id'][] = intval($budgetId);
|
$return['budget_id'][] = intval($budgetId);
|
||||||
$array['category'][] = $categoryName;
|
$return['category'][] = $categoryName;
|
||||||
// only add one when "valid" transaction
|
// only add one when "valid" transaction
|
||||||
$index++;
|
$index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
return $array;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -46,9 +46,13 @@
|
|||||||
{{ ExpandedForm.select('journal_source_account_id', assetAccounts, preFilled.journal_source_account_id) }}
|
{{ ExpandedForm.select('journal_source_account_id', assetAccounts, preFilled.journal_source_account_id) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- show destination account id, if deposit (is asset): -->
|
||||||
|
{% if preFilled.what == 'deposit' %}
|
||||||
|
{{ ExpandedForm.select('journal_destination_account_id', assetAccounts, preFilled.journal_destination_account_id) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- show static source if deposit: -->
|
<!-- show static source if deposit: -->
|
||||||
{% if preFilled.what == 'deposit' %}
|
{% if preFilled.what == 'deposit' %}
|
||||||
{{ ExpandedForm.text('journal_source_account_name', preFilled.journal_source_account_name) }}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- show static destination if transfer -->
|
<!-- show static destination if transfer -->
|
||||||
@@ -119,10 +123,10 @@
|
|||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- deposit has several destination id's -->
|
<!-- deposit has several source names -->
|
||||||
{% if preFilled.what == 'deposit' %}
|
{% if preFilled.what == 'deposit' %}
|
||||||
<td>
|
<td>
|
||||||
{{ Form.select('destination_account_id[]', assetAccounts, preFilled.destination_account_id[index], {class: 'form-control'}) }}
|
<input type="text" name="source_account_name[]" value="{{ preFilled.source_account_name[index] }}" class="form-control"/>
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@@ -901,8 +901,8 @@
|
|||||||
],
|
],
|
||||||
"source_id": 1,
|
"source_id": 1,
|
||||||
"amounts": [
|
"amounts": [
|
||||||
14,
|
15,
|
||||||
35,
|
34,
|
||||||
51
|
51
|
||||||
],
|
],
|
||||||
"category_ids": [
|
"category_ids": [
|
||||||
@@ -948,8 +948,8 @@
|
|||||||
],
|
],
|
||||||
"destination_id": 1,
|
"destination_id": 1,
|
||||||
"amounts": [
|
"amounts": [
|
||||||
14,
|
15,
|
||||||
35,
|
34,
|
||||||
51
|
51
|
||||||
],
|
],
|
||||||
"category_ids": [
|
"category_ids": [
|
||||||
@@ -962,7 +962,7 @@
|
|||||||
"multi-transfers": [
|
"multi-transfers": [
|
||||||
{
|
{
|
||||||
"user_id": 1,
|
"user_id": 1,
|
||||||
"date": "2016-03-02",
|
"date": "2016-01-18",
|
||||||
"description": "Even multi-transfer (50, 50)",
|
"description": "Even multi-transfer (50, 50)",
|
||||||
"source_ids": [
|
"source_ids": [
|
||||||
4,
|
4,
|
||||||
@@ -983,7 +983,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"user_id": 1,
|
"user_id": 1,
|
||||||
"date": "2016-05-02",
|
"date": "2016-03-28",
|
||||||
"description": "Uneven multi-transfer (15,34,51)",
|
"description": "Uneven multi-transfer (15,34,51)",
|
||||||
"source_ids": [
|
"source_ids": [
|
||||||
4,
|
4,
|
||||||
@@ -996,8 +996,8 @@
|
|||||||
5
|
5
|
||||||
],
|
],
|
||||||
"amounts": [
|
"amounts": [
|
||||||
14,
|
15,
|
||||||
35,
|
34,
|
||||||
51
|
51
|
||||||
],
|
],
|
||||||
"category_ids": [
|
"category_ids": [
|
||||||
|
Reference in New Issue
Block a user