/** * @return array */ public function rules() { $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name'; if (Budget::find(Input::get('id'))) { $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name,' . intval(Input::get('id')); } return ['name' => $nameRule, 'active' => 'numeric|between:0,1']; }
/** * @param TransactionJournal $journal * @param array $transaction * * @return Collection */ public function storeTransaction(TransactionJournal $journal, array $transaction) : Collection { // store accounts (depends on type) list($sourceAccount, $destinationAccount) = $this->storeAccounts($journal->transactionType->type, $transaction); // store transaction one way: /** @var Transaction $one */ $one = Transaction::create(['account_id' => $sourceAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $transaction['amount'] * -1, 'description' => $transaction['description']]); $two = Transaction::create(['account_id' => $destinationAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $transaction['amount'], 'description' => $transaction['description']]); if (strlen($transaction['category']) > 0) { $category = Category::firstOrCreateEncrypted(['name' => $transaction['category'], 'user_id' => $journal->user_id]); $one->categories()->save($category); $two->categories()->save($category); } if (intval($transaction['budget_id']) > 0) { $budget = Budget::find($transaction['budget_id']); $one->budgets()->save($budget); $two->budgets()->save($budget); } if ($transaction['piggy_bank_id'] > 0) { $transaction['date'] = $journal->date->format('Y-m-d'); event(new TransactionStored($transaction)); } return new Collection([$one, $two]); }
/** * @param array $data * * @return TransactionJournal */ public function store(array $data) : TransactionJournal { // find transaction type. $transactionType = TransactionType::where('type', ucfirst($data['what']))->first(); // store actual journal. $journal = new TransactionJournal(['user_id' => $data['user'], 'transaction_type_id' => $transactionType->id, 'transaction_currency_id' => $data['amount_currency_id_amount'], 'description' => $data['description'], 'completed' => 0, 'date' => $data['date'], 'interest_date' => $data['interest_date'], 'book_date' => $data['book_date'], 'process_date' => $data['process_date']]); $journal->save(); // store or get category if (strlen($data['category']) > 0) { $category = Category::firstOrCreateEncrypted(['name' => $data['category'], 'user_id' => $data['user']]); $journal->categories()->save($category); } // store or get budget if (intval($data['budget_id']) > 0 && $transactionType->type !== TransactionType::TRANSFER) { /** @var \FireflyIII\Models\Budget $budget */ $budget = Budget::find($data['budget_id']); $journal->budgets()->save($budget); } // store accounts (depends on type) list($sourceAccount, $destinationAccount) = $this->storeAccounts($transactionType, $data); // store accompanying transactions. Transaction::create(['account_id' => $sourceAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $data['amount'] * -1]); Transaction::create(['account_id' => $destinationAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $data['amount']]); $journal->completed = 1; $journal->save(); // store tags if (isset($data['tags']) && is_array($data['tags'])) { $this->saveTags($journal, $data['tags']); } foreach ($data as $key => $value) { if (in_array($key, $this->validMetaFields)) { $journal->setMeta($key, $value); continue; } Log::debug(sprintf('Could not store meta field "%s" with value "%s" for journal #%d', json_encode($key), json_encode($value), $journal->id)); } return $journal; }
/** * @param TransactionJournal $journal * @param array $data * * @return TransactionJournal */ public function update(TransactionJournal $journal, array $data) { // update actual journal. $journal->transaction_currency_id = $data['amount_currency_id']; $journal->description = $data['description']; $journal->date = $data['date']; // unlink all categories, recreate them: $journal->categories()->detach(); if (strlen($data['category']) > 0) { $category = Category::firstOrCreateEncrypted(['name' => $data['category'], 'user_id' => $data['user']]); $journal->categories()->save($category); } // unlink all budgets and recreate them: $journal->budgets()->detach(); if (intval($data['budget_id']) > 0) { /** @var \FireflyIII\Models\Budget $budget */ $budget = Budget::find($data['budget_id']); $journal->budgets()->save($budget); } // store accounts (depends on type) list($from, $to) = $this->storeAccounts($journal->transactionType, $data); // update the from and to transaction. /** @var Transaction $transaction */ foreach ($journal->transactions()->get() as $transaction) { if (floatval($transaction->amount) < 0) { // this is the from transaction, negative amount: $transaction->amount = $data['amount'] * -1; $transaction->account_id = $from->id; $transaction->save(); } if (floatval($transaction->amount) > 0) { $transaction->amount = $data['amount']; $transaction->account_id = $to->id; $transaction->save(); } } $journal->save(); // update tags: if (isset($data['tags']) && is_array($data['tags'])) { $this->updateTags($journal, $data['tags']); } return $journal; }
public function moveBackEntriesForBudgetsInJoinedTable() { $set = DB::table('budget_transaction_journal')->get(); foreach ($set as $entry) { $budget = Budget::find($entry->budget_id); if ($budget) { $component = Component::where('class', 'Budget')->where('name', $budget->name)->where('user_id', $budget->user_id)->first(); if ($component) { DB::table('component_transaction_journal')->insert(['component_id' => $component->id, 'transaction_journal_id' => $entry->transaction_journal_id]); } } } }
private function updateComponentInBudgetLimits() { BudgetLimit::get()->each(function (BudgetLimit $bl) { $budgetId = $bl->budget_id; $budget = Budget::find($budgetId); if ($budget) { $component = Component::where('class', 'Budget')->where('user_id', $budget->user_id)->where('name', $budget->name)->first(); if ($component) { $bl->component_id = $component->id; $bl->save(); } } }); }