112 lines
3.4 KiB
PHP
112 lines
3.4 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();
|
|
|
|
// Mapping agar sesuai dengan kebutuhan frontend
|
|
$mapped = $transaksi->map(function ($trx) {
|
|
return [
|
|
'id' => $trx->id,
|
|
'tanggal' => $trx->created_at->format('d/m/Y'),
|
|
'kode' => 'TRX-' . str_pad($trx->id, 6, '0', STR_PAD_LEFT),
|
|
'pendapatan'=> $trx->total_harga,
|
|
];
|
|
});
|
|
|
|
return response()->json($mapped);
|
|
}
|
|
|
|
|
|
// 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']);
|
|
}
|
|
}
|