$fltr = new Filter(); $fltrqry = new FilterQuery(); $tds = $fltr->prepareFilterAndQuery($tableDetails, $tmpForms, $fltrqry); $manager_order = $this->get('app.manager_order'); $orders = $manager_order->prepareOrder($tds); $tableDetails = $manager_order->getTableDetails();
Order.php
class Order { private $em; private $tableDetails; function __construct(EntityManager $em) { $this->em = $em; } /** * @return TableDetails */ public function getTableDetails() { return $this->tableDetails; } public function prepareOrder(TableDetails $td_f) { if($td_f->getQuery()){ return $this->prepareOrderRepositoryForFilterSelected($td_f); } if(!$td_f->getQuery()) { return $this->prepareOrderRepositoryUnfiltered($td_f); } } private function prepareOrderRepositoryUnfiltered(TableDetails $td) { $this->tableDetails = $td; $repo = $this->em->getRepository('AppBundle:Zamowienie') ->findAllOrderedByY( $td->getColumnsSortOrder(), $td->getColumnSort()); if (!$repo) {throw new \Exception('Nie można znaleźć zamówień');} return $repo; } private function prepareOrderRepositoryForFilterSelected(TableDetails $td) { $this->tableDetails = $td; $repo = $this->em->getRepository('AppBundle:Zamowienie') ->findByXOrderedByY( $td->getQuery(), $td->getColumnsSortOrder(), $td->getColumnSort()); if (!$repo) {throw new \Exception('Nie można znaleźć zamówień');} return $repo; } }
Filter
class Filter { public function prepareFilterAndQuery(TableDetails $td, $forms, IFilterQuery $fq) { $td = $this->prepareDetails($td,$forms); $tds = $this->makeFilterAndQuery($td,$forms,$fq); return $tds; } { $tableDetails = $this->setFalse($tableDetails, $tmpForms); $tableDetails = $this->setFilter($tableDetails, $tmpForms); return $tableDetails; } private function makeFilterAndQuery(TableDetails $td, $forms, IFilterQuery $fq) { if($td->getFilter() == 'all'){ return $td; } if($td->getFilter() == 'idstatus'){ $td->setFilterField('idstatus'); $tds = $fq->prepareStatusFilterQuery($td, $forms); return $tds; } if($td->getFilter() == 'data') { $td->setFilterField('data'); $tds = $fq->prepareDataFilterQuery($td, $forms); return $tds; } if($td->getFilter() == 'idklient'){ $tds = $fq->prepareKlientFilterQuery($td, $forms); return $tds; } } private function setFalse(TableDetails $tb, $fms) { if ($this->isAnyFormValid($fms)){ $tb->setFilterField(false); $tb->setQuery(false); } if(!($tb->getFilterField())) { $tb->setQuery(false); } return $tb; } private function isAnyFormValid($forms) { if(($forms['StatusForm']->isValid())or ($forms['DataZamForm']->isValid())or ($forms['NrKlientaForm']->isValid())) { return true; } return false; } private function setFilter(TableDetails $td,$forms) { if(!($td->getFilter())) { $td = $this->prepareFilterValue($forms,$td); } return $td; } private function prepareFilterValue($fms,TableDetails $td){ if($td->getFilterField()){ $td->setFilter($td->getFilterField()); return $td; } if($fms['StatusForm']->isValid()){ $td->setFilter('idstatus'); return $td; } if($fms['DataZamForm']->isValid()) { $td->setFilter('data'); return $td; } if($fms['NrKlientaForm']->isValid()){ $td->setFilter('idklient'); return $td; } $td->setFilter('all'); return $td; } }
FilterQuery
class FilterQuery implements IFilterQuery { public function prepareStatusFilterQuery(TableDetails $td, $forms) { if((!$td->getQuery()) and (!$td->getIdentifier())) { $td->setIdentifier($forms['StatusForm']->get('status')->getData()->getIdstatus()); } if((!$td->getQuery()) and ($td->getIdentifier())) { $td->setQuery('idstatus = ' . $td->getIdentifier()); } return $td; } public function prepareDataFilterQuery(TableDetails $td, $forms) { if($td->getQuery()) { } if (!$td->getQuery()) { $od = $forms['DataZamForm']->get('od')->getData()->format('Y-m-d H:i:s'); $do = $forms['DataZamForm']->get('do')->getData()->format('Y-m-d H:i:s'); $td->setQuery("datazlozenia BETWEEN '" . $od . "' AND '" . $do . "'"); } return $td; } public function prepareKlientFilterQuery(TableDetails $td, $forms) { if ((!($td->getQuery())) and (!$td->getIdentifier())) { $td->setIdentifier($forms['NrKlientaForm']->get('idklient')->getData()->getIdklient()); $td->setQuery('idklient = ' . $td->getIdentifier()); return $td; } if ((!($td->getQuery())) and $td->getIdentifier()) { $td->setQuery('idklient = ' . $td->getIdentifier()); return $td; } return $td; } }
TableDetails
class TableDetails { private $columnsSortOrder; private $columnSort; private $filterField; private $query; private $filter; private $identifier; //tylko gettery i settery
przed refaktoryzacją wszystko było w kontrolerze i wyglądało tak