OrderPackageFilters.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Filters;
  3. use App\Order;
  4. use Illuminate\Http\Request;
  5. use phpDocumentor\Reflection\Types\Boolean;
  6. class OrderPackageFilters
  7. {
  8. protected $request;
  9. protected $queryBuilder;
  10. protected $filters = ['logistic_number', 'status', 'received_at_start',
  11. 'received_at_end', 'is_weighed', 'logistic_id', 'owner_id', 'sent_at_start', 'sent_at_end', 'is_exception'];
  12. public function __construct(Request $request)
  13. {
  14. $this->request = $request;
  15. }
  16. public function apply($builder)
  17. {
  18. $this->queryBuilder = $builder;
  19. $filters = array_filter($this->request->only($this->filters));
  20. foreach ($filters as $filter => $value) {
  21. if (method_exists($this, $filter)) {
  22. $this->$filter($value, $this->queryBuilder);
  23. }
  24. }
  25. return $this->queryBuilder;
  26. }
  27. private function logistic_number($logistic_number)
  28. {
  29. $this->queryBuilder->where('logistic_number', $logistic_number);
  30. }
  31. private function status($status)
  32. {
  33. $this->queryBuilder->where('status', $status);
  34. }
  35. private function received_at_start($received_at_start)
  36. {
  37. $this->queryBuilder->where('received_at', '>=', $received_at_start);
  38. }
  39. private function received_at_end($received_at_end)
  40. {
  41. $this->queryBuilder->where('received_at', '<=', $received_at_end);
  42. }
  43. private function is_weighed($is_weighed)
  44. {
  45. if ($is_weighed == 'true') {
  46. $this->queryBuilder->whereNotNull('weighed_at');
  47. } else {
  48. $this->queryBuilder->whereNull('weighed_at');
  49. }
  50. }
  51. private function logistic_id($logistic_id)
  52. {
  53. $logistic_ids = array_filter(preg_split('/[,, ]+/is', $logistic_id));
  54. $this->queryBuilder->whereIn('order_id',function($query)use($logistic_ids){
  55. $query->from('orders')->select('id')->whereIn('logistic_id',$logistic_ids);
  56. });
  57. }
  58. private function owner_id($owner_id)
  59. {
  60. $owner_ids = array_filter(preg_split('/[,, ]+/is', $owner_id));
  61. $this->queryBuilder->whereIn('order_id',function($query)use($owner_ids){
  62. $query->from('orders')->select('id')->whereIn('owner_id',$owner_ids);
  63. });
  64. }
  65. private function sent_at_start($sent_at_start)
  66. {
  67. $this->queryBuilder->where('sent_at', '>=', $sent_at_start);
  68. }
  69. private function sent_at_end($sent_at_end)
  70. {
  71. $this->queryBuilder->where('sent_at', '<=', $sent_at_end);
  72. }
  73. private function is_exception($is_exception)
  74. {
  75. $this->queryBuilder->where('exception', $is_exception);
  76. }
  77. }