| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2014-07-06 15:18:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Firefly\Storage\TransactionJournal; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  | use Carbon\Carbon; | 
					
						
							|  |  |  | use Firefly\Exception\FireflyException; | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Class EloquentTransactionJournalRepository | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @package Firefly\Storage\TransactionJournal | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  | class EloquentTransactionJournalRepository implements TransactionJournalRepositoryInterface | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param $journalId | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:43 +02:00
										 |  |  |     public function find($journalId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return \Auth::user()->transactionjournals()->with( | 
					
						
							|  |  |  |             ['transactions', 'transactioncurrency', 'transactiontype', 'components', 'transactions.account', | 
					
						
							|  |  |  |              'transactions.account.accounttype'] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |             ->where('id', $journalId)->first(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     /* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              * | 
					
						
							|  |  |  |              */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * We're building this thinking the money goes from A to B. | 
					
						
							|  |  |  |      * If the amount is negative however, the money still goes | 
					
						
							|  |  |  |      * from A to B but the balances are reversed. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Aka: | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Amount = 200 | 
					
						
							|  |  |  |      * A loses 200 (-200).  * -1 | 
					
						
							|  |  |  |      * B gains 200 (200).    * 1 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Final balance: -200 for A, 200 for B. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * When the amount is negative: | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Amount = -200 | 
					
						
							|  |  |  |      * A gains 200 (200). * -1 | 
					
						
							|  |  |  |      * B loses 200 (-200). * 1 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param \Account       $from | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |      * @param \Account       $toAccount | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:43 +02:00
										 |  |  |      * @param                $description | 
					
						
							|  |  |  |      * @param                $amount | 
					
						
							|  |  |  |      * @param \Carbon\Carbon $date | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return \TransactionJournal | 
					
						
							|  |  |  |      * @throws \Firefly\Exception\FireflyException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     public function createSimpleJournal(\Account $from, \Account $toAccount, $description, $amount, Carbon $date) | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2014-07-06 15:18:11 +02:00
										 |  |  |         \Log::debug('Creating tranaction "' . $description . '".'); | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         $amountFrom = $amount * -1; | 
					
						
							|  |  |  |         $amountTo = $amount; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-15 22:16:29 +02:00
										 |  |  |         if (round(floatval($amount), 2) == 0.00) { | 
					
						
							| 
									
										
										
										
											2014-07-15 20:58:35 +02:00
										 |  |  |             \Log::error('Transaction will never save: amount = 0'); | 
					
						
							| 
									
										
										
										
											2014-07-15 22:16:29 +02:00
										 |  |  |             \Session::flash('error', 'The amount should not be empty or zero.'); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('Could not figure out transaction type.'); | 
					
						
							| 
									
										
										
										
											2014-07-15 20:58:35 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         // same account:
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |         if ($from->id == $toAccount->id) { | 
					
						
							| 
									
										
										
										
											2014-07-15 20:58:35 +02:00
										 |  |  |             \Log::error('Accounts cannot be equal'); | 
					
						
							| 
									
										
										
										
											2014-07-15 22:16:29 +02:00
										 |  |  |             \Session::flash('error', 'Select two different accounts.'); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('Select two different accounts.'); | 
					
						
							| 
									
										
										
										
											2014-07-15 20:58:35 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         // account types for both:
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |         $toAT = $toAccount->accountType->description; | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         $fromAT = $from->accountType->description; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |         $journalType = null; | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         switch (true) { | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             case ($from->transactions()->count() == 0 && $toAccount->transactions()->count() == 0): | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |                 $journalType = \TransactionType::where('type', 'Opening balance')->first(); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:43 +02:00
										 |  |  |             case ($fromAT == 'Default account' && $toAT == 'Default account'): // both are yours:
 | 
					
						
							|  |  |  |                 // determin transaction type. If both accounts are new, it's an initial balance transfer.
 | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |                 $journalType = \TransactionType::where('type', 'Transfer')->first(); | 
					
						
							|  |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |             case ($amount < 0): | 
					
						
							|  |  |  |                 $journalType = \TransactionType::where('type', 'Deposit')->first(); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |             // is deposit into one of your own accounts:
 | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |             case ($toAT == 'Default account'): | 
					
						
							|  |  |  |                 $journalType = \TransactionType::where('type', 'Deposit')->first(); | 
					
						
							|  |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |             // is withdrawal from one of your own accounts:
 | 
					
						
							|  |  |  |             case ($fromAT == 'Default account'): | 
					
						
							|  |  |  |                 $journalType = \TransactionType::where('type', 'Withdrawal')->first(); | 
					
						
							|  |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2014-07-05 19:44:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // some debug information:
 | 
					
						
							| 
									
										
										
										
											2014-07-06 15:18:11 +02:00
										 |  |  |         \Log::debug( | 
					
						
							|  |  |  |             $journalType->type . ': AccountFrom "' . $from->name . '" will gain/lose ' . $amountFrom | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             . ' and AccountTo "' . $toAccount->name . '" will gain/lose ' . $amountTo | 
					
						
							| 
									
										
										
										
											2014-07-06 15:18:11 +02:00
										 |  |  |         ); | 
					
						
							| 
									
										
										
										
											2014-07-05 19:44:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |         if (is_null($journalType)) { | 
					
						
							|  |  |  |             \Log::error('Could not figure out transacion type!'); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('Could not figure out transaction type.'); | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         // always the same currency:
 | 
					
						
							|  |  |  |         $currency = \TransactionCurrency::where('code', 'EUR')->first(); | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |         if (is_null($currency)) { | 
					
						
							|  |  |  |             \Log::error('No currency for journal!'); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('No currency for journal!'); | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // new journal:
 | 
					
						
							|  |  |  |         $journal = new \TransactionJournal(); | 
					
						
							|  |  |  |         $journal->transactionType()->associate($journalType); | 
					
						
							|  |  |  |         $journal->transactionCurrency()->associate($currency); | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:43 +02:00
										 |  |  |         $journal->user()->associate(\Auth::user()); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         $journal->completed = false; | 
					
						
							|  |  |  |         $journal->description = $description; | 
					
						
							|  |  |  |         $journal->date = $date; | 
					
						
							| 
									
										
										
										
											2014-07-15 17:09:59 +02:00
										 |  |  |         if (!$journal->save()) { | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |             \Log::error('Cannot create valid journal.'); | 
					
						
							| 
									
										
										
										
											2014-07-15 17:09:59 +02:00
										 |  |  |             \Log::error('Errors: ' . print_r($journal->errors()->all(), true)); | 
					
						
							| 
									
										
										
										
											2014-07-15 22:16:29 +02:00
										 |  |  |             \Session::flash('error', 'Could not create journal: ' . $journal->errors()->first()); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('Cannot create valid journal.'); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         $journal->save(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // create transactions:
 | 
					
						
							|  |  |  |         $fromTransaction = new \Transaction; | 
					
						
							|  |  |  |         $fromTransaction->account()->associate($from); | 
					
						
							|  |  |  |         $fromTransaction->transactionJournal()->associate($journal); | 
					
						
							|  |  |  |         $fromTransaction->description = null; | 
					
						
							|  |  |  |         $fromTransaction->amount = $amountFrom; | 
					
						
							| 
									
										
										
										
											2014-07-15 17:09:59 +02:00
										 |  |  |         if (!$fromTransaction->save()) { | 
					
						
							| 
									
										
										
										
											2014-07-05 16:19:15 +02:00
										 |  |  |             \Log::error('Cannot create valid transaction (from) for journal #' . $journal->id); | 
					
						
							| 
									
										
										
										
											2014-07-15 17:09:59 +02:00
										 |  |  |             \Log::error('Errors: ' . print_r($fromTransaction->errors()->all(), true)); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('Cannot create valid transaction (from).'); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         $fromTransaction->save(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $toTransaction = new \Transaction; | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |         $toTransaction->account()->associate($toAccount); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         $toTransaction->transactionJournal()->associate($journal); | 
					
						
							|  |  |  |         $toTransaction->description = null; | 
					
						
							|  |  |  |         $toTransaction->amount = $amountTo; | 
					
						
							| 
									
										
										
										
											2014-07-15 17:09:59 +02:00
										 |  |  |         if (!$toTransaction->save()) { | 
					
						
							|  |  |  |             \Log::error('Cannot create valid transaction (to) for journal #' . $journal->id); | 
					
						
							|  |  |  |             \Log::error('Errors: ' . print_r($toTransaction->errors()->all(), true)); | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |             throw new FireflyException('Cannot create valid transaction (to).'); | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         $toTransaction->save(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $journal->completed = true; | 
					
						
							|  |  |  |         $journal->save(); | 
					
						
							| 
									
										
										
										
											2014-07-05 19:44:26 +02:00
										 |  |  |         return $journal; | 
					
						
							| 
									
										
										
										
											2014-07-03 21:31:32 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |     public function get() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param \Account $account | 
					
						
							|  |  |  |      * @param int      $count | 
					
						
							|  |  |  |      * @param Carbon   $start | 
					
						
							|  |  |  |      * @param Carbon   $end | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getByAccountInDateRange(\Account $account, $count = 25, Carbon $start, Carbon $end) | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2014-07-17 20:52:54 +02:00
										 |  |  |         $accountID = $account->id; | 
					
						
							|  |  |  |         $query = \Auth::user()->transactionjournals()->with( | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 'transactions', | 
					
						
							|  |  |  |                 'transactioncurrency', | 
					
						
							|  |  |  |                 'transactiontype' | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |             ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') | 
					
						
							|  |  |  |             ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') | 
					
						
							|  |  |  |             ->where('accounts.id', $accountID) | 
					
						
							| 
									
										
										
										
											2014-07-25 07:17:56 +02:00
										 |  |  |             ->where('date', '>=', $start->format('Y-m-d')) | 
					
						
							|  |  |  |             ->where('date', '<=', $end->format('Y-m-d')) | 
					
						
							| 
									
										
										
										
											2014-07-17 20:52:54 +02:00
										 |  |  |             ->orderBy('transaction_journals.date', 'DESC') | 
					
						
							|  |  |  |             ->orderBy('transaction_journals.id', 'DESC') | 
					
						
							|  |  |  |             ->take($count) | 
					
						
							|  |  |  |             ->get(['transaction_journals.*']); | 
					
						
							|  |  |  |         return $query; | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param int $count | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-07-25 07:17:56 +02:00
										 |  |  |     public function paginate($count = 25) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $query = \Auth::user()->transactionjournals()->with( | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 'transactions' => function ($q) { | 
					
						
							|  |  |  |                         return $q->orderBy('amount', 'ASC'); | 
					
						
							|  |  |  |                     }, | 
					
						
							|  |  |  |                 'transactions.account', | 
					
						
							|  |  |  |                 'transactions.account.accounttype', | 
					
						
							|  |  |  |                 'transactioncurrency', | 
					
						
							|  |  |  |                 'transactiontype' | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |             ->orderBy('transaction_journals.date', 'DESC') | 
					
						
							|  |  |  |             ->orderBy('transaction_journals.id', 'DESC') | 
					
						
							|  |  |  |             ->take($count) | 
					
						
							|  |  |  |             ->paginate($count); | 
					
						
							|  |  |  |         return $query; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param Carbon $start | 
					
						
							|  |  |  |      * @param Carbon $end | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getByDateRange(Carbon $start, Carbon $end) | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         // lets make this simple.
 | 
					
						
							|  |  |  |         $types = []; | 
					
						
							| 
									
										
										
										
											2014-07-15 06:58:08 +02:00
										 |  |  |         foreach (\TransactionType::whereIn('type', ['Withdrawal'])->get() as $t) { | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |             $types[] = $t->id; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         unset($t); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // get all journals, partly filtered:
 | 
					
						
							|  |  |  |         $journals = \TransactionJournal:: | 
					
						
							|  |  |  |             with( | 
					
						
							| 
									
										
										
										
											2014-07-17 20:52:54 +02:00
										 |  |  |                 ['components', 'transactions' => function ($q) { | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |                         $q->where('amount', '>', 0); | 
					
						
							|  |  |  |                     }] | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             ->after($start)->before($end) | 
					
						
							| 
									
										
										
										
											2014-07-15 22:16:29 +02:00
										 |  |  |             ->where('completed', 1) | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |             ->whereIn('transaction_type_id', $types) | 
					
						
							|  |  |  |             ->get(['transaction_journals.*']); | 
					
						
							|  |  |  |         unset($types); | 
					
						
							| 
									
										
										
										
											2014-07-17 20:52:54 +02:00
										 |  |  |         return $journals; | 
					
						
							| 
									
										
										
										
											2014-07-09 12:56:06 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-25 13:02:01 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param \Account $account | 
					
						
							|  |  |  |      * @param Carbon   $date | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getByAccountAndDate(\Account $account, Carbon $date) | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         $accountID = $account->id; | 
					
						
							| 
									
										
										
										
											2014-07-17 20:52:54 +02:00
										 |  |  |         $query = \Auth::user()->transactionjournals()->with( | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 'transactions', | 
					
						
							|  |  |  |                 'transactions.account', | 
					
						
							|  |  |  |                 'transactioncurrency', | 
					
						
							|  |  |  |                 'transactiontype' | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |             ->distinct() | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |             ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') | 
					
						
							|  |  |  |             ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') | 
					
						
							| 
									
										
										
										
											2014-07-17 20:52:54 +02:00
										 |  |  |             ->where('transactions.account_id', $accountID) | 
					
						
							|  |  |  |             ->where('transaction_journals.date', $date->format('Y-m-d')) | 
					
						
							| 
									
										
										
										
											2014-07-06 21:07:52 +02:00
										 |  |  |             ->orderBy('transaction_journals.date', 'DESC') | 
					
						
							|  |  |  |             ->orderBy('transaction_journals.id', 'DESC') | 
					
						
							|  |  |  |             ->get(['transaction_journals.*']); | 
					
						
							|  |  |  |         return $query; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |