コード例 #1
0
 /**
  * @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'];
 }
コード例 #2
0
 /**
  * @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]);
 }
コード例 #3
0
 /**
  * @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;
 }
コード例 #4
0
 /**
  * @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;
 }
コード例 #5
0
 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]);
             }
         }
     }
 }
コード例 #6
0
 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();
             }
         }
     });
 }