ajax()) { $data = Transaksi::select('*'); return Datatables::of($data) ->addIndexColumn() ->addColumn('name', function ($row) { $product = Produk::find($row->id_product); return $product ? $product->name : 'Product not found'; }) ->addColumn('total', function ($row) { return 'Rp. ' . number_format($row->total, 0, ',', '.'); }) ->addColumn('payment_method', function ($row) { return ucfirst($row->payment_method); }) ->addColumn('status', function ($row) { return $row->status; }) ->addColumn('action', function ($row) { $action = ''; if ($row->payment_method=="hutang" && $row->status == 'unpaid') { $action = 'Lunasi Hutang'; } else { $action = 'Lunas'; } return $action; }) ->rawColumns(['total', 'name', 'payment_method', 'status', 'action']) ->make(true); } $data = [ 'subtitle' => 'Semua Transaksi', 'button' => true, 'module' => [ 'url' => app_url('transaksi/create'), 'name' => 'Tambah Baru' ] ]; return view('admin.app.content.transaction.index', compact('data')); } public function create() { $data = [ 'subtitle' => 'Tambah baru', ]; return view('admin.app.content.transaction.add', compact('data')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'id_product' => 'required', 'qty' => 'required', 'payment_method' => 'required', ]); if ($validator->fails()) { return redirect()->back()->withInput()->with('error', 'Unexpected error, please try again. code: ' . $validator->errors()->first()); } $input = $request->all(); $check_product = Produk::where('id', $request->input('id_product'))->first(); if ($check_product) { if ($check_product->stok < $input['qty']) { return redirect()->back()->withInput()->with('error', 'Stok tidak cukup.'); } $post = new Transaksi([ 'id_product' => $input['id_product'], 'qty' => $input['qty'], 'total' => $input['qty'] * $check_product->price, 'payment_method' => $input['payment_method'], ]); if ($post->save()) { $check_product->stok -= $input['qty']; $check_product->save(); $account_id = $input['payment_method'] === 'cash' ? 1 : 2; // ID akun 4 untuk Pendapatan, 6 untuk Hutang Usaha $reff = $this->generateRandomString(); $addToJurnal = new Jurnal([ 'keterangan' => 'Pembelian ' . $check_product->name, 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => $input['qty'] * $check_product->price, 'tipe' => 'd', 'id_akun' => $account_id, ]); $addToJurnal->save(); $paymentJournal = new Jurnal([ 'keterangan' => 'Pembayaran ' . $check_product->name, 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => $input['qty'] * $check_product->price, 'tipe' => 'k', 'id_akun' => 9, ]); $paymentJournal->save(); return redirect()->route('transaksi')->with('success', 'Transaksi berhasil ditambahkan'); } else { return redirect()->route('transaksi')->with('error', 'Transaksi gagal ditambahkan'); } } else { return redirect()->route('transaksi')->with('error', 'Product tidak ditemukan'); } } public function destroy($id) { // Cari data berdasarkan ID $post = Transaksi::find($id); // Jika data ditemukan if ($post) { // Hapus data dari database $checkProduk = Produk::where('id', $post->id_product)->first(); $checkJurnal = Jurnal::where('keterangan', 'LIKE', '%Pembelian ' . $checkProduk->name . '%')->first(); if($checkJurnal) $checkJurnal->delete(); $post->delete(); return redirect()->route('produk')->with('success', 'Data deleted successfully'); } else { return redirect()->route('produk')->with('error', 'Data not found'); } } function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } public function bayar_hutang($id) { // Cari transaksi berdasarkan ID $supplier = Supplier::find($id); // Jika supplier tidak ditemukan atau sudah lunas if (!$supplier || $supplier->status == 'paid') { return redirect()->route('suppliers.index')->with('error', 'Supplier tidak ditemukan atau sudah lunas'); } // Update status transaksi menjadi lunas $supplier->status = 'paid'; $supplier->save(); // Tambahkan entri jurnal untuk pelunasan hutang $reff = $this->generateRandomString(); $paymentJournal = new Jurnal([ 'keterangan' => 'Pelunasan Hutang ' . $supplier->nama_produk, 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => ($supplier->jumlah*$supplier->harga), 'tipe' => 'd', 'id_akun' => 14, // ID akun untuk Hutang Usaha ]); $paymentJournal->save(); $paymentJournal2 = new Jurnal([ 'keterangan' => 'Pelunasan Hutang ' . $supplier->nama_produk, 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => ($supplier->jumlah*$supplier->harga), 'tipe' => 'k', 'id_akun' => 1, // ID akun untuk Hutang Usaha ]); $paymentJournal2->save(); return redirect()->route('suppliers.index')->with('success', 'Hutang berhasil dilunasi'); } public function bayar_piutang($id) { // Cari transaksi berdasarkan ID $transaction = Transaksi::select('tbl_transaksi.*', 'tbl_produk.name')->leftJoin('tbl_produk', 'id_product', 'tbl_produk.id') ->where('tbl_transaksi.id', $id)->first(); // Jika transaction tidak ditemukan atau sudah lunas if (!$transaction || $transaction->status == 'paid') { return redirect()->route('transaksi')->with('error', 'Trabsaksi tidak ditemukan atau sudah lunas'); } // Update status transaksi menjadi lunas $transaction->status = 'paid'; $transaction->save(); // Tambahkan entri jurnal untuk pelunasan hutang $reff = $this->generateRandomString(); $paymentJournal = new Jurnal([ 'keterangan' => 'Pembayaran Piutang ' . $transaction->name, 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => ($transaction->total), 'tipe' => 'd', 'id_akun' => 1, ]); $paymentJournal->save(); $paymentJournal2 = new Jurnal([ 'keterangan' => 'Pembayaran Piutang ' . $transaction->name, 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => ($transaction->total), 'tipe' => 'k', 'id_akun' => 2, ]); $paymentJournal2->save(); return redirect()->route('transaksi')->with('success', 'Piutang berhasil dibayar'); } public function beban(Request $request) { $data = [ 'subtitle' => 'Beban Operasional', 'button' => true, 'module' => [ 'url' => app_url('beban'), 'name' => 'Tambah Baru' ] ]; return view('admin.app.content.transaction.beban', compact('data')); } public function tambah_beban(Request $request) { $validator = Validator::make($request->all(), [ 'keterangan' => 'required', 'nominal' => 'required', ]); if ($validator->fails()) { return redirect()->back()->withInput()->with('error', 'Unexpected error, please try again. code: ' . $validator->errors()->first()); } $input = $request->all(); $reff = $this->generateRandomString(); $addToJurnal = new Jurnal([ 'keterangan' => $input['keterangan'], 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => $input['nominal'], 'tipe' => 'd', 'id_akun' => 15, ]); $addToJurnal->save(); $paymentJournal = new Jurnal([ 'keterangan' => $input['keterangan'], 'waktu_transaksi' => Carbon::now(), 'no_reff' => $reff, 'nominal' => $input['nominal'], 'tipe' => 'k', 'id_akun' => 1, ]); $paymentJournal->save(); return redirect()->route('jurnal-umum')->with('success', 'Beban Operasional Berhasil Ditambahkan'); } }