authorizeResource(Sale::class); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return inertia('Sales/Index', [ 'initialSearch' => request('search'), 'sales' => Sale::filter(request()->only('search')) ->latest() ->paginate(10) ->withQueryString() ->through(fn($sale) => [ 'id' => $sale->id, 'updatedAt' => $sale->updated_at, 'number' => $sale->number, 'status' => $sale->status, 'price' => $sale->saleDetail->price, 'ppn' => $sale->saleDetail->ppn, 'qty' => $sale->saleDetail->qty, 'productName' => $sale->product->name, 'productNumber' => $sale->product->number ]) ]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return inertia('Sales/Create', [ 'number' => 'PJN' . now()->format('YmdHis'), 'ppn' => Ppn::first()->ppn, 'productNumber' => Inertia::lazy( fn() => 'PDK' . now()->format('YmdHis') ), 'customers' => Inertia::lazy( fn() => Customer::filter(['search' => request('customer')]) ->get() ), 'stockProducts' => Inertia::lazy( fn() => StockProduct::filter(['search' => request('stockProduct')]) ->get() ->transform(fn($stockProduct) => [ 'number' => $stockProduct->product_number, 'name' => $stockProduct->product->name, 'qty' => $stockProduct->qty, 'unit' => $stockProduct->product->unit ]) ) ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(StoreSaleRequest $request) { DB::beginTransaction(); try { $validated = $request->safe()->merge([ 'user_id' => auth()->user()->id, 'ppn' => Ppn::first()->getRawOriginal('ppn') ])->all(); $sale = Sale::create($validated); $sale->saleDetail()->create($validated); DB::commit(); return back()->with('success', __('messages.success.store.sale')); } catch (QueryException $e) { DB::rollBack(); return back()->with('error', __('messages.error.store.sale')); } } /** * Display the specified resource. * * @param Sale $sale * @return \Illuminate\Http\Response */ public function show(Sale $sale) { // } /** * Show the form for editing the specified resource. * * @param Sale $sale * @return \Illuminate\Http\Response */ public function edit(Sale $sale) { return inertia('Sales/Edit', [ 'sale' => [ 'id' => $sale->id, 'number' => $sale->number, 'status' => $sale->status, 'price' => $sale->saleDetail->getRawOriginal('price'), 'qty' => $sale->saleDetail->qty, 'ppn' => $sale->saleDetail->ppn, 'customer' => $sale->customer, 'product' => $sale->product ] ]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param Sale $sale * @return \Illuminate\Http\Response */ public function update(UpdateSaleRequest $request, Sale $sale) { DB::beginTransaction(); try { $sale->update($request->validated()); $sale->saleDetail()->update($request->safe()->except('status')); if ($request->status === 'success') { StockProduct::create([ 'sale_number' => $sale->number, 'qty' => -$request->qty, 'product_number' => $sale->saleDetail->product_number ]); } DB::commit(); return back()->with('success', __('messages.success.update.sale')); } catch (QueryException $e) { DB::rollBack(); return back()->with('error', __('messages.error.update.sale')); } } /** * Remove the specified resource from storage. * * @param Sale $sale * @return \Illuminate\Http\Response */ public function destroy(Sale $sale) { // } }