diff --git a/Modules/Product/Database/Migrations/2021_07_14_145047_create_products_table.php b/Modules/Product/Database/Migrations/2021_07_14_145047_create_products_table.php index 2fca1017..d8beafb2 100644 --- a/Modules/Product/Database/Migrations/2021_07_14_145047_create_products_table.php +++ b/Modules/Product/Database/Migrations/2021_07_14_145047_create_products_table.php @@ -16,7 +16,6 @@ class CreateProductsTable extends Migration Schema::create('products', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('category_id'); - $table->string('product_image')->nullable(); $table->string('product_name'); $table->string('product_code')->unique()->nullable(); $table->string('product_barcode_symbology')->nullable(); diff --git a/Modules/Product/Entities/Product.php b/Modules/Product/Entities/Product.php index 7368dc8e..56dfa03d 100644 --- a/Modules/Product/Entities/Product.php +++ b/Modules/Product/Entities/Product.php @@ -9,6 +9,7 @@ use Spatie\MediaLibrary\InteractsWithMedia; class Product extends Model implements HasMedia { + use HasFactory, InteractsWithMedia; protected $guarded = []; @@ -18,4 +19,9 @@ class Product extends Model implements HasMedia public function category() { return $this->belongsTo(Category::class, 'category_id', 'id'); } + + public function registerMediaCollections(): void { + $this->addMediaCollection('default') + ->useFallbackUrl('/images/fallback_product_image.png'); + } } diff --git a/Modules/Product/Http/Controllers/CategoriesController.php b/Modules/Product/Http/Controllers/CategoriesController.php index e6ebf1e8..84518a31 100644 --- a/Modules/Product/Http/Controllers/CategoriesController.php +++ b/Modules/Product/Http/Controllers/CategoriesController.php @@ -5,26 +5,23 @@ namespace Modules\Product\Http\Controllers; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Illuminate\Support\Facades\Gate; use Modules\Product\Entities\Category; use App\DataTables\ProductCategoriesDataTable; class CategoriesController extends Controller { - /** - * Display a listing of the resource. - * @return Renderable - */ public function index(ProductCategoriesDataTable $dataTable) { + abort_if(Gate::denies('access_product_categories'), 403); + return $dataTable->render('product::categories.index'); } - /** - * Store a newly created resource in storage. - * @param Request $request - * @return Renderable - */ + public function store(Request $request) { + abort_if(Gate::denies('access_product_categories'), 403); + $request->validate([ 'category_code' => 'required|unique:categories,category_code', 'category_name' => 'required' @@ -40,24 +37,19 @@ class CategoriesController extends Controller return redirect()->back(); } - /** - * Show the form for editing the specified resource. - * @param int $id - * @return Renderable - */ + public function edit($id) { + abort_if(Gate::denies('access_product_categories'), 403); + $category = Category::findOrFail($id); return view('product::categories.edit', compact('category')); } - /** - * Update the specified resource in storage. - * @param Request $request - * @param int $id - * @return Renderable - */ + public function update(Request $request, $id) { + abort_if(Gate::denies('access_product_categories'), 403); + $request->validate([ 'category_code' => 'required|unique:categories,category_code,' . $id, 'category_name' => 'required' @@ -73,12 +65,10 @@ class CategoriesController extends Controller return redirect()->route('product-categories.index'); } - /** - * Remove the specified resource from storage. - * @param int $id - * @return Renderable - */ + public function destroy($id) { + abort_if(Gate::denies('access_product_categories'), 403); + $category = Category::findOrFail($id); if ($category->products->isNotEmpty()) { diff --git a/Modules/Product/Http/Controllers/ProductController.php b/Modules/Product/Http/Controllers/ProductController.php index 7e1b337a..4d5ba8e5 100644 --- a/Modules/Product/Http/Controllers/ProductController.php +++ b/Modules/Product/Http/Controllers/ProductController.php @@ -6,6 +6,7 @@ use App\DataTables\ProductDataTable; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Storage; use Modules\Product\Entities\Product; use Modules\Product\Http\Requests\ProductCreateRequest; @@ -15,27 +16,20 @@ use Modules\Upload\Entities\Upload; class ProductController extends Controller { - /** - * Display a listing of the resource. - * @return Renderable - */ public function index(ProductDataTable $dataTable) { + abort_if(Gate::denies('access_products'), 403); + return $dataTable->render('product::products.index'); } - /** - * Show the form for creating a new resource. - * @return Renderable - */ + public function create() { + abort_if(Gate::denies('create_products'), 403); + return view('product::products.create'); } - /** - * Store a newly created resource in storage. - * @param Request $request - * @return Renderable - */ + public function store(ProductCreateRequest $request) { $product = Product::create($request->except('image')); @@ -55,38 +49,30 @@ class ProductController extends Controller return redirect()->route('products.index'); } - /** - * Show the details for the specified resource. - * @param int $id - * @return Renderable - */ + public function show(Product $product) { + abort_if(Gate::denies('show_products'), 403); + return view('product::products.show', compact('product')); } - /** - * Show the form for editing the specified resource. - * @param int $id - * @return Renderable - */ + public function edit(Product $product) { + abort_if(Gate::denies('edit_products'), 403); + return view('product::products.edit', compact('product')); } - /** - * Update the specified resource in storage. - * @param Request $request - * @param int $id - * @return Renderable - */ + public function update(ProductUpdateRequest $request, Product $product) { $product->update($request->except('image')); if ($request->has('image')) { $tempFile = Upload::where('folder', $request->image)->first(); - $media = $product->getMedia(); - $media[0]->delete(); + if ($product->getFirstMedia()) { + $product->getFirstMedia()->delete(); + } if ($tempFile) { $product->addMedia(Storage::path('public/temp/' . $request->image . '/' . $tempFile->filename))->toMediaCollection(); @@ -101,12 +87,10 @@ class ProductController extends Controller return redirect()->route('products.index'); } - /** - * Remove the specified resource from storage. - * @param int $id - * @return Renderable - */ + public function destroy(Product $product) { + abort_if(Gate::denies('delete_products'), 403); + $product->delete(); toast('Product Deleted!', 'warning'); diff --git a/Modules/Product/Http/Requests/ProductCreateRequest.php b/Modules/Product/Http/Requests/ProductCreateRequest.php index 5e2bf672..5b8d8f4e 100644 --- a/Modules/Product/Http/Requests/ProductCreateRequest.php +++ b/Modules/Product/Http/Requests/ProductCreateRequest.php @@ -3,6 +3,7 @@ namespace Modules\Product\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Gate; class ProductCreateRequest extends FormRequest { @@ -35,6 +36,6 @@ class ProductCreateRequest extends FormRequest */ public function authorize() { - return true; + return Gate::allows('create_products'); } } diff --git a/Modules/Product/Http/Requests/ProductUpdateRequest.php b/Modules/Product/Http/Requests/ProductUpdateRequest.php index 14dbcb73..b220a6ae 100644 --- a/Modules/Product/Http/Requests/ProductUpdateRequest.php +++ b/Modules/Product/Http/Requests/ProductUpdateRequest.php @@ -3,6 +3,7 @@ namespace Modules\Product\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Gate; use Illuminate\Validation\Rule; class ProductUpdateRequest extends FormRequest @@ -36,6 +37,6 @@ class ProductUpdateRequest extends FormRequest */ public function authorize() { - return true; + return Gate::allows('edit_products'); } } diff --git a/Modules/Product/Resources/views/categories/edit.blade.php b/Modules/Product/Resources/views/categories/edit.blade.php index d673c204..6ff49164 100644 --- a/Modules/Product/Resources/views/categories/edit.blade.php +++ b/Modules/Product/Resources/views/categories/edit.blade.php @@ -15,6 +15,7 @@