private function parseBankAccount($account, $bankAccounts, $expenses, $includeTransactions, $vendorMap)
 {
     $obj = new stdClass();
     $obj->account_name = '';
     // look up bank account name
     foreach ($bankAccounts as $bankAccount) {
         if (Hash::check($account->id, $bankAccount->account_number)) {
             $obj->account_name = $bankAccount->account_name;
         }
     }
     // if we can't find a match skip the account
     if (count($bankAccounts) && !$obj->account_name) {
         return false;
     }
     $obj->masked_account_number = Utils::maskAccountNumber($account->id);
     $obj->hashed_account_number = bcrypt($account->id);
     $obj->type = $account->type;
     $obj->balance = Utils::formatMoney($account->ledgerBalance, CURRENCY_DOLLAR);
     if ($includeTransactions) {
         $ofxParser = new \OfxParser\Parser();
         $ofx = $ofxParser->loadFromString($account->response);
         $obj->start_date = $ofx->BankAccount->Statement->startDate;
         $obj->end_date = $ofx->BankAccount->Statement->endDate;
         $obj->transactions = [];
         foreach ($ofx->BankAccount->Statement->transactions as $transaction) {
             // ensure transactions aren't imported as expenses twice
             if (isset($expenses[$transaction->uniqueId])) {
                 continue;
             }
             if ($transaction->amount >= 0) {
                 continue;
             }
             // if vendor has already been imported use current name
             $vendorName = trim(substr($transaction->name, 0, 20));
             $key = strtolower($vendorName);
             $vendor = isset($vendorMap[$key]) ? $vendorMap[$key] : null;
             $transaction->vendor = $vendor ? $vendor->name : $this->prepareValue($vendorName);
             $transaction->info = $this->prepareValue(substr($transaction->name, 20));
             $transaction->memo = $this->prepareValue($transaction->memo);
             $transaction->date = \Auth::user()->account->formatDate($transaction->date);
             $transaction->amount *= -1;
             $obj->transactions[] = $transaction;
         }
     }
     return $obj;
 }
 /**
  * @param $account
  * @param $data
  * @param $expenses
  * @param $vendorMap
  * @return mixed
  */
 private function parseTransactions($account, $data, $expenses, $vendorMap)
 {
     $ofxParser = new \OfxParser\Parser();
     $ofx = $ofxParser->loadFromString($data);
     $account->start_date = $ofx->BankAccount->Statement->startDate;
     $account->end_date = $ofx->BankAccount->Statement->endDate;
     $account->transactions = [];
     foreach ($ofx->BankAccount->Statement->transactions as $transaction) {
         // ensure transactions aren't imported as expenses twice
         if (isset($expenses[$transaction->uniqueId])) {
             continue;
         }
         if ($transaction->amount >= 0) {
             continue;
         }
         // if vendor has already been imported use current name
         $vendorName = trim(substr($transaction->name, 0, 20));
         $key = strtolower($vendorName);
         $vendor = isset($vendorMap[$key]) ? $vendorMap[$key] : null;
         $transaction->vendor = $vendor ? $vendor->name : $this->prepareValue($vendorName);
         $transaction->info = $this->prepareValue(substr($transaction->name, 20));
         $transaction->memo = $this->prepareValue($transaction->memo);
         $transaction->date = \Auth::user()->account->formatDate($transaction->date);
         $transaction->amount *= -1;
         $account->transactions[] = $transaction;
     }
     return $account;
 }