diff --git a/app/Crud/Split/Journal.php b/app/Crud/Split/Journal.php index bd0bfeb380..192a829778 100644 --- a/app/Crud/Split/Journal.php +++ b/app/Crud/Split/Journal.php @@ -64,6 +64,13 @@ class Journal implements JournalInterface ); $journal->save(); + foreach ($data['transactions'] as $transaction) { + $this->storeTransaction($journal, $transaction); + } + + $journal->completed = true; + $journal->save(); + return $journal; } @@ -116,6 +123,38 @@ class Journal implements JournalInterface } + /** + * @param TransactionJournal $journal + * @param array $data + * + * @return TransactionJournal + */ + public function updateJournal(TransactionJournal $journal, array $data): TransactionJournal + { + echo '
';
+ print_r($data);
+
+ $journal->description = $data['journal_description'];
+ $journal->transaction_currency_id = $data['journal_currency_id'];
+ $journal->date = $data['date'];
+ $journal->interest_date = $data['interest_date'];
+ $journal->book_date = $data['book_date'];
+ $journal->process_date = $data['process_date'];
+ $journal->save();
+
+ // delete original transactions, and recreate them.
+ $journal->transactions()->delete();
+
+ foreach ($data['transactions'] as $transaction) {
+ $this->storeTransaction($journal, $transaction);
+ }
+
+ $journal->completed = true;
+ $journal->save();
+
+ return $journal;
+ }
+
/**
* @param string $type
* @param array $transaction
diff --git a/app/Crud/Split/JournalInterface.php b/app/Crud/Split/JournalInterface.php
index 00c00a5cba..709f0abd45 100644
--- a/app/Crud/Split/JournalInterface.php
+++ b/app/Crud/Split/JournalInterface.php
@@ -36,4 +36,12 @@ interface JournalInterface
* @return Collection
*/
public function storeTransaction(TransactionJournal $journal, array $transaction): Collection;
+
+ /**
+ * @param TransactionJournal $journal
+ * @param array $data
+ *
+ * @return TransactionJournal
+ */
+ public function updateJournal(TransactionJournal $journal, array $data): TransactionJournal;
}
\ No newline at end of file
diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php
index 27ed8387d2..275318fc26 100644
--- a/app/Http/Controllers/Transaction/SplitController.php
+++ b/app/Http/Controllers/Transaction/SplitController.php
@@ -12,6 +12,7 @@ namespace FireflyIII\Http\Controllers\Transaction;
use ExpandedForm;
use FireflyIII\Crud\Split\JournalInterface;
+use FireflyIII\Events\TransactionJournalUpdated;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\SplitJournalFormRequest;
@@ -21,8 +22,12 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use Illuminate\Http\Request;
+use Input;
use Log;
+use Preferences;
use Session;
+use Steam;
+use URL;
use View;
/**
@@ -63,16 +68,24 @@ class SplitController extends Controller
/** @var BudgetRepositoryInterface $budgetRepository */
$budgetRepository = app(BudgetRepositoryInterface::class);
+ $uploadSize = min(Steam::phpBytes(ini_get('upload_max_filesize')), Steam::phpBytes(ini_get('post_max_size')));
$currencies = ExpandedForm::makeSelectList($currencyRepository->get());
$assetAccounts = ExpandedForm::makeSelectList($accountRepository->getAccounts(['Default account', 'Asset account']));
$budgets = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
$preFilled = $this->arrayFromJournal($request, $journal);
- // get the transactions:
+ Session::flash('gaEventCategory', 'transactions');
+ Session::flash('gaEventAction', 'edit-split-' . $preFilled['what']);
+
+ // put previous url in session if not redirect from store (not "return_to_edit").
+ if (session('transactions.edit-split.fromUpdate') !== true) {
+ Session::put('transactions.edit-split.url', URL::previous());
+ }
+ Session::forget('transactions.edit-split.fromUpdate');
return view(
'split.journals.edit',
- compact('currencies', 'preFilled', 'amount', 'sourceAccounts', 'destinationAccounts', 'assetAccounts', 'budgets', 'what', 'journal')
+ compact('currencies', 'preFilled', 'amount', 'sourceAccounts', 'uploadSize', 'destinationAccounts', 'assetAccounts', 'budgets', 'journal')
);
}
@@ -105,7 +118,6 @@ class SplitController extends Controller
$assetAccounts = ExpandedForm::makeSelectList($accountRepository->getAccounts(['Default account', 'Asset account']));
$budgets = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
-
return view('split.journals.from-store', compact('currencies', 'assetAccounts', 'budgets', 'preFilled'));
@@ -129,13 +141,6 @@ class SplitController extends Controller
if (is_null($journal->id)) {
throw new FireflyException('Could not store transaction.');
}
- foreach ($data['transactions'] as $transaction) {
- $transactions = $repository->storeTransaction($journal, $transaction);
- }
-
- // TODO move to repository.
- $journal->completed = true;
- $journal->save();
// forget temp journal data
Session::forget('temporary_split_data');
@@ -145,12 +150,38 @@ class SplitController extends Controller
}
/**
+ * @param TransactionJournal $journal
* @param SplitJournalFormRequest $request
* @param JournalInterface $repository
+ *
+ * @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
- public function update(SplitJournalFormRequest $request, JournalInterface $repository)
+ public function update(TransactionJournal $journal, SplitJournalFormRequest $request, JournalInterface $repository)
{
- echo 'ok';
+
+ $data = $request->getSplitData();
+ $journal = $repository->updateJournal($journal, $data);
+
+ event(new TransactionJournalUpdated($journal));
+ // update, get events by date and sort DESC
+
+ $type = strtolower($journal->transaction_type_type ?? TransactionJournal::transactionTypeStr($journal));
+ Session::flash('success', strval(trans('firefly.updated_' . $type, ['description' => e($data['journal_description'])])));
+ Preferences::mark();
+
+ if (intval(Input::get('return_to_edit')) === 1) {
+ // set value so edit routine will not overwrite URL:
+ Session::put('transactions.edit-split.fromUpdate', true);
+
+ return redirect(route('split.journal.edit', [$journal->id]))->withInput(['return_to_edit' => 1]);
+ }
+
+ // redirect to previous URL.
+ return redirect(session('transactions.edit-split.url'));
+
+
+ // update all:
+
}
/**
@@ -184,28 +215,40 @@ class SplitController extends Controller
'budget_id' => [],
'category' => [],
];
- $index = 0;
+ $index = 0;
/** @var Transaction $transaction */
foreach ($journal->transactions()->get() as $transaction) {
- //if ($journal->isWithdrawal() && $transaction->account_id !== $firstSourceId) {
- $array['description'][] = $transaction->description;
- $array['destination_account_id'][] = $transaction->account_id;
- $array['destination_account_name'][] = $transaction->account->name;
- $array['amount'][] = $transaction->amount;
- //}
- $budget = $transaction->budgets()->first();
- $budgetId = 0;
+ $budget = $transaction->budgets()->first();
+ $category = $transaction->categories()->first();
+ $budgetId = 0;
+ $categoryName = '';
if (!is_null($budget)) {
$budgetId = $budget->id;
}
- $category = $transaction->categories()->first();
- $categoryName = '';
if (!is_null($category)) {
$categoryName = $category->name;
}
- $array['budget_id'][] = $budgetId;
- $array['category'][] = $categoryName;
+
+ $budgetId = $request->old('budget_id')[$index] ?? $budgetId;
+ $categoryName = $request->old('category')[$index] ?? $categoryName;
+ $amount = $request->old('amount')[$index] ?? $transaction->amount;
+ $description = $request->old('description')[$index] ?? $transaction->description;
+ $destinationName = $request->old('destination_account_name')[$index] ??$transaction->account->name;
+
+
+ if ($journal->isWithdrawal() && $transaction->account_id !== $firstSourceId) {
+ $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;
+ // only add one when "valid" transaction
+ $index++;
+ }
+
+
}
return $array;
diff --git a/app/Http/Requests/SplitJournalFormRequest.php b/app/Http/Requests/SplitJournalFormRequest.php
index 142796293d..d98cd06a4c 100644
--- a/app/Http/Requests/SplitJournalFormRequest.php
+++ b/app/Http/Requests/SplitJournalFormRequest.php
@@ -35,6 +35,7 @@ class SplitJournalFormRequest extends Request
public function getSplitData(): array
{
$data = [
+ 'id' => $this->get('id') ?? 0,
'journal_description' => $this->get('journal_description'),
'journal_currency_id' => intval($this->get('journal_currency_id')),
'journal_source_account_id' => intval($this->get('journal_source_account_id')),
diff --git a/resources/lang/en_US/form.php b/resources/lang/en_US/form.php
index 6e2c70cd48..2bead9d151 100644
--- a/resources/lang/en_US/form.php
+++ b/resources/lang/en_US/form.php
@@ -25,6 +25,7 @@ return [
'journal_currency_id' => 'Currency',
'journal_amount' => 'Amount',
'journal_asset_source_account' => 'Asset account (source)',
+ 'journal_source_account_id' => 'Asset account (source)',
'account_from_id' => 'From account',
'account_to_id' => 'To account',
'asset_destination_account' => 'Asset account (destination)',
diff --git a/resources/views/split/journals/edit.twig b/resources/views/split/journals/edit.twig
index bde2f724d5..8f94f1a411 100644
--- a/resources/views/split/journals/edit.twig
+++ b/resources/views/split/journals/edit.twig
@@ -46,19 +46,17 @@
{{ ExpandedForm.select('journal_currency_id', currencies, preFilled.transaction_currency_id) }}
{{ ExpandedForm.staticText('journal_amount', preFilled.journal_amount|formatAmount ) }}
-
- {% if what == 'withdrawal' or what == 'transfer' %}
- {{ ExpandedForm.select('journal_asset_source_account_id', assetAccounts, preFilled.sourceAccounts.first.id) }}
+
+ {% if preFilled.what == 'withdrawal' or preFilled.what == 'transfer' %}
+ {{ ExpandedForm.select('journal_source_account_id', assetAccounts, preFilled.journal_source_account_id) }}
{% endif %}
- {% if what == 'deposit' %}
- {{ ExpandedForm.staticText('revenue_account', sourceAccounts.first.name) }}
-
+ {% if preFilled.what == 'deposit' %}
+ {{ ExpandedForm.text('journal_source_account_name', preFilled.journal_source_account_name) }}
{% endif %}
- {% if what == 'transfer' %}
- {{ ExpandedForm.staticText('asset_destination_account', assetAccounts[preFilled.destinationAccounts.first.id]) }}
-
+ {% if preFilled.what == 'transfer' %}
+ {{ ExpandedForm.select('journal_destination_account_id', assetAccounts, preFilled.journal_destination_account_id) }}
{% endif %}
@@ -82,6 +80,7 @@
{{ ExpandedForm.date('process_date', journal.process_date) }}
+
@@ -151,7 +150,15 @@
{% if preFilled.what == 'withdrawal' %}
- {{ Form.select('budget_id[]', budgets, preFilled.budget_id[index], {class: 'form-control'}) }}
+
{% endif %}
@@ -170,11 +177,40 @@
{{ 'add_another_split'|_ }}
-
+
+
+
+
+
+
+
+
+
+
+ {{ 'optionalFields'|_ }}
+
+
+
+ {{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
+
+
+
+
+
+
+
+ {{ 'options'|_ }}
+
+
+ {{ ExpandedForm.optionsList('update','split-transaction') }}
+
+
diff --git a/resources/views/split/journals/from-store.twig b/resources/views/split/journals/from-store.twig
index 8fb955924b..3c62e07552 100644
--- a/resources/views/split/journals/from-store.twig
+++ b/resources/views/split/journals/from-store.twig
@@ -74,7 +74,7 @@
{% if preFilled.what == 'withdrawal' or preFilled.what == 'transfer' %}
- {{ ExpandedForm.select('journal_asset_source_account_id', assetAccounts, preFilled.journal_source_account_id) }}
+ {{ ExpandedForm.select('journal_source_account_id', assetAccounts, preFilled.journal_source_account_id) }}
{% endif %}
{% if preFilled.what == 'deposit' %}