316 lines
13 KiB
PHP
316 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Kasir;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\BukuBesar;
|
|
use App\Models\DetailPesanan;
|
|
use App\Models\KelompokKategori;
|
|
use App\Models\Pesanan;
|
|
use App\Models\Produk;
|
|
use App\Models\RekeningCoa;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class Transaksi extends Controller
|
|
{
|
|
|
|
function __construct()
|
|
{
|
|
Carbon::setLocale('id_ID');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
// count pesanan by date now and add 1 for next count pesanan today
|
|
$lastCountPesanan = Pesanan::whereDate('created_at', date('Y-m-d'))->count() + 1;
|
|
// add 0 in front of lastCountPesanan if lastCountPesanan less than 10
|
|
$lastCountPesanan = str_pad($lastCountPesanan, 2, '0', STR_PAD_LEFT);
|
|
$orderCode = "ORD-" . date('ym') . strtoupper(random_str(3, random_str())) . date('d') . '-' . $lastCountPesanan;
|
|
$KelompokKategori = KelompokKategori::with('kelompokKategoriPivot.produk')->get();
|
|
$aba = RekeningCoa::where('kode_coa', 1)->where('sub_kode_coa', 200)->get();
|
|
|
|
// dd($KelompokKategori);
|
|
|
|
// Set locale Jakarta (ID) untuk Carbon
|
|
// Carbon::setLocale('id_ID');
|
|
// Sekarang Carbon akan menggunakan format dan pengaturan waktu yang sesuai dengan locale Jakarta
|
|
// $tgl_sekarang = Carbon::now();
|
|
|
|
// $allProduk = [];
|
|
// $produk = Produk::where('tgl_start_promo', '<=', $tgl_sekarang)->where('tgl_end_promo', '>=', $tgl_sekarang)->get();
|
|
|
|
return view('pages.Kasir.transaksi', compact('orderCode', 'KelompokKategori', 'aba'));
|
|
}
|
|
|
|
public function getCetakTigaKali()
|
|
{
|
|
$data = Pesanan::with(['detailPesanan', 'user'])->where('status_printer', null)->get();
|
|
$nomor = 1;
|
|
|
|
return $datatables = datatables()
|
|
->of($data)
|
|
->addColumn('nomor', function ($data) use (&$nomor) {
|
|
return $nomor++;
|
|
})
|
|
->addColumn('nama_user', function ($data) {
|
|
return $data->user->name;
|
|
})
|
|
->addColumn('created_at', function ($data) {
|
|
return \Carbon\Carbon::parse($data->created_at)->format('d F Y H:i:s');
|
|
})
|
|
->addColumn('grand_total', function ($data) {
|
|
return 'Rp ' . number_format($data->grand_total, 0, ',', '.');
|
|
})
|
|
->addColumn('ubah', function ($data) {
|
|
return '<div class="btn-group">
|
|
<a href="javascript:void(0)" class="mx-1" onclick="printDapurTigaKali(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i> 3x </span></a>
|
|
<a href="javascript:void(0)" class="mx-1" onclick="printDapurDuaKali(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i> 2x </span></a>
|
|
<a href="javascript:void(0)" class="mx-1" onclick="printDapurSatuKali(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i> 1x </span></a>
|
|
</div>';
|
|
})
|
|
->rawColumns(['nomor', 'nama_user', 'created_at', 'grand_total', 'ubah'])
|
|
->make(true);
|
|
}
|
|
|
|
public function printDapurTigaKali($id)
|
|
{
|
|
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
|
|
$data = Pesanan::where('id', $id);
|
|
$data->update([
|
|
'status_printer' => 1
|
|
]);
|
|
|
|
return view('pages.Kasir.print_dapur_3x', compact('pesanan'));
|
|
}
|
|
|
|
public function printDapurDuaKali($id)
|
|
{
|
|
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
|
|
$data = Pesanan::where('id', $id);
|
|
$data->update([
|
|
'status_printer' => 1
|
|
]);
|
|
|
|
return view('pages.Kasir.print_dapur_2x', compact('pesanan'));
|
|
}
|
|
|
|
public function printDapurSatuKali($id)
|
|
{
|
|
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
|
|
$data = Pesanan::where('id', $id);
|
|
$data->update([
|
|
'status_printer' => 1
|
|
]);
|
|
|
|
return view('pages.Kasir.print_dapur', compact('pesanan'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'orderCode' => 'required',
|
|
'namaPemesan' => 'required',
|
|
'nomorMeja' => 'required',
|
|
'orderMenus' => 'required',
|
|
], [
|
|
'orderCode.required' => 'Kode pesanan tidak boleh kosong',
|
|
'namaPemesan.required' => 'Nama pemesan tidak boleh kosong',
|
|
'nomorMeja.required' => 'Nomor meja tidak boleh kosong',
|
|
'orderMenus.required' => 'Pesanan tidak boleh kosong',
|
|
]);
|
|
|
|
$user = request()->user();
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$orderMenusQty = 0;
|
|
$orderMenusRupiah = 0;
|
|
foreach ($request->orderMenus as $key => $value) {
|
|
$orderMenusQty += $value['qty'];
|
|
$orderMenusRupiah += $value['total'];
|
|
}
|
|
// $ get last count pesanan by date now and add 1 for next count pesanan today
|
|
$lastCountPesanan = Pesanan::whereDate('created_at', date('Y-m-d'))->count() + 1;
|
|
// calculate nomor antrian
|
|
$nomorAntrian = $lastCountPesanan;
|
|
|
|
$kodenya = substr($request->orderCode, 0, -3); // Menghapus tiga karakter terakhir,
|
|
|
|
// check antrian pesanan jika sudah ada di database maka tambahkan 1 untuk nomor antrian selanjutnya
|
|
$lastCountPesanan = Pesanan::whereDate('created_at', date('Y-m-d'))->count() + 1;
|
|
|
|
$kodenya = $kodenya . '-' . $lastCountPesanan;
|
|
|
|
if ($request->jenis_pembayaran == "1") {
|
|
$pesananDatas = [
|
|
'kode_pesanan' => $kodenya,
|
|
'nama_pemesan' => $request->namaPemesan,
|
|
'nomor_pemesan' => $request->nomorPemesan,
|
|
'nomor_meja' => $request->nomorMeja,
|
|
'status_pesanan' => '1',
|
|
'tanggal_pesanan' => date('Y-m-d H:i:s'),
|
|
'keterangan_pesanan' => $request->keteranganPesanan ?? null,
|
|
'nomor_antrian' => $nomorAntrian,
|
|
'total_pesanan' => $orderMenusQty,
|
|
'total_bayar' => $orderMenusRupiah,
|
|
'grand_total' => $request->totalDiskon,
|
|
'nominal_bayar' => $request->nominalBayar,
|
|
'diskon_persen' => $request->diskon,
|
|
'nominal_kembali' => $request->kembali,
|
|
'status_bayar' => '1',
|
|
'user_id' => $user->id,
|
|
'jenis_pembayaran' => $request->jenis_pembayaran,
|
|
];
|
|
$pesananModels = \App\Models\Pesanan::create($pesananDatas);
|
|
} else {
|
|
$pesananDatas = [
|
|
'kode_pesanan' => $kodenya,
|
|
'nama_pemesan' => $request->namaPemesan,
|
|
'nomor_pemesan' => $request->nomorPemesan,
|
|
'nomor_meja' => $request->nomorMeja,
|
|
'status_pesanan' => '1',
|
|
'tanggal_pesanan' => date('Y-m-d H:i:s'),
|
|
'keterangan_pesanan' => $request->keteranganPesanan ?? null,
|
|
'nomor_antrian' => $nomorAntrian,
|
|
'total_pesanan' => $orderMenusQty,
|
|
'total_bayar' => $orderMenusRupiah,
|
|
'grand_total' => $request->totalDiskon,
|
|
'nominal_bayar' => $request->totalDiskon,
|
|
'diskon_persen' => $request->diskon,
|
|
'nominal_kembali' => 0,
|
|
'status_bayar' => '1',
|
|
'user_id' => $user->id,
|
|
'jenis_pembayaran' => $request->jenis_pembayaran,
|
|
'rekening_coa_id' => $request->id_rekening_coa,
|
|
];
|
|
$pesananModels = \App\Models\Pesanan::create($pesananDatas);
|
|
}
|
|
|
|
foreach ($request->orderMenus as $key => $value) {
|
|
// calculate produk promo untuk mengurangi stok
|
|
$produk = Produk::find($value['id']);
|
|
|
|
foreach ($produk->kelompokKategori as $key => $value2) {
|
|
if ($value2->kode_kelompok_kategori == 'PROMO') {
|
|
if ($produk->stok_promo != 0 || $produk->stok_promo != null) {
|
|
$produk->stok_promo = $produk->stok_promo - $value['qty'];
|
|
$produk->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
$oderDatas = [
|
|
'pesanan_id' => $pesananModels->id,
|
|
'produk_id' => $value['id'],
|
|
'nama_produk' => $value['nama'],
|
|
'jumlah_produk' => $value['qty'],
|
|
'harga_produk' => $value['harga'],
|
|
'total_harga_produk' => $value['total'],
|
|
'diskon_persen' => $value['diskonSatuan'] ?? null,
|
|
'keterangan_produk' => $value['keterangan'] ?? null,
|
|
'status_pesanan' => $value['status_pesanan_dinein'] ?? null,
|
|
];
|
|
$detailPesananModels = \App\Models\DetailPesanan::create($oderDatas);
|
|
}
|
|
|
|
// keuangan
|
|
// jika pembayaran non tunai
|
|
if ($request->jenis_pembayaran == "2") {
|
|
BukuBesar::create([
|
|
'faktur' => 'PJ-' . date('YmdHis'),
|
|
'tanggal' => date('Y-m-d'),
|
|
'rekening_coa_id' => $request->id_rekening_coa,
|
|
'pesanans_id' => $pesananModels->id,
|
|
'kode_rekening_coa' => $request->kode_coa,
|
|
'keterangan_coa' => $request->keterangan_coa,
|
|
'keterangan' => 'Penjualan Non Tunai[' . $kodenya . ']',
|
|
'debet' => $request->totalDiskon,
|
|
'kredit' => 0
|
|
]);
|
|
BukuBesar::create([
|
|
'faktur' => 'PJ-' . date('YmdHis'),
|
|
'tanggal' => date('Y-m-d'),
|
|
'rekening_coa_id' => "35",
|
|
'pesanans_id' => $pesananModels->id,
|
|
'kode_rekening_coa' => "4.100.01",
|
|
'keterangan_coa' => "Pendapatan Penjualan",
|
|
'keterangan' => 'Penjualan Non Tunai[' . $kodenya . ']',
|
|
'debet' => 0,
|
|
'kredit' => $request->totalDiskon
|
|
]);
|
|
// jika pembayaran tunai
|
|
} else {
|
|
BukuBesar::create([
|
|
'faktur' => 'PJ-' . date('YmdHis'),
|
|
'tanggal' => date('Y-m-d'),
|
|
'rekening_coa_id' => "2",
|
|
'pesanans_id' => $pesananModels->id,
|
|
'kode_rekening_coa' => "1.100.01",
|
|
'keterangan_coa' => "Kas Kasir",
|
|
'keterangan' => 'Penjualan Tunai[' . $kodenya . ']',
|
|
'debet' => $request->totalDiskon,
|
|
'kredit' => 0
|
|
]);
|
|
BukuBesar::create([
|
|
'faktur' => 'PJ-' . date('YmdHis'),
|
|
'tanggal' => date('Y-m-d'),
|
|
'rekening_coa_id' => "35",
|
|
'pesanans_id' => $pesananModels->id,
|
|
'kode_rekening_coa' => "4.100.01",
|
|
'keterangan_coa' => "Pendapatan Penjualan",
|
|
'keterangan' => 'Penjualan Tunai[' . $kodenya . ']',
|
|
'debet' => 0,
|
|
'kredit' => $request->totalDiskon
|
|
]);
|
|
}
|
|
|
|
DB::commit();
|
|
// return url link page print
|
|
return ['url' => route('transaksi.print', $pesananModels->id) . '?print=true', 'message' => 'Pesanan berhasil ditambahkan'];
|
|
} catch (\Throwable $th) {
|
|
DB::rollBack();
|
|
dd($th->getMessage());
|
|
return redirect()->back()->with('error', 'Terjadi kesalahan');
|
|
}
|
|
|
|
return redirect()->back()->with('success', 'Pesanan berhasil ditambahkan');
|
|
}
|
|
|
|
public function print($id)
|
|
{
|
|
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
|
|
return view('pages.Kasir.print', compact('pesanan'));
|
|
}
|
|
|
|
public function detail($id)
|
|
{
|
|
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
|
|
return view('pages.Kasir.detail', compact('pesanan'));
|
|
}
|
|
|
|
public function selectPaket(Request $request)
|
|
{
|
|
$arrayKodeProduk = $request->kodeProduk;
|
|
// tampung data kodeProduk dari request ke variabel $kodeProduk
|
|
$kodeProduk = [];
|
|
|
|
usort($arrayKodeProduk, function ($a, $b) {
|
|
return $a['urutan'] - $b['urutan'];
|
|
});
|
|
|
|
foreach ($arrayKodeProduk as $key => $value) {
|
|
$kodeProduk[] = $value['kode_produk'];
|
|
}
|
|
$hasil = [];
|
|
$hasil[] = implode(' ', $kodeProduk);
|
|
|
|
// cari data produk berdasarkan kodeProduk
|
|
$produk = Produk::where('kode_produk', $hasil)->first();
|
|
// dd($produk);
|
|
return response()->json($produk);
|
|
}
|
|
}
|