Veritabanından aldığım ürünlerin alt malzemelerinin stoklarını güncellemem gerekiyor, ancak acemi olduğum için bir türlü başaramıyorum. Kendi başıma JavaScript öğrenmeye çalışıyorum ve sorabileceğim kimse yok. Bu konuda yardımcı olabilirseniz çok sevinirim.
Kodlarımda nerede hata yaptığımı anlayamıyorum. Veritabanından aldığım ürünlerin alt malzemelerinin stoklarını neden güncelleyip tekrar veritabanına gönderemediğimi çözemedim. Yardımcı olursanız çok mutlu olurum. Şimdiden teşekkür ederim!
<form class="getForm" action="/urunler/get" method="GET">
<!-- Ürün Seçimi -->
<div class="col-auto mb-3 urnForm">
<!-- Dinamik olarak doldurulacak -->
</div>
<!-- Malzeme Seçimi -->
<div class="col-auto mb-3 malzemeForm">
<!-- Dinamik olarak doldurulacak -->
</div>
</form>
<form class="postForm" >
<!-- Miktar Girişi -->
<label>Miktar:</label>
<input id="stokMiktar" type="number" name="amount" required>
<!-- İşlem Butonları -->
<button id="urunStokGir" class="btn btn-primary urunGır" type="button" name="action" value="add">ÜRÜN GİR</button>
<button class="btn btn-danger urunCık" type="button" name="action" value="remove">ÜRÜN ÇIK</button>
</form>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<script>
// Ürünleri ve malzemeleri getirmek için kullanılan fonksiyonlar
document.addEventListener("DOMContentLoaded", async () => {
await fetchProducts(); // Ürün listesini yükle
});
async function fetchProducts() {
try {
const response = await fetch("/urunler/get");
const products = await response.json();
const urnForm = document.querySelector(".urnForm");
let selectHTML = `
<label for="productSelect">Ürün Seç</label>
<select class="form-select" id="productSelect">
<option selected value="">ÜRÜN SEÇ...</option>`;
products.forEach(product => {
selectHTML += `<option value="${product.urun_key}">${product.urun_Name}</option>`;
});
selectHTML += `</select>`;
urnForm.innerHTML = selectHTML;
// Ürün seçiminde malzemeleri yükleme işlemini bağla
document.getElementById("productSelect").addEventListener("change", async (event) => {
const selectedProductId = event.target.value;
if (selectedProductId) {
await fetchMaterials(selectedProductId);
} else {
document.querySelector(".malzemeForm").innerHTML = ""; // Malzemeleri temizle
}
});
} catch (error) {
console.error("Ürünleri getirme hatası:", error);
}
}
async function fetchMaterials(productId) {
try {
const response = await fetch(`/urunler/malzeme/get/${productId}`);
const materials = await response.json();
const malzemeForm = document.querySelector(".malzemeForm");
let selectHTML = `
<label for="materialSelect">Malzeme Seç</label>
<select class="form-select" id="materialSelect">
<option selected value="">MALZEME SEÇ...</option>
`;
materials.forEach(material => {
selectHTML += `<option value="${material.urun_malzeme_PK}">${material.urun_malzeme_adi} (${material.malzeme_id})</option>`;
});
selectHTML += `</select>`;
malzemeForm.innerHTML = selectHTML;
} catch (error) {
console.error("Malzemeleri getirme hatası:", error);
}
}
////////////////////////////////////////////////////////////////////////////
const urunStokGırButon = document.querySelector("#urunStokGir");
urunStokGırButon.addEventListener("click", async (e) => {
const selectedProduct = document.querySelector("#productSelect").value;
const selectedMaterial = document.querySelector("#materialSelect").value;
const stockAmount = document.querySelector("#stokMiktar").value;
e.preventDefault();
// Seçilen ürün ve malzeme ID'si
const selectedProductId = productSelect.value;
const selectedMaterialId = materialSelect.value;
// Seçilen ürün ve malzeme adı
const selectedProductName = productSelect.options[productSelect.selectedIndex].text;
const selectedMaterialName = materialSelect.options[materialSelect.selectedIndex].text;
try {
const response = await fetch("/urunler/stok/post", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
product: selectedProductName,
material: selectedMaterialName,
amount: stockAmount,
action: "add", // 'add' veya 'remove' işlemi
}),
});
const result = await response.json();
if (result.success) {
alert("Stok güncellendi!");
} else {
alert("Stok güncellenirken bir hata oluştu.");
}
} catch (error) {
console.error("Stok güncelleme hatası:", error);
}
});
/////////////////////////////////////////////////////////////////////////////
</script>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
router.post('/urunler/stok/post', async (req, res) => {
const { product, material, amount } = req.body;
console.log("Gönderilen Veriler:", req.body);
// Mevcut stok bilgisini al
const [rows] = await db.query(
"SELECT urun_malzeme_adet FROM urunmalzemeleri WHERE urun_malzeme_adi = ? AND malzeme_id = ?",
[product, material]
);
if (rows.length === 0) {
return res.status(404).json({
success: false,
message: "Belirtilen ürün malzemesi bulunamadı.",
});
}
const currentStock = rows[0].urun_malzeme_adet;
// Yeni stok miktarını hesapla
const newStock = currentStock + parseInt(amount);
// Stok miktarını güncelle
await db.query(
"UPDATE urunmalzemeleri SET urun_malzeme_adet = ? WHERE urun_malzeme_adi = ? AND malzeme_id = ?",
[newStock, product, material]
);
});