<?php
/**
* @author OfficeBrain 4160 <info@officebrain.com>
*
* Description :  Transaction Queue DocumentRepository
*
**/
namespace OfficeBrain\Bundle\QueueBundle\Document;

use Doctrine\ODM\MongoDB\DocumentRepository;
use OfficeBrain\Bundle\QueueBundle\Document\TransactionQueue;

/**
 * TransactionQueueRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class TransactionQueueRepository extends DocumentRepository
{
    public function getQueryBudler()
    {
        return $this->getDocumentManager()->getRepository('OfficeBrainQueueBundle:TransactionQueue')->createQueryBuilder('t');
    }
    
    public function save($queueObj)
    {
        $dm = $this->getDocumentManager();
        $dm->persist($queueObj);
        $dm->flush();
        return $queueObj;
    }
    
    public function deleteQueue($queueObj)
    {
        $queryBuilder = $this->getQueryBudler();
        $queryBuilder->remove()->field('id')->equals($queueObj->getId())->getQuery()->execute();
        return true;
    }
    
    public function saveHistory($queueObj)
    {
        $this->save($queueObj);
    }
    
    public function findNewJobs($instance_id, $count)
    {
        //return $this->getDocumentManager()->getRepository('OfficeBrainQueueBundle:TransactionQueue')->find('558568688af8818b114d9fb6');    //555f2bc58af88110108b4567 // 558568688af8818b114d9fb6
        
        $queryBuilder = $this->getQueryBudler();
        $cursorResult = $queryBuilder->field('instanceId')->equals($instance_id)
                                    ->field('status')->equals('New')
                                    ->field('from')->equals('2')
                                    ->sort('id', 'ASC')
                                    ->limit($count)
                                    ->getQuery()
                                    ->execute();
        return $cursorResult;
    }
    
    public function findInProgressJobs($instance_id)
    {
        $queryBuilder = $this->getQueryBudler();
        $cursorResult = $queryBuilder->field('instanceId')->equals($instance_id)
                                    ->field('status')->equals('In Progress')
                                    ->field('from')->equals('2')
                                    ->sort('id', 'ASC')
                                    ->getQuery()
                                    ->execute();
        return $cursorResult;
    }
    
    public function findErrorJobs($instance_id, $count)
    {
        $queryBuilder = $this->getQueryBudler();
        $cursorResult = $queryBuilder->field('instanceId')->equals($instance_id)
                                    ->field('status')->equals('Error')
                                    ->field('from')->equals('2')
                                    ->sort('id', 'ASC')
                                    ->limit($count)
                                    ->getQuery()
                                    ->execute();
        return $cursorResult;
    }
    
    public function findRunJobs($instance_id, $count)
    {
        $queryBuilder = $this->getQueryBudler();
        $cursorResult = $queryBuilder->field('instanceId')->equals($instance_id)
                                    ->field('status')->in(array('New', 'Error'))
                                    ->field('from')->equals('2')
                                    ->sort('id', 'ASC')
                                    ->getQuery()
                                    ->execute();
        return $cursorResult;
    }
}
