#pragma once // İş Takip "_sema" katmanı (F1) — kayıt türü tanımlarını koddan veriye taşır. // docs/istakip_v4_cad_dosya_gelistirilmis_plan.md §1. Motor "_sema" turunu // bilmez/yorumlamaz — bu dosya UI katmanının kendisi (eski istakip_penceresi.cpp // içi sabit turlar() fonksiyonunun yerini alır). turlarOku() önbellekli: yalnız // IsIstemci::sonSurum() değişince yeniden kurulur (kare-başı JSON parse yok — // listeKur ile aynı desen). #include #include #include namespace fiko::istakip { class IsIstemci; struct IsKayit; } // namespace fiko::istakip namespace fiko { class IstakipServis; struct AlanSema { std::string ad; // IsKayit alan anahtarı std::string etiket; // form/tablo etiketi std::string tip = "metin"; // metin | sayi | tarih | para (F1 kapsamı) bool tabloda = true; // tablo sütunu mu }; struct TurSema { std::string tur_id; std::string ikon; std::string baslik; // sekme başlığı std::string tekil; // "Yeni ..." etiketi std::string renk; // hex — F1'de kullanılmıyor, F5+ (kanban/grafik) için taşınır std::string bag_tur; // zincirde bağlı olduğu tür (boş = kök) std::vector alanlar; std::vector durumlar; // boş = durum sütunu yok (düz tablo) int sira = 0; // menü/sekme sıralama ağırlığı // Dalga 2 — Kanban genelleştirme (plan §14: "herhangi bir durum alanı Kanban // sütunu olabilir"): durum kavramı artık JSON anahtarı "durum"a kilitli değil. // kanban_alan = kayıtta bu değerin okunup yazıldığı anahtar (varsayılan // "durum" — geriye dönük uyumlu). kanban_baslik = UI'da gösterilen etiket // (varsayılan "Durum" — özel türler "Aşama"/"Öncelik" gibi adlandırabilir). std::string kanban_alan = "durum"; std::string kanban_baslik = "Durum"; }; // "_sema" kayıtlarından tür listesini okur (sira'ya göre sıralı, önbellekli). // Hiç "_sema" kaydı yoksa (yeni kurulum / eski veritabanı) geriye dönük uyumlu // sabit 5 türü döner — HİÇBİR ŞEY YAZMAZ (yazma için ilkKurulumSemalariYaz). const std::vector& turlarOku(const istakip::IsIstemci& veri); // İlk kurulum: "_sema" kaydı hiç yoksa mevcut 5 türü (musteri/teklif/siparis/ // is_emri/istemci_rol) "_sema" kaydı olarak kral'a yazar — GERİYE DÖNÜK UYUMLU, // var olan kayıtlar hiç bozulmaz, yalnız tanım kaynağı değişir. Yalnız KRAL // çağırdığında yazar (çoklu istemci yarış koşulunu önler); servis kapalıysa ya // da "_sema" zaten kuruluysa no-op. void ilkKurulumSemalariYaz(IstakipServis& servis); // Tek "_sema" kaydını TurSema'ya çözer (Şema Tasarımcısı F2 için dışa açık — // turlarOku() önbellekli listeyi döner, düzenleme ekranı tek kaydın kimliğini // de bilmek zorunda; bu yüzden ham IsKayit alınıp çözülür). TurSema semaKayitOku(const istakip::IsKayit& kayit); // TurSema'yı "_sema" IsKayit'e serialize eder. kimlik=0 → yeni tür (kral/kanal // kimlik atar); dolu → mevcut kaydın YERİNE yazılır (düzenleme). Kaydetmek için // dönen değer g_istakipServis.yaz(...)'a verilmeli — bu fonksiyon yazmaz. istakip::IsKayit semaKayitYaz(const TurSema& t, uint64_t kimlik = 0); } // namespace fiko