depo-yonetim/routes/stok.js

91 lines
3.0 KiB
JavaScript
Raw Permalink Normal View History

2026-09-10 08:59:28 +00:00
// Stok rotaları - lokasyon bazlı stok seviyesi ve düşük stok uyarısı
const router = require('express').Router();
const store = require('../models/store');
const stokModel = require('../models/stok');
const lokasyonModel = require('../models/lokasyon');
const urunModel = require('../models/urun');
// Tüm lokasyonların stok durumu (ürün isimleriyle)
router.get('/', (req, res) => {
const stok = store.oku('stok');
const lokasyonlar = lokasyonModel.tumu();
const urunler = urunModel.tumu();
const cikti = lokasyonlar.map(l => {
const kayitlar = stok.filter(s => s.lokasyonId === l.id);
return {
lokasyonId: l.id,
lokasyonAd: l.ad,
sehir: l.sehir,
stok: kayitlar.map(k => {
const urun = urunler.find(u => u.id === k.urunId);
return {
urunId: k.urunId,
urunAd: (urun || {}).ad || 'Silindi',
birim: (urun || {}).birim || 'adet',
miktar: k.miktar,
dusukStokEsigi: (urun || {}).dusukStokEsigi || 0
};
})
};
});
res.json(cikti);
});
// Tek lokasyonun stok durumu
router.get('/:lokasyonId', (req, res) => {
const lok = lokasyonModel.bul(req.params.lokasyonId);
if (!lok) return res.status(404).json({ hata: 'Lokasyon bulunamadı' });
const urunler = urunModel.tumu();
const stok = stokModel.stokGetir(req.params.lokasyonId);
const detayli = stok.map(k => {
const urun = urunler.find(u => u.id === k.urunId);
return { ...k, urunAd: (urun || {}).ad || 'Silindi', birim: (urun || {}).birim || 'adet' };
});
res.json({ lokasyon: lok, stok: detayli });
});
// Düşük stok uyarısı (lokasyon bazlı, opsiyonel filtre)
router.get('/uyari/dusuk', (req, res) => {
const stok = store.oku('stok');
const urunler = urunModel.tumu();
const lokasyonlar = lokasyonModel.tumu();
const uyarilar = [];
for (const lok of lokasyonlar) {
for (const urun of urunler) {
if (urun.dusukStokEsigi > 0) {
const miktar = stokModel.urunMiktar(lok.id, urun.id, stok);
if (miktar <= urun.dusukStokEsigi) {
uyarilar.push({
lokasyonId: lok.id,
lokasyonAd: lok.ad,
urunId: urun.id,
urunAd: urun.ad,
miktar,
dusukStokEsigi: urun.dusukStokEsigi
});
}
}
}
}
res.json(uyarilar);
});
// Bir ürüne stok girişi yap (manuel stok ekleme)
router.post('/giris', (req, res) => {
const { lokasyonId, urunId, miktar } = req.body;
if (!lokasyonId || !urunId || !miktar) {
return res.status(400).json({ hata: 'lokasyonId, urunId ve miktar zorunludur' });
}
if (!lokasyonModel.bul(lokasyonId)) return res.status(404).json({ hata: 'Lokasyon bulunamadı' });
if (!urunModel.bul(urunId)) return res.status(404).json({ hata: 'Ürün bulunamadı' });
if (Number(miktar) <= 0) return res.status(400).json({ hata: 'Miktar pozitif olmalıdır' });
const sonuc = stokModel.stokGuncelle(Number(lokasyonId), Number(urunId), Number(miktar));
res.json({ mesaj: 'Stok girişi yapıldı', miktar: sonuc.miktar });
});
module.exports = router;