Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / İş modülleri

Açıklama

Taraf birleştirme

Tek taraf kartının müşteri, tedarikçi, çalışan ve kuruluş rollerini EventBus ile güncel tutulan bölümler olarak nasıl taşıdığı.

Cluster ERP'de müşteri, tedarikçi, çalışan ve sahip olunan kuruluş ayrı kartlar değildir. Her biri kendi modülünde, parties modülünün tek bir tarafını (Party) gösteren bir rol kaydıdır ve web uygulaması hepsi için taraf kartını açar. Bu sayfa kimlik yönlendirmesini, taraf kartındaki rol bölümlerini, rol bayraklarını, rehberli oluşturmayı ve rol etkinleştirmeyi açıklar. Taraf alanlarının kendisi parties alt modülü sayfasında listelenir.

Kısaca

  • Bir rol kaydı bir party_id taşır: CRM müşterisi, satın alma tedarikçisi, çalışan, görevlendirme ve sahip olunan kuruluş (src/cluster_erp/modules/crm/customers/models.py:23, src/cluster_erp/modules/procurement/suppliers/models.py:42, src/cluster_erp/modules/owned_organisations/employees/models.py:43, src/cluster_erp/modules/owned_organisations/organisations/models.py:41).
  • Bir rol varlığındaki IdentityMeta, web uygulamasına ayrı bir rol kartı yerine taraf kartını açmasını söyler (src/cluster_erp/core/metadata.py:304-313).
  • Taraf metadata'sındaki FacetMeta girdileri her rolün verisini taraf kartının bölümleri olarak gösterir (src/cluster_erp/core/metadata.py:357-377, src/cluster_erp/modules/parties/parties/metadata.py:550-763).
  • Taraftaki is_customer, is_supplier ve is_employee bayrakları rol kayıtlarını PartyRoleSet olayı ve bir başlangıç uzlaştırmasıyla izler (src/cluster_erp/modules/parties/module.py:168-195, src/cluster_erp/server/app.py:1002-1055).
  • Rollerle taraf oluşturmak ve sonradan rol eklemek, tek bir istek işleminde birkaç modül servisini çağıran sunucu katmanında çalışır (src/cluster_erp/server/routes/party_composite.py:1-10, src/cluster_erp/server/routes/party_roles.py:1-15).

Nasıl çalışır

Model

Şema hangi rol kayıtlarının bir tarafı gösterdiğini ve her birinin hangi modüle ait olduğunu gösterir.

flowchart LR
 Party["Party (parties)"]
 Customer["Customer (crm)"] -->|party_id| Party
 Supplier["Supplier (procurement)"] -->|party_id| Party
 Employee["Employee (owned_organisations)"] -->|party_id| Party
 Assignment["Assignment (owned_organisations)"] -->|party_id| Party
 Org["OwnedOrganisation (owned_organisations)"] -->|party_id| Party
 Assignment -->|organisation_id| Org
 Assignment -->|employee_id| Employee

Düz anlatımla: beş rol kaydı tarafı bir party_id sütunuyla gösterir. Bir görevlendirme ayrıca çalışan kaydını ve kişinin çalıştığı sahip olunan kuruluşu gösterir (src/cluster_erp/modules/owned_organisations/employees/models.py:69-102). Bu sütunların hiçbiri modüller arası bir veritabanı yabancı anahtarı değildir; çalışan modeli, modül sınırı temiz kalsın diye yönetici ve taraf kimliklerinin düz UUID olduğunu belirtir (src/cluster_erp/modules/owned_organisations/employees/models.py:59-61).

Kimlik yönlendirmesi

IdentityMeta(field, module, entity), taraf kimliğini tutan yerel sütunu adlandırır. Ayarlandığında web uygulaması rol kartı yerine taraf kartını açar (src/cluster_erp/core/metadata.py:304-313). Beş varlık bunu bildirir: customer (src/cluster_erp/modules/crm/customers/metadata.py:30), supplier (src/cluster_erp/modules/procurement/suppliers/metadata.py:27), organisation, employee ve assignment (src/cluster_erp/modules/owned_organisations/organisations/metadata.py:53, src/cluster_erp/modules/owned_organisations/organisations/metadata.py:355, src/cluster_erp/modules/owned_organisations/organisations/metadata.py:590). İntranet rehberi de bunu bildirir (src/cluster_erp/modules/intranet/directory/metadata.py:30).

Taraf kartındaki rol bölümleri

FacetMeta bir tarafın oynayabileceği bir rolü tanımlar. Web uygulaması rol kayıtlarını, link_field taraf kimliğine eşit olacak şekilde süzülen düz bir liste sorgusuyla yükler ve bildirilen bölümleri işler (src/cluster_erp/core/metadata.py:357-377). Taraf metadata'sı beş rol bölümü bildirir:

Rol bölümü Bölümler Kapı Kaynak
crm / customer Ticari Bilgiler formu; Müşteri Parçaları tablosu; teklif talebi, teklif ve sipariş geçmişi tabloları yok src/cluster_erp/modules/parties/parties/metadata.py:551-628
procurement / supplier Tedarikçi Bilgileri formu; satın alma teklif talebi, teklif ve sipariş geçmişi tabloları yok src/cluster_erp/modules/parties/parties/metadata.py:629-679
owned_organisations / organisation Departmanlar ağacı; görevlendirmelerden oluşan Çalışanlar tablosu yok src/cluster_erp/modules/parties/parties/metadata.py:680-698
owned_organisations / employee İstihdam Bilgileri formu yok src/cluster_erp/modules/parties/parties/metadata.py:700-713
owned_organisations / assignment Kuruluşlar boyunca Görevlendirmeler tablosu requires_flag="is_employee" src/cluster_erp/modules/parties/parties/metadata.py:718-762

İşleme kuralları genel ayrıntı sayfasındadır.

Rol bayrakları

Taraf listesi taraftaki üç mantıksal değerle role göre süzer (src/cluster_erp/modules/parties/parties/services.py:53-61). Her rol modülü bir rol kaydını bağladığında veya bağını kaldırdığında PartyRoleSet(party_id, role, active) yayar (src/cluster_erp/core/contracts.py:48-55): müşteri servisi (src/cluster_erp/modules/crm/customers/services.py:134-144), tedarikçi servisi (src/cluster_erp/modules/procurement/suppliers/services.py:136-145) ve çalışan servisi (src/cluster_erp/modules/owned_organisations/employees/services.py:88-101, src/cluster_erp/modules/owned_organisations/employees/services.py:125-140). parties modülü abone olur ve eşleşen sütunu kendi oturumunda günceller (src/cluster_erp/modules/parties/module.py:168-195). Her başlangıçta _sync_party_role_flags üç bayrağı canlı rol kayıtlarından yeniden hesaplar ve yalnızca değişen satırları yazar (src/cluster_erp/server/app.py:1002-1055).

Rehberli oluşturma

POST /api/v1/parties/composite, tarafı, rol listesini ve rol başına bir bloğu içeren tek bir yük alır (src/cluster_erp/server/routes/party_composite.py:40-51). Taraf metadata'sı oluşturma formunu composite_create ile bu uca yönlendirir (src/cluster_erp/modules/parties/parties/metadata.py:319-329).

sequenceDiagram
 participant C as İstemci formu
 participant R as create_party_composite
 participant P as PartyService
 participant F as Rol servisleri
 C->>R: taraf, roller, rol blokları
 R->>P: create(party)
 P-->>R: taraf
 R->>F: CustomerService / SupplierService / EmployeeService / AssignmentService .create
 F-->>R: rol kimlikleri
 R-->>C: party_id ve rol kimlikleri

Düz anlatımla: uç önce tarafı oluşturur (src/cluster_erp/server/routes/party_composite.py:80). Seçilen her rol için party_id alanını doldurur, müşteri ve tedarikçi için legal_name ve tax_no değerlerini taraftan varsayılan olarak alır, bloğu doğrular ve rol servisini çağırır (src/cluster_erp/server/routes/party_composite.py:84-126). Bir çalışan için, izinle korunan alanlar o izne sahip olmayan bir çağıran için düşürülür (src/cluster_erp/server/routes/party_composite.py:114-120). İlk görevlendirme bloğu kuruluşu, pozisyonu, istihdam türünü ve başlangıç tarihini belirtmelidir; aksi halde çağrı PARTY_ASSIGNMENT_INCOMPLETE ile başarısız olur (src/cluster_erp/server/routes/party_composite.py:127-145). İstek oturumu her şeyi birlikte kaydeder veya her şeyi geri alır (src/cluster_erp/server/routes/party_composite.py:4-9).

Sonradan rol ekleme

POST /api/v1/parties/{party_id}/roles/customer, /roles/supplier ve /roles/employee var olan bir tarafa rol ekler (src/cluster_erp/server/routes/party_roles.py:58-123). Taraf kartı bunları Müşteri Rolünü Etkinleştir, Tedarikçi Rolünü Etkinleştir ve Çalışan Rolünü Etkinleştir aksiyonları olarak sunar; her biri yalnızca eşleşen bayrak yanlışken görünür (src/cluster_erp/modules/parties/parties/metadata.py:393-438). Bir rolü kaldırmak rol kaydının kendi kullanımdan kaldırılmasıdır; taraf tarafından rol kaldıran bir uç yoktur (src/cluster_erp/server/routes/party_roles.py:12-14).

Ad ve vergi numarası tarafı izler

Bir tarafın görünen adı veya vergi numarası değiştiğinde PartyUpdated yeni değerleri taşır (src/cluster_erp/modules/parties/parties/services.py:201-212). crm modülü bunları müşterinin legal_name ve tax_no alanlarına kopyalar (src/cluster_erp/modules/crm/module.py:115-135); procurement modülü de aynı olaya abone olur (src/cluster_erp/modules/procurement/module.py:122).

Kullanımdan kaldırma tarafı izler

Bir taraf silindiğinde PartyDeleted yayılır (src/cluster_erp/modules/parties/parties/services.py:216-233). owned_organisations modülü kişinin çalışan kaydını party_deactivated nedeniyle geçici olarak siler ve taraf yeniden etkinleştirildiğinde tam olarak bu satırları geri getirir (src/cluster_erp/modules/owned_organisations/module.py:348-420). crm ve procurement modülleri de PartyDeleted olayına abone olur (src/cluster_erp/modules/crm/module.py:96, src/cluster_erp/modules/procurement/module.py:125).

Diğer modüller adına oluşturulan taraflar

  • party_id olmadan oluşturulan sahip olunan bir kuruluş EnsurePartyForOrganisation sorar; parties modülü aynı görünen ada sahip canlı bir tarafı döndürür veya bir kuruluş tarafı oluşturur (src/cluster_erp/modules/owned_organisations/organisations/services.py:74-94, src/cluster_erp/modules/parties/module.py:324-357).
  • CustomerCreated olayında parties modülü müşterinin yasal adıyla bir kuruluş tarafı bulur veya oluşturur (src/cluster_erp/modules/parties/module.py:445-487).
  • Başlangıçta _sync_customers_to_parties, tarafı olmayan her canlı müşteri için adla eşleştirerek bir taraf oluşturur ve bağlar (src/cluster_erp/server/app.py:951-999).

Neden böyle kurulmuştur

  • Projenin yazılı mühendislik kuralları her şeyin bir taraf olduğunu belirtir: müşteri, kuruluş, çalışan ve tedarikçi rol bölümleri olan tek bir taraf kartıdır, roller FacetMeta ve PartyRoleSet üzerinden yürür ve modüller taraf modülünü doğrudan içe aktarmaz.
  • Bileşik ve rol uçları, modüller birbirini hiç içe aktarmasın diye sunucu düzeyinde bir düzenleme olduklarını belirtir (src/cluster_erp/server/routes/party_composite.py:4-9, src/cluster_erp/server/routes/party_roles.py:4-10).
  • Başlangıç uzlaştırması, bir işleyicinin kaçırdığı her şeyi düzelttiğini belirtir; örneğin henüz kaydedilmemiş bir tarafa karşı oluşturulan bir rol kaydı (src/cluster_erp/server/app.py:1003-1008).

Kurallar ve sınırlar

  • Modüller taraflar hakkında yalnızca sözleşmelerle iletişim kurar. Bir test, auth modülünün izin korumaları dışında hiçbir modülün başka bir modülü içe aktarmadığını denetler (tests/test_architecture_boundaries.py:1-11, tests/test_architecture_boundaries.py:46). Rehberli oluşturma ve rol etkinleştirme sunucu uçları modules/ dışında durur ve modül servislerini doğrudan içe aktarır (src/cluster_erp/server/routes/party_composite.py:61-73).
  • Taraf başına bir canlı çalışan kaydı (src/cluster_erp/modules/owned_organisations/employees/models.py:33-40), taraf başına bir canlı sahip olunan kuruluş (src/cluster_erp/modules/owned_organisations/organisations/models.py:28-35) ve taraf başına bir canlı tedarikçi (src/cluster_erp/modules/procurement/suppliers/models.py:34-36).
  • Görevlendirmeler bölümü yalnızca is_employee bayrağı doğru olan bir tarafta görünür (src/cluster_erp/modules/parties/parties/metadata.py:722).

Diğer parçalarla etkileşim

Modül Rol kaydı Kullanılan sözleşmeler Sayfa
crm Customer PartyRoleSet, CustomerCreated yayar; PartyUpdated, PartyDeleted olaylarına abone olur CRM modülü
procurement Supplier PartyRoleSet yayar; PartyUpdated, PartyDeleted olaylarına abone olur Procurement modülü
owned_organisations Employee, Assignment, OwnedOrganisation PartyRoleSet yayar; EnsurePartyForOrganisation sorar; PartyDeleted, RecordActivated olaylarına abone olur Owned organisations modülü

Tüm üreticiler ve tüketiciler sözleşmeler başvurusu sayfasındadır.

Sınırlar ve açık noktalar

  • EnsurePartyForOrganisation, CustomerCreated ve başlangıç müşteri eşitlemesi var olan bir tarafı yalnızca görünen adla eşleştirir (src/cluster_erp/modules/parties/module.py:338-347, src/cluster_erp/modules/parties/module.py:462-470, src/cluster_erp/server/app.py:969-976).
  • PartyUpdate üç rol bayrağını kabul eder (src/cluster_erp/modules/parties/parties/schemas.py:88-90); bu yüzden doğrudan bir güncelleme rol kaydı olmadan bir bayrağı ayarlayabilir. Bir sonraki başlangıç uzlaştırması onu rol kayıtlarının durumuna geri getirir (src/cluster_erp/server/app.py:1035-1051).
  • EmployeeService.bulk_delete satırları PartyRoleSet yaymadan geçici olarak siler (src/cluster_erp/modules/owned_organisations/employees/services.py:142-145); bayrak bir sonraki başlangıç uzlaştırmasıyla düzelir.

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
facet FacetMeta Bir tarafın oynayabileceği, taraf kartında bir bölüm olarak gösterilen rol. rol bölümü src/cluster_erp/core/metadata.py:357
identity redirect IdentityMeta Bir rol varlığının taraf kartını açmasını sağlayan metadata. Kimlik yönlendirmesi src/cluster_erp/core/metadata.py:304
guided creation composite_create Bir tarafı ve seçilen rollerini tek istekte oluşturma. Rehberli oluşturma src/cluster_erp/modules/parties/parties/metadata.py:319
role event PartyRoleSet Bir rol modülünün bir rol kaydını bağladığında veya bağını kaldırdığında yaydığı olay. Rol olayı src/cluster_erp/core/contracts.py:48

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13