mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 03:04:34 -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\Client;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Database\Query\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
|
|
||||||
@ -167,4 +167,12 @@ class ClientFilters extends QueryFilters
|
|||||||
return $query;
|
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
|
* @param Request $request
|
||||||
*/
|
*/
|
||||||
public function __construct(Request $request, Builder $builder)
|
public function __construct(Request $request)
|
||||||
{
|
{
|
||||||
$this->request = $request;
|
$this->request = $request;
|
||||||
|
|
||||||
$this->builder = $builder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,9 +57,9 @@ abstract class QueryFilters
|
|||||||
* @param Builder $builder
|
* @param Builder $builder
|
||||||
* @return 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) {
|
foreach ($this->filters() as $name => $value) {
|
||||||
if (! method_exists($this, $name)) {
|
if (! method_exists($this, $name)) {
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use App\DataMapper\ClientSettings;
|
use App\DataMapper\ClientSettings;
|
||||||
use App\Factory\ClientFactory;
|
use App\Factory\ClientFactory;
|
||||||
|
use App\Filters\ClientFilters;
|
||||||
use App\Http\Requests\Client\CreateClientRequest;
|
use App\Http\Requests\Client\CreateClientRequest;
|
||||||
use App\Http\Requests\Client\EditClientRequest;
|
use App\Http\Requests\Client\EditClientRequest;
|
||||||
use App\Http\Requests\Client\ShowClientRequest;
|
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
|
* @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\DataMapper\ClientSettings;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\Country;
|
use App\Models\Country;
|
||||||
|
use App\Models\Filterable;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use Hashids\Hashids;
|
use Hashids\Hashids;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
@ -15,7 +16,8 @@ class Client extends BaseModel
|
|||||||
use PresentableTrait;
|
use PresentableTrait;
|
||||||
use MakesHash;
|
use MakesHash;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
use Filterable;
|
||||||
|
|
||||||
protected $presenter = 'App\Models\Presenters\ClientPresenter';
|
protected $presenter = 'App\Models\Presenters\ClientPresenter';
|
||||||
|
|
||||||
protected $appends = [
|
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',
|
'slack_webhook_url',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a account.
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
public function account()
|
public function account()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Account::class);
|
return $this->belongsTo(Account::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all company tokens.
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
public function tokens()
|
public function tokens()
|
||||||
{
|
{
|
||||||
return $this->hasMany(CompanyToken::class)->orderBy('id');
|
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');
|
return $this->belongsToMany(Company::class)->withPivot('permissions', 'settings', 'is_admin', 'is_owner', 'is_locked');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current company
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
public function company()
|
public function company()
|
||||||
{
|
{
|
||||||
return $this->tokens()->whereRaw("BINARY `token`= ?", [request()->header('X-API-TOKEN')])->first()->company;
|
return $this->tokens()->whereRaw("BINARY `token`= ?", [request()->header('X-API-TOKEN')])->first()->company;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user