Compare commits

...

9 Commits

30 changed files with 1781 additions and 198 deletions

View File

@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Admins\Dashboard;
use App\Helpers\ResponseFormatter;
use App\Http\Controllers\Controller;
use App\Models\KelompokKategori;
use App\Models\KelompokKategoriPivot;
use App\Models\MenuTerlarisView;
use Illuminate\Http\Request;
class DounatController extends Controller
{
public function getChartDounat()
{
$menuPaket = $this->menuPaket();
$menuIrit = $this->menuIrit();
return ResponseFormatter::success(['menuPaket' => $menuPaket, 'menuIrit' => $menuIrit]);
}
public function menuPaket()
{
// get menu terlaris where kelompok kategori id = 1
$data = MenuTerlarisView::whereHas('kelompokKategoriPivot', function ($query) {
$query->where('kelompok_kategori_id', 1);
})->where([
['nama_produk', 'not like', '%paket irit%'],
['kode_produk', 'not regexp', '^[a-zA-Z0-9]{2}$'],
['kode_produk', 'not regexp', '^[a-zA-Z0-9]{4}$']
])->orderBy('jumlah_produk_terjual', 'desc')->limit(6)->get();
return [
'labels' => $data->pluck('nama_produk'),
'data' => $data->pluck('jumlah_produk_terjual')
];
}
public function menuIrit()
{
// get menu terlaris where kelompok kategori id = 1
$data = MenuTerlarisView::whereHas('kelompokKategoriPivot', function ($query) {
$query->where([['kelompok_kategori_id', 2]]);
})->where([
['nama_produk', 'like', '%paket irit%'],
['kode_produk', 'not regexp', '^[a-zA-Z0-9]{2}$']
])->orderBy('jumlah_produk_terjual', 'desc')->limit(6)->get();
return [
'labels' => $data->pluck('nama_produk'),
'data' => $data->pluck('jumlah_produk_terjual')
];
}
}

View File

@ -0,0 +1,102 @@
<?php
namespace App\Http\Controllers\Admins\Dashboard;
use App\Helpers\ResponseFormatter;
use App\Http\Controllers\Controller;
use App\Models\MenuTerlarisView;
use Illuminate\Http\Request;
class DounatSatuanController extends Controller
{
public function getChartDounatSatuan()
{
$nasi = $this->nasi();
$sambal = $this->sambal();
$lauk = $this->lauk();
return ResponseFormatter::success(['menuNasi' => $nasi, 'menuSambal' => $sambal, 'menuLauk' => $lauk]);
}
public function nasi()
{
// get menu terlaris where kelompok kategori id = 1
$nasiPutih = MenuTerlarisView::where('nama_produk', 'like', '%nasi putih%')
->whereNull('tgl_start_promo')
->get();
$nasiJeruk = MenuTerlarisView::where('nama_produk', 'like', '%nasi jeruk%')
->whereNull('tgl_start_promo')
->get();
$nasiPecel = MenuTerlarisView::where('nama_produk', 'like', '%nasi pecel%')
->whereNull('tgl_start_promo')
->get();
return [
'labels' => ['Nasi Putih', 'Nasi Jeruk', 'Nasi Pecel'],
'data' => [$nasiPutih->sum('jumlah_produk_terjual'), $nasiJeruk->sum('jumlah_produk_terjual'), $nasiPecel->sum('jumlah_produk_terjual')]
];
}
public function sambal()
{
// get menu terlaris where kelompok kategori id = 1
$sambalMatah = MenuTerlarisView::where('nama_produk', 'like', '%sambal matah%')
->whereNull('tgl_start_promo')
->get();
$sambalIjo = MenuTerlarisView::where('nama_produk', 'like', '%sambal ijo%')
->whereNull('tgl_start_promo')
->get();
$sambalBawang = MenuTerlarisView::where('nama_produk', 'like', '%sambal bawang%')
->whereNull('tgl_start_promo')
->get();
return [
'labels' => ['Sambal Matah', 'Sambal Ijo', 'Sambal Bawang'],
'data' => [$sambalMatah->sum('jumlah_produk_terjual'), $sambalIjo->sum('jumlah_produk_terjual'), $sambalBawang->sum('jumlah_produk_terjual')]
];
}
public function lauk()
{
// get menu terlaris where kelompok kategori id = 1
$cakalan = MenuTerlarisView::where('nama_produk', 'like', '%cakalan%')
->whereNull('tgl_start_promo')
->get();
$usus = MenuTerlarisView::where('nama_produk', 'like', '%usus%')
->whereNull('tgl_start_promo')
->get();
$rempelo = MenuTerlarisView::where('nama_produk', 'like', '%rempelo%')
->whereNull('tgl_start_promo')
->get();
$kulit = MenuTerlarisView::where('nama_produk', 'like', '%kulit%')
->whereNull('tgl_start_promo')
->get();
$suwir = MenuTerlarisView::where('nama_produk', 'like', '%suwir%')
->whereNull('tgl_start_promo')
->get();
$paru = MenuTerlarisView::where('nama_produk', 'like', '%paru%')
->whereNull('tgl_start_promo')
->get();
$babat = MenuTerlarisView::where('nama_produk', 'like', '%babat%')
->whereNull('tgl_start_promo')
->get();
$udang = MenuTerlarisView::where('nama_produk', 'like', '%udang%')
->whereNull('tgl_start_promo')
->get();
$cumi = MenuTerlarisView::where('nama_produk', 'like', '%cumi%')
->whereNull('tgl_start_promo')
->get();
$sapi = MenuTerlarisView::where('nama_produk', 'like', '%sapi%')
->whereNull('tgl_start_promo')
->get();
return [
'labels' => ['Cakalan', 'Usus', 'Rempelo', 'Kulit', 'Suwir', 'Paru', 'Babat', 'Udang', 'Cumi', 'Sapi'],
'data' => [$cakalan->sum('jumlah_produk_terjual'), $usus->sum('jumlah_produk_terjual'), $rempelo->sum('jumlah_produk_terjual'), $kulit->sum('jumlah_produk_terjual'), $suwir->sum('jumlah_produk_terjual'), $paru->sum('jumlah_produk_terjual'), $babat->sum('jumlah_produk_terjual'), $udang->sum('jumlah_produk_terjual'), $cumi->sum('jumlah_produk_terjual'), $sapi->sum('jumlah_produk_terjual')]
];
}
}

View File

@ -7,6 +7,7 @@ use App\Models\DetailPesanan;
use App\Models\Pesanan;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class PenjualanController extends Controller
{
@ -56,8 +57,8 @@ class PenjualanController extends Controller
})
->addColumn('ubah', function ($data) {
return '<div class="btn-group">
<a href="javascript:void(0)" onclick="detail(\'' . $data->id . '\')"><span class="btn btn-xs btn-warning mr-1"><i class="fas fa-eye"></i></span></a>
<a href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i></span></a></div>';
<a class="btn btn-xs btn-warning mr-1" href="javascript:void(0)" onclick="detail(\'' . $data->id . '\')"><i class="fas fa-eye"></i></a>
<a class="btn btn-xs btn-success" href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><i class="fas fa-print"></i></a></div>';
})
->rawColumns(['nomor', 'nama_user', 'created_at', 'grand_total', 'ubah'])
->make(true);
@ -72,9 +73,9 @@ class PenjualanController extends Controller
public function getDataDetailPenjualan(Request $request)
{
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->get();
return response()->json(['status' => true, 'data' => $data]);
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->withTrashed()->get();
$pesanan = Pesanan::find($request->id_pesanan);
return response()->json(['status' => true, 'data' => $data, 'pesanan' => $pesanan]);
}
public function laporan(Request $request)
@ -106,4 +107,91 @@ class PenjualanController extends Controller
$mpdf->Output('Laporan_Penjualan.pdf', 'I');
return response()->header('Content-Type', 'application/pdf');
}
public function cancel(Request $request)
{
try {
DB::beginTransaction();
$pesanan = Pesanan::find($request->id);
$pesanan->status_pesanan = 3;
// delete detail pesanan
$pesanan->detailPesanan()->delete();
$pesanan->delete();
$pesanan->save();
DB::commit();
return response()->json(['status' => true, 'message' => 'Pesanan berhasil di cancel']);
} catch (\Throwable $th) {
DB::rollBack();
return response()->json(['status' => false, 'message' => 'Pesanan gagal di cancel']);
//throw $th;
}
}
public function cancelDetail(Request $request)
{
try {
DB::beginTransaction();
$detailPesanan = DetailPesanan::find($request->id);
$pesanan = Pesanan::find($detailPesanan->pesanan_id);
$pesanan->total_bayar = $pesanan->total_bayar - $detailPesanan->total_harga_produk;
// check the diskon in pesanan
$pesanan->grand_total = $pesanan->total_bayar - $pesanan->diskon_rupiah;
$pesanan->total_pesanan = $pesanan->total_pesanan - $detailPesanan->jumlah_produk;
$pesanan->save();
$detailPesanan->status_pesanan = '3';
$detailPesanan->delete();
$detailPesanan->save();
DB::commit();
return response()->json(['status' => true, 'message' => 'Pesanan berhasil di cancel']);
} catch (\Throwable $th) {
DB::rollBack();
return response()->json(['status' => false, 'message' => 'Pesanan gagal di cancel']);
//throw $th;
}
}
public function dibatalkan()
{
if (request()->ajax()) {
$data = Pesanan::with(['detailPesanan', 'user'])
->where('status_pesanan', 3)
->orderBy('tanggal_pesanan', 'desc')
->withTrashed()
->get();
return datatables()
->of($data)
->addIndexColumn()
->addColumn('nama_pemesan', function ($data) {
$nomor = $data->nomor_pemesan != null ? '(' . $data->nomor_pemesan . ')' : '';
return $data->nama_pemesan . ' ' . $nomor;
})
->addColumn('nomor_meja', function ($data) {
return $data->nomor_meja != null ? $data->nomor_meja : '-';
})
->addColumn('created_at', function ($data) {
return \Carbon\Carbon::parse($data->created_at)->format('d F Y H:i:s');
})
->addColumn('total_bayar_rp', function ($data) {
return 'Rp ' . number_format($data->total_bayar, 0, ',', '.');
})
->addColumn('grand_total_rp', function ($data) {
return 'Rp ' . number_format($data->grand_total, 0, ',', '.');
})
->addColumn('ubah', function ($data) {
return '<div class="btn-group">
<a href="javascript:void(0)" onclick="detail(\'' . $data->id . '\')"><span class="btn btn-xs btn-warning mr-1"><i class="fas fa-eye"></i></span></a>
<a href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i></span></a></div>';
})
->rawColumns(['nomor', 'nama_user', 'created_at', 'grand_total', 'ubah'])
->make(true);
}
return view('pages.admin.penjualan.dibatalkan');
}
}

View File

@ -72,7 +72,7 @@ class History extends Controller
public function getDataDetailHistory(Request $request)
{
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->get();
$data = Pesanan::with('detailPesanan')->find($request->id_pesanan);
return response()->json(['status' => true, 'data' => $data]);
}

View File

@ -23,7 +23,9 @@ class Transaksi extends Controller
public function index()
{
$orderCode = "ORD-" . strtoupper(random_str(6, random_str()));
// count pesanan by date now and add 1 for next count pesanan today
$lastCountPesanan = Pesanan::whereDate('created_at', date('Y-m-d'))->count() + 1;
$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();
@ -105,7 +107,6 @@ class Transaksi extends Controller
public function store(Request $request)
{
$request->validate([
'orderCode' => 'required',
'namaPemesan' => 'required',
@ -134,9 +135,16 @@ class Transaksi extends Controller
// calculate nomor antrian
$nomorAntrian = $lastCountPesanan;
if($request->jenis_pembayaran == "1"){
$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' => $request->orderCode,
'kode_pesanan' => $kodenya,
'nama_pemesan' => $request->namaPemesan,
'nomor_pemesan' => $request->nomorPemesan,
'nomor_meja' => $request->nomorMeja,
@ -155,9 +163,9 @@ class Transaksi extends Controller
'jenis_pembayaran' => $request->jenis_pembayaran,
];
$pesananModels = \App\Models\Pesanan::create($pesananDatas);
}else{
} else {
$pesananDatas = [
'kode_pesanan' => $request->orderCode,
'kode_pesanan' => $kodenya,
'nama_pemesan' => $request->namaPemesan,
'nomor_pemesan' => $request->nomorPemesan,
'nomor_meja' => $request->nomorMeja,
@ -200,56 +208,57 @@ class Transaksi extends Controller
'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"){
if ($request->jenis_pembayaran == "2") {
BukuBesar::create([
'faktur' => 'PJ-'.date('YmdHis'),
'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['.$request->orderCode.']',
'keterangan' => 'Penjualan Non Tunai[' . $request->orderCode . ']',
'debet' => $request->totalDiskon,
'kredit' => 0
]);
BukuBesar::create([
'faktur' => 'PJ-'.date('YmdHis'),
'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['.$request->orderCode.']',
'keterangan' => 'Penjualan Non Tunai[' . $request->orderCode . ']',
'debet' => 0,
'kredit' => $request->totalDiskon
]);
// jika pembayaran tunai
}else{
// jika pembayaran tunai
} else {
BukuBesar::create([
'faktur' => 'PJ-'.date('YmdHis'),
'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['.$request->orderCode.']',
'keterangan' => 'Penjualan Tunai[' . $request->orderCode . ']',
'debet' => $request->totalDiskon,
'kredit' => 0
]);
BukuBesar::create([
'faktur' => 'PJ-'.date('YmdHis'),
'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['.$request->orderCode.']',
'keterangan' => 'Penjualan Tunai[' . $request->orderCode . ']',
'debet' => 0,
'kredit' => $request->totalDiskon
]);

View File

@ -19,6 +19,7 @@ class DetailPesanan extends Model
'nama_produk',
'harga_produk',
'jumlah_produk',
'status_pesanan', // 0=takeaway,1=default,2=dinein,3=cancel
'total_harga_produk',
'keterangan_produk',
'diskon_id',

View File

@ -29,4 +29,10 @@ class KelompokKategori extends Model
{
return $this->hasMany(KelompokKategoriPivot::class, 'kelompok_kategori_id');
}
// menu terlaris
public function menuTerlaris()
{
return $this->belongsToMany(MenuTerlarisView::class, 'kelompok_kategori_pivots', 'kelompok_kategori_id', 'produk_id');
}
}

View File

@ -31,4 +31,9 @@ class MenuTerlarisView extends Model
{
return $this->belongsToMany(KelompokKategori::class, KelompokKategoriPivot::class, 'produk_id', 'kelompok_kategori_id');
}
public function kelompokKategoriPivot()
{
return $this->hasMany(KelompokKategoriPivot::class, 'produk_id');
}
}

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('pesanans', function (Blueprint $table) {
$table->enum('status_pesanan', [0, 1, 2, 3])->default(1)->comment('0=takeaway,1=default,2=dinein,3=cancel')->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('pesanans', function (Blueprint $table) {
$table->enum('status_pesanan', [0, 1, 2])->default(1)->comment('0=takeaway,1=default,2=dinein')->change();
});
}
};

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('detail_pesanans', function (Blueprint $table) {
$table->enum('status_pesanan', [0, 1, 2, 3])->default(1)->comment('0=takeaway,1=default,2=dinein,3=cancel')->after('jumlah_produk');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('detail_pesanans', function (Blueprint $table) {
$table->dropColumn('status_pesanan');
});
}
};

View File

@ -50,6 +50,7 @@
<th>Kode Pesanan</th>
<th>Pemesan</th>
<th>Nomor Meja</th>
<th>Urutan Pesanan</th>
<th>Tanggal & Jam</th>
<th>Total Pesanan</th>
<th>Sub Total</th>
@ -62,6 +63,7 @@
<tr>
<th class="text-right" colspan="5">Total</th>
<th></th>
<th></th>
<th class="text-right"></th>
<th></th>
<th class="text-right"></th>

View File

@ -34,6 +34,10 @@
data: 'nomor_meja',
name: 'nomor_meja'
},
{
data: 'nomor_antrian',
name: 'nomor_antrian'
},
{
data: 'created_at',
name: 'created_at'
@ -88,7 +92,7 @@
// GrandTotal over all pages
totalAll = api
.column(8)
.column(9)
.data()
.reduce((a, b) => intVal(a) + intVal(b), 0);
@ -97,7 +101,7 @@
// Total over this page
pageTotal = api
.column(6, {
.column(7, {
page: 'current'
})
.data()
@ -105,15 +109,15 @@
// total pesanan
totalPesanan = api
.column(5)
.column(6)
.data()
.reduce((a, b) => intVal(a) + intVal(b), 0);
// Update footer
api.column(5).footer().innerHTML = totalPesanan + ' Item';
api.column(6).footer().innerHTML =
api.column(6).footer().innerHTML = totalPesanan + ' Item';
api.column(7).footer().innerHTML =
'Rp. ' + pageTotal.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
api.column(8).footer().innerHTML =
api.column(9).footer().innerHTML =
'Rp. ' + totalAll.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
})
@ -147,13 +151,23 @@
success: function(result) {
$('#view_history_detail').empty()
if (result.status) {
const data = result.data
const data = result.data.detail_pesanan
let nomor = 1
// console.log(data);
data.forEach(x => {
if (x.status_pesanan == 0) {
statusnya = '<span class="badge badge-warning">TAKEAWAY</span>';
} else if (x.status_pesanan == 1) {
statusnya = '<span class="badge badge-info">DINEIN</span>';
} else if (x.status_pesanan == 2) {
statusnya = '<span class="badge badge-info">DINEIN</span>';
} else if (x.status_pesanan == 3) {
statusnya = '<span class="badge badge-danger">CANCEL</span>';
}
let tr = $('<tr></tr>')
tr.append('<td class="text-center">' + nomor + '</td>')
tr.append('<td>' + x.nama_produk + '</td>')
tr.append('<td>' + x.nama_produk +
statusnya + '</td>')
tr.append('<td>' + formatRupiah(x.harga_produk) + '</td>')
tr.append('<td class="text-center">' + x.jumlah_produk + '</td>')
tr.append('<td>' + formatRupiah(x.total_harga_produk) + '</td>')
@ -163,11 +177,34 @@
$('#view_history_detail').append(tr)
nomor++
})
$('#kode_pesanan').val(result.data.kode_pesanan)
$('#nama_pemesan').val(result.data.nama_pemesan)
$('#tanggal_jam').val(tanggal_jam(result.data.created_at))
$('#nomor_meja').val(result.data.nomor_meja)
$('#nomor_antrian').val(result.data.nomor_antrian)
$('#total_pesanan').val(result.data.total_pesanan + ' Item')
$('#sub_total').val(formatRupiah(result.data.total_bayar))
if (result.data.diskon_persen == null) {
result.data.diskon_persen = 0
}
$('#diskon_persen').val(result.data.diskon_persen + '%')
$('#grand_total').val(formatRupiah(result.data.grand_total))
}
}
})
$('#modal_detail_history').modal('show')
}
function tanggal_jam(tanggal) {
let date = new Date(tanggal)
let tahun = date.getFullYear()
let bulan = date.getMonth() + 1
let tanggalnya = date.getDate()
let jam = date.getHours()
let menit = date.getMinutes()
let detik = date.getSeconds()
return `${tanggalnya}-${bulan}-${tahun} ${jam}:${menit}:${detik}`
}
</script>
{{-- <script>
$(document).ready( function () {

View File

@ -1,13 +1,68 @@
<div class="modal fade" id="modal_detail_history" aria-labelledby="exampleModalLabel" >
<div class="modal fade" id="modal_detail_history" aria-labelledby="exampleModalLabel">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Detail History</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="col-md-12" id="data-pesanan">
<div class="row">
<div class="col-md-6">
<div class="form-group row">
<label class="col-md-4 col-form-label">Kode Pesanan</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="kode_pesanan"
readonly>
</div>
<label class="col-md-4 col-form-label">Pemesan</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="nama_pemesan"
readonly>
</div>
<label class="col-md-4 col-form-label">Tanggal & Jam</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="tanggal_jam"
readonly>
</div>
<label class="col-md-4 col-form-label">Nomor Meja</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="nomor_meja" readonly>
</div>
<label class="col-md-4 col-form-label">Urutan Pesanan</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="nomor_antrian"
readonly>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group row">
<label class="col-md-4 col-form-label">Total Pesanan</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="total_pesanan"
readonly>
</div>
<label class="col-md-4 col-form-label">Sub Total</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="sub_total" readonly>
</div>
<label class="col-md-4 col-form-label">Diskon(%)</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="diskon_persen"
readonly>
</div>
<label class="col-md-4 col-form-label">Grand Total</label>
<div class="col-md-8">
<input type="text" class="form-control form-control-sm" id="grand_total"
readonly>
</div>
</div>
</div>
</div>
</div>
<div class="table-responsive mt-3">
<table id="tabelku" class="table table-hover display" style="width: 100%; font-size: 14px;">
<thead>

View File

@ -16,6 +16,8 @@
})
</script>
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
<!-- Action for a table -->
<script>
$(document).ready(function() {
$('#tabelku').DataTable({
@ -67,6 +69,8 @@
})
})
</script>
<!-- Action Print -->
<script>
function printDapurTigaKali(id) {
var url = "{{ route('transaksi.printDapurTigaKali', '') }}/" + id + '?print=true'
@ -89,6 +93,7 @@
location.reload(true);
}
</script>
<script>
// set interval waktu pesanan
function showTime() {
@ -154,7 +159,8 @@
index = i;
} else {
if (id == menuId) {
isExist = true;
// isExist = true;
// isExist = false;
index = i;
}
}
@ -186,26 +192,26 @@
}
table.rows[index].cells[0].innerHTML = `
<td>
${params.nama_produk}
<br>
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan.." value='${paketFreenyaini}'>
</div>
</td>
<td>
${params.nama_produk}
<br>
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan.." value='${paketFreenyaini}'>
</div>
</td>
`;
} else {
table.rows[index].cells[0].innerHTML = `
<td>
${params.nama_produk}
<br>
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangane..">
</div>
</td>
`;
<td>
${params.nama_produk}
<br>
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan..">
</div>
</td>
`;
}
table.rows[index].cells[1].innerHTML = `
@ -219,6 +225,10 @@
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${row_id}, '${params.nama_produk}')">+</button>
</span>
</div>
<select name="status_pesanan_dinein" id="status_pesanan_dinein" class="custom-select-mystyle form-control-border">
<option value="2" selected>Dine In</option>
<option value="0">Take Away</option>
</select>
</td>
`;
table.rows[index].cells[2].innerHTML = `
@ -247,72 +257,80 @@
paketFreenyaini = paketFreenya.join(', ');
}
$('#tbody-order-menus').append(`
<tr id="row-${params.id}" data-id="${params.id}" data-row-id="${globalId}" data-nama="${params.nama_produk}" data-harga="${params.harga_produk}" data-qty="1" data-diskon-satuan="0" data-total="${params.harga_produk}">
<td>
${params.nama_produk}
<br>
<small class="text-primary">Rp. ${params.harga_produk}</small>
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" class="form-control rounded-3" data-keterangan="${paketFreenyaini}" placeholder="Keterangan.." value="${paketFreenyaini}">
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
</span>
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${menuQty}">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
</span>
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
</div>
</td>
<td class="text-center">
<button class="btn btn-danger btn-sm" onclick="deleteMenu(${globalId})">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
`);
<tr id="row-${params.id}" data-id="${params.id}" data-row-id="${globalId}" data-nama="${params.nama_produk}" data-harga="${params.harga_produk}" data-qty="1" data-diskon-satuan="0" data-total="${params.harga_produk}">
<td>
${params.nama_produk}
<br>
<small class="text-primary">Rp. ${params.harga_produk}</small>
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" class="form-control rounded-3" data-keterangan="${paketFreenyaini}" placeholder="Keterangan.." value="${paketFreenyaini}">
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
</span>
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${menuQty}">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
</span>
</div>
<select name="status_pesanan_dinein" id="status_pesanan_dinein" class="custom-select-mystyle form-control-border">
<option value="2" selected>Dine In</option>
<option value="0">Take Away</option>
</select>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
</div>
</td>
<td class="text-center">
<button class="btn btn-danger btn-sm" onclick="deleteMenu(${globalId})">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
`);
} else {
$('#tbody-order-menus').append(`
<tr id="row-${params.id}" data-id="${params.id}" data-row-id="${globalId}" data-nama="${params.nama_produk}" data-harga="${params.harga_produk}" data-qty="1" data-diskon-satuan="0" data-total="${params.harga_produk}">
<td>
${params.nama_produk}
<br>
<small class="text-primary">Rp. ${params.harga_produk}</small>
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan..">
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
</span>
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${menuQty}">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
</span>
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
</div>
</td>
<td class="text-center">
<button class="btn btn-danger btn-sm" onclick="deleteMenu(${globalId})">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
`);
<tr id="row-${params.id}" data-id="${params.id}" data-row-id="${globalId}" data-nama="${params.nama_produk}" data-harga="${params.harga_produk}" data-qty="1" data-diskon-satuan="0" data-total="${params.harga_produk}">
<td>
${params.nama_produk}
<br>
<small class="text-primary">Rp. ${params.harga_produk}</small>
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan..">
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
</span>
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${menuQty}">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
</span>
</div>
<select name="status_pesanan_dinein" id="status_pesanan_dinein" class="custom-select-mystyle form-control-border">
<option value="2" selected>Dine In</option>
<option value="0">Take Away</option>
</select>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
</div>
</td>
<td class="text-center">
<button class="btn btn-danger btn-sm" onclick="deleteMenu(${globalId})">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
`);
}
calculateTotal();
@ -383,7 +401,14 @@
var diskonSatuan = table.rows[index].getAttribute('data-diskon-satuan');
var total = table.rows[index].getAttribute('data-total');
var harga = table.rows[index].getAttribute('data-harga');
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute('data-keterangan');
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute(
'data-keterangan');
var realValueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].value;
if (valueKeterangan != realValueKeterangan) {
valueKeterangan = realValueKeterangan;
}
var selectNya = table.rows[index].cells[1].getElementsByTagName('select')[0].value;
qty = parseInt(qty) + 1;
var totalLama = parseInt(total) + parseInt(harga);
@ -416,6 +441,10 @@
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${params}, '${nama_produk}')">+</button>
</span>
</div>
<select name="status_pesanan_dinein" id="status_pesanan_dinein" class="custom-select-mystyle form-control-border">
<option value="2" ${selectNya == 2 ? 'selected' : ''}>Dine In</option>
<option value="0" ${selectNya == 0 ? 'selected' : ''}>Take Away</option>
</select>
</td>`;
calculateTotal();
@ -441,6 +470,8 @@
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute(
'data-keterangan');
var selectNya = table.rows[index].cells[1].getElementsByTagName('select')[0].value;
if (qty > 1) {
qty = parseInt(qty) - 1;
var totalLama = parseInt(total) - parseInt(harga);
@ -452,15 +483,15 @@
table.rows[index].setAttribute('data-total', totalLama);
table.rows[index].cells[0].innerHTML = `
<td>
${nama_produk}
<br>
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-3" placeholder="Keterangan..">
</div>
</td>
`;
<td>
${nama_produk}
<br>
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-3" placeholder="Keterangan..">
</div>
</td>
`;
table.rows[index].cells[1].innerHTML = `
<td class="text-center">
@ -473,6 +504,10 @@
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${params}, '${nama_produk}')">+</button>
</span>
</div>
<select name="status_pesanan_dinein" id="status_pesanan_dinein" class="custom-select-mystyle form-control-border">
<option value="2" ${selectNya == 2 ? 'selected' : ''}>Dine In</option>
<option value="0" ${selectNya == 0 ? 'selected' : ''}>Take Away</option>
</select>
</td>
`;
@ -646,7 +681,10 @@
diskonSatuan: diskonSatuan,
harga: harga,
total: total,
keterangan: document.getElementsByName('keterangan_satuan')[i - 1].value
keterangan: document.getElementsByName('keterangan_satuan')[i - 1]
.value,
status_pesanan_dinein: document.getElementsByName(
'status_pesanan_dinein')[i - 1].value,
});
}
}
@ -1080,3 +1118,110 @@
}
}
</script>
<!-- Action save to storage -->
<script>
function OrderStorage() {
var table = document.getElementById("order-menus");
var orderMenus = [];
for (var i = 1, row; row = table.rows[i]; i++) {
var id = row.getAttribute('data-id');
var nama = row.getAttribute('data-nama');
var qty = row.getAttribute('data-qty');
var diskonSatuan = row.getAttribute('data-diskon-satuan');
var harga = row.getAttribute('data-harga');
var total = row.getAttribute('data-total');
if (diskonSatuan != 0 && diskonSatuan != null && diskonSatuan != undefined) {
total = total - (total * (diskonSatuan / 100));
} else {
total = total
}
if (id != null || qty != null || total != null) {
orderMenus.push({
id: id,
nama: nama,
qty: qty,
diskonSatuan: diskonSatuan,
harga: harga,
total: total,
keterangan: document.getElementsByName('keterangan_satuan')[i - 1].value,
status_pesanan_dinein: document.getElementsByName('status_pesanan_dinein')[i - 1].value
});
}
}
let json = JSON.stringify({
name: 'Data Pesanan',
nama_pemesan: document.getElementsByName('nama-pemesan')[0].value,
nomor_pemesan: document.getElementsByName('nomor-pemesan')[0].value,
nomor_meja: document.getElementsByName('nomor-meja')[0].value,
keterangan_pesanan: document.getElementsByName('keterangan-pesanan')[0].value,
orderMenus
});
localStorage.setItem('OrderStorage', json);
}
function showOrderStorage(){
let data = JSON.parse(localStorage.OrderStorage);
document.getElementsByName('nama-pemesan')[0].value = data.nama_pemesan,
document.getElementsByName('nomor-pemesan')[0].value = data.nomor_pemesan,
document.getElementsByName('nomor-meja')[0].value = data.nomor_meja,
document.getElementsByName('keterangan-pesanan')[0].value = data.keterangan_pesanan,
console.log(data);
data.orderMenus.forEach((i, key) => {
globalId++;
$('#tbody-order-menus').append(`
<tr id="row-${i.id}" data-id="${i.id}" data-row-id="${globalId}" data-nama="${i.nama}" data-harga="${i.harga}" data-qty="${i.qty}" data-diskon-satuan="${i.diskonSatuan}" data-total="${i.harga * i.qty}">
<td>
${i.nama}
<br>
${(parseInt(i.diskonSatuan) > 0) ? '<small class="text-primary"><s>Rp. ' + (i.harga * i.qty) + '</s></small> | <small class="text-danger">Rp. ' + ((i.harga * i.qty) - ((i.harga * i.qty) * (i.diskonSatuan / 100))) + '</small>' : '<small class="text-primary">Rp. ' + (i.harga * i.qty) + '</small>'}
<div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" class="form-control rounded-3" data-keterangan="${i.keterangan}" placeholder="Keterangan.." value="${i.keterangan}">
</div>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${i.nama}')"><b>-</b></button>
</span>
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${i.qty}">
<span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${i.nama}')">+</button>
</span>
</div>
<select name="status_pesanan_dinein" id="status_pesanan_dinein" class="custom-select-mystyle form-control-border">
<option value="2" ${(i.status_pesanan_dinein == 2) ? 'selected' : ''}>Dine In</option>
<option value="0" ${(i.status_pesanan_dinein == 0) ? 'selected' : ''}>Take Away</option>
</select>
</td>
<td class="text-center">
<div class="input-group input-group-sm">
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="${i.diskonSatuan}" onkeyup="diskonSatuanMenu(${globalId}, '${i.nama}', this.value)">
</div>
</td>
<td class="text-center">
<button class="btn btn-danger btn-sm" onclick="deleteMenu(${globalId})">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
`);
});
calculateTotal();
}
showOrderStorage();
// show time every second
setInterval(OrderStorage, 1000);
</script>
@endpush

View File

@ -77,23 +77,24 @@
<body style="width: 58mm;">
<!-- Button Print -->
{{-- <div class="">
<div class="">
<div class="col-6 mb">
<button class="btn btn-info btn-block hidden-print" id="print-dapur">Print</button>
</div>
</div> --}}
</div>
<br>
<h2 style="text-align: center">Sepiring Telur Keriting</h2>
<p style="text-align: center">Jln. Jawa No. 28A, Jember</p>
<hr class="style2">
<h4 style="text-align: center">{{ $pesanan->kode_pesanan }}</h4>
<span style="display: flex; justify-content: space-between">
<span>
<p>{{ tanggal_indonesia($pesanan->tanggal_pesanan) }}</p>
<p>{{ date('H:i', strtotime($pesanan->tanggal_pesanan)) }}</p>
</span>
<span style="text-align: right">
<p>{{ $pesanan->kode_pesanan }}</p>
<p>Kasir: {{ $pesanan->user->name }}</p>
<p>Kasir:</p>
<p>{{ $pesanan->user->name }}</p>
</span>
</span>
<hr class="style2">
@ -120,7 +121,9 @@
<tbody>
@foreach ($pesanan->detailPesanan as $item)
<tr>
<td style="width: 100px;" colspan="5">{{ $item->nama_produk }}</td>
<td style="width: 100px;" colspan="5">{{ $item->nama_produk }}
{{ $item->status_pesanan == 0 ? '(TAKEAWAY)' : ($item->status_pesanan == 3 ? '(CANCEL)' : '(DINEIN)') }}
</td>
</tr>
<tr>
<td></td>
@ -170,14 +173,15 @@
<hr class="dashed-line" style="margin-top: 15px;">
<p style="text-align: center;font-size: 7pt">untuk dapur</p>
<hr class="dashed-line" style="margin-top: 10px;">
<h4 style="text-align: center">{{ $pesanan->kode_pesanan }}</h4>
<span style="display: flex; justify-content: space-between">
<span>
<p>{{ tanggal_indonesia($pesanan->tanggal_pesanan) }}</p>
<p>{{ date('H:i', strtotime($pesanan->tanggal_pesanan)) }}</p>
</span>
<span style="text-align: right">
<p>{{ $pesanan->kode_pesanan }}</p>
<p>Kasir: {{ $pesanan->user->name }}</p>
<p>Kasir:</p>
<p>{{ $pesanan->user->name }}</p>
</span>
</span>
<hr class="style2">
@ -209,6 +213,7 @@
<h4>
({{ $item->jumlah_produk }} X)
{{ $item->nama_produk }}
{{ $item->status_pesanan == 0 ? '(TAKEAWAY)' : ($item->status_pesanan == 3 ? '(CANCEL)' : '(DINEIN)') }}
</h4>
@if ($item->keterangan_produk != '')
<p>
@ -232,6 +237,8 @@
</tbody>
</table>
<hr class="style2">
<br>
<br>
</body>
<style>
/* Untuk menyembunyikan tombol print */
@ -307,7 +314,7 @@
// window.close();
// });
window.print();
// window.print();
const $btnPrint = document.querySelector("#print-dapur");
$btnPrint.addEventListener("click", () => {

View File

@ -77,7 +77,7 @@
<body style="width: 56mm;">
<!-- Button Print -->
{{-- <div class="">
<div class="">
<div class="col-6 mb">
<button class="btn btn-info btn-block hidden-print" id="print-dapur">Print</button>
</div>
@ -87,19 +87,20 @@
<div class="col-6 mb">
<button class="btn btn-danger btn-block hidden-print" id="close">Tutup</button>
</div>
</div> --}}
</div>
<br>
<h2 style="text-align: center">Sepiring Telur Keriting</h2>
<p style="text-align: center">Jln. Jawa No. 28A, Jember</p>
<hr class="style2">
<h4 style="text-align: center">{{ $pesanan->kode_pesanan }}</h4>
<span style="display: flex; justify-content: space-between">
<span>
<p>{{ tanggal_indonesia($pesanan->tanggal_pesanan) }}</p>
<p>{{ date('H:i', strtotime($pesanan->tanggal_pesanan)) }}</p>
</span>
<span style="text-align: right">
<p>{{ $pesanan->kode_pesanan }}</p>
<p>Kasir: {{ $pesanan->user->name }}</p>
<p>Kasir:</p>
<p>{{ $pesanan->user->name }}</p>
</span>
</span>
<hr class="style2">
@ -126,7 +127,9 @@
<tbody>
@foreach ($pesanan->detailPesanan as $item)
<tr>
<td style="width: 100px;" colspan="5">{{ $item->nama_produk }}</td>
<td style="width: 100px;" colspan="5">
{{ $item->nama_produk }}{{ $item->status_pesanan == 0 ? '(TAKEAWAY)' : ($item->status_pesanan == 3 ? '(CANCEL)' : '(DINEIN)') }}
</td>
</tr>
<tr>
<td></td>
@ -176,14 +179,15 @@
<hr class="dashed-line" style="margin-top: 15px;">
<p style="text-align: center;font-size: 7pt">untuk dapur</p>
<hr class="dashed-line" style="margin-top: 10px;">
<h4 style="text-align: center">{{ $pesanan->kode_pesanan }}</h4>
<span style="display: flex; justify-content: space-between">
<span>
<p>{{ tanggal_indonesia($pesanan->tanggal_pesanan) }}</p>
<p>{{ date('H:i', strtotime($pesanan->tanggal_pesanan)) }}</p>
</span>
<span style="text-align: right">
<p>{{ $pesanan->kode_pesanan }}</p>
<p>Kasir: {{ $pesanan->user->name }}</p>
<p>Kasir:</p>
<p>{{ $pesanan->user->name }}</p>
</span>
</span>
<hr class="style2">
@ -214,7 +218,7 @@
<td style="width: 80px;" colspan="3">
<h4>
({{ $item->jumlah_produk }} X)
{{ $item->nama_produk }}
{{ $item->nama_produk }}{{ $item->status_pesanan == 0 ? '(TAKEAWAY)' : ($item->status_pesanan == 3 ? '(CANCEL)' : '(DINEIN)') }}
</h4>
@if ($item->keterangan_produk != '')
<p>
@ -238,6 +242,8 @@
</tbody>
</table>
<hr class="style2">
<br>
<br>
</body>
<style>
/* Untuk menyembunyikan tombol print */
@ -320,7 +326,7 @@
// window.close();
// });
window.print();
// window.print();
const $btnPrint = document.querySelector("#print-dapur");
$btnPrint.addEventListener("click", () => {

View File

@ -77,25 +77,26 @@
<body style="width: 58mm;">
<!-- Button Print -->
{{-- <div class="">
<div class="">
<div class="col-6 mb">
<button class="btn btn-info btn-block hidden-print" id="print-dapur">Print</button>
</div>
</div> --}}
</div>
<br>
@for ($i = 0; $i < 2; $i++)
<hr class="dashed-line" style="margin-top: 15px;">
<p style="text-align: center;font-size: 7pt">Print Dapur</p>
<hr class="dashed-line" style="margin-top: 10px;">
<hr class="style2">
<h4 style="text-align: center">{{ $pesanan->kode_pesanan }}</h4>
<span style="display: flex; justify-content: space-between">
<span>
<p>{{ tanggal_indonesia($pesanan->tanggal_pesanan) }}</p>
<p>{{ date('H:i', strtotime($pesanan->tanggal_pesanan)) }}</p>
</span>
<span style="text-align: right">
<p>{{ $pesanan->kode_pesanan }}</p>
<p>Kasir: {{ $pesanan->user->name }}</p>
<p>Kasir:</p>
<p>{{ $pesanan->user->name }}</p>
</span>
</span>
<hr class="style2">
@ -125,7 +126,7 @@
<tr>
<td style="width: 80px;" colspan="3">
({{ $item->jumlah_produk }} X)
{{ $item->nama_produk }}
{{ $item->nama_produk }}{{ $item->status_pesanan == 0 ? '(TAKEAWAY)' : ($item->status_pesanan == 3 ? '(CANCEL)' : '(DINEIN)') }}
@if ($item->keterangan_produk != '')
<p>
&nbsp;&nbsp;&nbsp;&nbsp; ket: {{ $item->keterangan_produk }}
@ -149,6 +150,8 @@
</table>
<hr class="style2">
@endfor
<br>
<br>
</body>
<style>
/* Untuk menyembunyikan tombol print */
@ -224,7 +227,7 @@
// window.close();
// });
window.print();
// window.print();
const $btnPrint = document.querySelector("#print-dapur");
$btnPrint.addEventListener("click", () => {

View File

@ -77,25 +77,26 @@
<body style="width: 58mm;">
<!-- Button Print -->
{{-- <div class="">
<div class="">
<div class="col-6 mb">
<button class="btn btn-info btn-block hidden-print" id="print-dapur">Print</button>
</div>
</div> --}}
</div>
<br>
@for ($i = 0; $i < 3; $i++)
<hr class="dashed-line" style="margin-top: 15px;">
<p style="text-align: center;font-size: 7pt">Print Dapur</p>
<hr class="dashed-line" style="margin-top: 10px;">
<hr class="style2">
<h4 style="text-align: center">{{ $pesanan->kode_pesanan }}</h4>
<span style="display: flex; justify-content: space-between">
<span>
<p>{{ tanggal_indonesia($pesanan->tanggal_pesanan) }}</p>
<p>{{ date('H:i', strtotime($pesanan->tanggal_pesanan)) }}</p>
</span>
<span style="text-align: right">
<p>{{ $pesanan->kode_pesanan }}</p>
<p>Kasir: {{ $pesanan->user->name }}</p>
<p>Kasir:</p>
<p>{{ $pesanan->user->name }}</p>
</span>
</span>
<hr class="style2">
@ -126,7 +127,7 @@
<td style="width: 80px;" colspan="3">
<h4>
({{ $item->jumlah_produk }} X)
{{ $item->nama_produk }}
{{ $item->nama_produk }}{{ $item->status_pesanan == 0 ? '(TAKEAWAY)' : ($item->status_pesanan == 3 ? '(CANCEL)' : '(DINEIN)') }}
</h4>
@if ($item->keterangan_produk != '')
<p>
@ -152,6 +153,8 @@
</table>
<hr class="style2">
@endfor
<br>
<br>
</body>
<style>
/* Untuk menyembunyikan tombol print */
@ -227,7 +230,7 @@
// window.close();
// });
window.print();
// window.print();
const $btnPrint = document.querySelector("#print-dapur");
$btnPrint.addEventListener("click", () => {

View File

@ -260,7 +260,7 @@
$kelompokKategoriPivot->produk->tgl_start_promo <= \Carbon\Carbon::now() &&
$kelompokKategoriPivot->produk->tgl_end_promo >= \Carbon\Carbon::now())
@if ($kelompokKategoriPivot->produk->stok_promo === 0)
{{-- untuk promo aktif dan stok tersedia --}}
{{-- untuk promo aktif namun stok tidak tersedia --}}
<div class="col-xl-4 col-lg-6 col-md-6 col-sm-12">
<div class="card card-warning card-outline btn disabled">
<div class="card-header">
@ -298,7 +298,7 @@
</div>
</div>
@else
{{-- untuk promo dengan stok kosong --}}
{{-- untuk promo tersedia --}}
<div class="col-xl-4 col-lg-6 col-md-6 col-sm-12">
<div class="card card-warning card-outline btn"
onclick="aadMenu( {{ $kelompokKategoriPivot->produk }} )">
@ -337,17 +337,12 @@
</div>
</div>
@endif
@else
{{-- untuk promo tidak aktif --}}
@if ($loop->last)
Tidak ada promo
@endif
@endif
@else
@if ($kelompokKategoriPivot->kelompok_kategori_id == 2)
<div class="col-xl-3 col-lg-6 col-md-6 col-sm-12">
<div class="card card-warning card-outline btn"
onclick="aadMenu( {{ $kelompokKategoriPivot->produk }} )">
onclick="aadMenu( {{ $kelompokKategoriPivot->produk }})">
<div class="card-header px-0">
<h6 class="m-0 text-sm text-bold">
{{ $kelompokKategoriPivot->produk->nama_produk ?? '' }}
@ -427,8 +422,8 @@
<thead style="background-color: rgb(230, 230, 230)">
<tr>
<th class="text-center">Menu</th>
<th class="text-center" width="110px">Qty</th>
<th class="text-center" width="65px">(%)</th>
<th class="text-center" width="115px">Qty</th>
<th class="text-center" width="70px">(%)</th>
<th class="text-center" width="30px">
<i class="fas fa-cog"></i>
</th>
@ -567,8 +562,29 @@
</style>
<link rel="stylesheet" href="{{ asset('assets/plugins/toastr/toastr.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }}">
<style>
.custom-select-mystyle {
display: inline-block;
width: 100%;
height: calc(2.25rem + 2px);
padding: .375rem .375rem .375rem .375em;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
vertical-align: middle;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .175rem center/8px 10px no-repeat;
border: 1px solid #ced4da;
border-radius: .25rem;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-color: white;
margin-top: 8px;
}
</style>
@endpush
@include('pages.Kasir.js')
@endpush

View File

@ -0,0 +1,204 @@
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">Paket Spesial Terlaris</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<!-- /.card-header -->
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="chart-responsive">
<canvas id="pieChartPaket" height="150"></canvas>
</div>
<!-- ./chart-responsive -->
</div>
<div class="col-md-6">
<ul class="chart-legend clearfix" id="menuPaketLegend">
</ul>
<!-- ./chart-responsive -->
</div>
</div>
<!-- /.row -->
</div>
<!-- /.card-body -->
</div>
</div>
<!-- /.col-lg-3 -->
<div class="col-lg-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">Paket Irit Terlaris</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<!-- /.card-header -->
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="chart-responsive">
<canvas id="pieChartIrit" height="150"></canvas>
</div>
<!-- ./chart-responsive -->
</div>
<div class="col-md-6">
<ul class="chart-legend clearfix" id="menuIritLegend">
</ul>
<!-- ./chart-responsive -->
</div>
</div>
<!-- /.row -->
</div>
<!-- /.card-body -->
</div>
</div>
<!-- /.col-lg-3 -->
</div>
<!-- /.row -->
</div>
<!-- /.container-fluid -->
</div>
<!-- /.content -->
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-lg-4">
<div class="card">
<div class="card-header">
<h3 class="card-title">Nasi Terlaris</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<!-- /.card-header -->
<div class="card-body">
<div class="col-md-12">
<div class="chart-responsive">
<canvas id="pieChartNasi" height="150"></canvas>
</div>
<!-- ./chart-responsive -->
</div>
<div class="col-md-12">
<br>
<ul class="chart-legend clearfix" id="menuNasiLegend">
</ul>
<br>
<!-- ./chart-responsive -->
</div>
<!-- /.row -->
</div>
<!-- /.card-body -->
</div>
</div>
<!-- /.col-lg-3 -->
<div class="col-lg-4">
<div class="card">
<div class="card-header">
<h3 class="card-title">Sambal Terlaris</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<!-- /.card-header -->
<div class="card-body">
<div class="col-md-12">
<div class="chart-responsive">
<canvas id="pieChartSambal" height="150"></canvas>
</div>
<!-- ./chart-responsive -->
</div>
<div class="col-md-12">
<br>
<ul class="chart-legend clearfix" id="menuSambalLegend">
</ul>
<br>
<!-- ./chart-responsive -->
</div>
<!-- /.row -->
</div>
<!-- /.card-body -->
</div>
</div>
<!-- /.col-lg-3 -->
<div class="col-lg-4">
<div class="card">
<div class="card-header">
<h3 class="card-title">Lauk Terlaris</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<!-- /.card-header -->
<div class="card-body">
<div class="row">
<div class="col-md-12">
<div class="chart-responsive">
<canvas id="pieChartLauk" height="150"></canvas>
</div>
<!-- ./chart-responsive -->
</div>
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
<ul class="chart-legend clearfix" id="menuLaukLegend1">
</ul>
<!-- ./chart-responsive -->
</div>
<div class="col-md-6">
<ul class="chart-legend clearfix" id="menuLaukLegend2">
</ul>
<!-- ./chart-responsive -->
</div>
</div>
</div>
</div>
<!-- /.row -->
</div>
<!-- /.card-body -->
</div>
</div>
<!-- /.col-lg-3 -->
</div>
<!-- /.row -->
</div>
<!-- /.container-fluid -->
</div>
<!-- /.content -->

View File

@ -0,0 +1,271 @@
@push('scripts')
<script src="{{ asset('assets/plugins/chart.js/Chart.min.js') }}"></script>
<!-- ChartJS -->
<script>
$(function() {
'use strict'
$.ajax({
url: "{{ route('dashboard.getChartDounat') }}",
type: "GET",
cache: false,
async: false,
success: function(response) {
var data = response.data;
chartPaket(data.menuPaket);
chartIrit(data.menuIrit);
},
error: function(response) {
console.log(response);
}
})
})
function chartPaket(params) {
//-------------
// - PIE CHART -
//-------------
// Get context with jQuery - using jQuery's .get() method.
var pieChartCanvas = $('#pieChartPaket').get(0).getContext('2d')
var data = params;
var color = ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
'#3c8dbc', '#d2d6de'
]
var menuPaketLegend = $('#menuPaketLegend');
$.each(data.labels, function(index, value) {
menuPaketLegend.append('<li><i class="far fa-circle" style="color:' +
color[index] + '"></i> ' + value + ' : ' + data.data[
index] + '</li>');
});
var pieData = {
labels: data.labels,
datasets: [{
data: data.data,
backgroundColor: color
// backgroundColor: ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
// '#3c8dbc', '#d2d6de', '#605ca8', '#ff851b', '#00a65a',
// '#f39c12'
// ]
}]
}
var pieOptions = {
legend: {
display: false
}
}
// Create pie or douhnut chart
// You can switch between pie and douhnut using the method below.
// eslint-disable-next-line no-unused-vars
var pieChart = new Chart(pieChartCanvas, {
type: 'pie',
data: pieData,
options: pieOptions
})
}
function chartIrit(params) {
//-------------
// - PIE CHART -
//-------------
// Get context with jQuery - using jQuery's .get() method.
var pieChartCanvas = $('#pieChartIrit').get(0).getContext('2d')
var data = params;
var color = ['#605ca8', '#ff851b', '#00a65a', '#f39c12', '#00c0ef', '#3c8dbc'];
var menuIritLegend = $('#menuIritLegend');
$.each(data.labels, function(index, value) {
menuIritLegend.append('<li><i class="far fa-circle" style="color:' +
color[index] + '"></i> ' + value + ' : ' + data.data[
index] + '</li>');
});
var pieData = {
labels: data.labels,
datasets: [{
data: data.data,
backgroundColor: color
// backgroundColor: ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
// '#3c8dbc', '#d2d6de', '#605ca8', '#ff851b', '#00a65a',
// '#f39c12'
// ]
}]
}
var pieOptions = {
legend: {
display: false
}
}
// Create pie or douhnut chart
// You can switch between pie and douhnut using the method below.
// eslint-disable-next-line no-unused-vars
var pieChart = new Chart(pieChartCanvas, {
type: 'pie',
data: pieData,
options: pieOptions
})
}
</script>
<script>
$(function() {
'use strict'
$.ajax({
url: "{{ route('dashboard.getChartDounatSatuan') }}",
type: "GET",
cache: false,
async: false,
success: function(response) {
var data = response.data;
chartNasi(data.menuNasi);
chartSambal(data.menuSambal);
chartLauk(data.menuLauk);
},
error: function(response) {
console.log(response);
}
})
})
function chartNasi(params) {
//-------------
// - PIE CHART -
//-------------
// Get context with jQuery - using jQuery's .get() method.
var pieChartCanvas = $('#pieChartNasi').get(0).getContext('2d')
var data = params;
var color = ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
'#3c8dbc', '#d2d6de'
]
var menuNasiLegend = $('#menuNasiLegend');
$.each(data.labels, function(index, value) {
menuNasiLegend.append('<li><i class="far fa-circle" style="color:' +
color[index] + '"></i> ' + value + ' : ' + data.data[
index] + '</li>');
});
var pieData = {
labels: data.labels,
datasets: [{
data: data.data,
backgroundColor: color
// backgroundColor: ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
// '#3c8dbc', '#d2d6de', '#605ca8', '#ff851b', '#00a65a',
// '#f39c12'
// ]
}]
}
var pieOptions = {
legend: {
display: false
}
}
// Create pie or douhnut chart
// You can switch between pie and douhnut using the method below.
// eslint-disable-next-line no-unused-vars
var pieChart = new Chart(pieChartCanvas, {
type: 'doughnut',
data: pieData,
options: pieOptions
})
}
function chartSambal(params) {
//-------------
// - PIE CHART -
//-------------
// Get context with jQuery - using jQuery's .get() method.
var pieChartCanvas = $('#pieChartSambal').get(0).getContext('2d')
var data = params;
var color = ['#605ca8', '#ff851b', '#00a65a', '#f39c12', '#00c0ef', '#3c8dbc'];
var menuSambalLegend = $('#menuSambalLegend');
$.each(data.labels, function(index, value) {
menuSambalLegend.append('<li><i class="far fa-circle" style="color:' +
color[index] + '"></i> ' + value + ' : ' + data.data[
index] + '</li>');
});
var pieData = {
labels: data.labels,
datasets: [{
data: data.data,
backgroundColor: color
// backgroundColor: ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
// '#3c8dbc', '#d2d6de', '#605ca8', '#ff851b', '#00a65a',
// '#f39c12'
// ]
}]
}
var pieOptions = {
legend: {
display: false
}
}
// Create pie or douhnut chart
// You can switch between pie and douhnut using the method below.
// eslint-disable-next-line no-unused-vars
var pieChart = new Chart(pieChartCanvas, {
type: 'doughnut',
data: pieData,
options: pieOptions
})
}
function chartLauk(params) {
//-------------
// - PIE CHART -
//-------------
// Get context with jQuery - using jQuery's .get() method.
var pieChartCanvas = $('#pieChartLauk').get(0).getContext('2d')
var data = params;
var color = ['#605ca8', '#ff851b', '#00a65a', '#f39c12', '#00c0ef', '#3c8dbc', '#d2d6de', '#f56954', '#4b0082',
'#ff0000'
];
var menuLaukLegend1 = $('#menuLaukLegend1');
var menuLaukLegend2 = $('#menuLaukLegend2');
$.each(data.labels, function(index, value) {
if (index > 4) {
menuLaukLegend2.append('<li><i class="far fa-circle" style="color:' +
color[index] + '"></i> ' + value + ' : ' + data.data[
index] + '</li>');
} else {
menuLaukLegend1.append('<li><i class="far fa-circle" style="color:' +
color[index] + '"></i> ' + value + ' : ' + data.data[
index] + '</li>');
}
});
var pieData = {
labels: data.labels,
datasets: [{
data: data.data,
backgroundColor: color
// backgroundColor: ['#f56954', '#00a65a', '#f39c12', '#00c0ef',
// '#3c8dbc', '#d2d6de', '#605ca8', '#ff851b', '#00a65a',
// '#f39c12'
// ]
}]
}
var pieOptions = {
legend: {
display: false
}
}
// Create pie or douhnut chart
// You can switch between pie and douhnut using the method below.
// eslint-disable-next-line no-unused-vars
var pieChart = new Chart(pieChartCanvas, {
type: 'doughnut',
data: pieData,
options: pieOptions
})
}
</script>
@endpush

View File

@ -208,6 +208,8 @@
<!-- /.container-fluid -->
</div>
@include('pages.admin.dashboard.chart')
<div class="content">
<div class="container-fluid">
<div class="row">
@ -280,5 +282,6 @@
@push('styles')
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }} ">
@endpush
@include('pages.admin.dashboard.chartjs')
@include('pages.admin.dashboard.js')

View File

@ -330,7 +330,7 @@
async: false,
success: function(response) {
var data = response.data;
console.log(data);
// console.log(data);
changeDataFromCalculate('penjualanBulan', data.pendapatanBulan
.penjualanSatuBulan, data.pendapatanBulan.percentageOfSalesGrowth,
data.pendapatanBulan.statusCalculation)

View File

@ -0,0 +1,86 @@
@extends('layouts.base')
@section('content-header')
<div class="col-12">
<div class="container" style="display: contents">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0"> Penjualan Dibatalkan</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item">Home</li>
<li class="breadcrumb-item">Transaksi</li>
<li class="breadcrumb-item active">Dibatalkan</li>
</ol>
</div>
</div>
</div>
</div>
@endsection
@section('content')
<div class="col-12 mt-2">
<div class="container" style="display: contents">
<div class="card">
<div class="card bg-info" style="min-height:5px; border-radius:1px;"></div>
<div class="card-body">
<div class="col-md-12">
<label>Filter Pencarian:</label>
<form action="{{ route('penjualan.laporan') }}" method="POST">
@csrf
<div class="row">
<div class="col-md-3">
<input type="date" class="form-control form-control-sm" id="filter_tanggal_1"
name="filter_tanggal_1" value="{{ date('Y-m-d') }}">
</div>
<p>s/d</p>
<div class="col-md-3">
<input type="date" class="form-control form-control-sm" id="filter_tanggal_2"
name="filter_tanggal_2" value="{{ date('Y-m-d') }}">
</div>
<div class="col-md-4">
<a href="javascript:void(0)" class="btn btn-sm btn-primary" id="btn_filter"><i
class="fas fa-search mr-1"></i>Filter data</a>
</div>
</div>
</form>
</div>
<div class="col-md-12">
<div class="table-responsive mt-3">
<table id="tabeldibatalkan" class="table table-hover display" style="width: 100%">
<thead>
<tr>
<th class="text-center">No</th>
<th>Kode Pesanan</th>
<th>Pemesan</th>
<th>Nomor Meja</th>
<th>Tanggal & Jam</th>
<th>Total Pesanan</th>
<th>Sub Total</th>
<th>Diskon(%)</th>
<th>Grand Total</th>
<th class="text-center"><i class="fas fa-cog"></i></th>
</tr>
</thead>
<tfoot>
<tr>
<th class="text-right" colspan="5">Total</th>
<th></th>
<th class="text-right"></th>
<th></th>
<th class="text-right"></th>
<th class="text-center"><i class="fas fa-cog"></i></th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@include('pages.admin.penjualan.style')
@include('pages.admin.penjualan.js_dibatalkan')

View File

@ -25,28 +25,35 @@
<div class="card">
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
<div class="card-body">
<div class="col-md-12">
<label>Filter Pencarian:</label>
<form action="{{ route('penjualan.laporan') }}" method="POST">
@csrf
<div class="row">
<div class="col-md-2">
<input type="date" class="form-control form-control-sm" id="filter_tanggal_1"
name="filter_tanggal_1" value="{{ date('Y-m-d') }}">
<div class="row">
<div class="col-md-10">
<label>Filter Pencarian:</label>
<form action="{{ route('penjualan.laporan') }}" method="POST">
@csrf
<div class="row">
<div class="col-md-3">
<input type="date" class="form-control form-control-sm" id="filter_tanggal_1"
name="filter_tanggal_1" value="{{ date('Y-m-d') }}">
</div>
<p>s/d</p>
<div class="col-md-3">
<input type="date" class="form-control form-control-sm" id="filter_tanggal_2"
name="filter_tanggal_2" value="{{ date('Y-m-d') }}">
</div>
<div class="col-md-4">
<a href="javascript:void(0)" class="btn btn-sm btn-primary" id="btn_filter"><i
class="fas fa-search mr-1"></i>Filter data</a>
<button class="btn btn-sm btn-warning" id="cetak_laporan" type="submit"><i
class="fas fa-print mr-1"></i>Cetak Laporan Penjualan</button>
</div>
</div>
<p>s/d</p>
<div class="col-md-2">
<input type="date" class="form-control form-control-sm" id="filter_tanggal_2"
name="filter_tanggal_2" value="{{ date('Y-m-d') }}">
</div>
<div class="col-md-2">
<a href="javascript:void(0)" class="btn btn-sm btn-primary" id="btn_filter"><i
class="fas fa-search mr-1"></i>Filter data</a>
<button class="btn btn-sm btn-warning" id="cetak_laporan" type="submit"><i
class="fas fa-print mr-1"></i>Cetak</button>
</div>
</div>
</form>
</form>
</div>
<div class="col-md-2" style="text-align: right">
{{-- <a class="btn btn-sm btn-info mt-4" id="penjualan_cancel"
href="{{ route('penjualan.dibatalkan') }}"><i class="fas fa-table mr-1"></i>Penjualan
Dibatalkan</a> --}}
</div>
</div>
<div class="col-md-12">
<div class="table-responsive mt-3">

View File

@ -1,5 +1,6 @@
@push('scripts')
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
<script src="{{ asset('assets/plugins/sweetalert2/sweetalert2.min.js') }}"></script>
<script>
$(document).ready(function() {
let dataTable = $('#tabelku').DataTable({
@ -154,15 +155,57 @@
let tr = $('<tr></tr>')
tr.append('<td class="text-center">' + nomor + '</td>')
tr.append('<td>' + x.nama_produk + '</td>')
tr.append('<td>' + formatRupiah(x.harga_produk) + '</td>')
tr.append('<td class="text-center">' + x.jumlah_produk + '</td>')
tr.append('<td>' + formatRupiah(x.total_harga_produk) + '</td>')
tr.append('<td class="text-center">' + x.diskon_persen + '%</td>')
tr.append('<td class="text-center">' + (x.keterangan_produk ?? '-') +
'</td>')
tr.append('<td>' + formatRupiah(x.harga_produk) + '</td>')
tr.append('<td class="text-center">' + x.jumlah_produk + '</td>')
tr.append('<td class="text-center">' + x.diskon_persen + '%</td>')
tr.append('<td>' + formatRupiah(x.total_harga_produk) + '</td>')
if (x.status_pesanan != 3) {
tr.append(
'<td class="text-center"><button class="btn btn-danger btn-sm cancelOrderDetailBtn" data-id="' +
x.id + '" data-produk="' + x.nama_produk +
'">cancel</button></td>')
} else {
tr.append(
'<td class="text-center"><button class="btn btn-warning btn-sm disabled" data-id="' +
x.id + '" data-produk="' + x.nama_produk +
'">tercancel</button></td>')
}
// cetakStruk
$('#cetakStruk').attr('onclick', 'print(' + result.pesanan.id + ')')
$('#view_penjualan_detail').append(tr)
nomor++
})
// add footer
let tfoot = $('<tr></tr>')
tfoot.append('<td colspan="6" class="text-right font-weight-bold">Total</td>')
tfoot.append('<td>' + formatRupiah(result.pesanan.grand_total) + '</td>')
tfoot.append('<td colspan="2"></td>')
$('#view_penjualan_detail_tfoot').empty().append(tfoot)
// set attribute to label
$('#kode_pesanan').text('Kode Pesanan: ' + result.pesanan.kode_pesanan)
$('#nama_pemesan').text('Nama Pemesan: ' + result.pesanan.nama_pemesan)
$('#nomor_meja').text('Nomor Meja: ' + result.pesanan.nomor_meja)
$('#urutan_pesanan').text('Urutan Pesanan: ' + result.pesanan.nomor_antrian)
$('#tanggal_pesan').text('Tanggal Pesan: ' + result.pesanan.tanggal_pesanan)
$('#total_pesanan').text('Total Pesanan: ' + result.pesanan.total_pesanan + ' Item')
$('#sub_total_pesanan').text('Sub Total: ' + formatRupiah(result.pesanan.total_bayar))
if (result.pesanan.diskon_persen == null) {
result.pesanan.diskon_persen = 0
}
$('#diskon_persen_pesanan').text('Diskon(%): ' + result.pesanan.diskon_persen + '%')
$('#grand_total_pesanan').text('Grand Total: ' + formatRupiah(result.pesanan
.grand_total))
// attach attribute to button
$('#cancelPesanan').attr('data-id', result.pesanan.id)
$('#cancelPesanan').attr('data-kode', result.pesanan.kode_pesanan)
$('#cancelPesanan').attr('data-nama', result.pesanan.nama_pemesan)
// attach a function to button
$('#cancelPesanan').attr('onclick', 'cancelPesanan(' + result.pesanan.id + ', "' +
result.pesanan.kode_pesanan + '", "' + result.pesanan.nama_pemesan + '")')
}
}
})
@ -191,6 +234,148 @@
return rupiah;
}
$(document).on('click', '.cancelOrderBtn', function() {
// get arttibute data-kode_pesanan from button
let id = $(this).attr('data-id');
let kode_pesanan = $(this).attr('data-kode_pesanan');
let nama_pemesanan = $(this).attr('data-nama_pemesan');
var text = "Membatalkan pesanan dengan data <br> Kode Pesanan: " + kode_pesanan +
" <br> Nama Pemesan: " +
nama_pemesanan +
" ?";
Swal.fire({
title: 'Apakah anda yakin?',
html: text,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Hapus!',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
type: "DELETE",
url: "{{ route('penjualan.cancel') }}",
data: {
_token: "{{ csrf_token() }}",
id: id
},
success: function(result) {
console.log(result);
if (result.status) {
Swal.fire(
'Berhasil!',
result.message,
'success'
)
$('#tabelku').DataTable().ajax.reload();
} else {
Swal.fire(
'Gagal!',
result.message,
'error'
)
}
}
})
}
})
})
$(document).on('click', '.cancelOrderDetailBtn', function() {
// get arttibute data-kode_pesanan from button
let id = $(this).attr('data-id');
let produk = $(this).attr('data-produk');
var text = "Membatalkan pesanan dengan data <br> Menu Pesanan: " + produk +
" ?";
Swal.fire({
title: 'Apakah anda yakin?',
html: text,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Hapus!',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
type: "DELETE",
url: "{{ route('penjualan.cancelDetail') }}",
data: {
_token: "{{ csrf_token() }}",
id: id
},
success: function(result) {
console.log(result);
if (result.status) {
Swal.fire(
'Berhasil!',
result.message,
'success'
)
$('#tabelku').DataTable().ajax.reload();
} else {
Swal.fire(
'Gagal!',
result.message,
'error'
)
}
}
})
}
})
})
function cancelPesanan(id, kode, nama) {
var text = "Membatalkan pesanan dengan data Kode Pesanan: " + kode +
" Nama Pemesan: " +
nama +
" ?";
Swal.fire({
title: 'Apakah anda yakin?',
text: text,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Hapus!',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
type: "DELETE",
url: "{{ route('penjualan.cancel') }}",
data: {
_token: "{{ csrf_token() }}",
id: id
},
success: function(result) {
if (result.status) {
Swal.fire(
'Berhasil!',
result.message,
'success'
)
$('#modal_detail_penjualan').modal('hide');
$('#tabelku').DataTable().ajax.reload();
} else {
Swal.fire(
'Gagal!',
result.message,
'error'
)
}
}
})
}
})
}
// // cetak_laporan
// $('#cetak_laporan').on('click', function() {
// let filter_tanggal_1 = $("#filter_tanggal_1").val()

View File

@ -0,0 +1,196 @@
@push('scripts')
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
<script src="{{ asset('assets/plugins/sweetalert2/sweetalert2.min.js') }}"></script>
<script>
$(document).ready(function() {
let dataTable = $('#tabeldibatalkan').DataTable({
aLengthMenu: [
[25, 50, 100, 200, -1],
[25, 50, 100, 200, "All"]
],
processing: true,
serverSide: true,
ajax: {
url: '{{ route('penjualan.dibatalkan') }}',
data: function(d) {
d.filter_tanggal_1 = $("#filter_tanggal_1").val();
d.filter_tanggal_2 = $("#filter_tanggal_2").val();
}
},
columns: [{
data: 'DT_RowIndex',
name: 'DT_RowIndex',
orderable: false,
searchable: false,
className: 'text-center'
},
{
data: 'kode_pesanan',
name: 'kode_pesanan'
},
{
data: 'nama_pemesan',
name: 'nama_pemesan'
},
{
data: 'nomor_meja',
name: 'nomor_meja'
},
{
data: 'created_at',
name: 'created_at'
},
{
data: 'total_pesanan',
name: 'total_pesanan',
className: 'text-center'
},
{
data: 'total_bayar',
name: 'total_bayar',
className: 'text-right',
render: function(data) {
// change to IDR
return 'Rp. ' + data.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
},
{
data: 'diskon_persen',
name: 'diskon_persen',
className: 'text-center',
render: function(data) {
return data ?? 0;
}
},
{
data: 'grand_total',
name: 'grand_total',
className: 'text-right',
render: function(data) {
// change to IDR
return 'Rp. ' + data.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
},
{
data: 'ubah',
name: 'ubah',
className: 'text-center'
},
],
footerCallback: function(row, data, start, end, display) {
let api = this.api();
// Remove the formatting to get integer data for summation
let intVal = function(i) {
return typeof i === 'string' ?
i.replace(/[\$,]/g, '') * 1 :
typeof i === 'number' ?
i :
0;
};
// GrandTotal over all pages
totalAll = api
.column(8)
.data()
.reduce((a, b) => intVal(a) + intVal(b), 0);
// GrandTotal over all pages
// Total over this page
pageTotal = api
.column(6, {
page: 'current'
})
.data()
.reduce((a, b) => intVal(a) + intVal(b), 0);
// total pesanan
totalPesanan = api
.column(5)
.data()
.reduce((a, b) => intVal(a) + intVal(b), 0);
// Update footer
api.column(5).footer().innerHTML = totalPesanan + ' Item';
api.column(6).footer().innerHTML =
'Rp. ' + pageTotal.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
api.column(8).footer().innerHTML =
'Rp. ' + totalAll.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
})
$('#btn_filter').on('click', function() {
if ($("#filter_tanggal_1").val() == "" || $("#filter_tanggal_2").val() == "") {
alert("Input pencarian tidak boleh kosong")
} else {
dataTable.ajax.reload();
}
});
})
</script>
<script>
function print(id) {
var url = "{{ route('penjualan.print', '') }}/" + id + '?print=true'
// window.open(url, '_blank');
window.open(url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
}
</script>
<script>
function detail(id_pesanan) {
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: "POST",
url: "{{ route('penjualan.getDataDetailPenjualan') }}",
data: {
id_pesanan: id_pesanan,
},
success: function(result) {
$('#view_penjualan_detail').empty()
if (result.status) {
const data = result.data
let nomor = 1
// console.log(data);
data.forEach(x => {
let tr = $('<tr></tr>')
tr.append('<td class="text-center">' + nomor + '</td>')
tr.append('<td>' + x.nama_produk + '</td>')
tr.append('<td>' + formatRupiah(x.harga_produk) + '</td>')
tr.append('<td class="text-center">' + x.jumlah_produk + '</td>')
tr.append('<td>' + formatRupiah(x.total_harga_produk) + '</td>')
tr.append('<td class="text-center">' + x.diskon_persen + '%</td>')
tr.append('<td class="text-center">' + (x.keterangan_produk ?? '-') +
'</td>')
$('#view_penjualan_detail').append(tr)
nomor++
})
}
}
})
$('#modal_detail_penjualan').modal('show')
}
</script>
<script>
function formatRupiah(angka) {
var bilangan = parseInt(angka);
// Cek apakah bilangan negatif atau positif
var minus = "";
if (bilangan < 0) {
minus = "-";
bilangan = Math.abs(bilangan);
}
// Konversi angka menjadi format ribuan dengan menambahkan titik
var reverse = bilangan.toString().split("").reverse().join("");
var ribuan = reverse.match(/\d{1,3}/g);
var hasil = ribuan.join(".").split("").reverse().join("");
// Gabungkan hasil dengan simbol rupiah
var rupiah = "Rp " + minus + hasil;
return rupiah;
}
</script>
@endpush

View File

@ -8,23 +8,51 @@
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-6">
<label for="kode_pesanan" id="kode_pesanan"></label><br>
<label for="nama_pemesan" id="nama_pemesan"></label><br>
<label for="nomor_meja" id="nomor_meja"></label><br>
<label for="urutan_pesanan" id="urutan_pesanan"></label><br>
<label for="tanggal_pesan" id="tanggal_pesan"></label><br>
</div>
<div class="col-md-6">
<label for="total_pesanan" id="total_pesanan"></label><br>
<label for="sub_total" id="sub_total_pesanan"></label><br>
<label for="diskon_persen" id="diskon_persen_pesanan"></label><br>
<label for="grand_total" id="grand_total_pesanan"></label><br>
</div>
</div>
<div class="table-responsive mt-3">
<table id="tabelku" class="table table-hover display" style="width: 100%; font-size: 14px;">
<thead>
<tr>
<th class="text-center">No</th>
<th>Nama Produk</th>
<th>Keterangan</th>
<th>Harga</th>
<th class="text-center">Jumlah Terjual</th>
<th>Total Harga</th>
<th class="text-center">Diskon(%)</th>
<th>Keterangan</th>
<th>Total Harga</th>
<th class="text-center">
<i class="fas fa-cog"></i>
</th>
</tr>
</thead>
<tbody id="view_penjualan_detail"></tbody>
<tfoot id="view_penjualan_detail_tfoot"></tfoot>
</table>
</div>
</div>
<div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<div class="btn-group">
<button href="javascript:void(0)" class="btn btn-danger mr-1" id="cancelPesanan">Cancel Seluruh
Pesanan</button>
<button href="javascript:void(0)" class="btn btn-primary" id="cetakStruk">Cetak Struk</button>
</div>
</div>
</div>
</div>
</div>

View File

@ -15,4 +15,5 @@
</style>
<link rel="stylesheet" href="{{ asset('assets/plugins/toastr/toastr.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/plugins/sweetalert2/sweetalert2.min.css') }}">
@endpush

View File

@ -4,6 +4,8 @@ use App\Http\Controllers\Admins\Dashboard\CalculationController;
use App\Http\Controllers\Admins\Dashboard\ChartPengeluaranController;
use App\Http\Controllers\Admins\Dashboard\ChartPenjualanController;
use App\Http\Controllers\Admins\Dashboard\DashboardController;
use App\Http\Controllers\Admins\Dashboard\DounatController;
use App\Http\Controllers\Admins\Dashboard\DounatSatuanController;
use App\Http\Controllers\Admins\JenisMenu\JenisMenuController;
use App\Http\Controllers\Admins\Pengeluaran\PengeluaranController;
use App\Http\Controllers\Admins\Penjualan\PenjualanController;
@ -85,6 +87,8 @@ Route::group(['middleware' => ['auth', 'permission']], function () {
Route::get('/getChartMonth', [ChartPenjualanController::class, 'getChartMonth'])->name('dashboard.getChartMonth')->comment("Ambil data Total Penjualan per Bulan");
Route::get('/getChartYear', [ChartPenjualanController::class, 'getChartYear'])->name('dashboard.getChartYear')->comment("Ambil data Total Penjualan per Tahun");
Route::get('/getChartPengeluaran', [ChartPengeluaranController::class, 'getChartPengeluaran'])->name('dashboard.getChartPengeluaran')->comment("Ambil data Total Pengeluaran");
Route::get('/getChartDounat', [DounatController::class, 'getChartDounat'])->name('dashboard.getChartDounat')->comment("Ambil data Total Paket Terjual");
Route::get('/getChartDounatSatuan', [DounatSatuanController::class, 'getChartDounatSatuan'])->name('dashboard.getChartDounatSatuan')->comment("Ambil data Total Produk Satuan Terjual");
});
@ -128,6 +132,9 @@ Route::group(['middleware' => ['auth', 'permission']], function () {
Route::get('/print/{id}', [PenjualanController::class, 'print'])->name('penjualan.print')->comment("Print Riwayat Transaksi Penjualan");
Route::post('/laporan', [PenjualanController::class, 'laporan'])->name('penjualan.laporan')->comment('Halaman Laporan Penjualan');
Route::post('/getDataDetailPenjualan', [PenjualanController::class, 'getDataDetailPenjualan'])->name('penjualan.getDataDetailPenjualan')->comment("Ambil data Detail Riwayat Transaksi Penjualan");
Route::delete('/cancel', [PenjualanController::class, 'cancel'])->name('penjualan.cancel')->comment("Cancel order transaksi penjualan");
Route::delete('/cancelDetail', [PenjualanController::class, 'cancelDetail'])->name('penjualan.cancelDetail')->comment("Cancel Detail order transaksi penjualan");
Route::get('/dibatalkan', [PenjualanController::class, 'dibatalkan'])->name('penjualan.dibatalkan')->comment("Halaman Transaksi Dibatalkan");
});
// Rekening Coa