kontroler
  1. $fltr = new Filter();
  2. $fltrqry = new FilterQuery();
  3. $tds = $fltr->prepareFilterAndQuery($tableDetails, $tmpForms, $fltrqry);
  4.  
  5. $manager_order = $this->get('app.manager_order');
  6. $orders = $manager_order->prepareOrder($tds);
  7. $tableDetails = $manager_order->getTableDetails();


Order.php
  1. class Order
  2. {
  3. private $em;
  4. private $tableDetails;
  5.  
  6. function __construct(EntityManager $em)
  7. {
  8. $this->em = $em;
  9. }
  10.  
  11. /**
  12.   * @return TableDetails
  13.   */
  14. public function getTableDetails()
  15. {
  16. return $this->tableDetails;
  17. }
  18.  
  19. public function prepareOrder(TableDetails $td_f)
  20. {
  21. if($td_f->getQuery()){
  22. return $this->prepareOrderRepositoryForFilterSelected($td_f);
  23. }
  24.  
  25. if(!$td_f->getQuery()) {
  26. return $this->prepareOrderRepositoryUnfiltered($td_f);
  27. }
  28. }
  29.  
  30. private function prepareOrderRepositoryUnfiltered(TableDetails $td)
  31. {
  32. $this->tableDetails = $td;
  33. $repo = $this->em->getRepository('AppBundle:Zamowienie')
  34. ->findAllOrderedByY(
  35. $td->getColumnsSortOrder(),
  36. $td->getColumnSort());
  37. if (!$repo) {throw new \Exception('Nie można znaleźć zamówień');}
  38.  
  39. return $repo;
  40. }
  41.  
  42. private function prepareOrderRepositoryForFilterSelected(TableDetails $td)
  43. {
  44. $this->tableDetails = $td;
  45. $repo = $this->em->getRepository('AppBundle:Zamowienie')
  46. ->findByXOrderedByY(
  47. $td->getQuery(),
  48. $td->getColumnsSortOrder(),
  49. $td->getColumnSort());
  50. if (!$repo) {throw new \Exception('Nie można znaleźć zamówień');}
  51.  
  52. return $repo;
  53. }
  54.  
  55. }


Filter
  1. class Filter
  2. {
  3. public function prepareFilterAndQuery(TableDetails $td, $forms, IFilterQuery $fq)
  4. {
  5. $td = $this->prepareDetails($td,$forms);
  6. $tds = $this->makeFilterAndQuery($td,$forms,$fq);
  7.  
  8. return $tds;
  9.  
  10. }
  11.  
  12.  
  13. private function prepareDetails(TableDetails $tableDetails, array $tmpForms)
  14. {
  15. $tableDetails = $this->setFalse($tableDetails, $tmpForms);
  16. $tableDetails = $this->setFilter($tableDetails, $tmpForms);
  17.  
  18. return $tableDetails;
  19. }
  20.  
  21. private function makeFilterAndQuery(TableDetails $td, $forms, IFilterQuery $fq)
  22. {
  23. if($td->getFilter() == 'all'){
  24. return $td;
  25. }
  26.  
  27. if($td->getFilter() == 'idstatus'){
  28. $td->setFilterField('idstatus');
  29. $tds = $fq->prepareStatusFilterQuery($td, $forms);
  30. return $tds;
  31. }
  32.  
  33. if($td->getFilter() == 'data') {
  34. $td->setFilterField('data');
  35. $tds = $fq->prepareDataFilterQuery($td, $forms);
  36. return $tds;
  37. }
  38.  
  39. if($td->getFilter() == 'idklient'){
  40. $tds = $fq->prepareKlientFilterQuery($td, $forms);
  41. return $tds;
  42. }
  43. }
  44.  
  45. private function setFalse(TableDetails $tb, $fms)
  46. {
  47. if ($this->isAnyFormValid($fms)){
  48. $tb->setFilterField(false);
  49. $tb->setQuery(false);
  50. }
  51.  
  52. if(!($tb->getFilterField()))
  53. {
  54. $tb->setQuery(false);
  55. }
  56.  
  57. return $tb;
  58. }
  59.  
  60. private function isAnyFormValid($forms)
  61. {
  62. if(($forms['StatusForm']->isValid())or
  63. ($forms['DataZamForm']->isValid())or
  64. ($forms['NrKlientaForm']->isValid()))
  65. {
  66. return true;
  67. }
  68.  
  69. return false;
  70. }
  71.  
  72. private function setFilter(TableDetails $td,$forms)
  73. {
  74. if(!($td->getFilter()))
  75. {
  76. $td = $this->prepareFilterValue($forms,$td);
  77. }
  78.  
  79. return $td;
  80. }
  81.  
  82. private function prepareFilterValue($fms,TableDetails $td){
  83. if($td->getFilterField()){
  84. $td->setFilter($td->getFilterField());
  85. return $td;
  86. }
  87. if($fms['StatusForm']->isValid()){
  88. $td->setFilter('idstatus');
  89. return $td;
  90. }
  91. if($fms['DataZamForm']->isValid()) {
  92. $td->setFilter('data');
  93. return $td;
  94. }
  95. if($fms['NrKlientaForm']->isValid()){
  96. $td->setFilter('idklient');
  97. return $td;
  98. }
  99.  
  100. $td->setFilter('all');
  101. return $td;
  102. }
  103. }


FilterQuery
  1. class FilterQuery implements IFilterQuery
  2. {
  3. public function prepareStatusFilterQuery(TableDetails $td, $forms)
  4. {
  5. if((!$td->getQuery()) and (!$td->getIdentifier())) {
  6. $td->setIdentifier($forms['StatusForm']->get('status')->getData()->getIdstatus());
  7. }
  8.  
  9. if((!$td->getQuery()) and ($td->getIdentifier())) {
  10. $td->setQuery('idstatus = ' . $td->getIdentifier());
  11. }
  12.  
  13. return $td;
  14. }
  15.  
  16. public function prepareDataFilterQuery(TableDetails $td, $forms)
  17. {
  18. if($td->getQuery()) {
  19. $td->setQuery(urldecode($td->getQuery()));
  20. }
  21.  
  22. if (!$td->getQuery()) {
  23. $od = $forms['DataZamForm']->get('od')->getData()->format('Y-m-d H:i:s');
  24. $do = $forms['DataZamForm']->get('do')->getData()->format('Y-m-d H:i:s');
  25. $td->setQuery("datazlozenia BETWEEN '" . $od . "' AND '" . $do . "'");
  26. }
  27.  
  28. return $td;
  29. }
  30.  
  31. public function prepareKlientFilterQuery(TableDetails $td, $forms)
  32. {
  33. if ((!($td->getQuery())) and (!$td->getIdentifier())) {
  34. $td->setIdentifier($forms['NrKlientaForm']->get('idklient')->getData()->getIdklient());
  35. $td->setQuery('idklient = ' . $td->getIdentifier());
  36. return $td;
  37. }
  38.  
  39. if ((!($td->getQuery())) and $td->getIdentifier()) {
  40. $td->setQuery('idklient = ' . $td->getIdentifier());
  41. return $td;
  42. }
  43.  
  44. return $td;
  45. }
  46. }

TableDetails
  1. class TableDetails
  2. {
  3. private $columnsSortOrder;
  4. private $columnSort;
  5. private $filterField;
  6. private $query;
  7. private $filter;
  8. private $identifier;
  9. //tylko gettery i settery


przed refaktoryzacją wszystko było w kontrolerze i wyglądało tak