use App\Enums\Permission;
use App\Models\BusinessCentralCustomer;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Inly\Core\Data\ObjectData;
use Inly\Core\Services\Search\SearchQueryBuilder;
class BusinessCentralCustomerSearchController extends Controller
{
public function __invoke(Request $request)
{
$this->authorize(Permission::MANAGE_ORDERS->value);
$company = $request->input('company');
return SearchQueryBuilder::make($request)
->whenEmpty(fn() => BusinessCentralCustomer::query()->orderBy('name'))
->whenSearch(fn(string $searchTerm) => BusinessCentralCustomer::search($searchTerm))
->whenValue(fn(array $value) => BusinessCentralCustomer::query()->whereIn('id', $value))
->keyBy(fn($model) => $model->id) // Optional: specify custom keying
->applyScope(function (Builder $query) use ($company) {
return $query
->when($company, fn($q) => $q->environment($company))
->whereNotNull('name')
->whereNot('name', '');
})
->mapAs(fn(BusinessCentralCustomer $customer) => ObjectData::from([
'id' => $customer->id,
'title' => $customer->name,
'subtitle' => $customer->customer_number,
'icon' => 'Building',
]))
->results();
}
}