mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
implement filterable query models
This commit is contained in:
parent
7d86c8306a
commit
fd8c19d911
@ -4,7 +4,7 @@ namespace App\Filters;
|
||||
|
||||
use App\Models\Client;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Query\Builder;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
@ -167,4 +167,12 @@ class ClientFilters extends QueryFilters
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function company()
|
||||
{
|
||||
$entity = strtolower(class_basename(Client::class));
|
||||
|
||||
$this->builder->where($entity .'.company_id', '=', auth()->user()->company()->id);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -46,11 +46,9 @@ abstract class QueryFilters
|
||||
*
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct(Request $request, Builder $builder)
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
$this->request = $request;
|
||||
|
||||
$this->builder = $builder;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,9 +57,9 @@ abstract class QueryFilters
|
||||
* @param Builder $builder
|
||||
* @return Builder
|
||||
*/
|
||||
public function apply(int $company_id, User $user)
|
||||
public function apply(Builder $builder)
|
||||
{
|
||||
$this->builder = $this->baseQuery($company_id, $user);
|
||||
$this->builder = $builder;
|
||||
|
||||
foreach ($this->filters() as $name => $value) {
|
||||
if (! method_exists($this, $name)) {
|
||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\DataMapper\ClientSettings;
|
||||
use App\Factory\ClientFactory;
|
||||
use App\Filters\ClientFilters;
|
||||
use App\Http\Requests\Client\CreateClientRequest;
|
||||
use App\Http\Requests\Client\EditClientRequest;
|
||||
use App\Http\Requests\Client\ShowClientRequest;
|
||||
@ -50,9 +51,11 @@ class ClientController extends Controller
|
||||
/**
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
public function index(ClientFilters $filters)
|
||||
{
|
||||
return response()->json(Client::scope());
|
||||
$clients = Client::filter($filters)->get();
|
||||
|
||||
return response()->json($clients);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,6 +5,7 @@ namespace App\Models;
|
||||
use App\DataMapper\ClientSettings;
|
||||
use App\Models\Company;
|
||||
use App\Models\Country;
|
||||
use App\Models\Filterable;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Hashids\Hashids;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
@ -15,7 +16,8 @@ class Client extends BaseModel
|
||||
use PresentableTrait;
|
||||
use MakesHash;
|
||||
use SoftDeletes;
|
||||
|
||||
use Filterable;
|
||||
|
||||
protected $presenter = 'App\Models\Presenters\ClientPresenter';
|
||||
|
||||
protected $appends = [
|
||||
|
20
app/Models/Filterable.php
Normal file
20
app/Models/Filterable.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
namespace App\Models;
|
||||
|
||||
use App\Filters\QueryFilters;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
trait Filterable
|
||||
{
|
||||
/**
|
||||
* Filter a result set.
|
||||
*
|
||||
* @param Builder $query
|
||||
* @param QueryFilters $filters
|
||||
* @return Builder
|
||||
*/
|
||||
public function scopeFilter($query, QueryFilters $filters)
|
||||
{
|
||||
return $filters->apply($query);
|
||||
}
|
||||
}
|
@ -63,11 +63,21 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
'slack_webhook_url',
|
||||
];
|
||||
|
||||
/**
|
||||
* Returns a account.
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function account()
|
||||
{
|
||||
return $this->belongsTo(Account::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all company tokens.
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function tokens()
|
||||
{
|
||||
return $this->hasMany(CompanyToken::class)->orderBy('id');
|
||||
@ -83,7 +93,11 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
return $this->belongsToMany(Company::class)->withPivot('permissions', 'settings', 'is_admin', 'is_owner', 'is_locked');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the current company
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function company()
|
||||
{
|
||||
return $this->tokens()->whereRaw("BINARY `token`= ?", [request()->header('X-API-TOKEN')])->first()->company;
|
||||
|
Loading…
x
Reference in New Issue
Block a user