MIF_E31222467/pos-smartphone-fix/app/Http/Controllers/CashierController.php

130 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Cashier;
use App\Models\Product;
use Illuminate\Support\Facades\DB;
class CashierController extends Controller
{
public function index()
{
$product = Product::with('category')
->where('status', 'aktif') // hanya ambil produk yang status-nya "aktif"
->orderBy('createdAt', 'DESC') // urutkan berdasarkan waktu dibuat, terbaru dulu
->get();
return view('cashier', compact('product'));
}
public function store(Request $request)
{
try {
DB::beginTransaction(); // Mulai transaction untuk memastikan data consistency
$validated = $request->validate([
'produk_id' => 'required|integer|exists:products,id',
'jumlah_item' => 'required|integer|min:1',
'total' => 'required|numeric|min:0',
'sub_total' => 'required|numeric|min:0',
'bayar' => 'required|numeric|min:0',
'kembalian' => 'required|numeric|min:0',
'diskon' => 'nullable|numeric|min:0',
'tipe_bayar' => 'required|in:Cash,Qris,Debit',
]);
// Ambil produk dan cek stok
$product = Product::find($validated['produk_id']);
if (!$product) {
throw new \Exception('Produk tidak ditemukan');
}
if ($product->stok < $validated['jumlah_item']) {
throw new \Exception("Stok produk {$product->nama_produk} tidak mencukupi");
}
// Kurangi stok
$product->stok -= $validated['jumlah_item'];
$product->save();
// Simpan transaksi
$cashier = Cashier::create([
'produk_id' => $validated['produk_id'],
'jumlah_item' => $validated['jumlah_item'],
'total' => $validated['total'],
'sub_total' => $validated['sub_total'],
'bayar' => $validated['bayar'],
'kembalian' => $validated['kembalian'],
'diskon' => $validated['diskon'] ?? 0,
'tipe_bayar' => $validated['tipe_bayar'],
]);
DB::commit(); // Commit transaction jika semua berhasil
return response()->json([
'status' => 'success',
'message' => 'Transaksi berhasil disimpan!',
'data' => $cashier,
], 201);
} catch (\Exception $e) {
DB::rollback(); // Rollback jika terjadi error
return response()->json([
'status' => 'error',
'message' => $e->getMessage()
], 500);
}
}
// public function store(Request $request)
// {
// // Validasi input
// $validator = Validator::make($request->all(), [
// 'produk_id' => 'required|exists:products,id',
// // 'waktu_buka' => 'required|date_format:H:i',
// // 'waktu_tutup' => 'required|date_format:H:i',
// // 'uang_modal' => 'required|numeric|min:0',
// 'jumlah_item' => 'required|integer|min:1',
// 'total' => 'required|numeric|min:0',
// 'sub_total' => 'required|numeric|min:0',
// 'bayar' => 'required|numeric|min:0',
// 'kembalian' => 'required|numeric|min:0',
// 'diskon' => 'nullable|numeric|min:0',
// 'tipe_bayar' => 'required|in:Cash,Qris,Debit',
// ]);
// if ($validator->fails()) {
// return response()->json([
// 'status' => 'error',
// 'errors' => $validator->errors(),
// ], 422);
// }
// // Simpan transaksi ke database
// $cashier = Cashier::create([
// 'produk_id' => $request->produk_id,
// // 'waktu_buka' => $request->waktu_buka,
// // 'waktu_tutup' => $request->waktu_tutup,
// // 'uang_modal' => $request->uang_modal,
// 'jumlah_item' => $request->jumlah_item,
// 'total' => $request->total,
// 'sub_total' => $request->sub_total,
// 'bayar' => $request->bayar,
// 'kembalian' => $request->kembalian,
// 'diskon' => $request->diskon,
// 'tipe_bayar' => $request->tipe_bayar,
// 'createdAt' => now(),
// 'updatedAt' => now(),
// ]);
// return response()->json([
// 'status' => 'success',
// 'message' => 'Transaksi berhasil disimpan!',
// 'data' => $cashier,
// ], 201);
// }
}