Skip to content
Snippets Groups Projects
Commit 01ddc74c authored by Shizuco's avatar Shizuco
Browse files

feat: rule for already in use sku for one retailer

parent 12c29c76
No related branches found
No related tags found
No related merge requests found
......@@ -2,9 +2,13 @@
namespace App\Nova;
use App\Models\Retailer;
use App\Rules\isSKUAvailable;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Http\Requests\NovaRequest;
class Product extends Resource
......@@ -32,6 +36,15 @@ class Product extends Resource
'id',
];
public function getAllRetailers()
{
$list = array();
foreach (Retailer::get() as $retailer) {
$list[$retailer['id']] = $retailer['name'];
}
return $list;
}
/**
* Get the fields displayed by the resource.
*
......@@ -45,7 +58,25 @@ public function fields(NovaRequest $request)
Text::make('Name')
->sortable()
->rules('required', 'max:255'),
->rules('required', 'max:255', 'min:2'),
Select::make('Retailer', 'retailer_id')
->options(
$this->getAllRetailers()
)
->rules('required'),
Text::make('SKU')
->sortable()
->rules('required', new isSKUAvailable($request->retailer_id)),
Text::make('Price')
->sortable()
->rules('required'),
Textarea::make('Description')
->sortable()
->rules('required'),
];
}
......
<?php
declare (strict_types = 1);
namespace App\Rules;
use App\Models\Product;
use App\Models\Retailer;
use Illuminate\Contracts\Validation\Rule;
class isSKUAvailable implements Rule
{
public ?int $retailer_id;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct(?int $retailer_id)
{
$this->retailer_id = $retailer_id;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$product = Product::where('sku', $value)->where('retailer_id', $this->retailer_id)->get();
return (count($product) === 0) ? true : false;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'This sku is already in use.';
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment