From 818ebd3e51b2a0bead694585630d47e0c8e78e5b Mon Sep 17 00:00:00 2001 From: numex-admin Date: Thu, 10 Sep 2026 08:59:18 +0000 Subject: [PATCH] =?UTF-8?q?Numex=20yay=C4=B1n:=20models/stok.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/stok.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 models/stok.js diff --git a/models/stok.js b/models/stok.js new file mode 100644 index 0000000..339cffb --- /dev/null +++ b/models/stok.js @@ -0,0 +1,34 @@ +// Transfer ve stok işleme modeli +const store = require('./store'); + +// Bir lokasyonun stok seviyesini döner (urunId -> miktar) +function stokGetir(lokasyonId) { + const stokKayit = store.oku('stok'); + return stokKayit.filter(s => s.lokasyonId === Number(lokasyonId)); +} + +// Bir lokasyonda belirli ürünün miktarını döner +function urunMiktar(lokasyonId, urunId, stokKayit = null) { + const kayit = (stokKayit || stokGetir(lokasyonId)) + .find(s => s.urunId === Number(urunId)); + return kayit ? kayit.miktar : 0; +} + +// Stok kaydını günceller (yoksa oluşturur, negatife düşerse reddeder) +function stokGuncelle(lokasyonId, urunId, delta) { + const stokKayit = store.oku('stok'); + const mevcut = stokKayit.find(s => s.lokasyonId === Number(lokasyonId) && s.urunId === Number(urunId)); + let yeniMiktar = delta; + if (mevcut) yeniMiktar = mevcut.miktar + delta; + if (yeniMiktar < 0) return { ok: false, hata: 'Yetersiz stok' }; + + if (mevcut) { + mevcut.miktar = yeniMiktar; + } else { + stokKayit.push({ lokasyonId: Number(lokasyonId), urunId: Number(urunId), miktar: yeniMiktar }); + } + store.yaz('stok', stokKayit); + return { ok: true, miktar: yeniMiktar }; +} + +module.exports = { stokGetir, urunMiktar, stokGuncelle };