MIF_E31222707/Modules/Product/Http/Controllers/ProductController.php

119 lines
3.0 KiB
PHP

<?php
namespace Modules\Product\Http\Controllers;
use Modules\Product\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\StoreProductRequest;
use Modules\Product\Http\Requests\UpdateProductRequest;
use Modules\Upload\Entities\Upload;
class ProductController extends Controller
{
public function index(ProductDataTable $dataTable)
{
abort_if(Gate::denies('access_products'), 403);
return $dataTable->render('product::products.index');
}
public function create()
{
abort_if(Gate::denies('create_products'), 403);
return view('product::products.create');
}
public function store(StoreProductRequest $request)
{
$product = Product::create($request->except('document'));
if ($request->has('document')) {
foreach ($request->input('document', []) as $file) {
$product->addMedia(Storage::path('temp/dropzone/' . $file))->toMediaCollection('images');
}
}
toast('Product Created!', 'success');
return redirect()->route('products.index');
}
public function show(Product $product)
{
abort_if(Gate::denies('show_products'), 403);
// Load relasi yang dibutuhkan
$product->load([
'category',
'batches' => function ($q) {
$q->where('qty', '>', 0)
->orderBy('exp_date', 'asc'); // FIFO
}
]);
return view('product::products.show', compact('product'));
}
public function edit(Product $product)
{
abort_if(Gate::denies('edit_products'), 403);
return view('product::products.edit', compact('product'));
}
public function update(UpdateProductRequest $request, Product $product)
{
$product->update($request->except('document'));
if ($request->has('document')) {
if (count($product->getMedia('images')) > 0) {
foreach ($product->getMedia('images') as $media) {
if (!in_array($media->file_name, $request->input('document', []))) {
$media->delete();
}
}
}
$media = $product->getMedia('images')->pluck('file_name')->toArray();
foreach ($request->input('document', []) as $file) {
if (count($media) === 0 || !in_array($file, $media)) {
$product->addMedia(Storage::path('temp/dropzone/' . $file))->toMediaCollection('images');
}
}
}
toast('Product Updated!', 'info');
return redirect()->route('products.index');
}
public function destroy(Product $product)
{
abort_if(Gate::denies('delete_products'), 403);
$product->delete();
toast('Product Deleted!', 'warning');
return redirect()->route('products.index');
}
}