コード例 #1
0
 /**
  * This method returns the oldest journal or transaction date known to this budget.
  * Will cache result.
  *
  * @param Budget $budget
  *
  * @return Carbon
  */
 public function firstUseDate(Budget $budget) : Carbon
 {
     $oldest = Carbon::create()->startOfYear();
     $journal = $budget->transactionJournals()->orderBy('date', 'ASC')->first();
     if (!is_null($journal)) {
         $oldest = $journal->date < $oldest ? $journal->date : $oldest;
     }
     $transaction = $budget->transactions()->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.id')->orderBy('transaction_journals.date', 'ASC')->first(['transactions.*', 'transaction_journals.date']);
     if (!is_null($transaction)) {
         $carbon = new Carbon($transaction->date);
         $oldest = $carbon < $oldest ? $carbon : $oldest;
     }
     return $oldest;
 }
コード例 #2
0
 /**
  * Returns an array with the following key:value pairs:
  *
  * yyyy-mm-dd:<amount>
  *
  * Where yyyy-mm-dd is the date and <amount> is the money spent using DEPOSITS in the $budget
  * from all the users accounts.
  *
  * @param Budget $budget
  * @param Carbon $start
  * @param Carbon $end
  *
  * @return array
  */
 public function spentPerDay(Budget $budget, Carbon $start, Carbon $end)
 {
     /** @var Collection $query */
     $query = $budget->transactionJournals()->transactionTypes([TransactionType::WITHDRAWAL])->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')->where('transactions.amount', '<', 0)->before($end)->after($start)->groupBy('dateFormatted')->get(['transaction_journals.date as dateFormatted', DB::Raw('SUM(`transactions`.`amount`) AS `sum`')]);
     $return = [];
     foreach ($query->toArray() as $entry) {
         $return[$entry['dateFormatted']] = $entry['sum'];
     }
     return $return;
 }
コード例 #3
0
 /**
  * Returns all the transaction journals for a limit, possibly limited by a limit repetition.
  *
  * @param Budget          $budget
  * @param LimitRepetition $repetition
  * @param int             $take
  *
  * @return LengthAwarePaginator
  */
 public function getJournals(Budget $budget, LimitRepetition $repetition = null, $take = 50)
 {
     $cache = new CacheProperties();
     $cache->addProperty($budget->id);
     if ($repetition) {
         $cache->addProperty($repetition->id);
     }
     $cache->addProperty($take);
     $cache->addProperty('getJournals');
     if ($cache->has()) {
         return $cache->get();
         // @codeCoverageIgnore
     }
     $offset = intval(Input::get('page')) > 0 ? intval(Input::get('page')) * $take : 0;
     $setQuery = $budget->transactionJournals()->withRelevantData()->take($take)->offset($offset)->orderBy('transaction_journals.date', 'DESC')->orderBy('transaction_journals.order', 'ASC')->orderBy('transaction_journals.id', 'DESC');
     $countQuery = $budget->transactionJournals();
     if (!is_null($repetition->id)) {
         $setQuery->after($repetition->startdate)->before($repetition->enddate);
         $countQuery->after($repetition->startdate)->before($repetition->enddate);
     }
     $set = $setQuery->get(['transaction_journals.*']);
     $count = $countQuery->count();
     $paginator = new LengthAwarePaginator($set, $count, $take, $offset);
     $cache->store($paginator);
     return $paginator;
 }