MIF_E31222738/resources/views/admin/barangmasuktambah.blade.php

207 lines
9.5 KiB
PHP

@extends('layouts.admin')
@section('content')
<div class="content-wrapper">
<div class="row">
<div class="col-md-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Tambah Barang Masuk</h4>
<form action="{{ url('admin/barangmasuksimpan') }}" class="forms-sample" method="post"
enctype="multipart/form-data">
@csrf
<div class="form-group">
<label for="">Tanggal Barang Masuk</label>
<input class="form-control" name="tanggalpembelian" type="date" required
value="{{ old('tanggalpembelian', date('Y-m-d')) }}" autocomplete="off">
</div>
<br>
<table class="table table-bordered table-striped" id="tabelform">
<thead>
<tr>
<th>Nama Produk</th>
<th>Harga</th>
<th>Jumlah</th>
<th>Total</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<tr>
{{-- <td width="30%">
<select name="namabarang[]" class="form-control namabarang" required>
<option value="">Pilih Produk</option>
@foreach ($produk as $value)
<option value="{{ $value->namaproduk }}"
data-price="{{ $value->hargajual }}"
data-stok="{{ $value->stok }}">
{{ $value->namaproduk }}
</option>
@endforeach
</select>
</td> --}}
<td width="30%">
<input type="text" name="namabarang[]" class="form-control namabarang"
required>
</td>
<td>
<input type="text" name="harga[]" class="form-control harga" value="0"
required>
</td>
<td>
<input type="number" name="jumlah[]" class="form-control jumlah" value="0"
min="1" required>
</td>
<td>
<input type="text" class="form-control totaldisplay" value="Rp 0" readonly>
<input type="hidden" name="total[]" class="total" value="0">
</td>
<td>
<button type="button" class="btn btn-success add-row">+</button>
</td>
</tr>
</tbody>
</table>
<div class="form-group">
<label for="">Grand Total</label>
<input class="form-control" id="grandtotal" type="text" value="Rp 0" readonly>
<input class="form-control" id="grandtotalnon" name="grandtotalnon" type="hidden"
value="0">
</div>
<button type="submit" class="btn btn-primary mr-2" name="simpan"
value="simpan">Submit</button>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
document.addEventListener('DOMContentLoaded', function() {
// Fungsi format angka jadi ribuan
function formatRibuan(angka) {
return angka.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
// Fungsi ambil angka dari string terformat ribuan
function parseFormattedNumber(str) {
return parseFloat(str.replace(/\./g, '')) || 0;
}
// Format input saat diketik
function formatInputRibuan(input) {
let value = input.value.replace(/[^0-9]/g, '');
if (value === '') {
input.value = '';
return 0;
}
let angka = parseInt(value);
input.value = formatRibuan(angka);
return angka;
}
const tableBody = document.querySelector('#tabelform tbody');
// Event delegation for add/remove row
tableBody.addEventListener('click', function(e) {
if (e.target.classList.contains('add-row')) {
addNewRow();
} else if (e.target.classList.contains('remove-row')) {
const row = e.target.closest('tr');
if (tableBody.rows.length > 1) {
row.remove();
calculateAllTotals();
}
}
});
// Change event for select and quantity
tableBody.addEventListener('change', function(e) {
if (e.target.classList.contains('namabarang')) {
const row = e.target.closest('tr');
const price = e.target.options[e.target.selectedIndex].dataset.price || 0;
row.querySelector('.harga').value = price;
calculateRowTotal(row);
calculateAllTotals();
}
});
tableBody.addEventListener('input', function(e) {
if (e.target.classList.contains('harga')) {
formatInputRibuan(e.target); // Format harga pake ribuan
const row = e.target.closest('tr');
calculateRowTotal(row);
calculateAllTotals();
} else if (e.target.classList.contains('jumlah')) {
// Jangan format jumlah, cukup kalkulasi ulang
const row = e.target.closest('tr');
calculateRowTotal(row);
calculateAllTotals();
}
});
// Add new row
function addNewRow() {
const newRow = document.createElement('tr');
newRow.innerHTML = `
<td>
<input type="text" name="namabarang[]" class="form-control namabarang" required>
</td>
<td>
<input type="text" name="harga[]" class="form-control harga" value="0" required>
</td>
<td>
<input type="number" name="jumlah[]" class="form-control jumlah" value="0" min="1" required>
</td>
<td>
<input type="text" class="form-control totaldisplay" value="Rp 0" readonly>
<input type="hidden" name="total[]" class="total" value="0">
</td>
<td>
<button type="button" class="btn btn-danger remove-row">-</button>
</td>
`;
tableBody.appendChild(newRow);
}
// Calculate total per row
function calculateRowTotal(row) {
const qty = parseFloat(row.querySelector('.jumlah').value) || 0;
const price = parseFormattedNumber(row.querySelector('.harga').value) || 0;
const total = qty * price;
row.querySelector('.total').value = total;
row.querySelector('.totaldisplay').value = formatRupiah(total);
}
// Calculate grand total
function calculateAllTotals() {
let grand = 0;
document.querySelectorAll('.total').forEach(el => {
grand += parseFloat(el.value) || 0;
});
document.getElementById('grandtotal').value = formatRupiah(grand);
document.getElementById('grandtotalnon').value = grand;
}
// Format number to Rupiah
function formatRupiah(number) {
return new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(number);
}
// Initial calculation
calculateAllTotals();
});
</script>
@endsection