Created
March 19, 2019 12:41
-
-
Save soipo/42c4f69291eb5ff117243483a8f8262c to your computer and use it in GitHub Desktop.
Resource
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Nova; | |
use App\Nova\Store\StoreIcon; | |
use App\Nova\Store\StoreImage; | |
use Laravel\Nova\Fields\ID; | |
use Illuminate\Http\Request; | |
use Laravel\Nova\Http\Requests\NovaRequest; | |
use MrMonat\Translatable\Translatable; | |
use Laravel\Nova\Fields\Image; | |
use Laravel\Nova\Fields\Text; | |
use Laravel\Nova\Fields\Boolean; | |
use Laravel\Nova\Fields\BelongsToMany; | |
use Laravel\Nova\Fields\BelongsTo; | |
class Offer extends Resource | |
{ | |
/** | |
* The model the resource corresponds to. | |
* | |
* @var string | |
*/ | |
public static $model = \App\Models\Offer::class; | |
/** | |
* The single value that should be used to represent the resource when being displayed. | |
* | |
* @var string | |
*/ | |
public static $title = 'name'; | |
/** | |
* The columns that should be searched. | |
* | |
* @var array | |
*/ | |
public static $search = [ | |
'name', | |
]; | |
/** | |
* Get the fields displayed by the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function fields(Request $request) | |
{ | |
return [ | |
ID::make()->sortable(), | |
Image::make(__('Image'), 'image') | |
->disk(StoreImage::DISK) | |
->path(StoreImage::PATH) | |
->store(new StoreImage()) | |
->prunable() | |
// ->thumbnail(function ($value, $disk) { | |
// return $value; | |
// }) | |
// ->preview(function ($value) { | |
// return $value; | |
// }) | |
->disableDownload(), | |
Image::make(__('Icon'), 'icon') | |
->disk(StoreIcon::DISK) | |
->path(StoreIcon::PATH) | |
->store(new StoreIcon()) | |
->prunable() | |
// ->thumbnail(function ($value, $disk) { | |
// return $value; | |
// }) | |
// ->preview(function ($value) { | |
// return $value; | |
// }) | |
->disableDownload(), | |
Translatable::make(__('Name'), 'name') | |
->sortable() | |
->rules('required', 'max:255') | |
->singleLine(), | |
Translatable::make(__('Short description'), 'short_description'), | |
Translatable::make(__('Description'), 'description'), | |
Text::make(__('Price'), 'price') | |
->rules('required'), | |
Text::make(__('Vat'), 'vat') | |
->rules('required'), | |
Text::make(__('Validity'), 'validity'), | |
Boolean::make(__('Active'),'active') | |
->sortable(), | |
Boolean::make(__('Stay'),'stay') | |
->sortable(), | |
Text::make(__('Promo code'), 'promo_code'), | |
BelongsToMany::make(__('Service'), 'services',Service::class) | |
->onlyOnForms(), | |
BelongsTo::make(__('Category'), 'category',Category::class) | |
->nullable() | |
->searchable(), | |
]; | |
} | |
private static function whereUserBusiness($userBusinesses,$query){ | |
return $query | |
->join('service_offer','offers.id','service_offer.offer_id') | |
->join('services','service_offer.service_id','services.id') | |
->join('businesses','services.business_id','businesses.id') | |
->where('service_offer.offer_id','offers.id') | |
->whereIn('businesses.id',$userBusinesses); | |
; | |
} | |
public static function indexQuery(NovaRequest $request, $query) | |
{ | |
if(!$request->user()->isSuperAdmin()){ | |
$userBusinesses = $request->user()->businesses()->pluck('business_id'); | |
return self::whereUserBusiness($userBusinesses,$query); | |
} | |
return $query; | |
} | |
public static function relatableQuery(NovaRequest $request, $query) | |
{ | |
if(!$request->user()->isSuperAdmin()){ | |
$userBusinesses = $request->user()->businesses()->pluck('business_id'); | |
return self::whereUserBusiness($userBusinesses,$query); | |
} | |
return $query; | |
} | |
public static function scoutQuery(NovaRequest $request, $query) | |
{ | |
if(!$request->user()->isSuperAdmin()){ | |
$userBusinesses = $request->user()->businesses()->pluck('business_id'); | |
return self::whereUserBusiness($userBusinesses,$query); | |
} | |
return $query; | |
} | |
/** | |
* Get the cards available for the request. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function cards(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the filters available for the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function filters(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the lenses available for the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function lenses(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the actions available for the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function actions(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the displayble label of the resource. | |
* | |
* @return string | |
*/ | |
public static function label() { | |
return __('Offers'); | |
} | |
/** | |
* Get the displayble singular label of the resource. | |
* | |
* @return string | |
*/ | |
public static function singularLabel() { | |
return __('Offer'); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment