예제 #1
0
 /**
  * @covers FireflyIII\Models\Category::firstOrCreateEncrypted
  */
 public function testFirstOrCreateEncryptedNew()
 {
     $category = FactoryMuffin::create('FireflyIII\\Models\\Category');
     $search = ['name' => 'Some category name', 'user_id' => $category->user_id];
     $result = Category::firstOrCreateEncrypted($search);
     $this->assertNotEquals($result->id, $category->id);
 }
예제 #2
0
 /**
  * @param TransactionJournal $journal
  *
  * @return bool
  */
 public function act(TransactionJournal $journal) : bool
 {
     $name = $this->action->action_value;
     $category = Category::firstOrCreateEncrypted(['name' => $name, 'user_id' => $journal->user->id]);
     $journal->categories()->sync([$category->id]);
     Log::debug(sprintf('RuleAction SetCategory set the category of journal #%d to budget #%d ("%s").', $journal->id, $category->id, $category->name));
     return true;
 }
예제 #3
0
 /**
  * @return bool
  */
 public function act()
 {
     $name = $this->action->action_value;
     $category = Category::firstOrCreateEncrypted(['name' => $name, 'user_id' => Auth::user()->id]);
     Log::debug('Will set category "' . $name . '" (#' . $category->id . ') on journal #' . $this->journal->id . '.');
     $this->journal->categories()->sync([$category->id]);
     return true;
 }
예제 #4
0
 /**
  * @return Category
  */
 public function convert()
 {
     // is mapped? Then it's easy!
     if (isset($this->mapped[$this->index][$this->value])) {
         $category = Auth::user()->categories()->find($this->mapped[$this->index][$this->value]);
     } else {
         $category = Category::firstOrCreateEncrypted(['name' => $this->value, 'user_id' => Auth::user()->id]);
     }
     return $category;
 }
예제 #5
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]);
 }
예제 #6
0
 /**
  * @param Carbon $date
  *
  * @return TransactionJournal
  */
 protected function createSavings(Carbon $date)
 {
     $date = new Carbon($date->format('Y-m') . '-24');
     // paid on 24th.
     $toAccount = $this->findAccount('Savings');
     $fromAccount = $this->findAccount('MyBank Checking Account');
     $category = Category::firstOrCreateEncrypted(['name' => 'Money management', 'user_id' => $this->user->id]);
     // create journal:
     $journal = TransactionJournal::create(['user_id' => $this->user->id, 'transaction_type_id' => 3, 'transaction_currency_id' => 1, 'description' => 'Save money', 'completed' => 1, 'date' => $date]);
     Transaction::create(['account_id' => $fromAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => -150]);
     Transaction::create(['account_id' => $toAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => 150]);
     $journal->categories()->save($category);
     return $journal;
 }
예제 #7
0
 /**
  * @param        $description
  * @param Carbon $date
  * @param        $amount
  *
  * @return TransactionJournal
  */
 protected function createWater($description, Carbon $date, $amount)
 {
     $date = new Carbon($date->format('Y-m') . '-10');
     // paid on 10th
     $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account');
     $toAccount = TestData::findAccount($this->user, 'Vitens');
     $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $this->user->id]);
     $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $this->user->id]);
     $journal = TransactionJournal::create(['user_id' => $this->user->id, 'transaction_type_id' => 1, 'transaction_currency_id' => 1, 'description' => $description, 'completed' => 1, 'date' => $date]);
     Transaction::create(['account_id' => $fromAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $amount * -1]);
     Transaction::create(['account_id' => $toAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $amount]);
     $journal->categories()->save($category);
     $journal->budgets()->save($budget);
     return $journal;
 }
예제 #8
0
 /**
  * @param User $user
  */
 private function createCategories(User $user)
 {
     Category::firstOrCreateEncrypted(['name' => 'Groceries', 'user_id' => $user->id]);
     Category::firstOrCreateEncrypted(['name' => 'Car', 'user_id' => $user->id]);
 }
 /**
  * @param TransactionJournal $journal
  * @param array              $data
  *
  * @return TransactionJournal
  */
 public function update(TransactionJournal $journal, array $data) : TransactionJournal
 {
     // update actual journal.
     $journal->transaction_currency_id = $data['amount_currency_id_amount'];
     $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 && $journal->transactionType->type !== TransactionType::TRANSFER) {
         /** @var \FireflyIII\Models\Budget $budget */
         $budget = Budget::where('user_id', $this->user->id)->where('id', $data['budget_id'])->first();
         $journal->budgets()->save($budget);
     }
     // store accounts (depends on type)
     list($fromAccount, $toAccount) = $this->storeAccounts($journal->transactionType, $data);
     // update the from and to transaction.
     /** @var Transaction $transaction */
     foreach ($journal->transactions()->get() as $transaction) {
         if ($transaction->amount < 0) {
             // this is the from transaction, negative amount:
             $transaction->amount = $data['amount'] * -1;
             $transaction->account_id = $fromAccount->id;
             $transaction->save();
         }
         if ($transaction->amount > 0) {
             $transaction->amount = $data['amount'];
             $transaction->account_id = $toAccount->id;
             $transaction->save();
         }
     }
     $journal->save();
     // update tags:
     if (isset($data['tags']) && is_array($data['tags'])) {
         $this->updateTags($journal, $data['tags']);
     }
     // update meta fields:
     $result = $journal->save();
     if ($result) {
         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;
     }
     return $journal;
 }
예제 #10
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;
 }
 /**
  * @param array $data
  *
  * @return Category
  */
 public function store(array $data) : Category
 {
     $newCategory = Category::firstOrCreateEncrypted(['user_id' => $data['user'], 'name' => $data['name']]);
     $newCategory->save();
     return $newCategory;
 }