Kasir/app/Http/Controllers/TransaksiController.php
2025-08-28 13:07:35 +07:00

101 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Transaksi;
use App\Models\ItemTransaksi;
use App\Models\Item;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class TransaksiController extends Controller
{
// List semua transaksi
public function index()
{
$limit = request()->query('limit', null);
$query = Transaksi::with(['kasir', 'sales', 'items.item.produk'])->latest();
if ($limit) {
$query->limit((int)$limit);
}
$transaksi = $query->get();
$transaksi = Transaksi::with(['kasir', 'sales', 'items.item.produk'])->latest()->limit(100)->get();
return response()->json($transaksi);
}
// Detail transaksi by ID
public function show($id)
{
$transaksi = Transaksi::with(['kasir', 'sales', 'items.item.produk.foto'])->findOrFail($id);
return response()->json($transaksi);
}
// Membuat transaksi baru
public function store(Request $request)
{
$request->validate([
'id_kasir' => 'required|exists:akun,id',
'id_sales' => 'nullable|exists:sales,id',
'nama_sales' => 'nullable|string',
'no_hp' => 'nullable|string',
'alamat' => 'nullable|string',
'ongkos_bikin' => 'nullable|numeric',
'total_harga' => 'required|numeric',
'items' => 'required|array',
'items.*.id_item' => 'required|exists:item,id',
'items.*.harga_deal' => 'required|numeric',
]);
DB::beginTransaction();
try {
$transaksi = Transaksi::create([
'id_kasir' => $request->id_kasir,
'id_sales' => $request->id_sales,
'nama_sales' => $request->nama_sales,
'no_hp' => $request->no_hp,
'alamat' => $request->alamat,
'ongkos_bikin' => $request->ongkos_bikin,
'total_harga' => $request->total_harga,
]);
foreach ($request->items as $it) {
ItemTransaksi::create([
'id_transaksi' => $transaksi->id,
'id_item' => $it['id_item'],
'harga_deal' => $it['harga_deal'],
]);
Item::where('id', $it['id_item'])->update(['is_sold' => true]);
}
DB::commit();
return response()->json($transaksi->load('items'), 201);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['error' => $e->getMessage()], 500);
}
}
// Update transaksi
public function update(Request $request, $id)
{
$transaksi = Transaksi::findOrFail($id);
$transaksi->update($request->only([
'id_sales', 'nama_sales', 'no_hp', 'alamat', 'ongkos_bikin', 'total_harga'
]));
return response()->json($transaksi);
}
// Hapus transaksi
public function destroy($id)
{
$transaksi = Transaksi::findOrFail($id);
$transaksi->delete();
return response()->json(['message' => 'Transaksi berhasil dihapus']);
}
}