LaborApplyFilters.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Filters;
  3. use App\OrderIssue;
  4. use Illuminate\Database\Eloquent\Builder;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Carbon;
  7. class LaborApplyFilters
  8. {
  9. protected $request;
  10. /** @var $queryBuilder Builder */
  11. protected $queryBuilder;
  12. protected $filters = [
  13. 'created_at_start',//创建起始时间
  14. 'created_at_end',//创建截止时间
  15. 'apply_user',//申请人
  16. 'warehouse',//仓库
  17. 'status',//状态
  18. 'remark',//用工要求
  19. 'user_work_group',//仓库小组
  20. ];
  21. protected $orderIssueQuery;
  22. public function __construct(Request $request)
  23. {
  24. $this->request = $request;
  25. }
  26. public function apply($builder)
  27. {
  28. $this->queryBuilder = $builder;
  29. $filters = array_filter($this->request->only($this->filters), function ($item) {
  30. return $item !== null;
  31. });
  32. foreach ($filters as $filter => $value) {
  33. if (method_exists($this, $filter)) {
  34. $this->$filter($value, $this->queryBuilder);
  35. }
  36. }
  37. return $this->queryBuilder;
  38. }
  39. public function created_at_start($created_at_start)
  40. {
  41. $this->queryBuilder->whereDate('created_at', '>=', $created_at_start);
  42. }
  43. public function created_at_end($created_at_end)
  44. {
  45. $this->queryBuilder->whereDate('created_at', '<=', $created_at_end);
  46. }
  47. //user_work_group
  48. public function apply_user($apply_user)
  49. {
  50. $user_ids = \App\User::query()
  51. ->select('id')
  52. ->where('name', 'like', $apply_user . '%')
  53. ->pluck('id');
  54. $this->queryBuilder->whereIn('apply_user_id', $user_ids);
  55. }
  56. public function warehouse($warehouse)
  57. {
  58. $warehouse = array_filter(preg_split('/[,, ]+/is', $warehouse), function ($item) {
  59. return $item !== null;
  60. });
  61. $this->queryBuilder->whereIn('warehouse_id', $warehouse);
  62. }
  63. public function status($status)
  64. {
  65. $status = array_filter(preg_split('/[,, ]+/is', $status), function ($item) {
  66. return $item !== null;
  67. });
  68. $this->queryBuilder->whereIn('status', $status);
  69. }
  70. public function remark($remark)
  71. {
  72. $this->queryBuilder->where('remark', 'like', $remark . '%');
  73. }
  74. public function user_work_group($user_work_group)
  75. {
  76. $user_work_group = array_filter(preg_split('/[,, ]+/is', $user_work_group), function ($item) {
  77. return $item !== null;
  78. });
  79. $this->queryBuilder->whereIn('user_workgroup_id', $user_work_group);
  80. }
  81. }