상속: extends EntityModel, use trait Illuminate\Database\Eloquent\SoftDeletes
 /**
  * @param $bankId
  * @param $username
  * @param $password
  * @param bool $includeTransactions
  * @return array|bool
  */
 public function loadBankAccounts($bankId, $username, $password, $includeTransactions = true)
 {
     if (!$bankId || !$username || !$password) {
         return false;
     }
     $expenses = $this->getExpenses();
     $vendorMap = $this->createVendorMap();
     $bankAccounts = BankSubaccount::scope()->whereHas('bank_account', function ($query) use($bankId) {
         $query->where('bank_id', '=', $bankId);
     })->get();
     $bank = Utils::getFromCache($bankId, 'banks');
     $data = [];
     // load OFX trnansactions
     try {
         $finance = new Finance();
         $finance->banks[$bankId] = $bank->getOFXBank($finance);
         $finance->banks[$bankId]->logins[] = new Login($finance->banks[$bankId], $username, $password);
         foreach ($finance->banks as $bank) {
             foreach ($bank->logins as $login) {
                 $login->setup();
                 foreach ($login->accounts as $account) {
                     $account->setup($includeTransactions);
                     if ($account = $this->parseBankAccount($account, $bankAccounts, $expenses, $includeTransactions, $vendorMap)) {
                         $data[] = $account;
                     }
                 }
             }
         }
         return $data;
     } catch (\Exception $e) {
         return false;
     }
 }
 public function loadBankAccounts($bankId, $username, $password, $includeTransactions = true)
 {
     if (!$bankId || !$username || !$password) {
         return false;
     }
     $expenses = Expense::scope()->whereBankId($bankId)->where('transaction_id', '!=', '')->withTrashed()->get(['transaction_id'])->toArray();
     $expenses = array_flip(array_map(function ($val) {
         return $val['transaction_id'];
     }, $expenses));
     $bankAccounts = BankSubaccount::scope()->whereHas('bank_account', function ($query) use($bankId) {
         $query->where('bank_id', '=', $bankId);
     })->get();
     $bank = Utils::getFromCache($bankId, 'banks');
     $data = [];
     // load OFX trnansactions
     try {
         $finance = new Finance();
         $finance->banks[$bankId] = $bank->getOFXBank($finance);
         $finance->banks[$bankId]->logins[] = new Login($finance->banks[$bankId], $username, $password);
         foreach ($finance->banks as $bank) {
             foreach ($bank->logins as $login) {
                 $login->setup();
                 foreach ($login->accounts as $account) {
                     $account->setup($includeTransactions);
                     if ($account = $this->parseBankAccount($account, $bankAccounts, $expenses, $includeTransactions)) {
                         $data[] = $account;
                     }
                 }
             }
         }
         return $data;
     } catch (\Exception $e) {
         return false;
     }
 }
 public function save($input)
 {
     $bankAccount = BankAccount::createNew();
     $bankAccount->bank_id = $input['bank_id'];
     $bankAccount->username = Crypt::encrypt(trim($input['bank_username']));
     $account = \Auth::user()->account;
     $account->bank_accounts()->save($bankAccount);
     foreach ($input['bank_accounts'] as $data) {
         if (!isset($data['include']) || !filter_var($data['include'], FILTER_VALIDATE_BOOLEAN)) {
             continue;
         }
         $subaccount = BankSubaccount::createNew();
         $subaccount->account_name = trim($data['account_name']);
         $subaccount->account_number = trim($data['hashed_account_number']);
         $bankAccount->bank_subaccounts()->save($subaccount);
     }
     return $bankAccount;
 }