done -> testing in production

This commit is contained in:
JokoPrasetio 2025-08-19 10:41:52 +07:00
parent 42a68b52bf
commit 00792c68a0
42 changed files with 65 additions and 55 deletions

View File

@ -418,6 +418,7 @@ class CustomerController extends Controller
'od.harga_satuan', 'od.harga_satuan',
'od.status_order as status_order_detail', 'od.status_order as status_order_detail',
'od.catatan', 'od.catatan',
'od.total_kalori',
DB::raw('COALESCE(mm.nama_menu, mcu.nama_mcu) as nama_item'), DB::raw('COALESCE(mm.nama_menu, mcu.nama_mcu) as nama_item'),
'mm.foto as foto' 'mm.foto as foto'
) )
@ -462,7 +463,8 @@ class CustomerController extends Controller
'jumlah' => $item->jumlah, 'jumlah' => $item->jumlah,
'harga_satuan' => $item->harga_satuan, 'harga_satuan' => $item->harga_satuan,
'status_order' => $item->status_order_detail, 'status_order' => $item->status_order_detail,
'catatan' => $item->catatan ?? '-' 'catatan' => $item->catatan ?? '-',
'total_kalori' => $item->total_kalori
// tambahkan field tambahan jika diperlukan // tambahkan field tambahan jika diperlukan
]; ];
})->values(), })->values(),

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

View File

@ -348,7 +348,7 @@ function renderCartSummary() {
<option disabled selected>Pilih Karbohidrat</option> <option disabled selected>Pilih Karbohidrat</option>
${(karhohidrats || []).map(k => ` ${(karhohidrats || []).map(k => `
<option value="${k.karbohidrat_id}" ${p.karbohidrat_id === k.karbohidrat_id ? 'selected' : ''} data-kalori=${k.nilai_kalori}> <option value="${k.karbohidrat_id}" ${p.karbohidrat_id === k.karbohidrat_id ? 'selected' : ''} data-kalori=${k.nilai_kalori}>
${k.nama_karbohidrat} ${k.nilai_kalori ? `(${k.nilai_kalori} kkal)` : ''} ${k.nama_karbohidrat} ${k.nilai_kalori ? `(${k.nilai_kalori} kal)` : ''}
</option> </option>
`).join('')} `).join('')}
</select> </select>
@ -425,14 +425,14 @@ function renderCartSummary() {
const itemHTML = ` const itemHTML = `
<div class="card mb-3 shadow-sm position-relative"> <div class="card mb-3 shadow-sm position-relative">
<button type="button" class="btn btn-sm btn-outline-danger position-absolute top-0 end-0 m-2" onClick="removeCartItem(${item.id})" style="z-index:1;"> <button type="button" class="btn btn-sm btn-danger position-absolute top-0 end-0 m-2" onClick="removeCartItem(${item.id})" style="z-index:1;">
Hapus Hapus
</button> </button>
<div class="d-flex flex-column flex-md-row"> <div class="d-flex flex-column flex-md-row">
<div class="p-2 d-flex justify-content-center align-items-center" style="flex: 0 0 300px;"> <div class="p-2 d-flex justify-content-center align-items-center" style="flex: 0 0 300px;">
<img src="gambar/${item.foto || 'default.jpg'}" alt="${item.nama_menu}" <img src="gambar/${item.foto || 'default.jpg'}" alt="${item.nama_menu}"
class="img-fluid rounded" style="max-height: 180px; width: 100%; object-fit: cover;"> class="img-fluid rounded" style="max-height: 280px; width: 100%; object-fit: cover;">
</div> </div>
<div class="flex-grow-1 position-relative"> <div class="flex-grow-1 position-relative">
@ -452,7 +452,7 @@ function renderCartSummary() {
<div class="mb-2 small text-muted"><strong>Silahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan</strong></div> <div class="mb-2 small text-muted"><strong>Silahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan</strong></div>
${pesananHTML} ${pesananHTML}
ilahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan
<div class="mt-3 d-flex justify-content-between align-items-center flex-wrap gap-2"> <div class="mt-3 d-flex justify-content-between align-items-center flex-wrap gap-2">
<button class="btn btn-sm btn-outline-success" <button class="btn btn-sm btn-outline-success"
onclick="addOrderDate(${item.id}, ${item.apakah_menu_sore})"> onclick="addOrderDate(${item.id}, ${item.apakah_menu_sore})">
@ -505,7 +505,8 @@ function onTanggalChange(itemId, index) {
function onKarbohidratChange(itemId, index, el, kalori){ function onKarbohidratChange(itemId, index, el, kalori){
const selectedOption = el.options[el.selectedIndex]; const selectedOption = el.options[el.selectedIndex];
const kaloriOption = parseInt(selectedOption.getAttribute('data-kalori')) || 0; const kaloriOption = parseInt(selectedOption.getAttribute('data-kalori')) || 0;
const kaloriMenuInt = parseInt(kalori) || 0;
const kaloriMenuInt = kalori || 0;
const totalKalori = kaloriOption + kaloriMenuInt; const totalKalori = kaloriOption + kaloriMenuInt;
const kaloriEl = document.getElementById(`kalori_${itemId}_${index}`); const kaloriEl = document.getElementById(`kalori_${itemId}_${index}`);
@ -516,7 +517,7 @@ function onKarbohidratChange(itemId, index, el, kalori){
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .karbohidrat-input`); const input = document.querySelector(`div[data-item-id='${itemId}'][data-index='${index}'] .karbohidrat-input`);
cart.find(item => item.id === itemId).pesanan[index].karbohidrat_id = parseInt(input.value); cart.find(item => item.id === itemId).pesanan[index].karbohidrat_id = parseInt(input.value);
cart.find(item => item.id === itemId).pesanan[index].resultKalori = parseInt(totalKalori); cart.find(item => item.id === itemId).pesanan[index].resultKalori = totalKalori;
sessionStorage.setItem('cart', JSON.stringify(cart)); sessionStorage.setItem('cart', JSON.stringify(cart));
} }

View File

@ -222,8 +222,9 @@ document.getElementById('formMasterMenu').addEventListener('submit', function(e)
const allFormSetsBeforSubmit = document.querySelectorAll('.form-set'); const allFormSetsBeforSubmit = document.querySelectorAll('.form-set');
for (let i = 0; i < allFormSetsBeforSubmit.length; i++) { for (let i = 0; i < allFormSetsBeforSubmit.length; i++) {
const checkSiang = allFormSetsBeforSubmit[i].querySelector(`input[name="data[${i}][apakah_menu_siang]"]`);
const checkSore = allFormSetsBeforSubmit[i].querySelector(`input[name="data[${i}][apakah_menu_sore]"]`); const checkSiang = allFormSetsBeforSubmit[i].querySelector(`input[name*="[apakah_menu_siang]"]`);
const checkSore = allFormSetsBeforSubmit[i].querySelector(`input[name*="[apakah_menu_sore]"]`);
if (!checkSiang?.checked && !checkSore?.checked) { if (!checkSiang?.checked && !checkSore?.checked) {
e.preventDefault(); e.preventDefault();

View File

@ -91,7 +91,9 @@
}, },
{ {
title:"Nama Menu", title:"Nama Menu",
field:"nama_menu", formatter:function(value, row){
return row?.kalori[0]?.nilai_kalori ? row?.nama_menu + ' ' + '(' + row?.kalori[0]?.nilai_kalori + ' kal)' : row?.nama_menu
},
width: 300 width: 300
}, },
{ {

View File

@ -94,18 +94,6 @@ let orderIndex = 0;
$('#cartTotal').text('Rp ' + total.toLocaleString('id-ID')); $('#cartTotal').text('Rp ' + total.toLocaleString('id-ID'));
} }
function renderCartTotalOnly() { function renderCartTotalOnly() {
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
let total = 0; let total = 0;

View File

@ -19,6 +19,9 @@ function detailOrder(id){
<div class="${data?.order?.jenis_customer === "MCU" ? 'col-md-12' : 'col-md-7 p-1'}"> <div class="${data?.order?.jenis_customer === "MCU" ? 'col-md-12' : 'col-md-7 p-1'}">
<p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.master_mcu?.nama_mcu}</strong></p> <p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.master_mcu?.nama_mcu}</strong></p>
<p class="mb-1">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p> <p class="mb-1">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p>
${data?.total_kalori ? `
<p class="mb-1">Total Kalori: <span>${data?.total_kalori} kal</span></p>
` : ''}
<p class="mb-1">Jumlah: <span>${data?.jumlah || 0}</span></p> <p class="mb-1">Jumlah: <span>${data?.jumlah || 0}</span></p>
<p class="mb-1">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p> <p class="mb-1">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
<p class="mb-1">Status Pesanan: <p class="mb-1">Status Pesanan:

View File

@ -226,7 +226,7 @@ function detailOrder(id){
<p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.master_mcu?.nama_mcu}</strong></p> <p class="mb-1">Nama Menu: <strong>${data?.menu?.nama_menu || data?.master_mcu?.nama_mcu}</strong></p>
<p class="mb-1">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p> <p class="mb-1">Tanggal Antar: <span>${data?.tgl_antar || 0}</span></p>
<p class="mb-1">Jumlah: <span>${data?.jumlah || 0}</span></p> <p class="mb-1">Jumlah: <span>${data?.jumlah || 0}</span></p>
${data?.total_kalori ? `<p class="mb-1">Jumlah: <span>${data?.total_kalori || 0} kal</span></p>` : ''} ${data?.total_kalori ? `<p class="mb-1">Total Kalori: <span>${data?.total_kalori || 0} kal</span></p>` : ''}
<p class="mb-1">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p> <p class="mb-1">Harga Satuan: <strong>Rp ${parseInt(data?.harga_satuan || 0).toLocaleString('id-ID')}</strong></p>
<p class="mb-1">Status Pesanan: <p class="mb-1">Status Pesanan:
<span class="badge text-dark ${data?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}"> <span class="badge text-dark ${data?.status_order === 'Selesai' ? 'bg-success' : 'bg-warning'}">

View File

@ -51,7 +51,7 @@
} }
.info td { .info td {
padding: 0 1px; padding: 2px 5px;
vertical-align: top; vertical-align: top;
font-size: 10px; font-size: 10px;
} }
@ -94,17 +94,27 @@
@endif @endif
<tr><td>Pesanan</td> <tr><td>Pesanan</td>
<td> <td>
<div style="max-width: 54mm; word-wrap: break-word; white-space: normal; display: block;"> <span style="vertical-align: top;">:</span>
: {{ $label?->masterMcu?->nama_mcu ?? $label?->menu?->nama_menu }} <span style="max-width: 54mm; word-wrap: break-word; white-space: normal; display: inline-block; vertical-align: top;">
</div> {{ $label?->masterMcu?->nama_mcu ?? $label?->menu?->nama_menu }}
</span>
</td></tr> </td></tr>
<tr><td>Total Kalori</td><td>: {{ isset($label->total_kalori) ? $label->total_kalori . ' (kal)' : '-' }}</td></tr> <tr><td>Total Kalori</td><td>: {{ isset($label->total_kalori) ? $label->total_kalori . ' kal' : '-' }}</td></tr>
<tr><td>Harga Satuan</td><td>: Rp {{ number_format($label?->harga_satuan, 0, ',', '.') }}</td></tr> <tr><td>Harga Satuan</td><td>: Rp {{ number_format($label?->harga_satuan, 0, ',', '.') }}</td></tr>
<tr><td>Tanggal Produksi</td><td>: {{ $label?->tgl_antar ?? '-' }}</td></tr> <tr><td>Tanggal Produksi</td><td>: {{ $label?->tgl_antar ? \Carbon\Carbon::parse($label->tgl_antar)->translatedFormat('d F Y') : '-' }} </td></tr>
<tr><td>No. Telp</td><td>: {{ $label?->order?->no_wa ?? '-' }}</td></tr> <tr><td>No. Telp</td><td>: {{ $label?->order?->no_wa ?? '-' }}</td></tr>
@if($label?->order?->alamat) @if ($label?->order?->alamat)
<tr><td>Alamat</td><td>: {{ $label?->order?->alamat }}</td></tr> <tr>
<td style="vertical-align: top;">Alamat</td>
<td><span style="vertical-align: top;">:</span>
<span style="max-width: 54mm; word-wrap: break-word; white-space: normal; display: inline-block; vertical-align: top;">
{{ $label?->order?->alamat }}
</span>
</td>
</tr>
@endif @endif
</table> </table>
<div class="footer"> <div class="footer">

View File

@ -41,7 +41,7 @@
<!-- fontawosome CSS --> <!-- fontawosome CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="stylesheet" href="{{ ver('/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css') }}../" />
{{-- flatcpicker css --}} {{-- flatcpicker css --}}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

View File

@ -83,6 +83,9 @@
<div class="card-body py-2 px-3 mt-2"> <div class="card-body py-2 px-3 mt-2">
<h6 class="card-title mb-1">${item.nama_item}</h6> <h6 class="card-title mb-1">${item.nama_item}</h6>
<p class="mb-1 small text-muted">Tgl Antar: <strong>${item.tgl_antar}</strong></p> <p class="mb-1 small text-muted">Tgl Antar: <strong>${item.tgl_antar}</strong></p>
${item?.total_kalori ? `
<p class="mb-1 small text-muted">Total Kalori: <strong>${item?.total_kalori || '-'} kal</strong></p>
` : ''}
<p class="mb-1 small">Harga: <strong>${harga.toLocaleString('id-ID')}</strong></p> <p class="mb-1 small">Harga: <strong>${harga.toLocaleString('id-ID')}</strong></p>
<p class="mb-1 small">Jumlah: <strong>${jumlah}</strong></p> <p class="mb-1 small">Jumlah: <strong>${jumlah}</strong></p>
<p class="mb-0 small">Total: <strong class="text-success">Rp ${total.toLocaleString('id-ID')}</strong></p> <p class="mb-0 small">Total: <strong class="text-success">Rp ${total.toLocaleString('id-ID')}</strong></p>

View File

@ -23,15 +23,15 @@
<div class="col-12 mb-2"> <div class="col-12 mb-2">
<h6 class="fw-bold text-muted mb-1"> <h6 class="fw-bold text-muted mb-1">
Pilih Tanggal Makanan Pilih Tanggal Makanan
<a tabindex="0" class="ms-1 text-decoration-none" role="button" data-bs-toggle="popover" data-bs-trigger="focus" <a tabindex="0" class="text-decoration-none" role="button" data-bs-toggle="popover" data-bs-trigger="focus"
title="Panduan" title="Panduan"
data-bs-content="Pilih rentang tanggal untuk melihat daftar menu yang tersedia pada tanggal tersebut."> data-bs-content="Pilih rentang tanggal untuk melihat daftar menu yang tersedia pada tanggal tersebut.">
<i class="fa fa-info-circle text-secondary"></i> <i class="fa fa-info-circle text-secondary"></i>
</a> </a>
</h6> </h6>
<div class="input-group input-group-sm mb-2" style="max-width: 350px;"> <div class="input-group input-group-sm mb-2" style="max-width: 450px;">
<span class="input-group-text bg-white px-2"> <span class="input-group-text bg-white px-1">
<i class="fa fa-calendar-alt text-primary"></i> <i class="fa fa-calendar-alt text-primary"></i>
</span> </span>
@ -124,7 +124,7 @@
<div class="fw-bold mb-2"> <div class="fw-bold mb-2">
<i class="fa fa-info-circle me-1"></i>Informasi <i class="fa fa-info-circle me-1"></i>Informasi
</div> </div>
<ul class="mb-0 ps-3"> <ul class="mb-0 ps-3 pe-3">
<li> <li>
Butuh bantuan? Hubungi WhatsApp <strong>Instalasi Gizi</strong>: Butuh bantuan? Hubungi WhatsApp <strong>Instalasi Gizi</strong>:
<a href="https://wa.me/08815611382 " target="_blank">08815611382 </a> <br> <a href="https://wa.me/08815611382 " target="_blank">08815611382 </a> <br>

View File

@ -6,7 +6,7 @@
<div class="container position-relative d-flex align-items-center justify-content-between"> <div class="container position-relative d-flex align-items-center justify-content-between">
<a href="/" class="logo d-flex align-items-center me-auto"> <a href="/" class="logo d-flex align-items-center me-auto">
<!-- Uncomment the line below if you also wish to use an image logo --> <!-- Uncomment the line below if you also wish to use an image logo -->
<img src="/logo/logo_rsabhk.png" width="170" alt="Logo RSAB HARAPAN KITA" class="logo-img"> <img src="/logo/logo_rsabhk.png" alt="Logo RSAB HARAPAN KITA" class="logo-img">
<h1 class="sitename"></h1> <h1 class="sitename"></h1>
</a> </a>