public function getTradeDataCollectionForJob(Job $job)
 {
     $sql = "SELECT\n                  rq.id as id,\n                  s.id as security_id,\n                  sca.id as account_id,\n                  sca.account_number as account_number,\n                  st.name as security_type,\n                  rq.status as action,\n                  p.quantity as position_quantity,\n                  s.symbol as symbol,\n                  SUM(rq.quantity) as quantity,\n                  SUM(rq.amount) as amount,\n                  IF(p.quantity = SUM(rq.quantity) OR (rq.status = '" . QueueItem::STATUS_SELL . "' AND rq.lot_id IS NULL), 'AS', 'S') as quantity_type\n                FROM " . $this->table . " rq\n                  LEFT JOIN " . self::TABLE_SECURITY . " s on s.id = rq.security_id\n                  LEFT JOIN " . self::TABLE_SYSTEM_ACCOUNT . " sca ON sca.id = rq.system_client_account_id\n                  LEFT JOIN " . self::TABLE_SECURITY_TYPE . " st ON st.id = s.security_type_id\n                  LEFT JOIN " . self::TABLE_LOT . " l ON l.id = rq.lot_id\n                  LEFT JOIN " . self::TABLE_POSITION . " p ON p.id = l.position_id\n                  LEFT JOIN " . self::TABLE_REBALANCER_ACTION . " ra On ra.id = rq.rebalancer_action_id\n                WHERE ra.job_id = :jobId\n                GROUP BY sca.id, s.id\n                ORDER BY rq.id";
     $paramaters = array('jobId' => $job->getId());
     $results = $this->db->query($sql, $paramaters);
     $tradeDataCollection = new ArrayCollection();
     foreach ($results as $result) {
         $tradeData = new TradeData();
         $tradeData->loadFromArray($result);
         if ($tradeData->getAction() === TradeData::ACTION_SELL) {
             $vsps = $this->findVSPForTradeData($tradeData);
             $tradeData->setVsps($vsps);
         }
         $tradeData->setJobId($job->getId());
         $tradeDataCollection->add($tradeData);
     }
     return $tradeDataCollection;
 }
 public function testSlice()
 {
     $this->assertEquals(array(), $this->arrayCollection->slice(0, 0));
     $this->assertEquals($this->data, $this->arrayCollection->slice(0));
     $this->assertEquals(array($this->data[0]), $this->arrayCollection->slice(0, 1));
     $this->assertEquals(array($this->data[0]), $this->arrayCollection->slice(0, -1));
     $this->assertEquals($this->data, $this->arrayCollection->slice(0, 2));
     $this->assertEquals(array(), $this->arrayCollection->slice(1, 0));
     $this->assertEquals(array(1 => $this->data[1]), $this->arrayCollection->slice(1));
     $this->assertEquals(array(1 => $this->data[1]), $this->arrayCollection->slice(1, 1));
     $this->assertEquals(array(1 => $this->data[1]), $this->arrayCollection->slice(1, 2));
     $this->assertEquals(array(), $this->arrayCollection->slice(1, -1));
     $this->assertEquals(array(1 => $this->data[1]), $this->arrayCollection->slice(-1));
     $this->assertEquals(array(1 => $this->data[1]), $this->arrayCollection->slice(-1, 1));
     $this->assertEquals(array(), $this->arrayCollection->slice(2));
 }
 /**
  * @param array $data
  * @return ArrayCollection
  */
 private function getMockTradeDataCollection(array $data = array())
 {
     $tradeDataCollection = new ArrayCollection();
     foreach ($data as $item) {
         $tradeData = $this->getMockTradeData($item);
         $tradeDataCollection->add($tradeData);
     }
     return $tradeDataCollection;
 }
 public function testGetTradeDataCollectionForJob()
 {
     $riaRepo = new RiaRepository();
     $ria = $riaRepo->findOneBy(array('email' => '*****@*****.**'));
     $jobRepo = new JobRepository();
     $job = $jobRepo->findOneBy(array('user_id' => $ria->getId()));
     $tradeDataCollection = $this->repository->getTradeDataCollectionForJob($job);
     $this->assertCount(3, $tradeDataCollection);
     $securityRepo = new SecurityRepository();
     $accountRepo = new AccountRepository();
     $tradeDataExpectedArray = array(array('job_id' => $job->getId(), 'security_id' => $securityRepo->findOneBySymbol('RWX')->getId(), 'account_id' => $accountRepo->findOneByAccountNumber('916985328')->getId(), 'account_number' => '916985328', 'account_type' => TradeData::ACCOUNT_TYPE_CASH_ACCOUNT, 'security_type' => TradeData::SECURITY_TYPE_EQUITY, 'action' => TradeData::ACTION_SELL, 'quantity_type' => TradeData::QUANTITY_TYPE_ALL_SHARES, 'quantity' => '56', 'symbol' => 'RWX'), array('job_id' => $job->getId(), 'security_id' => $securityRepo->findOneBySymbol('VCIT')->getId(), 'account_id' => $accountRepo->findOneByAccountNumber('480888811')->getId(), 'account_number' => '480888811', 'account_type' => TradeData::ACCOUNT_TYPE_CASH_ACCOUNT, 'security_type' => TradeData::SECURITY_TYPE_EQUITY, 'action' => TradeData::ACTION_BUY, 'quantity_type' => TradeData::QUANTITY_TYPE_SHARES, 'quantity' => '12', 'symbol' => 'VCIT'), array('job_id' => $job->getId(), 'security_id' => $securityRepo->findOneBySymbol('BND')->getId(), 'account_id' => $accountRepo->findOneByAccountNumber('122223334')->getId(), 'account_number' => '122223334', 'account_type' => TradeData::ACCOUNT_TYPE_CASH_ACCOUNT, 'security_type' => TradeData::SECURITY_TYPE_EQUITY, 'action' => TradeData::ACTION_BUY, 'quantity_type' => TradeData::QUANTITY_TYPE_SHARES, 'quantity' => '1', 'symbol' => 'BND'), array('job_id' => '59', 'security_id' => $securityRepo->findOneBySymbol('VGIT')->getId(), 'account_id' => $accountRepo->findOneByAccountNumber('916985328')->getId(), 'account_number' => '916985328', 'account_type' => TradeData::ACCOUNT_TYPE_CASH_ACCOUNT, 'security_type' => TradeData::SECURITY_TYPE_EQUITY, 'action' => TradeData::ACTION_SELL, 'quantity_type' => TradeData::QUANTITY_TYPE_ALL_SHARES, 'quantity' => '10', 'symbol' => 'VGIT'));
     $tradeDataCollectionExpected = new ArrayCollection();
     foreach ($tradeDataExpectedArray as $key => $tradeDataExpected) {
         $tradeData = new TradeData();
         $tradeData->loadFromArray($tradeDataExpected);
         $tradeDataCollectionExpected->add($tradeData, $key);
     }
     foreach ($tradeDataCollection as $tradeData) {
         $tradeData->setId(null);
         $tradeDataExpected = $tradeDataCollectionExpected->current();
         $this->assertEquals($tradeData, $tradeDataExpected);
         $tradeDataCollectionExpected->next();
     }
 }