91 lines
3.0 KiB
JavaScript
91 lines
3.0 KiB
JavaScript
// 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;
|