# Hand-Over Modülü Dokümantasyonu Bu belge, `resources/views/admin/type/hand-over.blade.php` dosyasındaki Hand-Over modülü için sütun yapılarını, veri etkileşimlerini ve otomatik durum (status) mantığını açıklar. ## 1. Genel Yapı ve Sütun Grupları Modül, dinamik olarak ayarlanan sayıda (varsayılan: 3) kontrol aşamasından oluşan bir onay sürecini yönetir. Veriler ana gruplar altında toplanır: ### General Info (Genel Bilgiler) Temel proje ve paket bilgilerinin girildiği alandır. - **Object, Location, Work Type, Project**: Paketin ait olduğu lokasyon ve proje detayları. - **Volumes (Hacimler)**: - `collected_volumes`: Toplanan hacim. - `not_collected_volumes`: Toplanmayan hacim (Varsayılan: 1). - `total_volumes`: **Otomatik Hesaplanır**. (`collected_volumes` + `not_collected_volumes`). Bu alan salt okunurdur. ### Control Aşamaları (Control 1, Control 2, ...) Her bir kontrol aşaması (varsayılan olarak 3 adet) aşağıdaki standart sütunları içerir: - **Controller**: Bu aşamadan sorumlu alt yüklenici veya firma (Seçim listesinden atanır). - **Date (1, 2, 3)**: İşlem tarihleri. - **Status**: Aşamanın durumu (`Agreed`, `Comment`, `Revision`). - **Comments**: Varsa notlar veya ret nedenleri. - **Responsible**: İşlemi yapan kişi. **Otomatik İşlem:** - Bir kontrol aşamasına tarih (`date`) girildiğinde, `responsible` alanı boş ise, o anki oturum açmış kullanıcının adı otomatik olarak doldurulur. ### Location Info Arşivleme ve konum bilgilerini içerir. - **Archive**: Arşiv durumu. --- ## 2. Final Status (Nihai Durum) Mantığı `Final Status` sütunu, tüm kontrol aşamalarındaki (Control 1, 2, 3...) durumlara bakarak **otomatik olarak** belirlenir. Bu sütun elle değiştirilemez (salt okunurdur). Mantık sıralaması aşağıdaki gibidir: 1. **Hiçbir Kontrolcü Atanmamışsa:** Durum boştur. 2. **Yorum (Comment) Varsa:** Herhangi bir aşamada "Comment / замечание" durumu varsa, `Final Status`, yorum yapan **ilk** kontrolcünün (firma) adı olur. (Öncelik yorumlardadır). 3. **Tümü Onaylıysa (Agreed):** Atanan **tüm** kontrolcüler "Agreed / подписано" durumundaysa, `Final Status` **"Archive"** olur. 4. **Sıradaki Kontrolcü:** Yukarıdakiler gerçekleşmemişse, sistem sırayla kontrol eder: - Eğer bir aşama "Agreed" ise ve bir sonraki aşamaya kontrolcü atanmışsa, `Final Status` bir sonraki kontrolcünün adı olur. Bu, dosyanın bir sonraki birime geçtiğini gösterir. ### Akış Diyagramı (Flowchart) Aşağıdaki diyagram `updateFinalStatus` fonksiyonunun çalışma mantığını özetler: ```mermaid graph TD Start[Değişiklik Algılandı] --> CheckController{Kontrolcü\nAtanmış mı?} CheckController -- Hayır --> StatusEmpty[Durum: Boş] CheckController -- Evet --> CheckComment{Herhangi biri\n'Comment' mi?} CheckComment -- Evet --> SetCommenter[Durum: İlk Yorum\nYapanın Adı] CheckComment -- Hayır --> CheckAllAgreed{HEPSİ\n'Agreed' mi?} CheckAllAgreed -- Evet --> SetArchive[Durum: 'Archive'] CheckAllAgreed -- Hayır --> FindNext[Sıradaki Aşama Kontrolü] FindNext --> IsCurrentAgreed{Mevcut Aşama\n'Agreed' mi?} IsCurrentAgreed -- Evet --> CheckNextAssigned{Sonraki Kontrolcü\nVar mı?} CheckNextAssigned -- Evet --> SetNext[Durum: Sonraki\nKontrolcünün Adı] CheckNextAssigned -- Hayır --> KeepCurrent[Durum Değişmez] IsCurrentAgreed -- Hayır --> KeepCurrent ``` ## 3. ID Status (Genel Durum) Mantığı `id_status` sütunu, satırın genel durumunu temsil eder ve `Agreed`, `Comment`, `Revision` veya `Archive` değerlerinden birini alır. Bu sütun da **otomatik olarak** hesaplanır. Mantık şu şekildedir: 1. **Tümü Onaylıysa:** Tüm kontrol aşamaları (`control*_id_status`) "Agreed / подписано" durumundaysa, `id_status` **"Agreed / подписано"** olur. 2. **Değilse:** Eğer herhangi bir aşama "Agreed" değilse, `id_status` **"Archive"** sütunundaki değeri alır. ### ID Status Akış Diyagramı ```mermaid graph TD Start[Değişiklik Algılandı] --> CheckMultiAgreed{Tüm Kontroller\n'Agreed' mi?} CheckMultiAgreed -- Evet --> SetAgreed[Durum: 'Agreed'] CheckMultiAgreed -- Hayır --> GetArchive{Archive Değeri\nNedir?} GetArchive --> SetFromArchive[Durum: Archive Sütunundaki Değer] ``` ## 3. Veri Kaynakları ve İlişkiler Sütunlar aşağıdaki veri kaynaklarından beslenir: - **Object / Project**: `weld_logs` tablosundan dinamik olarak çekilir. - **Work Type**: `work_types` tablosundan gelir. - **Controller**: `subcontractors` (alt yükleniciler) tablosundan listelenir. - **Responsible**: `work_permit_documents` tablosundaki kayıtlı personeller arasından seçilir. Bu yapı, kullanıcı hatalarını en aza indirmek ve onay sürecinin (kimde olduğu bilgisinin) otomatik olarak takip edilmesini sağlamak amacıyla tasarlanmıştır.