/** * @param JournalFormRequest $request * @param JournalRepositoryInterface $repository * @param AttachmentHelperInterface $att * @param TransactionJournal $journal * * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function update(JournalFormRequest $request, JournalRepositoryInterface $repository, AttachmentHelperInterface $att, TransactionJournal $journal) { $journalData = $request->getJournalData(); $repository->update($journal, $journalData); // save attachments: $att->saveAttachmentsForModel($journal); // flash errors if (count($att->getErrors()->get('attachments')) > 0) { Session::flash('error', $att->getErrors()->get('attachments')); } // flash messages if (count($att->getMessages()->get('attachments')) > 0) { Session::flash('info', $att->getMessages()->get('attachments')); } 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($journalData['description'])]))); Preferences::mark(); if (intval($request->get('return_to_edit')) === 1) { // set value so edit routine will not overwrite URL: Session::put('transactions.edit.fromUpdate', true); return redirect(route('transactions.edit', [$journal->id]))->withInput(['return_to_edit' => 1]); } // redirect to previous URL. return redirect(session('transactions.edit.url')); }
/** * @param Request $request * @param TransactionJournal $journal * * @return array */ private function arrayFromJournal(Request $request, TransactionJournal $journal) : array { $sourceAccounts = TransactionJournal::sourceAccountList($journal); $destinationAccounts = TransactionJournal::destinationAccountList($journal); $array = ['journal_description' => $request->old('journal_description', $journal->description), 'journal_amount' => TransactionJournal::amountPositive($journal), 'sourceAccounts' => $sourceAccounts, 'journal_source_account_id' => $sourceAccounts->first()->id, 'journal_source_account_name' => $sourceAccounts->first()->name, 'journal_destination_account_id' => $destinationAccounts->first()->id, 'transaction_currency_id' => $request->old('transaction_currency_id', $journal->transaction_currency_id), 'destinationAccounts' => $destinationAccounts, 'what' => strtolower(TransactionJournal::transactionTypeStr($journal)), 'date' => $request->old('date', $journal->date), 'interest_date' => $request->old('interest_date', $journal->interest_date), 'book_date' => $request->old('book_date', $journal->book_date), 'process_date' => $request->old('process_date', $journal->process_date), 'description' => [], 'source_account_id' => [], 'source_account_name' => [], 'destination_account_id' => [], 'destination_account_name' => [], 'amount' => [], 'budget_id' => [], 'category' => []]; // 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 MassEditJournalRequest $request * @param JournalRepositoryInterface $repository * * @return mixed */ public function massUpdate(MassEditJournalRequest $request, JournalRepositoryInterface $repository) { $journalIds = $request->get('journals'); $count = 0; if (is_array($journalIds)) { foreach ($journalIds as $journalId) { $journal = $repository->find(intval($journalId)); if ($journal) { // get optional fields: $what = strtolower(TransactionJournal::transactionTypeStr($journal)); $sourceAccountId = $request->get('source_account_id')[$journal->id] ?? 0; $sourceAccountName = $request->get('source_account_name')[$journal->id] ?? ''; $destAccountId = $request->get('destination_account_id')[$journal->id] ?? 0; $destAccountName = $request->get('destination_account_name')[$journal->id] ?? ''; $budgetId = $journal->budgets->first() ? $journal->budgets->first()->id : 0; $category = $request->get('category')[$journal->id]; $tags = $journal->tags->pluck('tag')->toArray(); // build data array $data = ['id' => $journal->id, 'what' => $what, 'description' => $request->get('description')[$journal->id], 'source_account_id' => intval($sourceAccountId), 'source_account_name' => $sourceAccountName, 'destination_account_id' => intval($destAccountId), 'destination_account_name' => $destAccountName, 'amount' => round($request->get('amount')[$journal->id], 4), 'user' => auth()->user()->id, 'amount_currency_id_amount' => intval($request->get('amount_currency_id_amount_' . $journal->id)), 'date' => new Carbon($request->get('date')[$journal->id]), 'interest_date' => $journal->interest_date, 'book_date' => $journal->book_date, 'process_date' => $journal->process_date, 'budget_id' => $budgetId, 'category' => $category, 'tags' => $tags]; // call repository update function. $repository->update($journal, $data); $count++; } } } Preferences::mark(); Session::flash('success', trans('firefly.mass_edited_transactions_success', ['amount' => $count])); // redirect to previous URL: return redirect(session('transactions.mass-edit.url')); }