35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
// 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 };
|