LivaMonthAdjustPopup
Dataliva'ya özgü, 12 aylık bütçe satırındaki değerleri toplu olarak artırıp
azaltmaya yarayan popup. Bir satır ve ay kolonu için
createMonthAdjustSession ile oturum oluşturulur; popup her ay için mevcut
tutarı ve düzenlenebilir bir ayar kolonu gösterir. Uygula düğmesi taslak
değerleri ve kullanıcının popup'taki seçimlerini onApply ile geri verir, yeni
tutarlar applyMonthAdjustSession ile hesaplanır. İki mod vardır:
cumulative— satırdaki tüm aylar listelenir; varsayılan ayar tipipercent'tir (100 = değişiklik yok, 110 = yüzde 10 artış).single— tıklanan aydan yıl sonuna kadar olan aylar listelenir; varsayılan ayar tipiamount'tır (0 = değişiklik yok, pozitif/negatif tutar eklenir).
import {
LivaMonthAdjustPopup,
createMonthAdjustSession,
applyMonthAdjustSession,
sumMonthValues,
STANDARD_MONTH_FIELDS,
type MonthAdjustSession,
type LivaMonthAdjustSummaryField,
} from "@dataliva/livalib";
Popup'taki araçlar
- Değer / Oran (%) — işlem türü. İlk seçim oturumun
adjustType'ıdır. Tek seferde tek tür uygulanır; tür değiştirildiğinde girilen tüm taslaklar temizlenir (oranlar 100'e, tutarlar 0'a döner). - Ay seçimi — her ay satırında onay kutusu vardır ve başlangıçta listelenen ayların tamamı seçilidir. Yalnızca seçili aylar uygulanır; hiç ay seçili değilse Uygula pasif kalır.
- Tüm ayları seç —
singlemodda da listeyi 12 aya genişletir ve hepsini seçer. - Toplu değer (+/−) ve Toplu oran (%) — girilen değeri tek tıkla seçili ayların ayar hücresine yazar. Yalnızca etkin türün alanı açıktır.
- Başlığın altındaki Düzenlenen Ay(lar) rozeti etkilenen aralığı gösterir
(ör. Mart → Aralık);
summaryFieldsrozetleri bunun yanında durur.
Uygula, onApply(taslakDegerler, secenekler) çağırır. secenekler
kullanıcının popup'ta yaptığı seçimleri taşır: adjustType, allMonths ve
selectedMonthIndices. Yeni tutarları hesaplarken bunları oturumla birleştirin:
onApply={(taslakDegerler, secenekler) => {
const guncellemeler = applyMonthAdjustSession(
{ ...oturum, ...secenekler, draftValues: taslakDegerler },
STANDARD_MONTH_FIELDS
);
// ...
}}
secenekler birleştirilmezse tür değişikliği ve ay seçimi yok sayılır — ör.
amount oturumunda Oran (%)'a geçildiğinde oran taslakları (100, 110…) tutar
olarak eklenir.
Kümülatif yüzde ayarı
Düğmeye tıklayınca 12 ayın tamamı için yüzde bazlı ayar oturumu açılır.
Örneğin bir aya 110 yazıp uyguladığınızda o ayın tutarı yüzde 10 artar;
100 bırakılan aylar değişmez. summaryFields popup başlığının altında
hesap/departman gibi satır bilgilerini rozet olarak gösterir
(stripLeadingAccountCode baştaki "770 -" benzeri hesap kodunu ayıklar).
Seçili aydan itibaren tutar ayarı
mode: "single", columnField ile verilen aydan yıl sonuna kadar olan ayları
listeler; girilen tutar mevcut değere eklenir (negatif değer azaltır). Yalnızca
bir ayı değiştirmek için diğer ayları 0'da bırakın ya da seçimden çıkarın.
Gerçek uygulamada bu oturum, grid hücresinin sağ tık menüsündeki Arttır/Azalt
öğesiyle tıklanan kolona göre açılır.
Yardımcı fonksiyonlar
Popup, utils/monthAdjust modülündeki yardımcılarla birlikte çalışır;
tümü paket kökünden dışa aktarılır:
| Fonksiyon / Sabit | Açıklama |
|---|---|
STANDARD_MONTH_FIELDS | Standart ay alanları: ["V001", "V002", …, "V012"] |
MONTH_FIELD_PATTERN | Ay alanı deseni: /^[vV]\d{3}$/ |
createMonthAdjustSession(params) | Satır, kolon ve moddan MonthAdjustSession üretir |
applyMonthAdjustSession(session, monthFields) | Taslak değerlerden alan → yeni tutar haritası hesaplar (2 basamağa yuvarlar). single modda — allMonths yoksa — tıklanan aydan önceki aylar, selectedMonthIndices verilmişse seçilmeyen aylar ve varsayılan taslaklar (100 / 0) atlanır |
sumMonthValues(rowData, monthFields, updates) | Güncellemeler uygulanmış yıllık toplamı verir |
getAffectedMonthIndices(mode, columnField, monthFields) | Listelenecek ay indeksleri: single için tıklanan aydan yıl sonuna, cumulative için tümü |
getDefaultMonthAdjustDraftValues(adjustType) | Başlangıç taslağı: percent için 100, amount için 0 |
getRowFieldValue(row, fieldName) | Alan adını büyük/küçük harf duyarsız çözerek değeri okur |
resolveMonthFieldsFromColumns(columns) | Grid kolon tanımlarından ay alanlarını çıkarır |
LivaDataGrid bileşeni bu akışı monthAdjustOptions prop'uyla hazır olarak
sunar: ay (V001…V012) hücresinin sağ tık menüsünde Sayısal İşlemler
başlığı altında Arttır/Azalt (single) ve Kümülatif Değer Arttır/Azalt
(cumulative) öğeleri çıkar. Uygula'da popup seçenekleri oturumla birleştirilir,
yeni değerler satırın hücrelerine yazılır, totalField verilmişse yıllık toplam
güncellenir ve monthAdjustOptions.onApply çağrılır. Bu sayfadaki gibi elle
oturum yönetimi yalnızca özel senaryolarda gerekir.
MonthAdjustSession
type MonthAdjustSession = {
rowId: string;
rowData: Record<string, unknown>;
columnField: string; // oturum oluşturulurken büyük harfe çevrilir
mode: "single" | "cumulative";
adjustType: "percent" | "amount";
draftValues: number[]; // 12 elemanlı taslak dizisi
allMonths?: boolean; // single modda da 12 ayın tamamına uygula
selectedMonthIndices?: number[]; // yalnızca bu ay indekslerine uygula
};
| Prop | Tip | Varsayılan |
|---|---|---|
session | MonthAdjustSession | — |
monthFields | string[] | — |
monthCaptions | string[] | — |
summaryFields | LivaMonthAdjustSummaryField[] | [] |
onApply | (draftValues: number[], options?: Pick<MonthAdjustSession, "adjustType" | "allMonths" | "selectedMonthIndices">) => void | — |
onCancel | () => void | — |
LivaMonthAdjustSummaryField alanları: label (rozet etiketi),
fieldNames (sırayla denenecek satır alanları), fallback (değer
bulunamazsa gösterilecek metin), stripLeadingAccountCode (baştaki hesap
kodunu ayıklar), wide (rozeti geniş gösterir). Popup her render
edildiğinde açık gelir; kapatma davranışı onCancel üzerinden koşullu
render ile yönetilir. Başlık moda göre Kümülatif Değer Arttır/Azalt ya da
Arttır/Azalt'tır.