Skip to content

Instantly share code, notes, and snippets.

@soipo
Created March 19, 2019 12:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save soipo/42c4f69291eb5ff117243483a8f8262c to your computer and use it in GitHub Desktop.
Save soipo/42c4f69291eb5ff117243483a8f8262c to your computer and use it in GitHub Desktop.
Resource
<?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