Compare commits

...

3 Commits

13 changed files with 611 additions and 16 deletions

View File

@ -0,0 +1,109 @@
<?php
namespace App\Http\Controllers\Admins\Penjualan;
use App\Http\Controllers\Controller;
use App\Models\DetailPesanan;
use App\Models\Pesanan;
use Carbon\Carbon;
use Illuminate\Http\Request;
class PenjualanController extends Controller
{
public function index()
{
return view('pages.admin.penjualan.index');
}
public function getDataPenjualan(Request $request)
{
$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('tanggal_pesanan', '>=', $filter_tanggal_1);
})
->when($filter_tanggal_2, function ($query) use ($filter_tanggal_2) {
return $query->whereDate('tanggal_pesanan', '<=', $filter_tanggal_2);
})
->when(!$filter_tanggal_1 && !$filter_tanggal_2, function ($query) {
return $query->whereDate('tanggal_pesanan', Carbon::today());
})
->orderBy('tanggal_pesanan', 'desc')
->get();
return datatables()
->of($data)
->addColumn('nomor', function ($data) use (&$nomor) {
return $nomor++;
})
->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);
}
public function print($id)
{
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
return view('pages.Kasir.print_dapur', compact('pesanan'));
}
public function getDataDetailPenjualan(Request $request)
{
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->get();
return response()->json(['status' => true, 'data' => $data]);
}
public function laporan(Request $request)
{
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'A4',
'orientation' => 'portrait',
'margin_left' => 15,
'margin_right' => 15,
'margin_top' => 10,
'margin_bottom' => 10,
'default_font_size' => 9,
'default_font' => 'arial',
]);
$mpdf->AddPage();
$mpdf->setFooter('{PAGENO}');
$data = Pesanan::with(['user', 'bukuBesar'])->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1)
->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2)
->get();
$html = view('pages.admin.penjualan.laporan', [
'data' => $data,
'filter_tanggal_1' => $request->filter_tanggal_1,
'filter_tanggal_2' => $request->filter_tanggal_2,
]);
$mpdf->writeHTML($html);
$mpdf->Output('Laporan_Penjualan.pdf', 'I');
return response()->header('Content-Type', 'application/pdf');
}
}

View File

@ -10,5 +10,16 @@ class BukuBesar extends Model
use HasFactory; use HasFactory;
protected $table = 'buku_besar'; protected $table = 'buku_besar';
protected $guarded = [];
protected $fillable = [
'faktur',
'tanggal',
'rekening_coa_id',
'pesanans_id',
'kode_rekening_coa',
'keterangan_coa',
'keterangan',
'debet',
'kredit',
];
} }

View File

@ -52,7 +52,14 @@ class Pesanan extends Model
return $this->belongsTo(User::class, 'user_id'); return $this->belongsTo(User::class, 'user_id');
} }
public function coa(){ public function coa()
{
return $this->belongsTo(RekeningCoa::class, 'coa_kas'); return $this->belongsTo(RekeningCoa::class, 'coa_kas');
} }
// buku besar
public function bukuBesar()
{
return $this->hasMany(BukuBesar::class, 'pesanans_id');
}
} }

View File

@ -19,14 +19,20 @@
<a href="{{ route('dashboard.index') }}" class="nav-link">Dashboard</a> <a href="{{ route('dashboard.index') }}" class="nav-link">Dashboard</a>
</li> </li>
@endcan @endcan
@canany(['penjualan.index', 'pengeluaran.index'], auth()->user())
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a id="dropdownSubMenu1" href="javascript:void(0)" data-toggle="dropdown" aria-haspopup="true" <a id="dropdownSubMenu1" href="javascript:void(0)" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" class="nav-link dropdown-toggle">Transaksi</a> aria-expanded="false" class="nav-link dropdown-toggle">Transaksi</a>
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow"> <ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">
<li><a href="#" class="dropdown-item">Order </a></li> @can('penjualan.index', auth()->user())
<li><a href="{{ route('penjualan.index') }}" class="dropdown-item">Penjualan</a></li>
@endcan
@can('pengeluaran.index', auth()->user())
<li><a href="{{ route('pengeluaran.index') }}" class="dropdown-item">Pengeluaran</a></li> <li><a href="{{ route('pengeluaran.index') }}" class="dropdown-item">Pengeluaran</a></li>
@endcan
</ul> </ul>
</li> </li>
@endcanany
@canany(['users.index', 'menu.index'], auth()->user()) @canany(['users.index', 'menu.index'], auth()->user())
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a id="dropdownSubMenu1" href="#" data-toggle="dropdown" aria-haspopup="true" <a id="dropdownSubMenu1" href="#" data-toggle="dropdown" aria-haspopup="true"

View File

@ -164,6 +164,7 @@
var qty = table.rows[index].getAttribute('data-qty'); var qty = table.rows[index].getAttribute('data-qty');
var diskonSatuan = table.rows[index].getAttribute('data-diskon-satuan'); var diskonSatuan = table.rows[index].getAttribute('data-diskon-satuan');
var total = table.rows[index].getAttribute('data-total'); var total = table.rows[index].getAttribute('data-total');
var row_id = table.rows[index].getAttribute('data-row-id');
qty = parseInt(qty) + 1; qty = parseInt(qty) + 1;
var totalLama = parseInt(total) + parseInt(menuPrice); var totalLama = parseInt(total) + parseInt(menuPrice);
@ -201,7 +202,7 @@
<br> <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>'} ${(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"> <div class="input-group input-group-sm mt-1">
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan.."> <input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangane..">
</div> </div>
</td> </td>
`; `;
@ -211,11 +212,11 @@
<td class="text-center"> <td class="text-center">
<div class="input-group input-group-sm"> <div class="input-group input-group-sm">
<span class="input-group-append"> <span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat tai" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button> <button type="button" class="btn btn-default btn-xs btn-flat tai" onclick="decrementMenu(${row_id}, '${params.nama_produk}')"><b>-</b></button>
</span> </span>
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${qty}"> <input type="text" name="bayar" class="form-control rounded-3" readonly value="${qty}">
<span class="input-group-append"> <span class="input-group-append">
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button> <button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${row_id}, '${params.nama_produk}')">+</button>
</span> </span>
</div> </div>
</td> </td>
@ -223,13 +224,13 @@
table.rows[index].cells[2].innerHTML = ` table.rows[index].cells[2].innerHTML = `
<td class="text-center"> <td class="text-center">
<div class="input-group input-group-sm"> <div class="input-group input-group-sm">
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="${diskonSatuan}" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)"> <input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="${diskonSatuan}" onkeyup="diskonSatuanMenu(${row_id}, '${params.nama_produk}', this.value)">
</div> </div>
</td> </td>
`; `;
table.rows[index].cells[3].innerHTML = ` table.rows[index].cells[3].innerHTML = `
<td class="text-center"> <td class="text-center">
<button class="btn btn-danger btn-sm" onclick="deleteMenu(${globalId})"> <button class="btn btn-danger btn-sm" onclick="deleteMenu(${row_id})">
<i class="fas fa-trash"></i> <i class="fas fa-trash"></i>
</button> </button>
</td> </td>

View File

@ -345,7 +345,7 @@
@endif @endif
@else @else
@if ($kelompokKategoriPivot->kelompok_kategori_id == 2) @if ($kelompokKategoriPivot->kelompok_kategori_id == 2)
<div class="col-xl-4 col-lg-6 col-md-6 col-sm-12"> <div class="col-xl-3 col-lg-6 col-md-6 col-sm-12">
<div class="card card-warning card-outline btn" <div class="card card-warning card-outline btn"
onclick="aadMenu( {{ $kelompokKategoriPivot->produk }} )"> onclick="aadMenu( {{ $kelompokKategoriPivot->produk }} )">
<div class="card-header px-0"> <div class="card-header px-0">

View File

@ -123,6 +123,7 @@
class="fas fa-print mr-1"></i>Cetak</button> class="fas fa-print mr-1"></i>Cetak</button>
</div> </div>
</div> </div>
</div>
</form> </form>
</div> </div>
</div> </div>

View File

@ -0,0 +1,89 @@
@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</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">Penjualan</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-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>
<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>
</div>
<div class="col-md-12">
<div class="table-responsive mt-3">
<table id="tabelku" 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>
@include('pages.admin.penjualan.modal')
@endsection
@include('pages.admin.penjualan.style')
@include('pages.admin.penjualan.js')

View File

@ -0,0 +1,224 @@
@push('scripts')
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
<script>
$(document).ready(function() {
let dataTable = $('#tabelku').DataTable({
aLengthMenu: [
[25, 50, 100, 200, -1],
[25, 50, 100, 200, "All"]
],
processing: true,
serverSide: true,
ajax: {
url: '{{ route('penjualan.getDataPenjualan') }}',
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
// 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;
}
// // cetak_laporan
// $('#cetak_laporan').on('click', function() {
// let filter_tanggal_1 = $("#filter_tanggal_1").val()
// let filter_tanggal_2 = $("#filter_tanggal_2").val()
// if (filter_tanggal_1 == "" || filter_tanggal_2 == "") {
// alert("Input pencarian tidak boleh kosong")
// } else {
// $.ajax({
// url: "{{ route('penjualan.laporan') }}",
// type: "POST",
// xhrFields: {
// responseType: 'blob' // Menggunakan responseType 'blob' untuk menerima data sebagai blob
// },
// dataType: 'native',
// data: {
// _token: "{{ csrf_token() }}",
// filter_tanggal_1: filter_tanggal_1,
// filter_tanggal_2: filter_tanggal_2
// },
// success: function(result) {
// console.log(result);
// var link = document.createElement('a');
// link.href = window.URL.createObjectURL(blob);
// link.download = "Laporan_Penjualan.pdf";
// link.click();
// }
// })
// }
// })
</script>
@endpush

View File

@ -0,0 +1,90 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Laporan Transaksi Penjualan</title>
</head>
<body>
<table style="width: 100%;">
<tr>
<td>Tanggal Unduh: {{ date('d-m-Y H:i:s') }}</td>
</tr>
<tr>
<td>Dicetak Oleh: {{ Session::get('name') }}</td>
</tr>
</table>
<hr>
<table style="width: 100%;">
<tr>
<td style="text-align: center; font-size: 20px; font-weight: bold;">Laporan Transaksi Penjualan</td>
</tr>
<tr>
<td style="text-align: center;">Pencarian:
{{ 'Antara Tanggal ' . toDmy($filter_tanggal_1) . ' s/d Tanggal ' . toDmy($filter_tanggal_2) . '' }}
</td>
</tr>
</table>
<br>
<table style="width: 100%; border-collapse:collapse; border:1px solid black;">
<thead style="border-collapse:collapse; border:1px solid black;">
<tr style="border-collapse:collapse; border:1px solid black;">
<th style="border-collapse:collapse; border:1px solid black;">No</th>
<th style="border-collapse:collapse; border:1px solid black;">Kode Pesanan</th>
<th style="border-collapse:collapse; border:1px solid black;">Kasir</th>
<th style="border-collapse:collapse; border:1px solid black;">Nama Pemesan</th>
<th style="border-collapse:collapse; border:1px solid black;">Tanggal</th>
<th style="border-collapse:collapse; border:1px solid black;">Jenis Pembayaran</th>
<th style="border-collapse:collapse; border:1px solid black;">Nominal</th>
{{-- <th style="border-collapse:collapse; border:1px solid black;">Keterangan</th> --}}
</tr>
</thead>
<tbody style="border-collapse:collapse; border:1px solid black;">
@foreach ($data as $key => $val)
<tr>
<td style="text-align: center; border-collapse:collapse; border:1px solid black;">
{{ $key + 1 }}</td>
<td style="text-align:center;border-collapse:collapse; border:1px solid black;">
{{ $val->kode_pesanan }}</td>
<td style="text-align:center; border-collapse:collapse; border:1px solid black;">
{{ $val->user->name }}</td>
<td style="text-align:center;border-collapse:collapse; border:1px solid black;">
{{ $val->nama_pemesan }}</td>
<td style="text-align:center; border-collapse:collapse; border:1px solid black;">
{{ \Carbon\Carbon::parse($val->tanggal_pesanan)->format('d F Y H:i:s') }}</td>
<td style="text-align:center; border-collapse:collapse; border:1px solid black;">
@if ($val->jenis_pembayaran == 1 || $val->jenis_pembayaran == null)
Tunai
@else
Non Tunai
<br>
({{ $val->bukuBesar[0]->keterangan_coa }})
@endif
</td>
<td style="text-align: left; border-collapse:collapse; border:1px solid black;">Rp
{{ format_uang($val->grand_total) }}</td>
{{-- <td style="border-collapse:collapse; border:1px solid black;">{{ $val->keterangan }}</td> --}}
</tr>
@endforeach
</tbody>
@php
$total = 0;
foreach ($data as $key => $val) {
$total += $val->grand_total;
}
@endphp
<tfoot>
<tr>
<th colspan="6" style="text-align: right; border-collapse:collapse; border:1px solid black;">Total
</th>
<th style="text-align: left; border-collapse:collapse; border:1px solid black;">Rp
{{ format_uang($total) }}</th>
</tr>
</tfoot>
</table>
</body>
</html>

View File

@ -0,0 +1,30 @@
<div class="modal fade" id="modal_detail_penjualan" aria-labelledby="exampleModalLabel">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Detail Penjualan</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</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_penjualan_detail"></tbody>
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -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

View File

@ -6,6 +6,7 @@ use App\Http\Controllers\Admins\Dashboard\ChartPenjualanController;
use App\Http\Controllers\Admins\Dashboard\DashboardController; use App\Http\Controllers\Admins\Dashboard\DashboardController;
use App\Http\Controllers\Admins\JenisMenu\JenisMenuController; use App\Http\Controllers\Admins\JenisMenu\JenisMenuController;
use App\Http\Controllers\Admins\Pengeluaran\PengeluaranController; use App\Http\Controllers\Admins\Pengeluaran\PengeluaranController;
use App\Http\Controllers\Admins\Penjualan\PenjualanController;
use App\Http\Controllers\Admins\RekeningCoa\RekeningCoaController; use App\Http\Controllers\Admins\RekeningCoa\RekeningCoaController;
use App\Http\Controllers\Admins\Users\RoleController; use App\Http\Controllers\Admins\Users\RoleController;
use App\Http\Controllers\Admins\Users\UserController; use App\Http\Controllers\Admins\Users\UserController;
@ -121,6 +122,14 @@ Route::group(['middleware' => ['auth', 'permission']], function () {
Route::get('/getDatapengeluaran', [PengeluaranController::class, 'getDatapengeluaran'])->name('pengeluaran.getDataPengeluaran')->comment("Ambil data Riwayat Transaksi"); Route::get('/getDatapengeluaran', [PengeluaranController::class, 'getDatapengeluaran'])->name('pengeluaran.getDataPengeluaran')->comment("Ambil data Riwayat Transaksi");
}); });
Route::group(['prefix' => 'penjualan'], function () {
Route::get('/', [PenjualanController::class, 'index'])->name('penjualan.index')->comment("Halaman Riwayat Transaksi Penjualan");
Route::get('/getDataPenjualan', [PenjualanController::class, 'getDataPenjualan'])->name('penjualan.getDataPenjualan')->comment("Ambil data Riwayat Transaksi Penjualan");
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");
});
// Rekening Coa // Rekening Coa
Route::group(['prefix' => 'coa'], function () { Route::group(['prefix' => 'coa'], function () {
Route::get('/', [RekeningCoaController::class, 'index'])->name('coa.index')->comment('Halaman Rekening Coa'); Route::get('/', [RekeningCoaController::class, 'index'])->name('coa.index')->comment('Halaman Rekening Coa');