sozsoft-platform/configs/seeds/docs/modules/App.Maintenance.md

245 lines
14 KiB
Markdown
Raw Normal View History

2026-10-14 22:42:19 +00:00
# Bakım (`App.Maintenance`)
> Menünün altındaki her dal bu dosyada bir bölümdür (`module-doc:section`); dosya ve bölümler ilk deploy'da otomatik açılır. `module-doc:todo` işaretli alt bölümleri modülü üreten kişi ya da AI doldurur (`lowcode.instructions.md` §0.13); MCP ile üretimde talep bu bölümler doldurulmadan Testing'e alınamaz. "Ek — Ekran envanteri" bölümü wizard dosyalarından üretilir, elle düzenlenmez.
<!-- module-doc:section App.Maintenance.Definitions -->
## Tanımlamalar (`App.Maintenance.Definitions`)
### 1. Amaç ve kapsam
Bakım modülünün (KADİFETEKS Odoo Bakım modülünden taşınan) tanım listeleri: ekipman kategorileri, bakım ekipleri, bakım tipleri, hizmet tipleri, arıza tipleri ve red nedenleri. Kullanıcılar bakım ve bilgi işlem yöneticileridir. Bakım/hizmet iş emirleri, bakım talimatları ve hizmet talepleri bu bölümün kapsamında değildir; bu ekranlar onların lookup kaynağıdır.
### 2. Analiz ve kararlar
- Modül kodu `Mm`, tablo öneki `Mm_T_`, ekran kökü `App.Maintenance` (kullanıcı onayı).
- Sorumlu, Ekip Yöneticisi ve Ekip Üyeleri AbpUsers'tan seçilir (kullanıcı onayı); Ekip Üyeleri çoklu seçimdir (dxTagBox, `|` ile ayrılmış Id'ler).
- Şube bilgisi `BranchId`'dir (Ekipman Kategorileri ve Bakım Ekipleri); demo satırlar Branch1'e yazıldı (kullanıcı onayı).
- Hizmet Tipleri tablosundaki "Bakım Tipi" başlıklı kolon hizmetin adıdır → `Name` / "Hizmet Tipi"; Bakım Tipleri'ne lookup yoktur (kullanıcı onayı).
- Odoo'daki "Satış Ekip Üyeleri" etiketi hatalıdır; alan "Ekip Üyeleri" olarak açıldı.
- Red Nedenleri, Satınalma'daki `App.Prc.RejectReason` ile birleştirilmedi; Bakım'a ait kodlu ayrı liste.
- Ürün kartına ekipman işareti/kategorisi eklenmesi bu bölümün kapsamında değildir.
### 3. Menü ve ekranlar
Bakım (`App.Maintenance`) › Tanımlamalar (`App.Maintenance.Definitions`):
| Ekran | Kod | Not |
| --- | --- | --- |
| Ekipman Kategorileri | `App.Maintenance.EquipmentCategory` | şube kapsamlı, 84 demo satır |
| Bakım Ekipleri | `App.Maintenance.Team` | şube kapsamlı, 5 demo satır; Bakım/Hizmet Tipleri'nin lookup kaynağı |
| Bakım Tipleri | `App.Maintenance.MaintenanceType` | 11 demo satır |
| Hizmet Tipleri | `App.Maintenance.ServiceType` | 79 demo satır (ST01–ST79) |
| Arıza Tipleri | `App.Maintenance.FailureType` | 8 demo satır |
| Red Nedenleri | `App.Maintenance.RejectReason` | 8 demo satır |
### 4. Veri modeli
Tüm tablolar kiracı (`TenantId`) + tam audit + soft delete taşır.
- `Mm_T_EquipmentCategory` (BranchId, Name, ResponsibleUserId → AbpUsers, IsActive)
- `Mm_T_Team` (BranchId, Name, ManagerUserId → AbpUsers, MemberUserIds nvarchar(MAX) `|` listesi, IsActive)
- `Mm_T_MaintenanceType` (Code null olabilir, Name, TeamIds nvarchar(MAX) `|` listesi → Mm_T_Team, Description, SortOrder, IsActive)
- `Mm_T_ServiceType` (SortOrder, Code, Name, TeamIds, Description, IsActive) — UQ (TenantId, Code)
- `Mm_T_FailureType` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code)
- `Mm_T_RejectReason` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code)
### 5. İş kuralları ve hesaplar
- Lookup'lar yalnızca silinmemiş kayıtları, ekip lookup'ı ayrıca yalnız aktif ekipleri listeler; kullanılmış tanım silinmez, pasife alınır.
- Bakım Tipleri, Hizmet Tipleri, Arıza Tipleri ve Red Nedenleri SortOrder'a göre artan sıralı açılır.
- Hizmet/Arıza/Red kodu kiracı içinde benzersizdir (soft delete edilmiş kayıt da kodu tutar).
- Hesaplanan alan yoktur.
### 6. Yetki ve görünürlük
Yetki ağacı: `App.Maintenance` › `App.Maintenance.Definitions` › her ekran (+ Create/Update/Delete/Export/Import/Note). Ekipman Kategorileri ve Bakım Ekipleri şube kapsamlıdır (`IsBranch`), diğerleri yalnız kiracı kapsamlıdır. Widget'lar: her ekranda Toplam · Aktif · Pasif.
### 7. Entegrasyonlar
Yok. Kullanıcı lookup'ları AbpUsers'tan, şube lookup'ı kullanıcıya atanmış aktif şubelerdir (`Sas_T_Branch` ⋈ `Sas_T_BranchUsers`, kiracıya süzülü; `LookupQueryValues.UserBranchValues`), yeni kayıt ilk şubeyle açılır (`UserDefaultBranchValue`).
### 8. Akış örneği
1. Bakım › Tanımlamalar › Bakım Ekipleri'nde "elektrik bakım" ekibi açılır; Ekip Yöneticisi ve Ekip Üyeleri kullanıcılardan seçilir.
2. Bakım Tipleri'nde "ELEKTRİK & ELEKTRONİK BAKIMLAR" düzenlenir, Bakım Ekipleri'ne "elektrik bakım" eklenir.
3. Hizmet Tipleri'nde ST07 "Elektrik Arızası ( Tesisat )" satırına aynı ekip eklenir; hizmet talebinde bu tip seçildiğinde ilgili ekip önerilir.
### 9. Sık sorulanlar
- **Ekipman kategorisi neden başka şubede görünmüyor?** Liste seçili şubeye süzülür; kategori kaydedildiği şubeye aittir.
- **Bakım tiplerinin demo verisinde ekipler neden boş?** Demo ekiplerin Id'si migrate'te üretildiği için bağlantılar ekrandan elle kurulur.
- **ST02 ile ST06 aynı ad mı?** Evet, talepteki veri böyle; kodları farklıdır.
### 10. Dosyalar ve geri alma
- Tablolar: `sql/object/Mm_T_EquipmentCategory.sql`, `Mm_T_Team.sql`, `Mm_T_MaintenanceType.sql`, `Mm_T_ServiceType.sql`, `Mm_T_FailureType.sql`, `Mm_T_RejectReason.sql`.
- Wizard'lar: `Mm_EquipmentCategory.json`, `Mm_Team.json`, `Mm_MaintenanceType.json`, `Mm_ServiceType.json`, `Mm_FailureType.json`, `Mm_RejectReason.json`.
- Demo veri: `data/App.Maintenance.{EquipmentCategory,Team,MaintenanceType,ServiceType,FailureType,RejectReason}.json`.
- Geri alma: ekranlar `delete_wizard` ile silinir (önce Bakım/Hizmet Tipleri, sonra Bakım Ekipleri); tablolar yalnızca açık onayla `dropTables: true` ile düşürülür.
<!-- module-doc:auto:begin -->
## Ek — Ekran envanteri (otomatik)
> Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.
### Tanımlamalar (`App.Maintenance.Definitions`)
#### Ekipman Kategorileri — `App.Maintenance.EquipmentCategory`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_EquipmentCategory.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.EquipmentCategory` (sıra 1) |
| Yetki | `App.Maintenance.EquipmentCategory` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Ekipman Kategorileri — ekipman olan ürünlerin bağlı olduğu gruplar (dokuma makineleri, kompresörler, bilgisayarlar, taşıtlar…). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_EquipmentCategory` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | IsActive=true |
| Veri aynası | `data/App.Maintenance.EquipmentCategory.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: kullanıcının şubeleri (Sas_T_Branch ⋈ Sas_T_BranchUsers), varsayılan ilk şube |
| `Name` | Kategori Adı | dxTextBox | ✓ | ✓ | |
| `ResponsibleUserId` | Sorumlu | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Bakım Ekipleri — `App.Maintenance.Team`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_Team.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.Team` (sıra 2) |
| Yetki | `App.Maintenance.Team` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Bakım Ekipleri — bakım yapacak kişilerin grupları (iç bakım, mekanik, elektrik, dış bakım/tedarikçi). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_Team` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | IsActive=true |
| Veri aynası | `data/App.Maintenance.Team.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: kullanıcının şubeleri (Sas_T_Branch ⋈ Sas_T_BranchUsers), varsayılan ilk şube |
| `Name` | Ekip Adı | dxTextBox | ✓ | ✓ | |
| `ManagerUserId` | Ekip Yöneticisi | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `MemberUserIds` | Ekip Üyeleri | dxTagBox | | ✓ | sorgu: AbpUsers |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Bakım Tipleri — `App.Maintenance.MaintenanceType`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_MaintenanceType.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.MaintenanceType` (sıra 3) |
| Yetki | `App.Maintenance.MaintenanceType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Bakım Tipleri — bakım işinin türleri (mekanik, elektrik & elektronik, genel temizlik, ölçüm & kalibrasyon, periyodik, bilgi işlem donanım…). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_MaintenanceType` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | SortOrder=0, IsActive=true |
| Veri aynası | `data/App.Maintenance.MaintenanceType.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Code` | Kod | dxTextBox | | ✓ | |
| `Name` | Bakım Tipi | dxTextBox | ✓ | ✓ | |
| `TeamIds` | Bakım Ekipleri | dxTagBox | | ✓ | sorgu: Mm_T_Team |
| `Description` | Açıklama | dxTextArea | | ✓ | |
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Hizmet Tipleri — `App.Maintenance.ServiceType`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_ServiceType.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.ServiceType` (sıra 4) |
| Yetki | `App.Maintenance.ServiceType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Hizmet Tipleri — bölümlerin talep edebileceği hizmet türleri (mekanik/elektrik arıza, bilgi işlem destek, yazıcı servisi, sunucu işleri, dokuma özel işlemleri…). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_ServiceType` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | SortOrder=0, IsActive=true |
| Veri aynası | `data/App.Maintenance.ServiceType.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
| `Name` | Hizmet Tipi | dxTextBox | ✓ | ✓ | |
| `TeamIds` | Bakım Ekipleri | dxTagBox | | ✓ | sorgu: Mm_T_Team |
| `Description` | Açıklama | dxTextArea | | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Arıza Tipleri — `App.Maintenance.FailureType`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_FailureType.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.FailureType` (sıra 5) |
| Yetki | `App.Maintenance.FailureType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Arıza Tipleri — hizmet talebinde bildirilen arızanın sınıflandırması (mekanik, elektrik, pnömatik, hidrolik, yazılım/PLC, sensör, aşınma, diğer). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_FailureType` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | SortOrder=0, IsActive=true |
| Veri aynası | `data/App.Maintenance.FailureType.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
| `Name` | Arıza Tipi | dxTextBox | ✓ | ✓ | |
| `Description` | Açıklama | dxTextArea | | ✓ | |
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Red Nedenleri — `App.Maintenance.RejectReason`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_RejectReason.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.RejectReason` (sıra 6) |
| Yetki | `App.Maintenance.RejectReason` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Red Nedenleri — bakım ve hizmet iş taleplerinin reddedilme sebepleri (kullanıcı hatası, arıza bulunamadı, garanti, dış firma, hurda, mükerrer, bakım gerekmiyor, diğer). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_RejectReason` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | SortOrder=0, IsActive=true |
| Veri aynası | `data/App.Maintenance.RejectReason.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
| `Name` | Red Nedeni | dxTextBox | ✓ | ✓ | |
| `Description` | Açıklama | dxTextArea | | ✓ | |
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
<!-- module-doc:auto:end -->