Esempio n. 1
0
 /**
  * Determine if liquidating account is needed
  * 1a step from spec
  *
  * @param Account $account
  * @param Ria $ria
  * @throws \Exception
  */
 public function liquidateAccountIfNeed(Account $account)
 {
     if ($this->getJob()->getRia()->getRiaCompanyInformation()->getUseTransactionFees()) {
         $noPreferredSecurities = $account->findNoPreferredBuySecurities();
         if ($noPreferredSecurities->count()) {
             /** @var Security $noPreferredSecurity */
             foreach ($noPreferredSecurities as $noPreferredSecurity) {
                 $qty = $noPreferredSecurity->getQty();
                 $amount = $noPreferredSecurity->getAmount();
                 if ($noPreferredSecurity->isCanBeSold($qty, $amount)) {
                     $noPreferredSecurity->sell($qty, $amount);
                     $queueItem = new QueueItem();
                     $queueItem->setStatus(QueueItem::STATUS_SELL);
                     $queueItem->setRebalancerActionId($this->getRebalancerAction()->getId());
                     $queueItem->setQuantity($noPreferredSecurity->getQty());
                     $queueItem->setAmount($noPreferredSecurity->getAmount());
                     $queueItem->setSecurity($noPreferredSecurity);
                     $queueItem->setAccount($account);
                     $this->getRebalancerQueue()->addItem($queueItem);
                 }
             }
             $account->setIsReadyToRebalance(true);
         } elseif ($account->isAllSecuritiesEqualCash()) {
             $account->setIsReadyToRebalance(true);
         }
     }
 }