/**
  * Returns all items matching the criterias for the report
  *
  * @param \ThinkopenAt\TimeFlies\Domain\Dto\ReportConfiguration $reportConfiguration
  * @param \ThinkopenAt\TimeFlies\Domain\Model\Category $category
  * @return \TYPO3\Flow\Persistence\QueryResultInterface All items as requested by the report configuration
  */
 public function findForReport(ReportConfiguration $reportConfiguration, Category $category = NULL)
 {
     $query = $this->createQuery();
     $constraints = array();
     $orderings = array('category' => \TYPO3\Flow\Persistence\QueryInterface::ORDER_ASCENDING, 'begin' => \TYPO3\Flow\Persistence\QueryInterface::ORDER_ASCENDING);
     $query->setOrderings($orderings);
     // Set required categories
     if ($reportConfiguration->getIncludeSubcategories()) {
         $categoryIdentifiers = $this->categoryRepository->findAllIdentifiersRecursive($category);
     } else {
         $categoryIdentifiers = array($category->getIdentifier());
     }
     $constraints[] = $query->in('category', $categoryIdentifiers);
     // Set required comment
     switch ($reportConfiguration->getCommentOperator()) {
         case 'dont_care':
             break;
         case 'contains':
             $constraints[] = $query->contains('comment', $reportConfiguration->getComment());
             break;
         case 'not_contains':
             $constraints[] = $query->logicalNot($query->contains('comment', $reportConfiguration->getComment()));
             break;
         default:
             throw new \Exception('Invalid compare operator');
             break;
     }
     // Set required begin/end
     $constraints[] = $query->greaterThanOrEqual('begin', $reportConfiguration->getBegin());
     $constraints[] = $query->lessThanOrEqual('begin', $reportConfiguration->getEnd());
     $query->matching($query->logicalAnd($constraints));
     return $query->execute();
 }
 /**
  * @param \ThinkopenAt\TimeFlies\Domain\Dto\ReportConfiguration $reportConfiguration
  * @param \ThinkopenAt\TimeFlies\Domain\Model\Category $category
  * @return void
  */
 public function generateReportAction(ReportConfiguration $reportConfiguration, Category $category = NULL)
 {
     if (!$this->view instanceof \ThinkopenAt\TimeFlies\View\ReportInterface) {
         throw new \Exception('No valid report format selected');
     }
     $reportConfiguration->setBeginFromParts();
     $reportConfiguration->setEndFromParts();
     $items = $this->itemRepository->findForReport($reportConfiguration, $category);
     $this->view->assign('value', $items);
     $this->view->assign('category', $category);
     $this->view->assign('reportConfiguration', $reportConfiguration);
 }
 /**
  * @param \ThinkopenAt\TimeFlies\Domain\Dto\ReportConfiguration $reportConfiguration
  * @param \ThinkopenAt\TimeFlies\Domain\Model\Category $category
  * @return void
  */
 public function generateReportAction(ReportConfiguration $reportConfiguration, Category $category = NULL)
 {
     $reportConfiguration->setBeginFromParts();
     $reportConfiguration->setEndFromParts();
     $items = $this->itemRepository->findForReport($reportConfiguration, $category);
     $this->view->assign('value', $items);
     $this->view->setConfiguration(array('mapping' => array('value' => array('begin' => array('name' => 'begin'), 'end' => array('name' => 'end'), 'duration' => array('name' => 'duration'), 'category' => array('name' => 'category', 'subProperty' => array('name' => 'name')), 'comment' => array('name' => 'comment'))), 'outputHeaders' => TRUE));
 }