web-dinda-private/public/js/transaksi.js

261 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

document.addEventListener('DOMContentLoaded', function () {
const input = document.getElementById('searchTransaksi');
const rows = document.querySelectorAll('table tbody tr');
input.addEventListener('input', function () {
const keyword = this.value.toLowerCase();
rows.forEach(row => {
const kodeTransaksi = row.cells[2].textContent.toLowerCase();
const kodeBarang = row.cells[3].textContent.toLowerCase();
const mitra = row.cells[4].textContent.toLowerCase();
const namaBarang = row.cells[5].textContent.toLowerCase();
const isMatch = [kodeTransaksi, kodeBarang, mitra, namaBarang].some(text => text.includes(keyword));
row.style.display = isMatch ? '' : 'none';
});
});
const form = document.getElementById('formFilterTanggal');
const tanggalMulai = document.getElementById('tanggalMulai');
const tanggalAkhir = document.getElementById('tanggalAkhir');
// Saat tanggal akhir berubah, kirim form otomatis
tanggalAkhir.addEventListener('change', function () {
if (tanggalMulai.value && tanggalAkhir.value) {
form.submit();
}
});
});
$(document).ready(function () {
$('#searchTransaksi').on('input', function () {
$('#exportSearchQuery').val($(this).val());
});
});
// Data dari backend (harus disediakan dari Blade)
const barangsData = window.barangsData || {};
const suppliersData = window.suppliersData || {};
function konversiSatuanKeKg(satuan, qtyHistori) {
switch (satuan) {
case 'ton': return qtyHistori * 1000;
case 'kg': return qtyHistori;
case 'g': return qtyHistori / 1000;
default: return qtyHistori;
}
}
// --------------- CREATE MODAL ---------------
const kategoriSelect = document.getElementById('kategori');
const barangSelect = document.getElementById('barang_id');
const supplierSelect = document.getElementById('supplier_id');
const qtyInput = document.getElementById('qtyHistori');
const satuanSelect = document.getElementById('satuan');
const jumlahRpInput = document.getElementById('jumlahRp');
function fillBarangOptions(kategori) {
const tipe = kategori === 'pengeluaran' ? 'pendukung' : 'produk';
barangSelect.innerHTML = '<option value="">-- Pilih Barang --</option>';
if (barangsData[tipe]) {
barangsData[tipe].forEach(barang => {
const option = document.createElement('option');
option.value = barang.id;
option.textContent = barang.nama;
option.dataset.harga = barang.harga;
barangSelect.appendChild(option);
});
}
jumlahRpInput.value = '';
}
function fillSupplierOptions(kategori) {
supplierSelect.innerHTML = '<option value="">-- Pilih Supplier --</option>';
const tipe = kategori === 'pengeluaran' ? 'konsumen' : 'pemasok';
suppliersData[tipe]?.forEach(supplier => {
const option = document.createElement('option');
option.value = supplier.id;
option.textContent = supplier.nama;
supplierSelect.appendChild(option);
});
}
function hitungJumlahRpCreate() {
const hargaBarang = parseFloat(barangSelect.selectedOptions[0]?.dataset.harga || 0);
const qty = parseFloat(qtyInput.value || 0);
const satuan = satuanSelect.value;
const qtyKg = konversiSatuanKeKg(satuan, qty);
// Kardus
const kardusSelect = document.getElementById('jenis_kardus');
const jumlahKardusInput = document.getElementById('jumlah_kardus');
const hargaKardus = parseFloat(kardusSelect?.selectedOptions[0]?.dataset.harga || 0);
const jumlahKardus = parseFloat(jumlahKardusInput?.value || 0);
const totalBarang = hargaBarang * qtyKg;
const totalKardus = hargaKardus * jumlahKardus;
jumlahRpInput.value = (totalBarang + totalKardus).toFixed(0);
}
if (kategoriSelect) {
kategoriSelect.addEventListener('change', () => {
fillBarangOptions(kategoriSelect.value);
fillSupplierOptions(kategoriSelect.value);
toggleInputKardus(kategoriSelect.value);
});
barangSelect.addEventListener('change', hitungJumlahRpCreate);
qtyInput.addEventListener('input', hitungJumlahRpCreate);
satuanSelect.addEventListener('change', hitungJumlahRpCreate);
document.getElementById('jenis_kardus')?.addEventListener('change', hitungJumlahRpCreate);
document.getElementById('jumlah_kardus')?.addEventListener('input', hitungJumlahRpCreate);
$('#createModal').on('show.bs.modal', () => {
kategoriSelect.value = '';
barangSelect.innerHTML = '<option value="">-- Pilih Barang --</option>';
supplierSelect.innerHTML = '<option value="">-- Pilih Supplier --</option>';
qtyInput.value = '';
satuanSelect.value = '';
jumlahRpInput.value = '';
});
}
// --------------- EDIT MODAL ---------------
const kategoriEdit = document.getElementById('editKategori');
const barangEdit = document.getElementById('editBarang');
const supplierEdit = document.getElementById('editSupplier');
const qtyInputEdit = document.getElementById('editQty');
const satuanEdit = document.getElementById('editSatuan');
const jumlahRpInputEdit = document.getElementById('editJumlahRp');
// Tambahkan listener agar saat kategori diubah saat edit, barang & supplier di-reload
kategoriEdit?.addEventListener('change', function () {
fillBarangOptionsEdit(this.value, barangEdit.value);
fillSupplierOptionsEdit(this.value, supplierEdit.value);
toggleInputKardusEdit(this.value);
hitungJumlahRpEdit();
});
function fillBarangOptionsEdit(kategori, selectedId) {
const tipe = kategori === 'pengeluaran' ? 'pendukung' : 'produk';
barangEdit.innerHTML = '<option value="">-- Pilih Barang --</option>';
if (barangsData[tipe]) {
barangsData[tipe].forEach(barang => {
const option = document.createElement('option');
option.value = barang.id;
option.textContent = barang.nama;
option.dataset.harga = barang.harga;
if (barang.id == selectedId) option.selected = true;
barangEdit.appendChild(option);
});
}
}
function fillSupplierOptionsEdit(kategori, selectedId) {
supplierEdit.innerHTML = '<option value="">-- Pilih Supplier --</option>';
const tipe = kategori === 'pengeluaran' ? 'konsumen' : 'pemasok';
suppliersData[tipe]?.forEach(supplier => {
const option = document.createElement('option');
option.value = supplier.id;
option.textContent = supplier.nama;
if (supplier.id == selectedId) option.selected = true;
supplierEdit.appendChild(option);
});
}
function hitungJumlahRpEdit() {
const hargaBarang = parseFloat(barangEdit.selectedOptions[0]?.dataset.harga || 0);
const qty = parseFloat(qtyInputEdit.value || 0);
const satuan = satuanEdit.value;
const qtyKg = konversiSatuanKeKg(satuan, qty);
// Kardus
const kardusSelect = document.getElementById('edit_jenis_kardus');
const jumlahKardusInput = document.getElementById('edit_jumlah_kardus');
const hargaKardus = parseFloat(kardusSelect?.selectedOptions[0]?.dataset.harga || 0);
const jumlahKardus = parseFloat(jumlahKardusInput?.value || 0);
const totalBarang = hargaBarang * qtyKg;
const totalKardus = hargaKardus * jumlahKardus;
jumlahRpInputEdit.value = (totalBarang + totalKardus).toFixed(0);
}
function toggleInputKardus(kategori) {
const showKardus = kategori === 'pemasukan';
const jenisKardusGroup = document.getElementById('group_jenis_kardus');
const jumlahKardusGroup = document.getElementById('group_jumlah_kardus');
jenisKardusGroup.style.display = showKardus ? 'block' : 'none';
jumlahKardusGroup.style.display = showKardus ? 'block' : 'none';
if (!showKardus) {
document.getElementById('jenis_kardus').value = '';
document.getElementById('jumlah_kardus').value = '';
}
}
toggleInputKardus(''); // pastikan disembunyikan saat awal
function toggleInputKardusEdit(kategori) {
const show = kategori === 'pemasukan';
document.getElementById('edit_group_jenis_kardus').style.display = show ? 'block' : 'none';
document.getElementById('edit_group_jumlah_kardus').style.display = show ? 'block' : 'none';
if (!show) {
document.getElementById('edit_jenis_kardus').value = '';
document.getElementById('edit_jumlah_kardus').value = '';
toggleInputKardusEdit(data.kategori);
}
}
// toggleInputKardusEdit(''); // pastikan disembunyikan saat awal
$('.btn-edit').on('click', function () {
const data = this.dataset;
fillBarangOptionsEdit(data.kategori, data.barang_id);
fillSupplierOptionsEdit(data.kategori, data.supplier_id);
kategoriEdit.value = data.kategori;
qtyInputEdit.value = data.qty;
satuanEdit.value = data.satuan;
jumlahRpInputEdit.value = data.jumlahrp;
document.getElementById('editWaktu').value = data.waktu;
document.getElementById('formEdit').action = `/operator/transaksi/${data.id}`;
// 🔧 Tunggu sampai opsi selesai dimuat
setTimeout(() => {
document.getElementById('edit_jenis_kardus').value = data.jenis_kardus_id || '';
document.getElementById('edit_jumlah_kardus').value = data.jumlah_kardus || '';
toggleInputKardusEdit(data.kategori);
}, 50); // bisa 0100ms, tergantung kompleksitas
// Debug opsional
console.log("Jenis Kardus ID:", data.jenis_kardus_id);
console.log("Jumlah Kardus:", data.jumlah_kardus);
console.log('Kategori:', kategori);
console.log('Barang ID:', editBarang);
console.log('BarangsData:', barangsData);
console.log('Suppliers:', suppliersData);
console.log('Selected Barang:', barangEdit.value);
console.log('Selected Supplier:', supplierEdit.value);
console.log('Qty:', qtyInputEdit.value);
console.log('Satuan:', satuanEdit.value);
console.log('Jumlah Rp:', jumlahRpInputEdit.value);
console.log("Barang options:", $('#editBarang').html());
console.log("Supplier options:", $('#editSupplier').html());
console.log("Kategori:", kategoriEdit.value);
console.log("Qty Input:", qtyInputEdit.value);
console.log("Satuan:", satuanEdit.value);
});
barangEdit?.addEventListener('change', hitungJumlahRpEdit);
qtyInputEdit?.addEventListener('input', hitungJumlahRpEdit);
satuanEdit?.addEventListener('change', hitungJumlahRpEdit);