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;
|