32: // Ana stok kartı — alt hareketleri dinamik bileşen (ngComponentOutlet) ile render eder
53: @for (o of olculer(); track o.etiket) {
102:
103: @if (altHareketler().length) {
104:
Son Hareketler
106: @for (altKart of altHareketler(); track altKart._id) {
170: // Her kart görüntülendiğinde DB'den CANLI alt hareketler çekilir. Alt kartlar
230: const sahip = (this.FikoYT as any)?.kimlik?.aktifKullaniciJson()?._id;
235: _id: kartKimlik, vt: 'FikoYT.sistem.hareketler', yol: 'FikoYT.sistem.hareketler.kalem',
236: turu: 'KART', gizlilik: 'Herkese Açık', _uid: parentId, sahip, tarih: new Date(),
257: metod: 'POST', komut: 'FikoYT.sistem.DB.hareketler.ekle',
269: // Canlı hesabı tazele (kalan stok + son hareketler anında güncellenir)
280: return h?.kalanStok == null && h?.altHareketler == null;
288: /** Alt hareket kartlarını prepipe'tan al (hesap.altHareketler) */
289: altHareketler = computed(() => {
290: const raw = this.hesapYerel().altHareketler ?? ([] as any[]);
300: const istek = new FikoYTIstekKok({ metod: 'POST', komut: 'FikoYT.sistem.DB.hareketler.aggregate' });
303: { $lookup: { from: 'hareketler', let: { pid: '$_id' }, pipeline: [
305: { $lookup: { from: 'hareketler', localField: 'veri.icerikler', foreignField: '_id', as: 'ic' } },
327: altHareketler: { $slice: ['$_alt', -5] },
333: if (hesap && (hesap.kalanStok != null || hesap.altHareketler)) {
334: this._hesapYerel.set({ kalanStok: hesap.kalanStok ?? 0, altHareketler: hesap.altHareketler ?? [] });
361: // prepipe: kalanStok hesabı + son 5 hareketin ek bilgisini altHareketler'e taşır
377: { $lookup: { from: 'hareketler', let: { pid: '$_id' }, pipeline: [
379: { $lookup: { from: 'hareketler', localField: 'veri.icerikler', foreignField: '_id', as: 'ic' } },
391: ], as: '_altHareket' } },
395: input: '$_altHareket',
404: '_hesap.sonHareketTipi': { $ifNull: [{ $arrayElemAt: ['$_altHareket.tip', -1] }, null] },
406: '_hesap.altHareketler': { $slice: ['$_altHareket', -5] },
408: { $project: { _altHareket: 0 } },
475: @for (t of tipler; track t) {