builder; } $status_parameters = explode(',', $value); if (in_array('all', $status_parameters)) { return $this->builder; } $this->builder->where(function ($query) use ($status_parameters) { $po_status = []; if (in_array('draft', $status_parameters)) { $po_status[] = PurchaseOrder::STATUS_DRAFT; } if (in_array('sent', $status_parameters)) { $query->orWhere(function ($q) { $q->where('status_id', PurchaseOrder::STATUS_SENT) ->whereNull('due_date') ->orWhere('due_date', '>=', now()->toDateString()); }); } if (in_array('accepted', $status_parameters)) { $po_status[] = PurchaseOrder::STATUS_ACCEPTED; } if (in_array('cancelled', $status_parameters)) { $po_status[] = PurchaseOrder::STATUS_CANCELLED; } if (count($po_status) >=1) { $query->whereIn('status_id', $po_status); } }); return $this->builder; } /** * Filter based on search text. * * @param string $filter * @return Builder * @deprecated */ public function filter(string $filter = ''): Builder { if (strlen($filter) == 0) { return $this->builder; } return $this->builder->where(function ($query) use ($filter) { $query->where('number', 'like', '%'.$filter.'%') ->orWhere('number', 'like', '%'.$filter.'%') ->orWhere('date', 'like', '%'.$filter.'%') ->orWhere('amount', 'like', '%'.$filter.'%') ->orWhere('balance', 'like', '%'.$filter.'%') ->orWhere('custom_value1', 'like', '%'.$filter.'%') ->orWhere('custom_value2', 'like', '%'.$filter.'%') ->orWhere('custom_value3', 'like', '%'.$filter.'%') ->orWhere('custom_value4', 'like', '%'.$filter.'%') ->orWhereHas('vendor', function ($q) use ($filter) { $q->where('name', 'like', '%'.$filter.'%'); }); }); } public function number(string $number = ''): Builder { if (strlen($number) == 0) { return $this->builder; } return $this->builder->where('number', $number); } /** * Sorts the list based on $sort. * * @param string $sort formatted as column|asc * @return Builder */ public function sort(string $sort = ''): Builder { $sort_col = explode('|', $sort); if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } if ($sort_col[0] == 'vendor_id') { return $this->builder->orderBy(\App\Models\Vendor::select('name') ->whereColumn('vendors.id', 'purchase_orders.vendor_id'), $sort_col[1]); } return $this->builder->orderBy($sort_col[0], $sort_col[1]); } /** * Filters the query by the users company ID. * * We need to ensure we are using the correct company ID * as we could be hitting this from either the client or company auth guard */ public function entityFilter(): Builder { if (auth()->guard('contact')->user()) { return $this->contactViewFilter(); } else { return $this->builder->company(); } // return $this->builder->whereCompanyId(auth()->user()->company()->id); } /** * We need additional filters when showing purchase orders for the * client portal. Need to automatically exclude drafts and cancelled purchase orders. * * @return Builder */ private function contactViewFilter(): Builder { return $this->builder ->whereCompanyId(auth()->guard('contact')->user()->company->id) ->whereNotIn('status_id', [PurchaseOrder::STATUS_DRAFT]); } }