filter data berdasarkan tanggal pada history
parent
ca06f63ca3
commit
b7c408ee0a
|
@ -5,6 +5,7 @@ namespace App\Http\Controllers\Kasir;
|
|||
use App\Http\Controllers\Controller;
|
||||
use App\Models\DetailPesanan;
|
||||
use App\Models\Pesanan;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class History extends Controller
|
||||
|
@ -14,12 +15,25 @@ class History extends Controller
|
|||
return view('pages.History.index');
|
||||
}
|
||||
|
||||
public function getDataHistory()
|
||||
public function getDataHistory(Request $request)
|
||||
{
|
||||
$data = Pesanan::with(['detailPesanan', 'user'])->orderBy('created_at', 'desc')->get();
|
||||
$nomor = 1;
|
||||
$filter_tanggal_1 = $request->filter_tanggal_1;
|
||||
$filter_tanggal_2 = $request->filter_tanggal_2;
|
||||
$data = Pesanan::with(['detailPesanan', 'user'])
|
||||
->when($filter_tanggal_1, function ($query) use ($filter_tanggal_1) {
|
||||
return $query->whereDate('created_at', '>=', $filter_tanggal_1);
|
||||
})
|
||||
->when($filter_tanggal_2, function ($query) use ($filter_tanggal_2) {
|
||||
return $query->whereDate('created_at', '<=', $filter_tanggal_2);
|
||||
})
|
||||
->when(!$filter_tanggal_1 && !$filter_tanggal_2, function ($query) {
|
||||
return $query->whereDate('created_at', Carbon::today());
|
||||
})
|
||||
->orderBy('created_at', 'desc')
|
||||
->get();
|
||||
|
||||
return $datatables = datatables()
|
||||
return datatables()
|
||||
->of($data)
|
||||
->addColumn('nomor', function ($data) use (&$nomor) {
|
||||
return $nomor++;
|
||||
|
@ -42,6 +56,7 @@ class History 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>';
|
||||
})
|
||||
->rawColumns(['nomor', 'nama_user', 'created_at', 'grand_total', 'ubah'])
|
||||
|
@ -54,4 +69,10 @@ class History extends Controller
|
|||
|
||||
return view('pages.Kasir.print_dapur', compact('pesanan'));
|
||||
}
|
||||
|
||||
public function getDataDetailHistory(Request $request){
|
||||
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->get();
|
||||
|
||||
return response()->json(['status' => true, 'data' => $data]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ scratch. This page gets rid of all links and provides the needed markup only.
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<title>Sepiring Telur Keriting</title>
|
||||
|
||||
<!-- Google Font: Source Sans Pro -->
|
||||
|
|
|
@ -25,7 +25,22 @@
|
|||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-body">
|
||||
{{-- <h5 class="card-title">Form List Data</h5> --}}
|
||||
<div class="col-md-12">
|
||||
<label>Filter Pencarian:</label>
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<input type="date" class="form-control form-control-sm" id="filter_tanggal_1">
|
||||
</div>
|
||||
<p>s/d</p>
|
||||
<div class="col-md-2">
|
||||
<input type="date" class="form-control form-control-sm" id="filter_tanggal_2">
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="table-responsive mt-3">
|
||||
<table id="tabelku" class="table table-hover display" style="width: 100%">
|
||||
<thead>
|
||||
|
@ -58,146 +73,10 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@include('pages.History.modal')
|
||||
@endsection
|
||||
|
||||
@push('styles')
|
||||
<!-- Toastr -->
|
||||
<style>
|
||||
@media only screen and (max-width : 991px) {
|
||||
/* Styles */
|
||||
}
|
||||
@include('pages.History.style')
|
||||
@include('pages.History.js')
|
||||
|
||||
@media only screen and (max-width : 768px) {
|
||||
/* Styles */
|
||||
}
|
||||
|
||||
@media only screen and (max-width : 414px) {
|
||||
/* Styles */
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/toastr/toastr.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }}">
|
||||
@endpush
|
||||
|
||||
@push('scripts')
|
||||
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#tabelku').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('history.getDataHistory') }}',
|
||||
columns: [{
|
||||
data: 'nomor',
|
||||
name: 'nomor',
|
||||
orderable: 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
|
||||
diskonTotal = api
|
||||
.column(7)
|
||||
.data()
|
||||
.reduce((a, b) => intVal(a) + intVal(b), 0);
|
||||
|
||||
// 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(7).footer().innerHTML = diskonTotal + ' %';
|
||||
api.column(8).footer().innerHTML =
|
||||
'Rp. ' + totalAll.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
function print(id) {
|
||||
var url = "{{ route('history.print', '') }}/" + id + '?print=true'
|
||||
window.open(url, '_blank');
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
|
|
|
@ -0,0 +1,202 @@
|
|||
@push('scripts')
|
||||
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
let dataTable = $('#tabelku').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: {
|
||||
url: '{{ route('history.getDataHistory') }}',
|
||||
data: function(d) {
|
||||
d.filter_tanggal_1 = $("#filter_tanggal_1").val();
|
||||
d.filter_tanggal_2 = $("#filter_tanggal_2").val();
|
||||
}
|
||||
},
|
||||
columns: [{
|
||||
data: 'nomor',
|
||||
name: 'nomor',
|
||||
orderable: 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
|
||||
diskonTotal = api
|
||||
.column(7)
|
||||
.data()
|
||||
.reduce((a, b) => intVal(a) + intVal(b), 0);
|
||||
|
||||
// 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(7).footer().innerHTML = diskonTotal + ' %';
|
||||
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('history.print', '') }}/" + id + '?print=true'
|
||||
window.open(url, '_blank');
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
function detail(id_pesanan){
|
||||
$.ajax({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
type: "POST",
|
||||
url: "{{ route('history.getDataDetailHistory') }}",
|
||||
data: {
|
||||
id_pesanan: id_pesanan,
|
||||
},
|
||||
success: function(result) {
|
||||
$('#view_history_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_history_detail').append(tr)
|
||||
nomor++
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
$('#modal_detail_history').modal('show')
|
||||
}
|
||||
</script>
|
||||
{{-- <script>
|
||||
$(document).ready( function () {
|
||||
$('#btn_filter').on('click', function(){
|
||||
let filter_tanggal_1 = $("#filter_tanggal_1").val()
|
||||
let filter_tanggal_2 = $("#filter_tanggal_2").val()
|
||||
|
||||
// proses ajax
|
||||
})
|
||||
})
|
||||
</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
|
|
@ -0,0 +1,30 @@
|
|||
<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">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<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>Harga</th>
|
||||
<th class="text-center">Jumlah Terjual</th>
|
||||
<th>Total Harga</th>
|
||||
<th class="text-center">Diskon(%)</th>
|
||||
<th>Keterangan</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="view_history_detail"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,18 @@
|
|||
@push('styles')
|
||||
<!-- Toastr -->
|
||||
<style>
|
||||
@media only screen and (max-width : 991px) {
|
||||
/* Styles */
|
||||
}
|
||||
|
||||
@media only screen and (max-width : 768px) {
|
||||
/* Styles */
|
||||
}
|
||||
|
||||
@media only screen and (max-width : 414px) {
|
||||
/* Styles */
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/toastr/toastr.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }}">
|
||||
@endpush
|
|
@ -34,6 +34,7 @@ Route::group(['prefix' => 'history'], function () {
|
|||
Route::get('/', [History::class, 'index'])->name('history.index');
|
||||
Route::get('/getDataHistory', [History::class, 'getDataHistory'])->name('history.getDataHistory');
|
||||
Route::get('/print/{id}', [History::class, 'print'])->name('history.print');
|
||||
Route::post('/getDataDetailHistory', [History::class, 'getDataDetailHistory'])->name('history.getDataDetailHistory');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'menu'], function () {
|
||||
|
|
Loading…
Reference in New Issue