167 lines
5.5 KiB
PHP
167 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Adjustment\Http\Controllers;
|
|
|
|
use App\DataTables\AdjustmentsDataTable;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Modules\Adjustment\Entities\AdjustedProduct;
|
|
use Modules\Adjustment\Entities\Adjustment;
|
|
use Modules\Product\Entities\Product;
|
|
|
|
class AdjustmentController extends Controller
|
|
{
|
|
|
|
public function index(AdjustmentsDataTable $dataTable) {
|
|
abort_if(Gate::denies('access_adjustments'), 403);
|
|
|
|
return $dataTable->render('adjustment::index');
|
|
}
|
|
|
|
|
|
public function create() {
|
|
abort_if(Gate::denies('create_adjustments'), 403);
|
|
|
|
return view('adjustment::create');
|
|
}
|
|
|
|
|
|
public function store(Request $request) {
|
|
abort_if(Gate::denies('create_adjustments'), 403);
|
|
|
|
$request->validate([
|
|
'reference' => 'required|string|max:255|unique:adjustments,reference',
|
|
'date' => 'required|date',
|
|
'note' => 'nullable|string|max:1000',
|
|
'product_ids' => 'required',
|
|
'quantities' => 'required',
|
|
'types' => 'required'
|
|
]);
|
|
|
|
DB::transaction(function () use ($request) {
|
|
$adjustment = Adjustment::create([
|
|
'reference' => $request->reference,
|
|
'date' => $request->date,
|
|
'note' => $request->note
|
|
]);
|
|
|
|
foreach ($request->product_ids as $key => $id) {
|
|
AdjustedProduct::create([
|
|
'adjustment_id' => $adjustment->id,
|
|
'product_id' => $id,
|
|
'quantity' => $request->quantities[$key],
|
|
'type' => $request->types[$key]
|
|
]);
|
|
|
|
$product = Product::findOrFail($id);
|
|
|
|
if ($request->types[$key] == 'add') {
|
|
$product->update([
|
|
'product_quantity' => $product->product_quantity + $request->quantities[$key]
|
|
]);
|
|
} elseif ($request->types[$key] == 'sub') {
|
|
$product->update([
|
|
'product_quantity' => $product->product_quantity - $request->quantities[$key]
|
|
]);
|
|
}
|
|
}
|
|
});
|
|
|
|
toast('Adjustment Created!', 'success');
|
|
|
|
return redirect()->route('adjustments.index');
|
|
}
|
|
|
|
|
|
public function show(Adjustment $adjustment) {
|
|
abort_if(Gate::denies('show_adjustments'), 403);
|
|
|
|
return view('adjustment::show', compact('adjustment'));
|
|
}
|
|
|
|
|
|
public function edit(Adjustment $adjustment) {
|
|
abort_if(Gate::denies('edit_adjustments'), 403);
|
|
|
|
return view('adjustment::edit', compact('adjustment'));
|
|
}
|
|
|
|
|
|
public function update(Request $request, Adjustment $adjustment) {
|
|
abort_if(Gate::denies('edit_adjustments'), 403);
|
|
|
|
$request->validate([
|
|
'reference' => 'required|string|max:255|unique:adjustments,reference,' . $adjustment->id,
|
|
'date' => 'required|date',
|
|
'note' => 'nullable|string|max:1000',
|
|
'product_ids' => 'required',
|
|
'quantities' => 'required',
|
|
'types' => 'required'
|
|
]);
|
|
|
|
DB::transaction(function () use ($request, $adjustment) {
|
|
$adjustment->update([
|
|
'reference' => $request->reference,
|
|
'date' => $request->date,
|
|
'note' => $request->note
|
|
]);
|
|
|
|
foreach ($adjustment->adjustedProducts as $adjustedProduct) {
|
|
$product = Product::findOrFail($adjustedProduct->product->id);
|
|
|
|
if ($adjustedProduct->type == 'add') {
|
|
$product->update([
|
|
'product_quantity' => $product->product_quantity - $adjustedProduct->quantity
|
|
]);
|
|
} elseif ($adjustedProduct->type == 'sub') {
|
|
$product->update([
|
|
'product_quantity' => $product->product_quantity + $adjustedProduct->quantity
|
|
]);
|
|
}
|
|
|
|
$adjustedProduct->delete();
|
|
}
|
|
|
|
foreach ($request->product_ids as $key => $id) {
|
|
AdjustedProduct::create([
|
|
'adjustment_id' => $adjustment->id,
|
|
'product_id' => $id,
|
|
'quantity' => $request->quantities[$key],
|
|
'type' => $request->types[$key]
|
|
]);
|
|
|
|
$product = Product::findOrFail($id);
|
|
|
|
if ($request->types[$key] == 'add')
|
|
{
|
|
$product->update([
|
|
'product_quantity' => $product->product_quantity + $request->quantities[$key]
|
|
]);
|
|
} elseif ($request->types[$key] == 'sub') {
|
|
$product->update([
|
|
'product_quantity' => $product->product_quantity - $request->quantities[$key]
|
|
]);
|
|
}
|
|
}
|
|
});
|
|
|
|
toast('Adjustment Updated!', 'info');
|
|
|
|
return redirect()->route('adjustments.index');
|
|
}
|
|
|
|
|
|
public function destroy(Adjustment $adjustment) {
|
|
abort_if(Gate::denies('delete_adjustments'), 403);
|
|
|
|
$adjustment->delete();
|
|
|
|
toast('Adjustment Deleted!', 'warning');
|
|
|
|
return redirect()->route('adjustments.index');
|
|
}
|
|
}
|