feat(assets): varlık lotları, ortalama maliyet ve kâr/zarar servisi

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 23:17:44 +03:00
parent baec70d324
commit 890ba9f521
14 changed files with 1415 additions and 3 deletions
+114
View File
@@ -364,6 +364,7 @@ export const tr = {
cancelInstallments: "Kalan taksitleri iptal et",
contactEditHint: "Cari hareketi cari sayfasından düzenlenir.",
inKindPaymentLocked: "Aynî borç ödemesi silinemez; ödeme cari sayfasındaki kayda bağlıdır.",
assetLocked: "Varlık alım/satış işlemi Birikim sayfasındaki hareketten yönetilir.",
readOnly: "İzleyici rolündesiniz; işlem ekleyemezsiniz.",
noAccounts: "İşlem girmek için önce bir hesap gerekli.",
noAccountsLink: "Hesaplara git",
@@ -640,6 +641,119 @@ export const tr = {
account: "Hesap seçin",
},
},
assets: {
title: "Birikim",
description:
"Altın, döviz ve ziynet birikimleri: alım lotları, satış ve çıkışlar, ortalama maliyet ve kâr/zarar. Değerleme alış fiyatıyla.",
new: "Varlık ekle",
asset: "Varlık",
open: "Varlığa git",
createTitle: "Yeni varlık",
editTitle: "Varlığı düzenle",
empty: "Henüz varlık yok. Bir varlık ekleyip ilk alımı girin.",
closedGroup: "Elde kalmayanlar",
privateBadge: "Yalnızca ben",
fields: {
asset: "Varlık türü",
name: "Ad",
namePlaceholder: "Ör. Gram altın birikimi",
note: "Not",
isPrivate: "Yalnızca ben görebilirim",
isPrivateHint: "İşaretlenirse bu varlık ve hareketleri hanedeki diğer üyelere görünmez.",
},
stats: {
quantity: "Eldeki miktar",
avgCost: "Ortalama maliyet",
cost: "Maliyet",
currentValue: "Güncel değer",
unrealized: "Gerçekleşmemiş K/Z",
realized: "Gerçekleşmiş K/Z",
invested: "Yatırılan",
proceeds: "Satış geliri",
noPrice: "Fiyat yok",
price: (price: string, date: string) => `Güncel alış fiyatı ${price} · ${date}`,
perUnit: (unit: string) => `/ ${unit}`,
},
totals: {
value: "Toplam güncel değer",
cost: "Toplam maliyet",
unrealized: "Gerçekleşmemiş K/Z",
realized: "Gerçekleşmiş K/Z",
missingPrice: (n: number) => `${n} varlığın fiyatı yok; toplam değere katılmadı.`,
},
kinds: {
buy: "Alım",
gift_in: "Hediye / miras geldi",
sell: "Satış",
gift_out: "Hediye / çıkış",
},
kindHints: {
buy: "Para seçilen hesaptan çıkar (transfer; gider sayılmaz).",
gift_in: "Hesap hareketi oluşmaz; maliyet o günkü değerdir.",
sell: "Satış tutarı seçilen hesaba girer; ortalama maliyete göre kâr/zarar yazılır.",
gift_out: "Hesap hareketi oluşmaz; ortalama maliyetle elden çıkar.",
},
movement: {
add: "Hareket ekle",
title: (kind: string, name: string) => `${kind} · ${name}`,
date: "Tarih",
quantity: "Miktar",
unitPrice: "Birim fiyat (TL)",
amount: "Toplam tutar (TL)",
priceHint:
"Tutar veya birim fiyattan birini girin; ikisi de boşsa fiyat tablosu kullanılır (alımda satış, satışta alış fiyatı).",
giftValueHint: "Boş bırakılırsa fiyat tablosundaki o günkü alış fiyatı kullanılır.",
account: "Hesap",
accountNone: "— Hesap yok —",
accountHint: "Hesap seçilmezse hesap hareketi oluşmaz.",
storage: "Saklama yeri",
storagePlaceholder: "Ör. ev kasası, banka kiralık kasa",
note: "Not",
held: (q: string) => `Eldeki: ${q}`,
},
history: "Hareketler",
noMovements: "Henüz hareket yok.",
table: {
date: "Tarih",
kind: "Hareket",
quantity: "Miktar",
unitPrice: "Birim fiyat",
amount: "Tutar",
result: "K/Z",
balance: "Kalan",
},
deleteMovement: "Hareketi sil",
deleteMovementTitle: "Hareket silinsin mi?",
deleteMovementDescription:
"Hareket ve bağlı hesap işlemi silinir; ortalama maliyet ve kâr/zarar yeniden hesaplanır.",
delete: "Varlığı sil",
deleteTitle: "Varlık silinsin mi?",
deleteDescription: "Yalnızca hareketi olmayan varlık silinebilir.",
prices: "Fiyat tablosu",
back: "Birikim",
txDescription: {
buy: (label: string, name: string) => `Varlık alımı: ${label} (${name})`,
sell: (label: string, name: string) => `Varlık satışı: ${label} (${name})`,
},
toast: {
saved: "Varlık kaydedildi.",
movement: "Hareket kaydedildi.",
movementDeleted: "Hareket silindi.",
deleted: "Varlık silindi.",
},
errors: {
noPrice: "Bu tarih için fiyat yok; tutar veya birim fiyat girin.",
insufficient: "Bu tarihte eldeki miktar yetersiz.",
deleteBreaks: "Bu hareket silinirse sonraki bir satış/çıkış eldeki miktarı aşar.",
hasMovements: "Hareketi olan varlık silinemez; önce hareketleri silin.",
assetKeyLocked: "Hareketi olan varlığın türü değiştirilemez.",
futureDate: "Gelecek tarihli hareket girilemez.",
privateOwner: "Yalnızca sahibi gizliliği değiştirebilir.",
},
validation: {
noAccountForGift: "Hediye hareketinde hesap seçilmez.",
},
},
prices: {
title: "Fiyat tablosu",
description: