Bakım İş Emirleri

This commit is contained in:
Sedat Öztürk 2026-10-19 00:22:40 +03:00
parent c72881622d
commit 20cbd50dc8
46 changed files with 15130 additions and 71 deletions

View file

@ -257,7 +257,7 @@ bildirilir:
| Tenant + audit kolonları (`Id`, `TenantId`, `CreationTime`, `CreatorId`, `LastModificationTime`, `LastModifierId`, `IsDeleted`, `DeletionTime`, `DeleterId`) | Yeni tabloda varsayılan; kullanıcı "audit yok" demedikçe eklenir | | Tenant + audit kolonları (`Id`, `TenantId`, `CreationTime`, `CreatorId`, `LastModificationTime`, `LastModifierId`, `IsDeleted`, `DeletionTime`, `DeleterId`) | Yeni tabloda varsayılan; kullanıcı "audit yok" demedikçe eklenir |
| Tanım tablosunda `IsActive` | Yeni **tanım** tablosunda varsayılan (aşağıda); kullanıcı "aktif/pasif yok" demedikçe eklenir | | Tanım tablosunda `IsActive` | Yeni **tanım** tablosunda varsayılan (aşağıda); kullanıcı "aktif/pasif yok" demedikçe eklenir |
| İşlem tablosunda `BranchId` | Tanım **olmayan** yeni tabloda `TenantId` gibi varsayılan; ekran `IsBranch: true` (§8.1) | | İşlem tablosunda `BranchId` | Tanım **olmayan** yeni tabloda `TenantId` gibi varsayılan; ekran `IsBranch: true` (§8.1) |
| `IsActive` varsayılan değeri | Her tabloda `DEFAULT 1`, formda `true` (§8.1) | | `IsActive` varsayılan değeri | `IsActive` taşıyan her tabloda `DEFAULT 1`, formda `true` (§8.1) |
| Metinlerin EN + TR olması, dil anahtarı üzerinden verilmesi | Platform sözleşmesi | | Metinlerin EN + TR olması, dil anahtarı üzerinden verilmesi | Platform sözleşmesi |
| İsimlendirme (`ListFormCode`, menü kodu, yetki adları, dosya adları) | §2'den türer | | İsimlendirme (`ListFormCode`, menü kodu, yetki adları, dosya adları) | §2'den türer |
| Seed dosyası yazılıp yazılmayacağı | Her artefakt seed'lenir (§0.2) | | Seed dosyası yazılıp yazılmayacağı | Her artefakt seed'lenir (§0.2) |
@ -795,8 +795,9 @@ Kısa ve karar odaklı yaz; talebi tekrar anlatma.
**Tanım tablosu: Evet / Hayır** kararıdır, talepteki dayanağıyla (§8.1); atlanmaz. Evet ise **Tanım tablosu: Evet / Hayır** kararıdır, talepteki dayanağıyla (§8.1); atlanmaz. Evet ise
kolon tablosunda `IsActive` (bit, varsayılan 1, zorunlu) yer alır — talepte ya da görselde kolon tablosunda `IsActive` (bit, varsayılan 1, zorunlu) yer alır — talepte ya da görselde
olmasa da — ve madde 8 (form alanı + Aktif/Pasif widget'ı) ile madde 10 (`create_table` kolonu, olmasa da — ve madde 8 (form alanı + Aktif/Pasif widget'ı) ile madde 10 (`create_table` kolonu,
demo veride `IsActive: true`) bunu taşır. Tanım olmayan tabloda da `IsActive` kolonu varsa demo veride `IsActive: true`) bunu taşır. Tanım olmayan tabloya (işlem/belge ve alt formları)
varsayılanı aynıdır: `bit NOT NULL DEFAULT 1`, formda `true` (§8.1). `IsActive` eklenmez; talep aktif/pasif bayrağını açıkça isterse varsayılanı aynıdır:
`bit NOT NULL DEFAULT 1`, formda `true` (§8.1).
Hayır ise (işlem/belge tablosu) kolon tablosunda `TenantId`'nin yanında `BranchId` Hayır ise (işlem/belge tablosu) kolon tablosunda `TenantId`'nin yanında `BranchId`
(uniqueidentifier, zorunlu) yer alır ve ekran `IsBranch: true` ile kurulur (§8.1 İşlem tablosu). (uniqueidentifier, zorunlu) yer alır ve ekran `IsBranch: true` ile kurulur (§8.1 İşlem tablosu).
**Görsel kolonu:** görsel tutan her kolon (fotoğraf, resim, logo, avatar kopyası, belge **Görsel kolonu:** görsel tutan her kolon (fotoğraf, resim, logo, avatar kopyası, belge
@ -4073,10 +4074,11 @@ sorulmadan eklenir:
| Demo veri | Satırlar `IsActive: true` ile yazılır | | Demo veri | Satırlar `IsActive: true` ile yazılır |
| Dil | `App.Listform.ListformField.IsActive` (var olan anahtar) | | Dil | `App.Listform.ListformField.IsActive` (var olan anahtar) |
**MCP ile üretilen her ekranda `IsActive` varsayılanı `true`'dur** — tablo tanım olsun olmasın. **Tanım olmayan tabloda `IsActive` yoktur.** İşlem/belge tablosu ve onun alt formları (satır,
Talep ya da görsel `IsActive` (aktif/pasif bayrağı) taşıyorsa ya da tanım kuralıyla eklendiyse malzeme, süre, duruş, not listeleri) aktif/pasif bayrağı taşımaz; kayıt silinir ya da durumla
Tablo ve Form satırları yukarıdaki gibi yazılır; `NULL` kabul eden ya da varsayılansız `IsActive` kapanır. Yalnızca talep ya da görsel aktif/pasif bayrağını açıkça istiyorsa eklenir ve o zaman Tablo
kolonu üretilmez. ve Form satırları yukarıdaki gibi yazılır; `NULL` kabul eden ya da varsayılansız `IsActive` kolonu
üretilmez.
Pasife alma silmenin yerine geçmez; silme açık kalır. Analiz bunu **Kararlar**'a değil **Veri Pasife alma silmenin yerine geçmez; silme açık kalır. Analiz bunu **Kararlar**'a değil **Veri
modeli**'ne yazar (§0.12 madde 5); tanım tablosu olduğunu da orada belirtir. Var olan tabloya kolon eklenmez (şema değişikliği ayrı iştir). modeli**'ne yazar (§0.12 madde 5); tanım tablosu olduğunu da orada belirtir. Var olan tabloya kolon eklenmez (şema değişikliği ayrı iştir).

View file

@ -135,8 +135,9 @@ Bir çelişki varsa sıra: `ai.instructions.md` → `dotnet.instructions.md` →
`lowcode.instructions.md` §8.1 (İşlem tablosu → `BranchId`). `lowcode.instructions.md` §8.1 (İşlem tablosu → `BranchId`).
Yeni **tanım** tablosu (tanım olup olmadığına talebin içeriğine göre analizde karar verilir; Yeni **tanım** tablosu (tanım olup olmadığına talebin içeriğine göre analizde karar verilir;
sabit ad listesi yoktur) buna ek olarak `IsActive bit NOT NULL DEFAULT 1` ile gelir; liste + form alanı, varsayılan sabit ad listesi yoktur) buna ek olarak `IsActive bit NOT NULL DEFAULT 1` ile gelir; liste + form alanı, varsayılan
`true`, Aktif/Pasif widget'ı. Tanım olmasa da MCP ile (ya da wizard ile) üretilen her ekranda `true`, Aktif/Pasif widget'ı. Tanım **olmayan** tabloya (işlem/belge tablosu, onun alt formları:
`IsActive` kolonu aynı varsayılanla gelir: tabloda `NOT NULL DEFAULT 1` (`create_table`'da satır, malzeme, süre, duruş, not) `IsActive` eklenmez; yalnızca talep aktif/pasif bayrağını açıkça
isterse aynı varsayılanla gelir: tabloda `NOT NULL DEFAULT 1` (`create_table`'da
`isNullable: false`, `defaultValue: "1"`), formda yeni kayıt `true` ile açılır `isNullable: false`, `defaultValue: "1"`), formda yeni kayıt `true` ile açılır
(`FormFieldsDefaultValueJson`). Ayrıntı: `lowcode.instructions.md` §8.1. (`FormFieldsDefaultValueJson`). Ayrıntı: `lowcode.instructions.md` §8.1.
Görsel tutan her kolon (fotoğraf, logo, avatar kopyası) `nvarchar(MAX)` + editör `dxImageUpload`; Görsel tutan her kolon (fotoğraf, logo, avatar kopyası) `nvarchar(MAX)` + editör `dxImageUpload`;

View file

@ -19504,6 +19504,76 @@
"MultiTenancySide": 3, "MultiTenancySide": 3,
"Modules": "Mm" "Modules": "Mm"
}, },
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter",
"ParentName": "App.Maintenance.Definitions",
"DisplayName": "App.Maintenance.CostCenter",
"Order": 7,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter.Create",
"ParentName": "App.Maintenance.CostCenter",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter.Update",
"ParentName": "App.Maintenance.CostCenter",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter.Delete",
"ParentName": "App.Maintenance.CostCenter",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter.Export",
"ParentName": "App.Maintenance.CostCenter",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter.Import",
"ParentName": "App.Maintenance.CostCenter",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.CostCenter.Note",
"ParentName": "App.Maintenance.CostCenter",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{ {
"GroupName": "App.Maintenance", "GroupName": "App.Maintenance",
"Name": "App.Maintenance.Operations", "Name": "App.Maintenance.Operations",
@ -19933,6 +20003,356 @@
"IsEnabled": true, "IsEnabled": true,
"MultiTenancySide": 3, "MultiTenancySide": 3,
"Modules": "Mm" "Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder",
"ParentName": "App.Maintenance.Operations",
"DisplayName": "App.Maintenance.WorkOrder",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder.Create",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder.Update",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder.Delete",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder.Export",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder.Import",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrder.Note",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Maintenance.WorkOrderMaterial",
"Order": 7,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial.Create",
"ParentName": "App.Maintenance.WorkOrderMaterial",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial.Update",
"ParentName": "App.Maintenance.WorkOrderMaterial",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial.Delete",
"ParentName": "App.Maintenance.WorkOrderMaterial",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial.Export",
"ParentName": "App.Maintenance.WorkOrderMaterial",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial.Import",
"ParentName": "App.Maintenance.WorkOrderMaterial",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderMaterial.Note",
"ParentName": "App.Maintenance.WorkOrderMaterial",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Maintenance.WorkOrderLabor",
"Order": 8,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor.Create",
"ParentName": "App.Maintenance.WorkOrderLabor",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor.Update",
"ParentName": "App.Maintenance.WorkOrderLabor",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor.Delete",
"ParentName": "App.Maintenance.WorkOrderLabor",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor.Export",
"ParentName": "App.Maintenance.WorkOrderLabor",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor.Import",
"ParentName": "App.Maintenance.WorkOrderLabor",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderLabor.Note",
"ParentName": "App.Maintenance.WorkOrderLabor",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Maintenance.WorkOrderDowntime",
"Order": 9,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime.Create",
"ParentName": "App.Maintenance.WorkOrderDowntime",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime.Update",
"ParentName": "App.Maintenance.WorkOrderDowntime",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime.Delete",
"ParentName": "App.Maintenance.WorkOrderDowntime",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime.Export",
"ParentName": "App.Maintenance.WorkOrderDowntime",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime.Import",
"ParentName": "App.Maintenance.WorkOrderDowntime",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderDowntime.Note",
"ParentName": "App.Maintenance.WorkOrderDowntime",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote",
"ParentName": "App.Maintenance.WorkOrder",
"DisplayName": "App.Maintenance.WorkOrderNote",
"Order": 10,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote.Create",
"ParentName": "App.Maintenance.WorkOrderNote",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote.Update",
"ParentName": "App.Maintenance.WorkOrderNote",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote.Delete",
"ParentName": "App.Maintenance.WorkOrderNote",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote.Export",
"ParentName": "App.Maintenance.WorkOrderNote",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote.Import",
"ParentName": "App.Maintenance.WorkOrderNote",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
},
{
"GroupName": "App.Maintenance",
"Name": "App.Maintenance.WorkOrderNote.Note",
"ParentName": "App.Maintenance.WorkOrderNote",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Mm"
} }
] ]
} }

View file

@ -227,6 +227,20 @@
"StartNumber": 1, "StartNumber": 1,
"LastPeriodKey": null, "LastPeriodKey": null,
"FormatTemplate": "{Prefix}{Number}{Suffix}" "FormatTemplate": "{Prefix}{Number}{Suffix}"
},
{
"Id": "8495e344-b46e-5989-a1dd-0fd82288044f",
"Name": "Mm.WorkOrder",
"Prefix": "WO/",
"Suffix": "",
"IsActive": true,
"PaddingSize": 5,
"IncrementStep": 1,
"NextNumber": 1,
"ResetPeriod": 1,
"StartNumber": 1,
"LastPeriodKey": null,
"FormatTemplate": "{Prefix}{yyyy}/{Number}"
} }
] ]
} }

View file

@ -51,6 +51,18 @@
"LocationType": "Internal", "LocationType": "Internal",
"ParentId": null, "ParentId": null,
"IsActive": true "IsActive": true
},
{
"Id": "aa9e641a-2fc1-53c2-8d01-57776d49b732",
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"WarehouseId": "1840580a-7984-cb0a-4008-3a2431f55623",
"Code": "BKM",
"Name": "Bakım Sarf",
"DepartmentId": null,
"ResponsibleUserName": null,
"LocationType": "External",
"ParentId": null,
"IsActive": true
} }
] ]
} }

View file

@ -69,11 +69,11 @@
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c", "BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"WarehouseId": "1840580a-7984-cb0a-4008-3a2431f55623", "WarehouseId": "1840580a-7984-cb0a-4008-3a2431f55623",
"Name": "Bakım Sarf Tüketimi", "Name": "Bakım Sarf Tüketimi",
"OperationKind": "InternalTransfer", "OperationKind": "Delivery",
"SequenceName": "Inventory.IKT.MaintenanceConsumption", "SequenceName": "Inventory.IKT.MaintenanceConsumption",
"Barcode": null, "Barcode": null,
"SourceLocationId": "d92a4c2e-1ca2-4453-a66c-e7b3bf682716", "SourceLocationId": "d92a4c2e-1ca2-4453-a66c-e7b3bf682716",
"DestinationLocationId": "d92a4c2e-1ca2-4453-a66c-e7b3bf682716", "DestinationLocationId": "aa9e641a-2fc1-53c2-8d01-57776d49b732",
"IsActive": true "IsActive": true
}, },
{ {

View file

@ -25586,14 +25586,14 @@
"Id": "5dbfc4b5-bb2a-5b20-bd4c-22cff2801639", "Id": "5dbfc4b5-bb2a-5b20-bd4c-22cff2801639",
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.Workorder", "Key": "App.Maintenance.WorkOrder",
"Value": "Workorders" "Value": "Workorders"
}, },
{ {
"Id": "76605fb3-6494-516b-bf8a-68b1dc6455b4", "Id": "76605fb3-6494-516b-bf8a-68b1dc6455b4",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.Workorder", "Key": "App.Maintenance.WorkOrder",
"Value": "Bakım İş Emirleri" "Value": "Bakım İş Emirleri"
}, },
{ {
@ -93039,7 +93039,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Definitions.Approver.Desc", "Key": "App.Definitions.Approver.Desc",
"Value": "Approvers — the single list of who approves what for each department across the application.\nWhere: Administration › Definitions › Approvers.\nFields: department (shown as Branch - Department), approval area (Purchasing / Warehouse / Human Resources / Finance / Maintenance), approver user, active.\nUsed by: approval workflows read the approvers of the record's department and area. Purchasing › Material Requests: the department approval uses area Purchasing for the requester's department; the purchasing approval is not defined here: it goes to users with update permission on Awaiting Purchasing Approval (directly or through their role). Several approvers may be defined for the same department and area; any one of them can approve. Maintenance › Maintenance Instructions: the department approval uses area Maintenance for the equipment's department. Passive rows are ignored by workflows." "Value": "Approvers — the single list of who approves what for each department across the application.\nWhere: Administration › Definitions › Approvers.\nFields: department (shown as Branch - Department), approval area (Purchasing / Warehouse / Human Resources / Finance / Maintenance), approver user, active.\nUsed by: approval workflows read the approvers of the record's department and area. Purchasing › Material Requests: the department approval uses area Purchasing for the requester's department; the purchasing approval is not defined here: it goes to users with update permission on Awaiting Purchasing Approval (directly or through their role). Several approvers may be defined for the same department and area; any one of them can approve. Maintenance › Instructions: the department approval uses area Maintenance for the equipment's department. Passive rows are ignored by workflows."
}, },
{ {
"Id": "3663c5aa-4036-5381-810f-8acee720724c", "Id": "3663c5aa-4036-5381-810f-8acee720724c",
@ -98443,7 +98443,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstructionMaterial.Desc", "Key": "App.Maintenance.MaintenanceInstructionMaterial.Desc",
"Value": "Materials to Use — the spare parts and consumables a maintenance instruction needs.\nWhere: Maintenance › Maintenance › Maintenance Instructions › Materials to Use tab (no menu of its own).\nFields: material (from Products, shown as [internal reference] name), quantity, unit (from Units of Measure; filled from the product when the material is selected), description, active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will take its material list from here." "Value": "Materials to Use — the spare parts and consumables a maintenance instruction needs.\nWhere: Maintenance › Maintenance › Instructions › Materials to Use tab (no menu of its own).\nFields: material (from Products, shown as [internal reference] name), quantity, unit (from Units of Measure; filled from the product when the material is selected), description, active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will take its material list from here."
}, },
{ {
"Id": "15096e7f-a83d-5ef1-a466-b54d7006500a", "Id": "15096e7f-a83d-5ef1-a466-b54d7006500a",
@ -98485,7 +98485,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstructionCheck.Desc", "Key": "App.Maintenance.MaintenanceInstructionCheck.Desc",
"Value": "Checklist — the items the technician checks while carrying out the maintenance instruction.\nWhere: Maintenance › Maintenance › Maintenance Instructions › Checklist tab (no menu of its own).\nFields: check item, description, required (the item cannot be skipped on the work order), active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will copy these items." "Value": "Checklist — the items the technician checks while carrying out the maintenance instruction.\nWhere: Maintenance › Maintenance › Instructions › Checklist tab (no menu of its own).\nFields: check item, description, required (the item cannot be skipped on the work order), active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will copy these items."
}, },
{ {
"Id": "ca4158b0-f0b3-5ea5-be3f-6586579727d3", "Id": "ca4158b0-f0b3-5ea5-be3f-6586579727d3",
@ -98527,7 +98527,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstructionDocument.Desc", "Key": "App.Maintenance.MaintenanceInstructionDocument.Desc",
"Value": "Documents — manuals, procedures, drawings and certificates attached to a maintenance instruction.\nWhere: Maintenance › Maintenance › Maintenance Instructions › Documents tab (no menu of its own).\nFields: document name, document type (user manual / procedure / technical drawing / certificate / other), file, version, active.\nThe file is stored with the record; a new version is added as a new row so the previous one stays available." "Value": "Documents — manuals, procedures, drawings and certificates attached to a maintenance instruction.\nWhere: Maintenance › Maintenance › Instructions › Documents tab (no menu of its own).\nFields: document name, document type (user manual / procedure / technical drawing / certificate / other), file, version, active.\nThe file is stored with the record; a new version is added as a new row so the previous one stays available."
}, },
{ {
"Id": "73d640a4-05b5-5c45-991b-47b04d6e97db", "Id": "73d640a4-05b5-5c45-991b-47b04d6e97db",
@ -98569,7 +98569,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstructionGeneral.Desc", "Key": "App.Maintenance.MaintenanceInstructionGeneral.Desc",
"Value": "Maintenance Instruction General — the written maintenance instruction.\nWhere: Maintenance › Maintenance › Maintenance Instructions › General tab (no menu of its own; edits the instruction record itself).\nFields: maintenance instruction (rich text: steps, safety notes, tools).\nThe text is shown to the technician on the work order created from the instruction." "Value": "Maintenance Instruction General — the written maintenance instruction.\nWhere: Maintenance › Maintenance › Instructions › General tab (no menu of its own; edits the instruction record itself).\nFields: maintenance instruction (rich text: steps, safety notes, tools).\nThe text is shown to the technician on the work order created from the instruction."
}, },
{ {
"Id": "dae53801-c04e-590f-8ea0-0571a9bfcc8e", "Id": "dae53801-c04e-590f-8ea0-0571a9bfcc8e",
@ -98611,7 +98611,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstructionApproval.Desc", "Key": "App.Maintenance.MaintenanceInstructionApproval.Desc",
"Value": "Maintenance Instruction Approval Information — approval state of the instruction (read only).\nWhere: Maintenance › Maintenance › Maintenance Instructions › Approval Information tab (no menu of its own; shows the instruction record itself).\nFields: approval status (workflow step), approver user name, approval date, approval description (rejection reason included), department approvers.\nThe workflow writes these fields; department approvers are the Approvers defined for the equipment's department in the Maintenance approval area." "Value": "Maintenance Instruction Approval Information — approval state of the instruction (read only).\nWhere: Maintenance › Maintenance › Instructions › Approval Information tab (no menu of its own; shows the instruction record itself).\nFields: approval status (workflow step), approver user name, approval date, approval description (rejection reason included), department approvers.\nThe workflow writes these fields; department approvers are the Approvers defined for the equipment's department in the Maintenance approval area."
}, },
{ {
"Id": "4e952dd1-178c-5efb-9157-50b0faf4f822", "Id": "4e952dd1-178c-5efb-9157-50b0faf4f822",
@ -98625,7 +98625,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstruction", "Key": "App.Maintenance.MaintenanceInstruction",
"Value": "Maintenance Instructions" "Value": "Instructions"
}, },
{ {
"Id": "7a5c15f8-de7d-5b50-bfd0-94b11fec11d7", "Id": "7a5c15f8-de7d-5b50-bfd0-94b11fec11d7",
@ -98639,7 +98639,7 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstruction.Title", "Key": "App.Maintenance.MaintenanceInstruction.Title",
"Value": "Maintenance Instructions" "Value": "Instructions"
}, },
{ {
"Id": "ba272a13-5bc0-5ee9-a354-0e7c85451d5b", "Id": "ba272a13-5bc0-5ee9-a354-0e7c85451d5b",
@ -98653,14 +98653,686 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstruction.Desc", "Key": "App.Maintenance.MaintenanceInstruction.Desc",
"Value": "Maintenance Instructions — periodic maintenance plans of equipment.\nWhere: Maintenance › Maintenance › Maintenance Instructions; tabs: Materials to Use, Checklist, Documents, General (instruction text), Approval Information.\nFields: branch, maintenance code (automatic), maintenance name, maintenance type, equipment (only products with an equipment category, shown as name [internal reference]/serial number), maintenance teams (teams of the selected branch), period (every N days / weeks / months / years), start date, end date, next maintenance (read only), active.\nBehaviour: the instruction is sent to department approval with the start button; approvers are the Approvers defined for the equipment's department in the Maintenance approval area, and the rejection reason is chosen from Maintenance › Reject Reasons. The Maintenance Instruction Schedule job recalculates the next maintenance date every night (start date + k × period, cleared after the end date); work orders will be opened from approved instructions when the work order screen is added." "Value": "Instructions — periodic maintenance plans of equipment.\nWhere: Maintenance › Maintenance › Instructions; tabs: Materials to Use, Checklist, Documents, General (instruction text), Approval Information.\nFields: branch, maintenance code (automatic), maintenance name, maintenance type, equipment (only products with an equipment category, shown as name [internal reference]/serial number), maintenance teams (teams of the selected branch), period (every N days / weeks / months / years), start date, end date, next maintenance (read only), active.\nBehaviour: the instruction is sent to department approval with the start button; approvers are the Approvers defined for the equipment's department in the Maintenance approval area, and the rejection reason is chosen from Maintenance › Reject Reasons. The Maintenance Instruction Schedule job recalculates the next maintenance date every night (start date + k × period, cleared after the end date); the same job opens a draft work order in Maintenance Work Orders for every due date of an approved instruction and copies its materials."
}, },
{ {
"Id": "136c9c70-e347-5192-920f-668f705019af", "Id": "136c9c70-e347-5192-920f-668f705019af",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Maintenance.MaintenanceInstruction.Desc", "Key": "App.Maintenance.MaintenanceInstruction.Desc",
"Value": "Bakım Talimatları — ekipmanların periyodik bakım planları.\nNerede: Bakım › Bakım › Bakım Talimatları; sekmeler: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar, Genel (talimat metni), Onay Bilgileri.\nAlanlar: şube, bakım kodu (otomatik), bakım adı, bakım tipi, ekipman (yalnız ekipman kategorisi olan ürünler; ad [iç referans]/seri no olarak), bakım ekipleri (seçili şubenin ekipleri), periyot (her N gün / hafta / ay / yıl), başlangıç tarihi, bitiş tarihi, sonraki bakım (salt okunur), aktif.\nDavranış: talimat başlat düğmesiyle departman onayına gönderilir; onaycılar Onaycılar ekranında ekipmanın departmanı için Bakım onay yerine tanımlı kişilerdir, red nedeni Bakım › Red Nedenleri'nden seçilir. Maintenance Instruction Schedule işi sonraki bakım tarihini her gece yeniden hesaplar (başlangıç + k × periyot, bitiş tarihinden sonra boşalır); iş emri ekranı eklendiğinde onaylı talimatlardan iş emri açılacaktır." "Value": "Bakım Talimatları — ekipmanların periyodik bakım planları.\nNerede: Bakım › Bakım › Bakım Talimatları; sekmeler: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar, Genel (talimat metni), Onay Bilgileri.\nAlanlar: şube, bakım kodu (otomatik), bakım adı, bakım tipi, ekipman (yalnız ekipman kategorisi olan ürünler; ad [iç referans]/seri no olarak), bakım ekipleri (seçili şubenin ekipleri), periyot (her N gün / hafta / ay / yıl), başlangıç tarihi, bitiş tarihi, sonraki bakım (salt okunur), aktif.\nDavranış: talimat başlat düğmesiyle departman onayına gönderilir; onaycılar Onaycılar ekranında ekipmanın departmanı için Bakım onay yerine tanımlı kişilerdir, red nedeni Bakım › Red Nedenleri'nden seçilir. Maintenance Instruction Schedule işi sonraki bakım tarihini her gece yeniden hesaplar (başlangıç + k × periyot, bitiş tarihinden sonra boşalır); aynı iş, onaylı talimatın her vadesinde Bakım İş Emirleri'nde taslak iş emri açar ve malzemelerini kopyalar."
},
{
"Id": "4f6bad51-0542-5c79-9131-62fbe281088a",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WorkOrderNo",
"Value": "Work Order No"
},
{
"Id": "6f1b190e-94da-5ef7-bef3-9102796ba46c",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WorkOrderNo",
"Value": "İş Emri No"
},
{
"Id": "bdd34e38-7db8-5a07-9896-ab3ed670670e",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceKind",
"Value": "Maintenance Kind"
},
{
"Id": "09c7f55a-b504-59a9-839b-e0f27e5816f4",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceKind",
"Value": "Bakım Şekli"
},
{
"Id": "72b8c5e7-2c4b-5ba3-95d7-14e441a542ee",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceResourceType",
"Value": "Maintenance Resource Type"
},
{
"Id": "cdba4310-5598-589e-ab59-56dbe202d6ab",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceResourceType",
"Value": "Bakım Kaynak Türü"
},
{
"Id": "97efb997-52a5-5a5e-85f9-1a77279b84d1",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceTeam",
"Value": "Maintenance Team"
},
{
"Id": "73823f3e-03ff-5439-bb76-3c032a4127a2",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceTeam",
"Value": "Bakım Ekibi"
},
{
"Id": "182131b7-f90d-568f-84ef-1c89c3971fd4",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceProcedure",
"Value": "Maintenance Procedure"
},
{
"Id": "80a68638-331a-5252-a475-9c6d1e6f1fa5",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.MaintenanceProcedure",
"Value": "Bakım Prosedürü"
},
{
"Id": "be5f1208-dc1e-51d9-a1c7-ed6abba4abb3",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.PlannedDate",
"Value": "Planned Date"
},
{
"Id": "b76a5064-b1e2-5843-837f-75e30773cb91",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.PlannedDate",
"Value": "Planlanan Tarih"
},
{
"Id": "bedf5e45-f099-50ae-aa76-42afcdffaf47",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.PlannedEnd",
"Value": "Planned End"
},
{
"Id": "170a4089-9486-5838-9bf6-8a36ff2773e9",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.PlannedEnd",
"Value": "Planlanan Bitiş"
},
{
"Id": "fa0e9ccd-c185-57cf-9f06-208de1e9a2b6",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.StockLot",
"Value": "Product - Lot/Serial"
},
{
"Id": "f5602fa8-129f-5dd5-998b-e3f010ed9d1c",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.StockLot",
"Value": "Ürün - Lot/Seri"
},
{
"Id": "481cb73e-946c-55d9-b4c4-8108febc0e3a",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.TransferSourceLocation",
"Value": "Transfer Source"
},
{
"Id": "f662fb43-3b61-503a-9989-d21e24e13517",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.TransferSourceLocation",
"Value": "Transfer Kaynağı"
},
{
"Id": "dfce5bbf-3835-52e4-b571-0c6045745349",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.InternalTransferNo",
"Value": "Internal Transfer"
},
{
"Id": "cd5863fa-4ced-5749-8c57-bf9f36a99f7c",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.InternalTransferNo",
"Value": "İç Transfer"
},
{
"Id": "bcee1f79-1c04-5c6d-af41-42d0fa6fa3f1",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ConsumptionTransferNo",
"Value": "Consumption"
},
{
"Id": "0eb739f7-700c-5a00-8ba2-255d1fa9bf05",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ConsumptionTransferNo",
"Value": "Sarf Çıkışı"
},
{
"Id": "43623e0c-3fcc-53ed-a28f-9388291dcf9d",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WorkDurationMinutes",
"Value": "Duration (Minutes)"
},
{
"Id": "53b0692b-09b3-5623-8d2a-6da0a9553ce3",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WorkDurationMinutes",
"Value": "Süre (Dakika)"
},
{
"Id": "7f90fc05-9ee8-5eff-9034-53d5e90d88c4",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.RegularMinutes",
"Value": "Regular Time (Min)"
},
{
"Id": "9ab722e5-35d8-5c5f-81b3-64176e6de198",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.RegularMinutes",
"Value": "Normal Mesai (Dk)"
},
{
"Id": "88568d7d-73ee-541f-97e0-cd9aa10e957a",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.OvertimeMinutes",
"Value": "Overtime (Min)"
},
{
"Id": "3e2d57fa-75f2-5eb5-ab34-16f49b4bbcd4",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.OvertimeMinutes",
"Value": "Mesai Dışı (Dk)"
},
{
"Id": "bc488abd-35a2-5f9b-a5e0-008107d6b361",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderMaterial",
"Value": "Materials"
},
{
"Id": "8baf44f5-56b7-5fa0-a18b-9689d1dd059f",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderMaterial",
"Value": "Malzemeler"
},
{
"Id": "8a41e0fa-9cba-53d4-9d01-6b87ed898b67",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderMaterial.Title",
"Value": "Materials"
},
{
"Id": "74f12734-7ba3-50d7-b9a9-a45fb2c82b6d",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderMaterial.Title",
"Value": "Malzemeler"
},
{
"Id": "7c20074f-7821-506d-a4ae-5e457f0d79f8",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderMaterial.Desc",
"Value": "Work Order Materials — spare parts and consumables used in the maintenance.\nWhere: Maintenance › Maintenance › Maintenance Work Orders › Materials tab (no menu of its own).\nFields: material (from Products), quantity, unit (filled from the product), usage location (locations of the equipment's department, with the stock of the material in brackets), transfer source (other internal locations holding the material, with stock), internal transfer and consumption document numbers (read only), description, active.\nBehaviour: when a transfer source is chosen a draft internal transfer to the usage location is opened (lines of the same work order and route share one document); when the work order is set to Repaired a draft Maintenance Consumption document is opened per usage location. Lines with a transfer or consumption document cannot be changed or deleted."
},
{
"Id": "0546a4a1-a6f1-50ef-909f-c1cc17307fae",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderMaterial.Desc",
"Value": "İş Emri Malzemeleri — bakımda kullanılan yedek parça ve sarf malzemeleri.\nNerede: Bakım › Bakım › Bakım İş Emirleri › Malzemeler sekmesi (kendi menüsü yoktur).\nAlanlar: malzeme (Ürünler'den), miktar, birim (üründen dolar), kullanım konumu (ekipmanın departmanının konumları, parantez içinde malzemenin stoğu), transfer kaynağı (malzemenin stoğu olan diğer iç konumlar, stoğuyla), iç transfer ve sarf çıkışı belge numaraları (salt okunur), açıklama, aktif.\nDavranış: transfer kaynağı seçilince kullanım konumuna taslak iç transfer açılır (aynı iş emri ve güzergâhın satırları tek belgede toplanır); iş emri Onarıldı yapılınca her kullanım konumu için taslak Bakım Sarf Tüketimi belgesi açılır. İç transferi ya da sarf çıkışı açılmış satır değiştirilemez ve silinemez."
},
{
"Id": "3985be63-be02-5a00-bde0-491d7bc417d0",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderLabor",
"Value": "Work Times"
},
{
"Id": "5ca51e34-0de9-577a-9c55-76dff25d7eaa",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderLabor",
"Value": "Çalışma Süreleri"
},
{
"Id": "4b239e74-074f-58dd-8cbd-30039a6794a4",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderLabor.Title",
"Value": "Work Times"
},
{
"Id": "27114dce-bd9a-5920-979e-ce79e5a6becb",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderLabor.Title",
"Value": "Çalışma Süreleri"
},
{
"Id": "5e7bc695-2c9b-53cf-ba9e-a27da8c1ebac",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderLabor.Desc",
"Value": "Work Order Work Times — which employee spent how much time on the maintenance.\nWhere: Maintenance › Maintenance › Maintenance Work Orders › Work Times tab (no menu of its own).\nFields: employee (from Users), start date, end date, duration in minutes (calculated), regular time and overtime in minutes, description.\nBehaviour: duration is calculated from start and end on save; when neither regular time nor overtime is entered the whole duration is written as regular time. The minutes are the basis for personnel cost calculation later."
},
{
"Id": "e6f60b0b-476e-59b4-b26e-60a711def74d",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderLabor.Desc",
"Value": "İş Emri Çalışma Süreleri — bakımda hangi personelin ne kadar süre harcadığı.\nNerede: Bakım › Bakım › Bakım İş Emirleri › Çalışma Süreleri sekmesi (kendi menüsü yoktur).\nAlanlar: çalışan (Kullanıcılar'dan), başlangıç tarihi, bitiş tarihi, süre dakika (hesaplanır), normal mesai ve mesai dışı dakika, açıklama.\nDavranış: süre kayıtta başlangıç ve bitişten hesaplanır; normal mesai ve mesai dışı girilmezse sürenin tamamı normal mesai yazılır. Dakikalar ileride personel maliyeti hesabının dayanağıdır."
},
{
"Id": "28e1b985-872f-57cc-b843-38f2fb23187b",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderDowntime",
"Value": "Downtimes"
},
{
"Id": "a872e69b-cc12-5115-8fcb-c71b8bfa3cc3",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderDowntime",
"Value": "Duruşlar"
},
{
"Id": "fe29ef1e-4861-5f38-aad6-325108033dd8",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderDowntime.Title",
"Value": "Downtimes"
},
{
"Id": "71f5ef0e-c566-5302-b5d8-3dd5ddca14b1",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderDowntime.Title",
"Value": "Duruşlar"
},
{
"Id": "e2d73fe3-71b1-56e9-93f9-4e89a0664cf5",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderDowntime.Desc",
"Value": "Work Order Downtimes — periods in which the equipment stood still because of the failure or the maintenance.\nWhere: Maintenance › Maintenance › Maintenance Work Orders › Downtimes tab (no menu of its own).\nFields: start date, end date, duration in minutes (calculated), failure type (from Maintenance › Failure Types), description, active.\nBehaviour: duration is calculated from start and end on save; an open downtime (no end yet) has zero duration until it is closed."
},
{
"Id": "6a800775-0c28-50fb-bfcd-70d5265b0b0d",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderDowntime.Desc",
"Value": "İş Emri Duruşları — ekipmanın arıza ya da bakım nedeniyle durduğu süreler.\nNerede: Bakım › Bakım › Bakım İş Emirleri › Duruşlar sekmesi (kendi menüsü yoktur).\nAlanlar: başlangıç tarihi, bitiş tarihi, süre dakika (hesaplanır), arıza tipi (Bakım › Arıza Tipleri'nden), açıklama, aktif.\nDavranış: süre kayıtta başlangıç ve bitişten hesaplanır; bitişi girilmemiş açık duruşun süresi kapatılana kadar sıfırdır."
},
{
"Id": "35fc6e17-4471-577a-9ea1-7e2a5e96e352",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderNote",
"Value": "Notes"
},
{
"Id": "de57d3cc-3d9b-5a2c-8126-c8c216cfabae",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderNote",
"Value": "Notlar"
},
{
"Id": "c02b5cf9-a749-5bca-be00-e106ab448574",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderNote.Title",
"Value": "Notes"
},
{
"Id": "5e5606ce-194a-5d03-8b11-9580df3bc3a4",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderNote.Title",
"Value": "Notlar"
},
{
"Id": "f712e1e5-e0e2-5572-b22f-2c4971847c06",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderNote.Desc",
"Value": "Work Order Notes — free notes of the maintenance work order.\nWhere: Maintenance › Maintenance › Maintenance Work Orders › Notes tab (no menu of its own; edits the work order record itself).\nFields: notes (rich text: findings, steps carried out, recommendations).\nThe notes stay on the work order and are shown with it in exports."
},
{
"Id": "bbf7f380-c08f-5a0c-a951-91354c44eadc",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrderNote.Desc",
"Value": "İş Emri Notları — bakım iş emrinin serbest notları.\nNerede: Bakım › Bakım › Bakım İş Emirleri › Notlar sekmesi (kendi menüsü yoktur; iş emri kaydının kendisini düzenler).\nAlanlar: notlar (zengin metin: tespitler, yapılan adımlar, öneriler).\nNotlar iş emrinde kalır ve dışa aktarımlarda iş emriyle birlikte gelir."
},
{
"Id": "05e3474c-ab0d-5c8b-9772-86e949cd0f5d",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Approved",
"Value": "Approved"
},
{
"Id": "f1e1feb7-8dd0-5c74-a394-46a9ccd7d9ca",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Approved",
"Value": "Onaylandı"
},
{
"Id": "e77fa06b-1fc7-5764-bde3-4c1920142aa4",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.WorkInProgress",
"Value": "In Progress"
},
{
"Id": "9e58a7e6-8912-511b-a9cb-201ec17f60ed",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.WorkInProgress",
"Value": "İşlemde"
},
{
"Id": "2ccb7a3b-63ee-5b24-bdf3-6244fc9a4e73",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.OnHold",
"Value": "On Hold"
},
{
"Id": "5c1c1c4d-e3ff-50ac-a684-978b0fc3bdf9",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.OnHold",
"Value": "Beklemede"
},
{
"Id": "57ed0512-f6cf-5783-95aa-749a6e76f89e",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Repaired",
"Value": "Repaired"
},
{
"Id": "a0d7fbd9-cbbe-52aa-b79f-42b297ce0948",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Repaired",
"Value": "Onarıldı"
},
{
"Id": "6f628c0e-0209-57ff-82c9-a9ee8d14f4ac",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Scrapped",
"Value": "Scrapped"
},
{
"Id": "b66cac58-3fae-5500-bca4-cfeb6ed02c13",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Scrapped",
"Value": "Hurda"
},
{
"Id": "fd9db995-35bf-508d-8418-50db1e793c29",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Manual",
"Value": "Manual"
},
{
"Id": "411ec555-6774-5d30-abd8-19211c350c39",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Manual",
"Value": "Manuel"
},
{
"Id": "b04d147e-ae8c-59c0-9257-eae173589984",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.AutomaticScheduled",
"Value": "Automatic (Scheduled)"
},
{
"Id": "10a50a48-c91f-59d5-bb02-40d746dcd835",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.AutomaticScheduled",
"Value": "Otomatik (Takvimden)"
},
{
"Id": "c47f49d3-984f-5050-a883-bf09cdcc5bb3",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Corrective",
"Value": "Corrective"
},
{
"Id": "a3743e6c-eea0-5c12-b9f0-f5bf42953e95",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Corrective",
"Value": "Düzeltici"
},
{
"Id": "11834d52-58d6-5bcb-9e14-19ac1f65eec1",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Preventive",
"Value": "Preventive"
},
{
"Id": "9656cfeb-9786-5293-b16a-29bcf86e6e0a",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Preventive",
"Value": "Önleyici"
},
{
"Id": "f9b525b2-6069-5271-99ec-94c31f12ae9f",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Predictive",
"Value": "Predictive"
},
{
"Id": "ab290c29-9f6a-5f73-bab2-99dc6a1bdb0f",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Predictive",
"Value": "Kestirimci"
},
{
"Id": "a912b0d5-3ae5-5ca7-ab2c-8661d56e02ec",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.InternalMaintenance",
"Value": "Internal"
},
{
"Id": "59c23b7d-c4db-50fb-8cf7-cf3605075b99",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.InternalMaintenance",
"Value": "İç Bakım"
},
{
"Id": "a9874ca6-27c3-51f4-8097-4920b926fc89",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.ExternalMaintenance",
"Value": "External"
},
{
"Id": "586c33c2-1a56-5bd1-a9cb-6ea6c1b15b52",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.ExternalMaintenance",
"Value": "Dış Bakım"
},
{
"Id": "7ef5af92-be24-5fe7-a1b3-605347553737",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Widget.InProgress",
"Value": "In Progress"
},
{
"Id": "6b3d33a3-092c-5de4-9cdd-6c4e14211097",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Widget.InProgress",
"Value": "İşlemde"
},
{
"Id": "1411fff8-a21a-599a-a93d-09e15b8bbd8e",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Widget.Repaired",
"Value": "Repaired"
},
{
"Id": "aee7afbe-32d2-54fd-8b0b-e8ead1fa162b",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Widget.Repaired",
"Value": "Onarıldı"
},
{
"Id": "22c04a02-d491-5401-b93e-5e2d1378abd9",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrder",
"Value": "Maintenance Work Orders"
},
{
"Id": "8c5e837e-1a09-5f9c-a4d1-c5d0a2b1b582",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrder",
"Value": "Bakım İş Emirleri"
},
{
"Id": "2629e9ee-e332-5dc4-b473-be6c36a5adb6",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrder.Title",
"Value": "Maintenance Work Orders"
},
{
"Id": "00459a18-0390-5eba-8e9f-5e7e59523b64",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrder.Title",
"Value": "Bakım İş Emirleri"
},
{
"Id": "a692a7ae-d98c-574f-aa93-7958c4c413e1",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrder.Desc",
"Value": "Maintenance Work Orders — the maintenance jobs carried out on equipment, opened by hand or automatically from maintenance instructions.\nWhere: Maintenance › Maintenance › Maintenance Work Orders; tabs: Materials, Work Times, Downtimes, Notes, Checklist and Documents (of the selected maintenance procedure).\nFields: work order no (automatic, WO/year/number), status, subject, created by, branch (company), maintenance type, maintenance team (teams of the branch), equipment (products with an equipment category), source (manual / automatic), request date, maintenance procedure (instructions of the equipment), maintenance kind (corrective / preventive / predictive), responsible, maintenance resource type (internal / external), planned date and end, priority, actual start and end, active.\nBehaviour: the work order is sent to department approval with the start button (approvers of the equipment's department in the Maintenance approval area); until it is approved the status stays Draft, after approval the user moves it through Approved › In Progress / On Hold › Repaired / Scrapped. In Progress fills the actual start, Repaired and Scrapped fill the actual end; Repaired opens the draft consumption documents of the materials. The Maintenance Instruction Schedule job opens a draft automatic work order for every due date of an approved instruction and copies its materials."
},
{
"Id": "236ae365-7da1-5cae-b64a-e07d1356225b",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.WorkOrder.Desc",
"Value": "Bakım İş Emirleri — ekipmanlarda yapılan bakım işleri; elle ya da bakım talimatlarından otomatik açılır.\nNerede: Bakım › Bakım › Bakım İş Emirleri; sekmeler: Malzemeler, Çalışma Süreleri, Duruşlar, Notlar, Kontrol Listesi ve Dokümanlar (seçili bakım prosedürünün).\nAlanlar: iş emri no (otomatik, WO/yıl/sıra), durum, konu, oluşturan, şube (firma), bakım tipi, bakım ekibi (şubenin ekipleri), ekipman (ekipman kategorisi olan ürünler), kaynak (manuel / otomatik), istek tarihi, bakım prosedürü (ekipmanın talimatları), bakım şekli (düzeltici / önleyici / kestirimci), sorumlu, bakım kaynak türü (iç / dış), planlanan tarih ve bitiş, öncelik, gerçek başlangıç ve bitiş, aktif.\nDavranış: iş emri başlat düğmesiyle departman onayına gönderilir (ekipmanın departmanının Bakım onay yerindeki onaycılar); onaylanana kadar durum Taslak kalır, onaydan sonra kullanıcı Onaylandı › İşlemde / Beklemede › Onarıldı / Hurda olarak ilerletir. İşlemde gerçek başlangıcı, Onarıldı ve Hurda gerçek bitişi doldurur; Onarıldı malzemelerin taslak sarf çıkışlarını açar. Maintenance Instruction Schedule işi onaylı talimatın her vadesi için taslak, otomatik iş emri açar ve malzemelerini kopyalar."
},
{
"Id": "d9d87ed0-9bfd-51b9-8be9-00e29c6a2004",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ParentCostCenter",
"Value": "Parent Cost Center"
},
{
"Id": "ccb7bce1-f0b1-5c01-83c6-8148e793cd98",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ParentCostCenter",
"Value": "Üst Masraf Merkezi"
},
{
"Id": "ff6b5b67-c830-5570-b25b-1b15bf1398dc",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.CostCenter",
"Value": "Cost Center"
},
{
"Id": "e4e4fea6-3f0e-57f4-89d2-79bad5176684",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.CostCenter",
"Value": "Masraf Merkezi"
},
{
"Id": "7c72fb8d-65ef-50f1-9eed-dfbdcb3c54f2",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.CostCenter",
"Value": "Cost Centers"
},
{
"Id": "44137aa5-0bea-5533-a6d5-641ec076ed2b",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.CostCenter",
"Value": "Masraf Merkezleri"
},
{
"Id": "99d1cbda-dcb7-51e6-a0f6-66db254e61eb",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.CostCenter.Title",
"Value": "Cost Centers"
},
{
"Id": "87515995-4fc1-519c-a563-a57343bd1aab",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.CostCenter.Title",
"Value": "Masraf Merkezleri"
},
{
"Id": "3912f4e6-ac1b-5a87-b405-fe0b8f25adef",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Maintenance.CostCenter.Desc",
"Value": "Cost Centers — the cost centers and cost items to which maintenance and equipment costs are charged.\nWhere: Maintenance › Definitions › Cost Centers (opens as a tree; grid, card, pivot and chart are also available).\nFields: branch (company), parent cost center (tree; shown as Parent / Name), name, reference code, department (departments of the branch), customer (from Contacts), active.\nUsed by: Inventory › Products › Equipment tab selects the equipment's cost center from the active rows. A used cost center is not deleted but set passive."
},
{
"Id": "5706ca0c-7012-5341-af3f-896b2c271a12",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Maintenance.CostCenter.Desc",
"Value": "Masraf Merkezleri — bakım ve ekipman masraflarının bağlandığı masraf merkezleri ve masraf kalemleri.\nNerede: Bakım › Tanımlamalar › Masraf Merkezleri (ağaç olarak açılır; grid, kart, pivot ve grafik de vardır).\nAlanlar: şube (firma), üst masraf merkezi (ağaç; Üst / Ad olarak gösterilir), ad, referans kodu, departman (şubenin departmanları), müşteri (Kontaklar'dan), aktif.\nKullanıldığı yer: Envanter › Ürünler › Ekipman sekmesi ekipmanın masraf merkezini aktif satırlardan seçer. Kullanılmış masraf merkezi silinmez, pasife alınır."
}, },
{ {
"Id": "e2bef9f5-5268-5ebf-b563-78c13b5d3b29", "Id": "e2bef9f5-5268-5ebf-b563-78c13b5d3b29",

View file

@ -0,0 +1,136 @@
{
"ListFormCode": "App.Maintenance.CostCenter",
"KeyFieldName": "Id",
"GeneratedAt": "2026-10-18T09:01:50.056189Z",
"Order": 0,
"Rows": [
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": null,
"Name": "Doğal Kaynak Tüketimi",
"Code": null,
"IsActive": true,
"Id": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0",
"Name": "Buhar",
"Code": "MK-DKT-BHR",
"IsActive": true,
"Id": "d543208e-8c97-5f62-bda5-683489cdfe6b"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0",
"Name": "Doğalgaz",
"Code": "MK-DKT-DGZ",
"IsActive": true,
"Id": "6374d851-e4c8-5192-95f4-1f6a5e3188cb"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0",
"Name": "Elektrik",
"Code": "MK-DKT-ELK",
"IsActive": true,
"Id": "86d668c2-3f6e-57d2-ae15-1bc65f8824f4"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0",
"Name": "Hava / Kompresör",
"Code": "MK-DKT-HVA",
"IsActive": true,
"Id": "5b7cf637-54ac-5234-9c84-619e5dc13a2c"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0",
"Name": "Su",
"Code": "MK-DKT-SU",
"IsActive": true,
"Id": "3f63d879-2d91-5079-b3e3-9379e7252bed"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "826b4ba0-2c85-5bf6-846e-bccc71cf49d0",
"Name": "Yumuşak Su",
"Code": "MK-DKT-YSU",
"IsActive": true,
"Id": "4bfad1a8-acbd-58f1-9ad4-a6c9761d12f8"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": null,
"Name": "Field Service",
"Code": null,
"IsActive": true,
"Id": "6cc8094b-61c8-59de-9967-4b6eb925174c"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": null,
"Name": "Genel Giderler",
"Code": "MK-GEN",
"IsActive": true,
"Id": "39787877-57ba-5f6a-b6b7-1799a90fbe43"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": null,
"Name": "Grup Şirketler",
"Code": null,
"IsActive": true,
"Id": "09c32013-52d0-568a-9a4c-c3d6de844998"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "09c32013-52d0-568a-9a4c-c3d6de844998",
"Name": "Aldora Genel Gider",
"Code": null,
"IsActive": true,
"Id": "5ad5d17d-c050-5945-8e7a-d4699a3991da"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "09c32013-52d0-568a-9a4c-c3d6de844998",
"Name": "Boğaziçi Mensucat Genel Gider",
"Code": null,
"IsActive": true,
"Id": "1c5906ff-128e-5ae3-9357-bf1325ed2b12"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "09c32013-52d0-568a-9a4c-c3d6de844998",
"Name": "Erkam Radyo Genel Gider",
"Code": null,
"IsActive": true,
"Id": "2ed9af13-7089-56d6-9b76-00aa71e65522"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "09c32013-52d0-568a-9a4c-c3d6de844998",
"Name": "Kadifeteks Genel Muhtelif Giderler",
"Code": null,
"IsActive": true,
"Id": "ef4b6aa3-ca8f-54d4-8f81-b56700f77be8"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "09c32013-52d0-568a-9a4c-c3d6de844998",
"Name": "Kets Tekstil Genel Gider",
"Code": null,
"IsActive": true,
"Id": "0455e62d-cfc1-5609-97c7-a1f450aee33d"
},
{
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"ParentId": "09c32013-52d0-568a-9a4c-c3d6de844998",
"Name": "Konut Yapı Genel Gider",
"Code": null,
"IsActive": true,
"Id": "3929e079-ddb8-5e7f-97b0-31fc3f877a49"
}
]
}

View file

@ -3259,6 +3259,21 @@
"ElementId": null, "ElementId": null,
"ModuleId": "Mm" "ModuleId": "Mm"
}, },
{
"Id": "03aed53c-4658-58be-935f-6d047ca924b1",
"Code": "App.Maintenance.CostCenter",
"DisplayName": "App.Maintenance.CostCenter",
"Order": 7,
"Url": "/admin/list/App.Maintenance.CostCenter",
"Icon": "FcMoneyTransfer",
"ParentCode": "App.Maintenance.Definitions",
"RequiredPermissionName": "App.Maintenance.CostCenter",
"CssClass": null,
"Target": null,
"IsDisabled": false,
"ElementId": null,
"ModuleId": "Mm"
},
{ {
"Id": "276a1f9f-a837-580d-a9c1-79034511ceea", "Id": "276a1f9f-a837-580d-a9c1-79034511ceea",
"Code": "App.Maintenance.Operations", "Code": "App.Maintenance.Operations",
@ -3288,6 +3303,21 @@
"IsDisabled": false, "IsDisabled": false,
"ElementId": null, "ElementId": null,
"ModuleId": "Mm" "ModuleId": "Mm"
},
{
"Id": "d12aed74-2253-5097-895c-2c7ebd0584df",
"Code": "App.Maintenance.WorkOrder",
"DisplayName": "App.Maintenance.WorkOrder",
"Order": 2,
"Url": "/admin/list/App.Maintenance.WorkOrder",
"Icon": "FcEngineering",
"ParentCode": "App.Maintenance.Operations",
"RequiredPermissionName": "App.Maintenance.WorkOrder",
"CssClass": null,
"Target": null,
"IsDisabled": false,
"ElementId": null,
"ModuleId": "Mm"
} }
] ]
} }

View file

@ -25,7 +25,7 @@ Onaylanan analiz (talep "Inventory -> Tanımlamalar"):
Ekipman sekmesi (2026-10-18): Ekipman sekmesi (2026-10-18):
- Ürünler'e Reçeteler'in soluna "Ekipman" sekmesi eklendi. Ekipman ayrı bir kayıt değil, ürünün kendisidir (Bakım › Ekipman Kategorileri "ekipman olan ürünler" kararı); sekme Muhasebe/Stok gibi ürün satırını düzenleyen Form sekmesidir (`Id → Id`). - Ürünler'e Reçeteler'in soluna "Ekipman" sekmesi eklendi. Ekipman ayrı bir kayıt değil, ürünün kendisidir (Bakım › Ekipman Kategorileri "ekipman olan ürünler" kararı); sekme Muhasebe/Stok gibi ürün satırını düzenleyen Form sekmesidir (`Id → Id`).
- Alanlar görseldeki gibi: tedarikçi, tedarikçi referansı, model, seri numarası, geçerlilik tarihi, maliyet, garanti bitiş tarihi; ek olarak ekipman kategorisi (`Mm_T_EquipmentCategory`) ve ekipmanın ait olduğu departman (`Hr_T_Department`). - Alanlar görseldeki gibi: tedarikçi, tedarikçi referansı, model, seri numarası, geçerlilik tarihi, maliyet, garanti bitiş tarihi; ek olarak ekipman kategorisi (`Mm_T_EquipmentCategory`), ekipmanın ait olduğu departman (`Hr_T_Department`) ve masraf merkezi (`Mm_T_CostCenter`, Bakım › Tanımlamalar › Masraf Merkezleri; yalnız aktifler, "Üst / Ad" olarak).
- Kolonlar `Equipment` önekiyle `Inv_T_Product`'a eklendi; ekipman maliyeti (`EquipmentCost`, edinim değeri) ürünün stok maliyetinden (`Cost`) ayrıdır. - Kolonlar `Equipment` önekiyle `Inv_T_Product`'a eklendi; ekipman maliyeti (`EquipmentCost`, edinim değeri) ürünün stok maliyetinden (`Cost`) ayrıdır.
- Kategori ve departman şube kapsamlı olduğundan seçimde "Şube / Kategori" ve "Şube / Departman" gösterilir; listeler kiracının bütün şubelerini getirir, çünkü ürün şubeye bağlı değildir. - Kategori ve departman şube kapsamlı olduğundan seçimde "Şube / Kategori" ve "Şube / Departman" gösterilir; listeler kiracının bütün şubelerini getirir, çünkü ürün şubeye bağlı değildir.
@ -63,7 +63,7 @@ Tüm tablolar kiracı + tam audit + soft delete, anahtar `Id uniqueidentifier`.
| --- | --- | | --- | --- |
| `Inv_T_ProductCategory` | Ad, üst kategori, çıkış stratejisi (`RemovalStrategy`: `FIFO` / `LIFO`, varsayılan FIFO), aktif | | `Inv_T_ProductCategory` | Ad, üst kategori, çıkış stratejisi (`RemovalStrategy`: `FIFO` / `LIFO`, varsayılan FIFO), aktif |
| `Inv_T_Attribute` / `Inv_T_AttributeValue` | Nitelik (görünüm türü, varyant oluşturma) ve değerleri (serbest metin, ekstra fiyat, renk, sıra) | | `Inv_T_Attribute` / `Inv_T_AttributeValue` | Nitelik (görünüm türü, varyant oluşturma) ve değerleri (serbest metin, ekstra fiyat, renk, sıra) |
| `Inv_T_Product` | Ürün kartı ve Genel Bilgi/Stok/Muhasebe/Ekipman sekmelerinin alanları; ekipman kolonları `Equipment*` önekli (tedarikçi → `Adm_T_Contact`, kategori → `Mm_T_EquipmentCategory`, departman → `Hr_T_Department`) | | `Inv_T_Product` | Ürün kartı ve Genel Bilgi/Stok/Muhasebe/Ekipman sekmelerinin alanları; ekipman kolonları `Equipment*` önekli (tedarikçi → `Adm_T_Contact`, kategori → `Mm_T_EquipmentCategory`, departman → `Hr_T_Department`, masraf merkezi → `Mm_T_CostCenter`) |
| `Inv_T_ProductAttributeLine` | Ürün × nitelik, `ValueIds` (`|` ayrımlı değer Id) | | `Inv_T_ProductAttributeLine` | Ürün × nitelik, `ValueIds` (`|` ayrımlı değer Id) |
| `Inv_T_ProductSupplier` | Tedarikçi, min. miktar, birim, fiyat, kur, teslim süresi, varyant, son alım tarihi (siparişli alımın Doğrula'sı yazar) | | `Inv_T_ProductSupplier` | Tedarikçi, min. miktar, birim, fiyat, kur, teslim süresi, varyant, son alım tarihi (siparişli alımın Doğrula'sı yazar) |
| `Inv_T_Bom` / `Inv_T_BomComponent` / `Inv_T_BomOperation` | Reçete başlığı (ürün, varyant, miktar, birim, planlama), bileşenler (operasyona bağlanabilir), operasyonlar (iş merkezi `Prd_T_WorkCenter`, operasyon `Prd_T_Operation`, süre) | | `Inv_T_Bom` / `Inv_T_BomComponent` / `Inv_T_BomOperation` | Reçete başlığı (ürün, varyant, miktar, birim, planlama), bileşenler (operasyona bağlanabilir), operasyonlar (iş merkezi `Prd_T_WorkCenter`, operasyon `Prd_T_Operation`, süre) |
@ -121,7 +121,7 @@ Dış entegrasyon yok. Ürünün Ekipman sekmesi kategoriyi Bakım modülünün
- **Wizard'lar:** ProductCategory, Attribute, AttributeValue, ProductVariant, BomOverview, Bom, BomComponent, BomOperation, BomOther, Product, ProductGeneral, ProductAttributeLine, ProductSupplier, ProductStock, ProductAccounting, ProductEquipment, Warehouse, Location, OperationType (`.json`). - **Wizard'lar:** ProductCategory, Attribute, AttributeValue, ProductVariant, BomOverview, Bom, BomComponent, BomOperation, BomOther, Product, ProductGeneral, ProductAttributeLine, ProductSupplier, ProductStock, ProductAccounting, ProductEquipment, Warehouse, Location, OperationType (`.json`).
- **Demo veri aynaları:** `data/App.Inventory.{ProductCategory,Attribute,Product,Warehouse}.json`. - **Demo veri aynaları:** `data/App.Inventory.{ProductCategory,Attribute,Product,Warehouse}.json`.
- **Geri alma:** Wizard Manager'da ana ekranlar (Product, Bom, Attribute) önce, alt formları sonra silinir. Depolar/Konumlar/Operasyon Türleri bağımsızdır; tablo düşürülecekse sıra OperationType → Location → Warehouse (FK). Tablolar ancak açık onayla `dropTables` ile düşürülür. - **Geri alma:** Wizard Manager'da ana ekranlar (Product, Bom, Attribute) önce, alt formları sonra silinir. Depolar/Konumlar/Operasyon Türleri bağımsızdır; tablo düşürülecekse sıra OperationType → Location → Warehouse (FK). Tablolar ancak açık onayla `dropTables` ile düşürülür.
- **Ekipman kolonları:** `Inv_T_Product` scriptleri `CREATE` olduğundan yalnızca yeni veritabanında kolonla kurulur. Kurulu veritabanında dokuz `Equipment*` kolonu Tablo Tasarımcısı'ndan (düzenleme modu `ALTER`) eklenir. Geri almak için `Inventory_ProductEquipment` wizard'ı silinir ve Ürünler'in alt form listesinden sekme çıkarılır; kolonlar düşürülmez. - **Ekipman kolonları:** `Inv_T_Product` scriptleri `CREATE` olduğundan yalnızca yeni veritabanında kolonla kurulur. Kurulu veritabanında on `Equipment*` kolonu Tablo Tasarımcısı'ndan (düzenleme modu `ALTER`) eklenir. Geri almak için `Inventory_ProductEquipment` wizard'ı silinir ve Ürünler'in alt form listesinden sekme çıkarılır; kolonlar düşürülmez.
- **Sorgu bağımlılığı:** Sorgular SQL Server'a özgüdür (`STRING_SPLIT`, `CONCAT_WS`, `STRING_AGG`, `CROSS APPLY`). - **Sorgu bağımlılığı:** Sorgular SQL Server'a özgüdür (`STRING_SPLIT`, `CONCAT_WS`, `STRING_AGG`, `CROSS APPLY`).
<!-- module-doc:section App.Inventory.Operations --> <!-- module-doc:section App.Inventory.Operations -->
@ -780,6 +780,7 @@ Wizard'lar `Inventory_Stock.json`, `Inventory_StockMove.json`; nesneler `Inv_T_S
| --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- |
| `EquipmentDepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department | | `EquipmentDepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
| `EquipmentCategoryId` | Ekipman Kategorisi | dxSelectBox | | ✓ | sorgu: Mm_T_EquipmentCategory | | `EquipmentCategoryId` | Ekipman Kategorisi | dxSelectBox | | ✓ | sorgu: Mm_T_EquipmentCategory |
| `EquipmentCostCenterId` | Masraf Merkezi | dxSelectBox | | ✓ | sorgu: Mm_T_CostCenter |
| `EquipmentSupplierId` | Tedarikçi | dxSelectBox | | ✓ | sorgu: Adm_T_Contact | | `EquipmentSupplierId` | Tedarikçi | dxSelectBox | | ✓ | sorgu: Adm_T_Contact |
| `EquipmentValidityDate` | Geçerlilik Tarihi | dxDateBox | | ✓ | | | `EquipmentValidityDate` | Geçerlilik Tarihi | dxDateBox | | ✓ | |
| `EquipmentSupplierRef` | Tedarikçi Referansı | dxTextBox | | ✓ | | | `EquipmentSupplierRef` | Tedarikçi Referansı | dxTextBox | | ✓ | |

View file

@ -18,6 +18,7 @@ Bakım modülünün (KADİFETEKS Odoo Bakım modülünden taşınan) tanım list
- Odoo'daki "Satış Ekip Üyeleri" etiketi hatalıdır; alan "Ekip Üyeleri" olarak açıldı. - 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. - 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; kategori sonradan Envanter › Ürünler › Ekipman sekmesine bağlandı (`App.Inventory.md` §2). - Ürün kartına ekipman işareti/kategorisi eklenmesi bu bölümün kapsamında değildir; kategori sonradan Envanter › Ürünler › Ekipman sekmesine bağlandı (`App.Inventory.md` §2).
- Masraf Merkezleri (2026-10-18, görselden: analitik hesaplar listesi): ağaç yapısı üst masraf merkeziyle kurulur, ad listede ve seçimlerde "Üst / Ad" olarak görünür; Firma şubedir. Planla, Borç, Alacak ve Bakiye sütunları alınmadı (kullanıcı kararı; muhasebe hareketi tutan tablo yok). Görselde okunan 15 satır ve üstleri "Doğal Kaynak Tüketimi" ilk şubeye (Branch1) demo veri olarak yazıldı.
### 3. Menü ve ekranlar ### 3. Menü ve ekranlar
@ -31,6 +32,7 @@ Bakım (`App.Maintenance`) › Tanımlamalar (`App.Maintenance.Definitions`):
| Hizmet Tipleri | `App.Maintenance.ServiceType` | 79 demo satır (ST01–ST79) | | Hizmet Tipleri | `App.Maintenance.ServiceType` | 79 demo satır (ST01–ST79) |
| Arıza Tipleri | `App.Maintenance.FailureType` | 8 demo satır | | Arıza Tipleri | `App.Maintenance.FailureType` | 8 demo satır |
| Red Nedenleri | `App.Maintenance.RejectReason` | 8 demo satır | | Red Nedenleri | `App.Maintenance.RejectReason` | 8 demo satır |
| Masraf Merkezleri | `App.Maintenance.CostCenter` | şube kapsamlı, ağaç (üst masraf merkezi), 16 demo satır; Ürünler › Ekipman sekmesinin masraf merkezi kaynağı |
### 4. Veri modeli ### 4. Veri modeli
@ -42,6 +44,7 @@ Tüm tablolar kiracı (`TenantId`) + tam audit + soft delete taşır.
- `Mm_T_ServiceType` (SortOrder, Code, Name, TeamIds, Description, IsActive) — UQ (TenantId, Code) - `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_FailureType` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code)
- `Mm_T_RejectReason` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code) - `Mm_T_RejectReason` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code)
- `Mm_T_CostCenter` (BranchId, ParentId → kendisi, Name, Code (Referans), DepartmentId → `Hr_T_Department`, CustomerId → `Adm_T_Contact`, IsActive)
### 5. İş kuralları ve hesaplar ### 5. İş kuralları ve hesaplar
@ -82,7 +85,7 @@ Ekipman Kategorileri, Envanter › Ürünler › Ekipman sekmesinin kategori se
### 1. Amaç ve kapsam ### 1. Amaç ve kapsam
Ekipmanların periyodik bakım planı: hangi ekipmana, hangi ekiple, hangi malzeme, kontrol listesi ve dokümanlarla, ne sıklıkta bakım yapılacağı. Plan departman onayından geçer; sonraki bakım tarihini zamanlanmış iş her gece hesaplar. Kullanıcılar bakım planlamacıları ve ekipmanın departman onaycılarıdır. Bakım iş emri henüz yoktur; iş emri ekranı geldiğinde vadesi gelen onaylı talimattan iş emri açılır. Ekipmanların periyodik bakım planı: hangi ekipmana, hangi ekiple, hangi malzeme, kontrol listesi ve dokümanlarla, ne sıklıkta bakım yapılacağı. Plan departman onayından geçer; sonraki bakım tarihini zamanlanmış iş her gece hesaplar. Bakım iş emirleri talimatın her vadesinde otomatik ya da elle açılır; malzeme, personel süresi, duruş ve not kaydı tutar, malzemeyi ekipmanın departmanının depolarındaki stoktan (ürün + lot/seri) seçer ve departman onayıyla Bakım Sarf Tüketimi teslimatı açar. Kullanıcılar bakım planlamacıları, bakım teknisyenleri ve ekipmanın departman onaycılarıdır.
### 2. Analiz ve kararlar ### 2. Analiz ve kararlar
@ -91,7 +94,7 @@ Onaylanan tarif (2026-10-18, görsellerden: talimat formu, Kontrol Listesi ve Do
- Menü `Bakım › Bakım` (yeni dal `App.Maintenance.Operations`, sıra 2) › Bakım Talimatları. - Menü `Bakım › Bakım` (yeni dal `App.Maintenance.Operations`, sıra 2) › Bakım Talimatları.
- Ekipman ayrı bir tablo değildir; Ekipman Kategorisi dolu olan üründür (`Inv_T_Product`, Ürünler › Ekipman sekmesi). Diğer ürünler ekipman listesinde görünmez (kullanıcı kararı). Seçenek "Ad [İç Referans]/Seri No" olarak gösterilir. - Ekipman ayrı bir tablo değildir; Ekipman Kategorisi dolu olan üründür (`Inv_T_Product`, Ürünler › Ekipman sekmesi). Diğer ürünler ekipman listesinde görünmez (kullanıcı kararı). Seçenek "Ad [İç Referans]/Seri No" olarak gösterilir.
- Periyot "Her N Gün / Hafta / Ay / Yıl" (kullanıcı kararı). - Periyot "Her N Gün / Hafta / Ay / Yıl" (kullanıcı kararı).
- Zamanlanmış iş yalnızca sonraki bakım tarihini hesaplar; iş emri tablosu açılmadı (kullanıcı kararı: "Yalnızca sonraki tarih"). - Zamanlanmış iş ilk sürümde yalnızca sonraki bakım tarihini hesaplıyordu (kullanıcı kararı); iş emri ekranıyla birlikte vadede iş emri de açar (aşağıda).
- Onaycı departman onaycısıdır (kullanıcı kararı): Onaycılar ekranında ekipmanın departmanı (`EquipmentDepartmentId`) için yeni **Bakım** onay yeri (`Maintenance`). Red nedeni Bakım › Red Nedenleri'nden seçilir. - Onaycı departman onaycısıdır (kullanıcı kararı): Onaycılar ekranında ekipmanın departmanı (`EquipmentDepartmentId`) için yeni **Bakım** onay yeri (`Maintenance`). Red nedeni Bakım › Red Nedenleri'nden seçilir.
- Genel sekmesi yalnız zengin metin bakım talimatıdır (kullanıcı kararı). Onay Bilgileri sekmesi akışın dört alanını ve departman onaycılarını salt okunur gösterir. - Genel sekmesi yalnız zengin metin bakım talimatıdır (kullanıcı kararı). Onay Bilgileri sekmesi akışın dört alanını ve departman onaycılarını salt okunur gösterir.
- Bakım Kodu otomatik (`Mm.MaintenanceInstruction` numaratörü, `BKM00001`). Talimat işlem kaydıdır: `BranchId` taşır ve şube kapsamlıdır (`IsBranch`). Sekme tabloları şube kolonu taşımaz; şubeyi bağlı oldukları talimattan alırlar (kullanıcı kararı). - Bakım Kodu otomatik (`Mm.MaintenanceInstruction` numaratörü, `BKM00001`). Talimat işlem kaydıdır: `BranchId` taşır ve şube kapsamlıdır (`IsBranch`). Sekme tabloları şube kolonu taşımaz; şubeyi bağlı oldukları talimattan alırlar (kullanıcı kararı).
@ -101,6 +104,21 @@ Onaylanan tarif (2026-10-18, görsellerden: talimat formu, Kontrol Listesi ve Do
- Kayıt sonrası komutlar yordam çağırmaz, iki sağlayıcıda da çalışan tek bir `UPDATE`'tir; ekran komutu sağlayıcıya göre çevrilmediği için `EXEC` kullanılmadı. Tarih aritmetiği sağlayıcıya göre değiştiğinden periyot hesabı yalnız zamanlanmış işin yordamındadır (`sql/` + `postgres/` eşi). - Kayıt sonrası komutlar yordam çağırmaz, iki sağlayıcıda da çalışan tek bir `UPDATE`'tir; ekran komutu sağlayıcıya göre çevrilmediği için `EXEC` kullanılmadı. Tarih aritmetiği sağlayıcıya göre değiştiğinden periyot hesabı yalnız zamanlanmış işin yordamındadır (`sql/` + `postgres/` eşi).
- Sonraki bakım tarihi onay durumundan bağımsız hesaplanır; onay şartı iş emri açılırken uygulanacaktır. - Sonraki bakım tarihi onay durumundan bağımsız hesaplanır; onay şartı iş emri açılırken uygulanacaktır.
Onaylanan tarif — Bakım İş Emirleri (2026-10-18, görsellerden: iş emri formu ve Çalışma Süreleri sekmesi):
- Menü `Bakım › Bakım` › Bakım İş Emirleri (sıra 2). Firma şubedir (`BranchId`, `IsBranch`).
- Durum Taslak › Onaylandı › İşlemde / Beklemede › Onarıldı / Hurda (`Status`: `Draft`, `Approved`, `InProgress`, `OnHold`, `Repaired`, `Scrapped`). Taslak › Onaylandı geçişini departman onay akışı verir (kullanıcı kararı); onaylanmadan seçilen durum kayıtta Taslak'a döner, sonraki durumları kullanıcı seçer. Akış dört iş akışı kolonunu kullanır; `Status` onay durumu değil işin yaşam döngüsüdür, kullanıcı istediği için ayrı kolondur.
- Zamanlanmış iş onaylı ve aktif talimatın her vadesinde Taslak, Otomatik iş emri açar; önceki emir kapanmamış olsa da yenisi açılır (kullanıcı kararı). Aynı vade için ikinci emir açılmaz.
- Malzemeler (kullanıcı kararı, 2026-10-19; önceki "İç transfer + sarf" ve kullanıcı departmanı kurallarının yerine): önce ekipmanın departmanına bağlı iç konum, sonra o konumdaki stok satırı (ürün + lot/seri, eldeki miktarıyla) seçilir; iç transfer yoktur. İş emri departman onayını alınca Envanter › Teslimatlar'da Bakım Sarf Tüketimi taslak teslimatı seçilen lotlarla açılır.
- Kontrol Listesi ve Dokümanlar yalnız talimat ekranının sekmeleridir; iş emri ekranından kaldırıldı (kullanıcı kararı, 2026-10-18).
- Görseldeki Sonuç & Geri Bildirim, Maliyetler sekmeleri ve Parçayı Sök düğmesi kapsam dışıdır (kullanıcı kararı). Üretim Emri alanı yoktur: üretim emri tablosu yoktur.
- Stoktan düşme: iç transfer dış konuma gidemez, aynı konuma giden belge stoğa dokunmaz. Bu yüzden Bakım Sarf Tüketimi işlem türü Teslimat türünde ve dış "Bakım Sarf" konumuna gidecek şekilde kurulur (demo seed'i buna çevrildi).
- İş emri ekranının kayıt sonrası komutları Envanter ekranları gibi `EXEC` ile yordam çağırır; yordamların `postgres/` eşi vardır. Form içi hesaplar EditorScript'tedir, kayıt sonrası SQL ile yapılmaz (kullanıcı kararı): Çalışma Süreleri ve Duruşlar'ın süreleri, iş emrinin gerçek başlangıç/bitişi. Yordamda yalnız onaycı listesi, onaysız emri Taslak'ta tutma ve sarf belgesi kalır; bunlar akıştan ve zamanlanmış işten de çalışır.
Üretimde verilen ek kararlar (iş emri):
- Sarf teslimatı taslak açılır; depo Hazırla › Doğrula ile işler. Belgesi açılmış malzeme satırı değiştirilemez ve silinemez.
- Otomatik emrin kullanım konumu ekipman departmanının koda göre ilk iç konumudur; ekip talimatın ilk ekibidir.
- Güncelleme varsayılanlarına `Id = @ID` yazılmaz: yazılırsa anahtar tek değer olarak gider ve güncelleme sonrası komuttaki `"Id" IN @Id` geçersiz SQL olur (Onayla düğmesinde "Incorrect syntax near @Id" hatası). Satır yoksa platform anahtarı liste olarak ekler. - Güncelleme varsayılanlarına `Id = @ID` yazılmaz: yazılırsa anahtar tek değer olarak gider ve güncelleme sonrası komuttaki `"Id" IN @Id` geçersiz SQL olur (Onayla düğmesinde "Incorrect syntax near @Id" hatası). Satır yoksa platform anahtarı liste olarak ekler.
### 3. Menü ve ekranlar ### 3. Menü ve ekranlar
@ -109,14 +127,20 @@ Bakım (`App.Maintenance`) › Bakım (`App.Maintenance.Operations`) › Bakım
Sekmeler (menüsüz alt formlar), sırasıyla: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar (listeler; ilişki `Id → MaintenanceInstructionId`), Genel, Onay Bilgileri (talimat satırının kendisi, `Id → Id`). Sekmeler (menüsüz alt formlar), sırasıyla: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar (listeler; ilişki `Id → MaintenanceInstructionId`), Genel, Onay Bilgileri (talimat satırının kendisi, `Id → Id`).
Bakım (`App.Maintenance.Operations`) › Bakım İş Emirleri (`App.Maintenance.WorkOrder`). Sekmeler: Malzemeler, Çalışma Süreleri, Duruşlar (listeler; `Id → WorkOrderId`), Notlar (iş emri satırı, `Id → Id`).
### 4. Veri modeli ### 4. Veri modeli
Tüm tablolar kiracı + tam audit + soft delete + `IsActive` taşır; şube (`BranchId`) yalnız talimat tablosundadır. Tüm tablolar kiracı + tam audit + soft delete taşır; `IsActive` tanım tablolarında, talimatta ve iş emrinde vardır, iş emrinin malzeme, çalışma süresi ve duruş tabloları taşımaz (kullanıcı kararı, 2026-10-19); şube (`BranchId`) yalnız talimat tablosundadır.
- `Mm_T_MaintenanceInstruction` (Code, Name, MaintenanceTypeId → `Mm_T_MaintenanceType`, EquipmentId → `Inv_T_Product`, TeamIds `|` listesi → `Mm_T_Team`, PeriodValue int, PeriodUnit `Day`/`Week`/`Month`/`Year`, StartDate, EndDate, NextDueDate, InstructionText, DeptApproverUserNames, iş akışının dört kolonu) - `Mm_T_MaintenanceInstruction` (Code, Name, MaintenanceTypeId → `Mm_T_MaintenanceType`, EquipmentId → `Inv_T_Product`, TeamIds `|` listesi → `Mm_T_Team`, PeriodValue int, PeriodUnit `Day`/`Week`/`Month`/`Year`, StartDate, EndDate, NextDueDate, InstructionText, DeptApproverUserNames, iş akışının dört kolonu)
- `Mm_T_MaintenanceInstructionMaterial` (MaintenanceInstructionId, ProductId → `Inv_T_Product`, Quantity, UomId → `Adm_T_Uom`, Description) - `Mm_T_MaintenanceInstructionMaterial` (MaintenanceInstructionId, ProductId → `Inv_T_Product`, Quantity, UomId → `Adm_T_Uom`, Description)
- `Mm_T_MaintenanceInstructionCheck` (MaintenanceInstructionId, Name, Description, IsRequired) - `Mm_T_MaintenanceInstructionCheck` (MaintenanceInstructionId, Name, Description, IsRequired)
- `Mm_T_MaintenanceInstructionDocument` (MaintenanceInstructionId, Name, DocumentType, FileContent, Version) - `Mm_T_MaintenanceInstructionDocument` (MaintenanceInstructionId, Name, DocumentType, FileContent, Version)
- `Mm_T_WorkOrder` (BranchId, WorkOrderNo, Name, EquipmentId, RequestDate, MaintenanceKind `Corrective`/`Preventive`/`Predictive`, ResourceType `Internal`/`External`, MaintenanceTypeId, TeamId → `Mm_T_Team`, Source `Manual`/`Automatic`, MaintenanceInstructionId, ResponsibleUserId, PlannedStart/End, ActualStart/End, Priority 0–3, Status, Notes, DeptApproverUserNames, iş akışının dört kolonu)
- `Mm_T_WorkOrderMaterial` (WorkOrderId, LocationId konum, StockId → `Inv_T_Stock` seçilen stok satırı, ProductId, LotNo, Quantity, UomId, ConsumptionTransferId → `Inv_T_Transfer`, Description). Tablo eski sürümde kurulduysa script `StockId` ve `LotNo` kolonlarını ekler; kullanılmayan `TransferSourceLocationId` ve `TransferId` kolonları düşürülmez.
- `Mm_T_WorkOrderLabor` (WorkOrderId, UserId → AbpUsers, StartTime, EndTime, DurationMinutes, RegularMinutes, OvertimeMinutes, Description)
- `Mm_T_WorkOrderDowntime` (WorkOrderId, StartTime, EndTime, DurationMinutes, FailureTypeId → `Mm_T_FailureType`, Description)
### 5. İş kuralları ve hesaplar ### 5. İş kuralları ve hesaplar
@ -125,14 +149,21 @@ Tüm tablolar kiracı + tam audit + soft delete + `IsActive` taşır; şube (`Br
- **Departman onaycıları:** her kayıtta ve akış adımında yeniden yazılır: ekipmanın departmanı için aktif Bakım onaycılarının aktif kullanıcı adları, `|` ile. - **Departman onaycıları:** her kayıtta ve akış adımında yeniden yazılır: ekipmanın departmanı için aktif Bakım onaycılarının aktif kullanıcı adları, `|` ile.
- **Bakım Ekipleri** seçili şubenin aktif ekiplerini listeler; şube değişince temizlenir. **Malzeme** seçilince birim üründen dolar. - **Bakım Ekipleri** seçili şubenin aktif ekiplerini listeler; şube değişince temizlenir. **Malzeme** seçilince birim üründen dolar.
- **Varsayılanlar:** yeni talimat ilk şube, bugün, Her 1 Ay ve Aktif ile; malzeme 1 Adet; doküman tipi Diğer ile açılır. - **Varsayılanlar:** yeni talimat ilk şube, bugün, Her 1 Ay ve Aktif ile; malzeme 1 Adet; doküman tipi Diğer ile açılır.
- **Otomatik iş emri:** gece işi, sonraki bakımı bugün ya da geçmiş olan onaylı ve aktif talimattan o vade için iş emri açar (numara `Mm.WorkOrder`, `WO/2026/00001`, yıllık sıfırlanır; konu "Talimat - Ekipman"; Önleyici, İç Bakım; planlanan tarih vade 08:00), malzemeleri kopyalar, sonra sonraki bakımı ilerletir.
- **İş emri durumu:** onay akışı tamamlanmadan durum Taslak'tır, onayla Onaylandı olur. Onaylı emirde Durum formda İşlemde seçilince gerçek başlangıç, Onarıldı ya da Hurda seçilince gerçek bitiş boşsa anında doldurulur (Durum alanının EditorScript'i).
- **Malzeme:** Konum listesi ekipmanın departmanının aktif iç konumlarıdır. Ürün - Lot/Seri listesi seçilen konumdaki stoğu sıfırdan büyük stok satırlarıdır (`[Referans] Ürün - Lot (miktar birim)`); seçilince malzeme, lot/seri no ve birim stok satırından dolar (EditorScript, üçü salt okunur). Ürün - Lot/Seri listede gizlidir (Malzeme ve Lot/Seri No aynı bilgiyi gösterir), formda durur. Görünüm modunda ve satırsız yüklemede cascade ebeveyni boş gelir; iki lookup bu durumda malzeme satırlarının kullandığı konum ve stok satırlarını döner, böylece kayıtlı değer onaydan ve stok tükendikten sonra da görünür. Kayıtta `Mm_P_WorkOrderMaterialAfterSave` doğrular ve ürün/lot/birimi stoktan yeniden yazar: konum ekipmanın departmanında değilse 50409, stok satırı seçilen konumda değilse 50410, miktar eldeki miktarı aşarsa 50411. İş emri onaylıysa satır hemen sarfa eklenir.
- **Sarf:** iş emri departman onayını alınca (hurdaya ayrılmamışsa) sarfı açılmamış satırlar konuma göre gruplanır, konumun deposundaki Bakım Sarf Tüketimi türünde (numaratörü `.MaintenanceConsumption` ile biter, tür Teslimat) taslak teslimat açılır; aynı emrin aynı konumdaki taslağı varsa satırlar ona eklenir. Lot/seri takipli satırda seçilen lot teslimat satırının lotu olur (`Mm_P_WorkOrderConsume`). Tür yoksa kayıt 50402 ile durur. Onarılmış ya da hurdaya ayrılmış emre malzeme eklenmez (50406).
- **Süreler:** Çalışma Süreleri'nde süre (dakika) formda başlangıç ya da bitiş değişince anında hesaplanır; normal mesai = süre − mesai dışı, mesai dışı değişince de yenilenir (ikisi salt okunur). Duruşlar'da süre de formda başlangıç ve bitişten anında hesaplanır. Dakikalar ileride personel maliyetinin dayanağıdır.
### 6. Yetki ve görünürlük ### 6. Yetki ve görünürlük
`App.Maintenance` › `App.Maintenance.Operations` › `App.Maintenance.MaintenanceInstruction` (+ Create/Update/Delete/Export/Import/Note); beş sekmenin yetkisi talimat yetkisinin altındadır. Yetkiler hiçbir role otomatik verilmez. Akışı başlatmak ve karar vermek talimatın Update yetkisini ister; karar yalnız departman onaycılarındadır. Widget'lar: Toplam · Aktif · Onay Bekleyen · Onaylanan. `App.Maintenance` › `App.Maintenance.Operations` › `App.Maintenance.MaintenanceInstruction` (+ Create/Update/Delete/Export/Import/Note); beş sekmenin yetkisi talimat yetkisinin altındadır. Yetkiler hiçbir role otomatik verilmez. Akışı başlatmak ve karar vermek talimatın Update yetkisini ister; karar yalnız departman onaycılarındadır. Widget'lar: Toplam · Aktif · Onay Bekleyen · Onaylanan.
`App.Maintenance.Operations` › `App.Maintenance.WorkOrder` (+ altı eylem); Malzemeler, Çalışma Süreleri, Duruşlar ve Notlar sekmelerinin yetkisi iş emri yetkisinin altındadır. İş emri widget'ları: Toplam · Onay Bekleyen · İşlemde · Onarıldı.
### 7. Entegrasyonlar ### 7. Entegrasyonlar
Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departmanlar'dan; onaycılar Yönetim › Onaycılar'dan (Bakım onay yeri); bakım tipi, ekip ve red nedeni Bakım › Tanımlamalar'dan okunur. Zamanlanmış iş `SqlWorker` türündedir, kapsamı Host ve Kiracılar'dır. Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departmanlar'dan; onaycılar Yönetim › Onaycılar'dan (Bakım onay yeri); bakım tipi, ekip ve red nedeni Bakım › Tanımlamalar'dan okunur. Zamanlanmış iş `SqlWorker` türündedir, kapsamı Host ve Kiracılar'dır. İş emri malzemeleri ekipman departmanının depolarındaki stoktan seçilir ve onayla Envanter'de Bakım Sarf Tüketimi teslimatı açar (`SourceDocument` = iş emri no); belgeyi depo Envanter › Teslimatlar'da işler. Duruşların arıza tipi Bakım › Arıza Tipleri'nden gelir.
### 8. Akış örneği ### 8. Akış örneği
@ -147,7 +178,10 @@ Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departman
- **Ekipman listesinde ürünüm yok?** Ürünün Ekipman sekmesinde Ekipman Kategorisi seçilmeli ve ürün aktif olmalıdır. - **Ekipman listesinde ürünüm yok?** Ürünün Ekipman sekmesinde Ekipman Kategorisi seçilmeli ve ürün aktif olmalıdır.
- **Onaya gönderdim ama kimse onaylayamıyor?** Ekipmanın departmanı boş ya da o departman için Bakım onay yerinde aktif onaycı yoktur. Onaycıyı ekleyip talimatı kaydedin; liste kayıtta yenilenir. - **Onaya gönderdim ama kimse onaylayamıyor?** Ekipmanın departmanı boş ya da o departman için Bakım onay yerinde aktif onaycı yoktur. Onaycıyı ekleyip talimatı kaydedin; liste kayıtta yenilenir.
- **Sonraki Bakım boş?** Başlangıç geçmişteyse tarih ilk gece işinde dolar. Bitişi geçmiş ya da pasif talimatta tarih boştur. - **Sonraki Bakım boş?** Başlangıç geçmişteyse tarih ilk gece işinde dolar. Bitişi geçmiş ya da pasif talimatta tarih boştur.
- **İş emri neden açılmıyor?** İş emri ekranı henüz yoktur; geldiğinde zamanlanmış işin yordamına eklenecektir. - **Otomatik iş emri açılmadı?** Talimat onaylı (Onaylandı) ve aktif olmalı, Sonraki Bakım bugün ya da geçmiş olmalıdır; iş her gece 01:00'de çalışır. İş Hangfire'a API açılışında ya da Zamanlanmış İşler ekranındaki "zamanlanmış işleri yeniden üret" düğmesiyle yüklenir; migrate'ten sonra ikisinden biri yapılmadıysa iş hiç çalışmaz. Sonraki bakım tarihi boş talimatın tarihi aynı çalıştırmada önce hesaplanır, vadesi bugünse iş emri de o çalıştırmada açılır.
- **Konum ya da Ürün - Lot/Seri listesi boş?** Ekipmanın Ekipman sekmesinde departman seçilmeli, o departmana bağlı aktif bir iç konum (Envanter › Konumlar) bulunmalı ve konumda stoğu olan ürün olmalıdır.
- **Onayda 50402 hatası?** Malzeme konumunun deposunda Bakım Sarf Tüketimi işlem türü yok ya da pasif. Türü Teslimat türünde ve dış hedefle tanımlayın.
- **Sarf belgesi stoktan düşmüyor?** Bakım Sarf Tüketimi işlem türünün türü Teslimat ve hedef konumu dış konum olmalıdır; iç transfer türünde stok değişmez.
### 10. Dosyalar ve geri alma ### 10. Dosyalar ve geri alma
@ -156,6 +190,8 @@ Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departman
- **Wizard'lar:** `Mm_MaintenanceInstruction`, `…Material`, `…Check`, `…Document`, `…General`, `…Approval` (`.json`). - **Wizard'lar:** `Mm_MaintenanceInstruction`, `…Material`, `…Check`, `…Document`, `…General`, `…Approval` (`.json`).
- **Numaratör:** `data/App.Definitions.Sequence.json` › `Mm.MaintenanceInstruction`. - **Numaratör:** `data/App.Definitions.Sequence.json` › `Mm.MaintenanceInstruction`.
- **Onay yeri:** `wizard/Adm_Approver.json` Onay Yeri listesine `Maintenance` eklendi. - **Onay yeri:** `wizard/Adm_Approver.json` Onay Yeri listesine `Maintenance` eklendi.
- **İş emri:** tablolar `Mm_T_WorkOrder{,Material,Labor,Downtime}.sql`, yordamlar `Mm_P_WorkOrderAfterSave`, `Mm_P_WorkOrderMaterialAfterSave`, `Mm_P_WorkOrderConsume` (iki sağlayıcı); wizard'lar `Mm_WorkOrder`, `…Material`, `…Labor`, `…Downtime`, `…Note`; numaratör `Mm.WorkOrder`.
- **Stok seed'i:** `data/App.Inventory.Location.json` dış "Bakım Sarf" konumu (BKM), `data/App.Inventory.OperationType.json` Bakım Sarf Tüketimi → Teslimat. Seed yalnız eksik satırı ekler; kurulu veritabanında işlem türü ekrandan düzeltilir.
- **Geri alma:** Wizard Manager'da önce `Mm_MaintenanceInstruction`, sonra beş sekme silinir; zamanlanmış iş satırı ve numaratör dosyadan çıkarılır. Tablolar ancak açık onayla düşürülür. - **Geri alma:** Wizard Manager'da önce `Mm_MaintenanceInstruction`, sonra beş sekme silinir; zamanlanmış iş satırı ve numaratör dosyadan çıkarılır. Tablolar ancak açık onayla düşürülür.
<!-- module-doc:auto:begin --> <!-- module-doc:auto:begin -->
@ -322,6 +358,33 @@ Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departman
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Masraf Merkezleri — `App.Maintenance.CostCenter`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_CostCenter.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Definitions` › `App.Maintenance.CostCenter` (sıra 7) |
| Yetki | `App.Maintenance.CostCenter` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Masraf Merkezleri — bakım ve ekipman masraflarının bağlandığı masraf merkezleri ve masraf kalemleri. |
| Kaynak | `Mm_T_CostCenter` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart, Tree (açılış tree) |
| 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, BranchId= |
| Veri aynası | `data/App.Maintenance.CostCenter.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
| `ParentId` | Üst Masraf Merkezi | dxSelectBox | | ✓ | sorgu: Mm_T_CostCenter |
| `Code` | Referans | dxTextBox | | ✓ | |
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department (← BranchId) |
| `CustomerId` | Müşteri | dxSelectBox | | ✓ | sorgu: Adm_T_Contact |
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
### Bakım (`App.Maintenance.Operations`) ### Bakım (`App.Maintenance.Operations`)
#### Bakım Talimatları — `App.Maintenance.MaintenanceInstruction` #### Bakım Talimatları — `App.Maintenance.MaintenanceInstruction`
@ -363,6 +426,52 @@ Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departman
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | | | `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | |
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
#### Bakım İş Emirleri — `App.Maintenance.WorkOrder`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_WorkOrder.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Maintenance.Operations` › `App.Maintenance.WorkOrder` (sıra 2) |
| Yetki | `App.Maintenance.WorkOrder` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Bakım İş Emirleri — ekipmanlarda yapılan bakım işleri; elle ya da bakım talimatlarından otomatik açılır. |
| Kaynak | `Mm_T_WorkOrder` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Alt formlar | `App.Maintenance.WorkOrderMaterial` (Id → WorkOrderId), `App.Maintenance.WorkOrderLabor` (Id → WorkOrderId), `App.Maintenance.WorkOrderDowntime` (Id → WorkOrderId), `App.Maintenance.WorkOrderNote` (Id → Id) |
| Widget'lar | `App.Widget.Total`, `App.Widget.AwaitingApproval`, `App.Widget.InProgress`, `App.Widget.Repaired` |
| Komutlar | InsertAfter: `Mm_P_WorkOrderAfterSave` · UpdateAfter: `Mm_P_WorkOrderAfterSave` |
| Form varsayılanları | WorkOrderNo=Mm.WorkOrder, BranchId=, RequestDate=@NOW, Status=Draft, Source=Manual, MaintenanceKind=Corrective, ResourceType=Internal, Priority=0, IsActive=true |
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Departman Onayı' → End 'Onaylandı' → End 'Reddedildi' |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `WorkOrderNo` | İş Emri No | dxTextBox | | ✓ | |
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Approved, InProgress, OnHold, Repaired, Scrapped · script |
| `Name` | Konu | dxTextBox | ✓ | ✓ | |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `EquipmentId` | Ekipman | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product |
| `MaintenanceKind` | Bakım Şekli | dxRadioGroup | ✓ | ✓ | liste: Corrective, Preventive, Predictive |
| `MaintenanceTypeId` | Bakım Tipi | dxSelectBox | | ✓ | sorgu: Mm_T_MaintenanceType |
| `TeamId` | Bakım Ekibi | dxSelectBox | | ✓ | sorgu: Mm_T_Team (← BranchId) |
| `MaintenanceInstructionId` | Bakım Prosedürü | dxSelectBox | | ✓ | sorgu: Mm_T_MaintenanceInstruction (← EquipmentId) |
| `ResponsibleUserId` | Sorumlu | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `PlannedStart` | Planlanan Tarih | dxDateBox | | ✓ | |
| `PlannedEnd` | Planlanan Bitiş | dxDateBox | | ✓ | |
| `ActualStart` | Gerçek Başlangıç | dxDateBox | | ✓ | |
| `ActualEnd` | Gerçek Bitiş | dxDateBox | | ✓ | |
| `Source` | Kaynak | dxSelectBox | | ✓ | liste: Manual, Automatic |
| `RequestDate` | İstek Tarihi | dxDateBox | | ✓ | |
| `ResourceType` | Bakım Kaynak Türü | dxRadioGroup | ✓ | ✓ | liste: Internal, External |
| `Priority` | Öncelik | dxRating | | ✓ | |
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | |
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | |
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
#### Onay Bilgileri — `App.Maintenance.MaintenanceInstructionApproval` #### Onay Bilgileri — `App.Maintenance.MaintenanceInstructionApproval`
| Özellik | Değer | | Özellik | Değer |
@ -475,4 +584,100 @@ Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departman
| `Description` | Açıklama | dxTextBox | | ✓ | | | `Description` | Açıklama | dxTextBox | | ✓ | |
| `IsActive` | Aktif | dxCheckBox | | ✓ | | | `IsActive` | Aktif | dxCheckBox | | ✓ | |
#### Duruşlar — `App.Maintenance.WorkOrderDowntime`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_WorkOrderDowntime.json` |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Maintenance.WorkOrderDowntime` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | İş Emri Duruşları — ekipmanın arıza ya da bakım nedeniyle durduğu süreler. |
| Kaynak | `Mm_T_WorkOrderDowntime` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Form varsayılanları | StartTime=@NOW |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `WorkOrderId` | Kimlik | dxTextBox | | | |
| `StartTime` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | script |
| `EndTime` | Bitiş Tarihi | dxDateBox | | ✓ | script |
| `FailureTypeId` | Arıza Tipi | dxSelectBox | | ✓ | sorgu: Mm_T_FailureType |
| `Description` | Açıklama | dxTextArea | | ✓ | |
| `DurationMinutes` | Süre (Dakika) | dxNumberBox | | | |
#### Çalışma Süreleri — `App.Maintenance.WorkOrderLabor`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_WorkOrderLabor.json` |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Maintenance.WorkOrderLabor` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | İş Emri Çalışma Süreleri — bakımda hangi personelin ne kadar süre harcadığı. |
| Kaynak | `Mm_T_WorkOrderLabor` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Form varsayılanları | StartTime=@NOW |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `WorkOrderId` | Kimlik | dxTextBox | | | |
| `UserId` | Çalışan Adı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
| `StartTime` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | script |
| `EndTime` | Bitiş Tarihi | dxDateBox | | ✓ | script |
| `DurationMinutes` | Süre (Dakika) | dxNumberBox | | | |
| `RegularMinutes` | Normal Mesai (Dk) | dxNumberBox | | ✓ | |
| `OvertimeMinutes` | Mesai Dışı (Dk) | dxNumberBox | | ✓ | script |
| `Description` | Açıklama | dxTextBox | | ✓ | |
#### Malzemeler — `App.Maintenance.WorkOrderMaterial`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_WorkOrderMaterial.json` |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Maintenance.WorkOrderMaterial` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | İş Emri Malzemeleri — bakımda kullanılan, stoktan seçilen yedek parça ve sarf malzemeleri. |
| Kaynak | `Mm_T_WorkOrderMaterial` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Komutlar | InsertBefore: SQL · InsertAfter: `Mm_P_WorkOrderMaterialAfterSave` · UpdateBefore: SQL · UpdateAfter: `Mm_P_WorkOrderMaterialAfterSave` · DeleteBefore: SQL |
| Form varsayılanları | Quantity=1, UomId=Adet |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `WorkOrderId` | Kimlik | dxTextBox | | | |
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location (← WorkOrderId) |
| `StockId` | Ürün - Lot/Seri | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Stock (← LocationId,WorkOrderId) · script |
| `ProductId` | Malzeme | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product |
| `LotNo` | Lot/Seri No | dxTextBox | | ✓ | |
| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | |
| `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom |
| `ConsumptionTransferId` | Sarf Çıkışı | dxSelectBox | | | sorgu: Inv_T_Transfer |
| `Description` | Açıklama | dxTextBox | | ✓ | |
#### Notlar — `App.Maintenance.WorkOrderNote`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Mm_WorkOrderNote.json` |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Maintenance.WorkOrderNote` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | İş Emri Notları — bakım iş emrinin serbest notları. |
| Kaynak | `Mm_T_WorkOrder` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
| Kapsam | Kiracı |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Notes` | Notlar | dxHtmlEditor | | ✓ | |
<!-- module-doc:auto:end --> <!-- module-doc:auto:end -->

View file

@ -44,6 +44,7 @@ CREATE TABLE IF NOT EXISTS public."Inv_T_Product"
"EquipmentWarrantyEndDate" date NULL, "EquipmentWarrantyEndDate" date NULL,
"EquipmentCategoryId" uuid NULL, "EquipmentCategoryId" uuid NULL,
"EquipmentDepartmentId" uuid NULL, "EquipmentDepartmentId" uuid NULL,
"EquipmentCostCenterId" uuid NULL,
"IsActive" boolean NOT NULL DEFAULT TRUE, "IsActive" boolean NOT NULL DEFAULT TRUE,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'), "CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL, "CreatorId" uuid NULL,

View file

@ -0,0 +1,33 @@
-- Bakım iş emri kaydı ve her iş akışı adımı sonrası çalışır (formdan, akıştan ve zamanlanmış işin açtığı emirden).
-- Departman onaycıları: Onaycılar'da ekipmanın departmanı için Bakım onay yerindeki aktif kullanıcılar.
-- Durum: departman onayı alınmamış emir Taslak'ta kalır; onay gelince Taslak Onaylandı olur, sonraki durumları
-- kullanıcı seçer; gerçek başlangıç/bitişi formdaki Durum script'i doldurur. Departman onayıyla (ve onaydan sonra eklenen
-- malzemelerde) Bakım Sarf Tüketimi teslimatı açılır; hurdaya ayrılan emirde açılmaz.
CREATE OR REPLACE PROCEDURE public."Mm_P_WorkOrderAfterSave"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql
AS $$
BEGIN
IF p_id IS NULL THEN RETURN; END IF;
UPDATE "Mm_T_WorkOrder" o SET
"DeptApproverUserNames" = (
SELECT string_agg(u."UserName", '|')
FROM "Inv_T_Product" p
INNER JOIN "Adm_T_Approver" a ON a."DepartmentId" = p."EquipmentDepartmentId"
INNER JOIN "AbpUsers" u ON u."UserName" = a."ApprovalUserName" AND u."IsDeleted" = false AND u."IsActive" = true
AND u."TenantId" IS NOT DISTINCT FROM a."TenantId"
WHERE p."Id" = o."EquipmentId" AND a."IsDeleted" = false AND a."IsActive" = true AND a."ApprovalArea" = 'Maintenance'
AND a."TenantId" IS NOT DISTINCT FROM o."TenantId"),
"Status" = CASE
WHEN COALESCE(o."ApprovalStatus", '') <> 'Onaylandı' THEN 'Draft'
WHEN o."Status" = 'Draft' THEN 'Approved'
ELSE o."Status"
END
WHERE o."Id" = p_id;
IF EXISTS (SELECT 1 FROM "Mm_T_WorkOrder" WHERE "Id" = p_id AND "ApprovalStatus" = 'Onaylandı' AND "Status" <> 'Scrapped') THEN
CALL public."Mm_P_WorkOrderConsume"(p_id, p_user_id);
END IF;
END;
$$;

View file

@ -0,0 +1,85 @@
-- Departman onayı alan bakım iş emrinin malzemeleri için sarf çıkışı (Envanter › Teslimatlar): sarfı açılmamış satırlar
-- depo/konuma göre gruplanır, her konum için o konumun deposundaki Bakım Sarf Tüketimi operasyon türünde (numaratörü
-- '.MaintenanceConsumption' ile biter) taslak teslimat açılır; aynı emrin aynı konumdaki taslağı varsa satır ona eklenir.
-- Hedef konum ve tür operasyon türünden gelir; stoktan düşmesi için tür Teslimat ve hedefi dış konum olmalıdır. Satırda
-- seçilen lot/seri teslimat satırının lotu olarak yazılır; depo belgeyi Hazırla › Doğrula ile işler. Satır sarfa
-- bağlandıktan sonra değişmez; yordam tekrar çağrılırsa yalnız yeni satırları işler.
CREATE OR REPLACE PROCEDURE public."Mm_P_WorkOrderConsume"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql
AS $$
DECLARE
v_tenant uuid;
v_no varchar(32);
v_loc uuid;
v_op_type uuid;
v_doc uuid;
v_mat record;
v_line uuid;
BEGIN
SELECT "TenantId", "WorkOrderNo" INTO v_tenant, v_no FROM "Mm_T_WorkOrder" WHERE "Id" = p_id;
IF EXISTS (SELECT 1 FROM "Mm_T_WorkOrderMaterial"
WHERE "WorkOrderId" = p_id AND "IsDeleted" = false AND "ConsumptionTransferId" IS NULL AND "LocationId" IS NULL) THEN
RAISE EXCEPTION 'Depo/konumu seçilmemiş malzeme satırı var; sarf çıkışı açılamaz.' USING ERRCODE = 'P0001', DETAIL = '50401';
END IF;
FOR v_loc IN
SELECT DISTINCT "LocationId" FROM "Mm_T_WorkOrderMaterial"
WHERE "WorkOrderId" = p_id AND "IsDeleted" = false AND "ConsumptionTransferId" IS NULL
LOOP
v_op_type := NULL;
SELECT ot."Id" INTO v_op_type
FROM "Inv_T_OperationType" ot
INNER JOIN "Inv_T_Location" l ON l."WarehouseId" = ot."WarehouseId"
WHERE l."Id" = v_loc AND ot."IsDeleted" = false AND ot."IsActive" = true AND ot."SequenceName" LIKE '%.MaintenanceConsumption'
AND ot."TenantId" IS NOT DISTINCT FROM v_tenant
ORDER BY ot."Name"
LIMIT 1;
IF v_op_type IS NULL THEN
RAISE EXCEPTION 'Depo/konumun deposunda aktif Bakım Sarf Tüketimi operasyon türü tanımlı değil.' USING ERRCODE = 'P0001', DETAIL = '50402';
END IF;
v_doc := NULL;
SELECT "Id" INTO v_doc
FROM "Inv_T_Transfer"
WHERE "OperationTypeId" = v_op_type AND "SourceLocationId" = v_loc AND "SourceDocument" = v_no AND "Status" = 'Draft'
AND "IsDeleted" = false
LIMIT 1;
IF v_doc IS NULL THEN
v_doc := gen_random_uuid();
INSERT INTO "Inv_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "SourceLocationId",
"DestinationLocationId", "SourceDocument", "ResponsibleUserId", "Status", "CreationTime", "CreatorId", "IsDeleted")
SELECT v_doc, v_tenant, ot."BranchId", ot."WarehouseId", ot."Id", ot."OperationKind", v_loc, ot."DestinationLocationId",
v_no, p_user_id, 'Draft', NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Inv_T_OperationType" ot
WHERE ot."Id" = v_op_type;
END IF;
-- Lot/seri takipli üründe yapılacak miktar lot toplamıdır (Inv_P_TransferRecalc); lotu seçilmemiş satırın lotunu depo seçer.
FOR v_mat IN
SELECT m."Id", m."ProductId", m."Description", m."Quantity", m."UomId", m."LotNo",
p."TrackingMethod" IN ('Lot', 'Serial') AS "Tracked"
FROM "Mm_T_WorkOrderMaterial" m
INNER JOIN "Inv_T_Product" p ON p."Id" = m."ProductId"
WHERE m."WorkOrderId" = p_id AND m."IsDeleted" = false AND m."ConsumptionTransferId" IS NULL AND m."LocationId" = v_loc
LOOP
v_line := gen_random_uuid();
INSERT INTO "Inv_T_TransferLine" ("Id", "TenantId", "TransferId", "ProductId", "Description", "DemandQuantity", "Quantity", "UomId",
"CreationTime", "CreatorId", "IsDeleted")
VALUES (v_line, v_tenant, v_doc, v_mat."ProductId", v_mat."Description", v_mat."Quantity",
CASE WHEN v_mat."Tracked" THEN 0 ELSE v_mat."Quantity" END, v_mat."UomId", NOW() AT TIME ZONE 'UTC', p_user_id, false);
IF v_mat."Tracked" AND v_mat."LotNo" IS NOT NULL THEN
INSERT INTO "Inv_T_TransferLineLot" ("Id", "TenantId", "TransferLineId", "LotNo", "Quantity", "CreationTime", "CreatorId", "IsDeleted")
VALUES (gen_random_uuid(), v_tenant, v_line, v_mat."LotNo", v_mat."Quantity", NOW() AT TIME ZONE 'UTC', p_user_id, false);
END IF;
UPDATE "Mm_T_WorkOrderMaterial" SET "ConsumptionTransferId" = v_doc WHERE "Id" = v_mat."Id";
END LOOP;
CALL public."Inv_P_TransferAfterSave"(v_doc, p_user_id);
END LOOP;
END;
$$;

View file

@ -0,0 +1,52 @@
-- Malzeme satırı ekipmanın departmanına bağlı bir iç konumdaki stok satırından (ürün + lot/seri) seçilir. Lookup bunu
-- süzer, kayıt burada doğrulanır: ürün, lot ve birim stok satırından yazılır (formdaki kopya değil stok esastır), miktar
-- eldeki miktarı aşamaz. İş emri departman onayını almışsa satır hemen Bakım Sarf Tüketimi teslimatına eklenir.
CREATE OR REPLACE PROCEDURE public."Mm_P_WorkOrderMaterialAfterSave"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql
AS $$
DECLARE
v_order uuid;
v_loc uuid;
v_stock uuid;
v_qty numeric(18, 4);
v_dept uuid;
v_approved boolean;
v_stock_loc uuid;
v_on_hand numeric(18, 4);
BEGIN
IF p_id IS NULL THEN RETURN; END IF;
SELECT m."WorkOrderId", m."LocationId", m."StockId", m."Quantity", p."EquipmentDepartmentId",
COALESCE(o."ApprovalStatus", '') = 'Onaylandı'
INTO v_order, v_loc, v_stock, v_qty, v_dept, v_approved
FROM "Mm_T_WorkOrderMaterial" m
INNER JOIN "Mm_T_WorkOrder" o ON o."Id" = m."WorkOrderId"
LEFT JOIN "Inv_T_Product" p ON p."Id" = o."EquipmentId"
WHERE m."Id" = p_id AND m."IsDeleted" = false AND m."ConsumptionTransferId" IS NULL;
IF v_order IS NULL THEN RETURN; END IF;
IF v_loc IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "Inv_T_Location"
WHERE "Id" = v_loc AND "LocationType" = 'Internal' AND "DepartmentId" = v_dept) THEN
RAISE EXCEPTION 'Depo/konum ekipmanın departmanına ait bir iç konum olmalıdır.' USING ERRCODE = 'P0001', DETAIL = '50409';
END IF;
IF v_stock IS NOT NULL THEN
SELECT "LocationId", "Quantity" INTO v_stock_loc, v_on_hand FROM "Inv_T_Stock" WHERE "Id" = v_stock AND "IsDeleted" = false;
IF v_stock_loc IS NULL OR v_stock_loc IS DISTINCT FROM v_loc THEN
RAISE EXCEPTION 'Seçilen ürün - lot/seri satırı seçilen depo/konumda değil.' USING ERRCODE = 'P0001', DETAIL = '50410';
END IF;
IF v_qty > v_on_hand THEN
RAISE EXCEPTION 'Miktar seçilen lot/serinin eldeki miktarını aşamaz.' USING ERRCODE = 'P0001', DETAIL = '50411';
END IF;
UPDATE "Mm_T_WorkOrderMaterial" m SET "ProductId" = s."ProductId", "LotNo" = NULLIF(s."LotNo", ''), "UomId" = s."UomId"
FROM "Inv_T_Stock" s
WHERE s."Id" = m."StockId" AND m."Id" = p_id;
END IF;
IF v_approved THEN
CALL public."Mm_P_WorkOrderConsume"(v_order, p_user_id);
END IF;
END;
$$;

View file

@ -6,13 +6,67 @@ LANGUAGE plpgsql
AS $$ AS $$
DECLARE DECLARE
v_Today date := LOCALTIMESTAMP::date; v_Today date := LOCALTIMESTAMP::date;
v_due record;
v_wo uuid;
v_no varchar(128);
v_pass integer;
BEGIN BEGIN
-- Zamanlanmış iş (Maintenance Instruction Schedule, her gece 01:00). Aktif bakım talimatlarının -- Zamanlanmış iş (Maintenance Instruction Schedule, her gece 01:00).
-- sonraki bakım tarihini Başlangıç Tarihi + k × periyot dizisinde bugüne eşit ya da bugünden sonraki -- 0. Sonraki bakım tarihi boş olan aktif talimatın tarihi önce hesaplanır; böylece başlangıcı geçmiş ya da yeni
-- ilk tarihe taşır; Bitiş Tarihi geçmişse ya da talimat pasifse tarih boşalır. İş emri tablosu -- onaylanan talimatın bugünkü vadesi aynı çalıştırmada iş emri alır.
-- geldiğinde vadesi gelen ve onaylanmış talimattan iş emri bu fonksiyonda açılır. -- 1. Sonraki bakım tarihi bugün ya da geçmiş olan aktif ve onaylanmış her talimattan o vade için Taslak, Otomatik bakım
-- İş host ve her kiracı için çağrılır, fonksiyon parametre almaz; bütün kiracıların satırlarını işler -- iş emri açar: numara Mm.WorkOrder numaratöründen, ekip talimatın ilk ekibi, malzemeler talimattan; kullanım konumu
-- ve aynı gün tekrar çalışması sonucu değiştirmez. -- ekipmanın departmanının ilk iç konumudur. Aynı talimat ve vade için otomatik emir varsa tekrar açılmaz; önceki
-- emir kapanmamış olsa da her vade yeni emir alır.
-- 2. Aktif talimatların sonraki bakım tarihini Başlangıç Tarihi + k × periyot dizisinde bugüne eşit ya da bugünden
-- sonraki ilk tarihe taşır; Bitiş Tarihi geçmişse ya da talimat pasifse tarih boşalır.
-- İş host ve her kiracı için çağrılır, fonksiyon parametre almaz; bütün kiracıların satırlarını işler ve aynı gün tekrar
-- çalışması sonucu değiştirmez.
FOR v_pass IN 1..2 LOOP
IF v_pass = 2 THEN
FOR v_due IN
SELECT i."Id", i."TenantId", i."NextDueDate"
FROM "Mm_T_MaintenanceInstruction" i
WHERE i."IsDeleted" = false AND i."IsActive" = true AND i."ApprovalStatus" = 'Onaylandı'
AND i."NextDueDate" IS NOT NULL AND i."NextDueDate" <= v_Today
AND NOT EXISTS (SELECT 1 FROM "Mm_T_WorkOrder" w
WHERE w."MaintenanceInstructionId" = i."Id" AND w."Source" = 'Automatic' AND w."IsDeleted" = false
AND w."PlannedStart"::date = i."NextDueDate")
LOOP
v_wo := gen_random_uuid();
v_no := NULL;
CALL public."Adm_P_SequenceNext"('Mm.WorkOrder', v_due."TenantId", v_no);
INSERT INTO "Mm_T_WorkOrder" ("Id", "TenantId", "BranchId", "WorkOrderNo", "Name", "EquipmentId", "RequestDate", "MaintenanceKind",
"ResourceType", "MaintenanceTypeId", "TeamId", "Source", "MaintenanceInstructionId", "PlannedStart",
"Priority", "Status", "IsActive", "CreationTime", "IsDeleted")
SELECT v_wo, i."TenantId", i."BranchId", left(v_no, 32), left(i."Name" || ' - ' || p."Name", 256), i."EquipmentId", v_Today,
'Preventive', 'Internal', i."MaintenanceTypeId",
CASE WHEN split_part(COALESCE(i."TeamIds", ''), '|', 1) ~* '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
THEN split_part(i."TeamIds", '|', 1)::uuid END,
'Automatic', i."Id", v_due."NextDueDate" + interval '8 hours', 0, 'Draft', true, NOW() AT TIME ZONE 'UTC', false
FROM "Mm_T_MaintenanceInstruction" i
INNER JOIN "Inv_T_Product" p ON p."Id" = i."EquipmentId"
WHERE i."Id" = v_due."Id";
INSERT INTO "Mm_T_WorkOrderMaterial" ("Id", "TenantId", "WorkOrderId", "ProductId", "Quantity", "UomId", "LocationId", "Description",
"CreationTime", "IsDeleted")
SELECT gen_random_uuid(), m."TenantId", v_wo, m."ProductId", m."Quantity", m."UomId",
(SELECT l."Id"
FROM "Mm_T_MaintenanceInstruction" i
INNER JOIN "Inv_T_Product" p ON p."Id" = i."EquipmentId"
INNER JOIN "Inv_T_Location" l ON l."DepartmentId" = p."EquipmentDepartmentId"
WHERE i."Id" = v_due."Id" AND l."IsDeleted" = false AND l."IsActive" = true AND l."LocationType" = 'Internal'
ORDER BY l."Code", l."Name"
LIMIT 1),
m."Description", NOW() AT TIME ZONE 'UTC', false
FROM "Mm_T_MaintenanceInstructionMaterial" m
WHERE m."MaintenanceInstructionId" = v_due."Id" AND m."IsDeleted" = false AND m."IsActive" = true;
CALL public."Mm_P_WorkOrderAfterSave"(v_wo, NULL);
END LOOP;
END IF;
UPDATE "Mm_T_MaintenanceInstruction" i SET UPDATE "Mm_T_MaintenanceInstruction" i SET
"NextDueDate" = CASE WHEN n."NextDate" > i."EndDate" THEN NULL ELSE n."NextDate" END "NextDueDate" = CASE WHEN n."NextDate" > i."EndDate" THEN NULL ELSE n."NextDate" END
FROM ( FROM (
@ -39,11 +93,13 @@ BEGIN
CASE x."PeriodUnit" WHEN 'Week' THEN 7 * x."PeriodValue" WHEN 'Year' THEN 12 * x."PeriodValue" ELSE x."PeriodValue" END AS "Step" CASE x."PeriodUnit" WHEN 'Week' THEN 7 * x."PeriodValue" WHEN 'Year' THEN 12 * x."PeriodValue" ELSE x."PeriodValue" END AS "Step"
FROM "Mm_T_MaintenanceInstruction" x FROM "Mm_T_MaintenanceInstruction" x
WHERE x."IsDeleted" = FALSE AND x."IsActive" = TRUE AND x."PeriodValue" > 0 WHERE x."IsDeleted" = FALSE AND x."IsActive" = TRUE AND x."PeriodValue" > 0
AND (v_pass = 2 OR x."NextDueDate" IS NULL)
) s ) s
) k ) k
) c ) c
) n ) n
WHERE n."Id" = i."Id"; WHERE n."Id" = i."Id";
END LOOP;
UPDATE "Mm_T_MaintenanceInstruction" SET "NextDueDate" = NULL UPDATE "Mm_T_MaintenanceInstruction" SET "NextDueDate" = NULL
WHERE "NextDueDate" IS NOT NULL AND ("IsDeleted" = TRUE OR "IsActive" = FALSE OR "PeriodValue" <= 0); WHERE "NextDueDate" IS NOT NULL AND ("IsDeleted" = TRUE OR "IsActive" = FALSE OR "PeriodValue" <= 0);

View file

@ -0,0 +1,20 @@
CREATE TABLE IF NOT EXISTS public."Mm_T_CostCenter"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"BranchId" uuid NOT NULL,
"ParentId" uuid NULL,
"Name" varchar(256) NOT NULL,
"Code" varchar(64) NULL,
"DepartmentId" uuid NULL,
"CustomerId" uuid NULL,
"IsActive" boolean NOT NULL DEFAULT TRUE,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL,
"LastModificationTime" timestamp NULL,
"LastModifierId" uuid NULL,
"IsDeleted" boolean NOT NULL DEFAULT FALSE,
"DeletionTime" timestamp NULL,
"DeleterId" uuid NULL,
CONSTRAINT "PK_Mm_T_CostCenter" PRIMARY KEY ("Id")
);

View file

@ -0,0 +1,38 @@
CREATE TABLE IF NOT EXISTS public."Mm_T_WorkOrder"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"BranchId" uuid NOT NULL,
"WorkOrderNo" varchar(32) NULL,
"Name" varchar(256) NOT NULL,
"EquipmentId" uuid NOT NULL,
"RequestDate" date NULL,
"MaintenanceKind" varchar(16) NOT NULL DEFAULT 'Corrective',
"ResourceType" varchar(16) NOT NULL DEFAULT 'Internal',
"MaintenanceTypeId" uuid NULL,
"TeamId" uuid NULL,
"Source" varchar(16) NOT NULL DEFAULT 'Manual',
"MaintenanceInstructionId" uuid NULL,
"ResponsibleUserId" uuid NULL,
"PlannedStart" timestamp NULL,
"PlannedEnd" timestamp NULL,
"ActualStart" timestamp NULL,
"ActualEnd" timestamp NULL,
"Priority" integer NOT NULL DEFAULT 0,
"Status" varchar(16) NOT NULL DEFAULT 'Draft',
"Notes" text NULL,
"DeptApproverUserNames" text NULL,
"ApprovalUserName" varchar(256) NULL,
"ApprovalStatus" varchar(50) NULL,
"ApprovalDate" timestamp NULL,
"ApprovalDescription" varchar(200) NULL,
"IsActive" boolean NOT NULL DEFAULT TRUE,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL,
"LastModificationTime" timestamp NULL,
"LastModifierId" uuid NULL,
"IsDeleted" boolean NOT NULL DEFAULT FALSE,
"DeletionTime" timestamp NULL,
"DeleterId" uuid NULL,
CONSTRAINT "PK_Mm_T_WorkOrder" PRIMARY KEY ("Id")
);

View file

@ -0,0 +1,19 @@
CREATE TABLE IF NOT EXISTS public."Mm_T_WorkOrderDowntime"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"WorkOrderId" uuid NOT NULL,
"StartTime" timestamp NOT NULL,
"EndTime" timestamp NULL,
"DurationMinutes" integer NOT NULL DEFAULT 0,
"FailureTypeId" uuid NULL,
"Description" varchar(512) NULL,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL,
"LastModificationTime" timestamp NULL,
"LastModifierId" uuid NULL,
"IsDeleted" boolean NOT NULL DEFAULT FALSE,
"DeletionTime" timestamp NULL,
"DeleterId" uuid NULL,
CONSTRAINT "PK_Mm_T_WorkOrderDowntime" PRIMARY KEY ("Id")
);

View file

@ -0,0 +1,21 @@
CREATE TABLE IF NOT EXISTS public."Mm_T_WorkOrderLabor"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"WorkOrderId" uuid NOT NULL,
"UserId" uuid NOT NULL,
"StartTime" timestamp NOT NULL,
"EndTime" timestamp NULL,
"DurationMinutes" integer NOT NULL DEFAULT 0,
"RegularMinutes" integer NOT NULL DEFAULT 0,
"OvertimeMinutes" integer NOT NULL DEFAULT 0,
"Description" varchar(256) NULL,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL,
"LastModificationTime" timestamp NULL,
"LastModifierId" uuid NULL,
"IsDeleted" boolean NOT NULL DEFAULT FALSE,
"DeletionTime" timestamp NULL,
"DeleterId" uuid NULL,
CONSTRAINT "PK_Mm_T_WorkOrderLabor" PRIMARY KEY ("Id")
);

View file

@ -0,0 +1,26 @@
CREATE TABLE IF NOT EXISTS public."Mm_T_WorkOrderMaterial"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"WorkOrderId" uuid NOT NULL,
"ProductId" uuid NOT NULL,
"Quantity" numeric(18, 4) NOT NULL DEFAULT 1,
"UomId" varchar(64) NOT NULL DEFAULT 'Adet',
"LocationId" uuid NULL,
"StockId" uuid NULL,
"LotNo" varchar(64) NULL,
"ConsumptionTransferId" uuid NULL,
"Description" varchar(256) NULL,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL,
"LastModificationTime" timestamp NULL,
"LastModifierId" uuid NULL,
"IsDeleted" boolean NOT NULL DEFAULT FALSE,
"DeletionTime" timestamp NULL,
"DeleterId" uuid NULL,
CONSTRAINT "PK_Mm_T_WorkOrderMaterial" PRIMARY KEY ("Id")
);
-- Tablo stok satırı seçimiyle kurulmadan önce oluşmuş veritabanında kolonlar eklenir.
ALTER TABLE public."Mm_T_WorkOrderMaterial" ADD COLUMN IF NOT EXISTS "StockId" uuid NULL;
ALTER TABLE public."Mm_T_WorkOrderMaterial" ADD COLUMN IF NOT EXISTS "LotNo" varchar(64) NULL;

View file

@ -46,6 +46,7 @@ BEGIN
[EquipmentWarrantyEndDate] date NULL, [EquipmentWarrantyEndDate] date NULL,
[EquipmentCategoryId] uniqueidentifier NULL, [EquipmentCategoryId] uniqueidentifier NULL,
[EquipmentDepartmentId] uniqueidentifier NULL, [EquipmentDepartmentId] uniqueidentifier NULL,
[EquipmentCostCenterId] uniqueidentifier NULL,
[IsActive] bit NOT NULL DEFAULT 1, [IsActive] bit NOT NULL DEFAULT 1,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(), [CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL, [CreatorId] uniqueidentifier NULL,

View file

@ -0,0 +1,35 @@
CREATE OR ALTER PROCEDURE [dbo].[Mm_P_WorkOrderAfterSave]
@Id uniqueidentifier,
@UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @Id IS NULL RETURN;
-- Bakım iş emri kaydı ve her iş akışı adımı sonrası çalışır (formdan, akıştan ve zamanlanmış işin açtığı emirden).
-- Departman onaycıları: Onaycılar'da ekipmanın departmanı için Bakım onay yerindeki aktif kullanıcılar.
-- Durum: departman onayı alınmamış emir Taslak'ta kalır; onay gelince Taslak Onaylandı olur, sonraki durumları
-- kullanıcı seçer; gerçek başlangıç/bitişi formdaki Durum script'i doldurur. Departman onayıyla (ve onaydan sonra eklenen
-- malzemelerde) Bakım Sarf Tüketimi teslimatı açılır; hurdaya ayrılan emirde açılmaz.
UPDATE o SET
DeptApproverUserNames = (
SELECT STRING_AGG(u.UserName, '|')
FROM Inv_T_Product p
INNER JOIN Adm_T_Approver a ON a.DepartmentId = p.EquipmentDepartmentId
INNER JOIN AbpUsers u ON u.UserName = a.ApprovalUserName AND u.IsDeleted = 0 AND u.IsActive = 1
AND ((u.TenantId IS NULL AND a.TenantId IS NULL) OR u.TenantId = a.TenantId)
WHERE p.Id = o.EquipmentId AND a.IsDeleted = 0 AND a.IsActive = 1 AND a.ApprovalArea = 'Maintenance'
AND ((a.TenantId IS NULL AND o.TenantId IS NULL) OR a.TenantId = o.TenantId)),
Status = CASE
WHEN COALESCE(o.ApprovalStatus, N'') <> N'Onaylandı' THEN 'Draft'
WHEN o.Status = 'Draft' THEN 'Approved'
ELSE o.Status
END
FROM Mm_T_WorkOrder o
WHERE o.Id = @Id;
IF EXISTS (SELECT 1 FROM Mm_T_WorkOrder WHERE Id = @Id AND ApprovalStatus = N'Onaylandı' AND Status <> 'Scrapped')
EXEC dbo.Mm_P_WorkOrderConsume @Id, @UserId;
END
GO

View file

@ -0,0 +1,89 @@
CREATE OR ALTER PROCEDURE [dbo].[Mm_P_WorkOrderConsume]
@Id uniqueidentifier,
@UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON;
-- Departman onayı alan bakım iş emrinin malzemeleri için sarf çıkışı (Envanter › Teslimatlar): sarfı açılmamış satırlar
-- depo/konuma göre gruplanır, her konum için o konumun deposundaki Bakım Sarf Tüketimi operasyon türünde (numaratörü
-- '.MaintenanceConsumption' ile biter) taslak teslimat açılır; aynı emrin aynı konumdaki taslağı varsa satır ona eklenir.
-- Hedef konum ve tür operasyon türünden gelir; stoktan düşmesi için tür Teslimat ve hedefi dış konum olmalıdır. Satırda
-- seçilen lot/seri teslimat satırının lotu olarak yazılır; depo belgeyi Hazırla › Doğrula ile işler. Satır sarfa
-- bağlandıktan sonra değişmez; yordam tekrar çağrılırsa yalnız yeni satırları işler.
DECLARE @Tenant uniqueidentifier, @No nvarchar(32), @Loc uniqueidentifier, @OpType uniqueidentifier, @Doc uniqueidentifier;
DECLARE @Lines TABLE (MaterialId uniqueidentifier NOT NULL, LineId uniqueidentifier NOT NULL);
SELECT @Tenant = TenantId, @No = WorkOrderNo FROM Mm_T_WorkOrder WHERE Id = @Id;
IF EXISTS (SELECT 1 FROM Mm_T_WorkOrderMaterial
WHERE WorkOrderId = @Id AND IsDeleted = 0 AND ConsumptionTransferId IS NULL AND LocationId IS NULL)
THROW 50401, N'Depo/konumu seçilmemiş malzeme satırı var; sarf çıkışı açılamaz.', 1;
DECLARE loc_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT LocationId FROM Mm_T_WorkOrderMaterial
WHERE WorkOrderId = @Id AND IsDeleted = 0 AND ConsumptionTransferId IS NULL;
OPEN loc_cursor;
FETCH NEXT FROM loc_cursor INTO @Loc;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @OpType = NULL;
SELECT TOP 1 @OpType = ot.Id
FROM Inv_T_OperationType ot
INNER JOIN Inv_T_Location l ON l.WarehouseId = ot.WarehouseId
WHERE l.Id = @Loc AND ot.IsDeleted = 0 AND ot.IsActive = 1 AND ot.SequenceName LIKE '%.MaintenanceConsumption'
AND ((ot.TenantId IS NULL AND @Tenant IS NULL) OR ot.TenantId = @Tenant)
ORDER BY ot.Name;
IF @OpType IS NULL
THROW 50402, N'Depo/konumun deposunda aktif Bakım Sarf Tüketimi operasyon türü tanımlı değil.', 1;
SET @Doc = NULL;
SELECT TOP 1 @Doc = Id
FROM Inv_T_Transfer
WHERE OperationTypeId = @OpType AND SourceLocationId = @Loc AND SourceDocument = @No AND Status = 'Draft' AND IsDeleted = 0;
IF @Doc IS NULL
BEGIN
SET @Doc = NEWID();
INSERT INTO Inv_T_Transfer (Id, TenantId, BranchId, WarehouseId, OperationTypeId, OperationKind, SourceLocationId,
DestinationLocationId, SourceDocument, ResponsibleUserId, Status, CreationTime, CreatorId, IsDeleted)
SELECT @Doc, @Tenant, ot.BranchId, ot.WarehouseId, ot.Id, ot.OperationKind, @Loc, ot.DestinationLocationId,
@No, @UserId, 'Draft', GETUTCDATE(), @UserId, 0
FROM Inv_T_OperationType ot
WHERE ot.Id = @OpType;
END
DELETE FROM @Lines;
INSERT INTO @Lines (MaterialId, LineId)
SELECT Id, NEWID() FROM Mm_T_WorkOrderMaterial
WHERE WorkOrderId = @Id AND IsDeleted = 0 AND ConsumptionTransferId IS NULL AND LocationId = @Loc;
-- Lot/seri takipli üründe yapılacak miktar lot toplamıdır (Inv_P_TransferRecalc); lotu seçilmemiş satırın lotunu depo seçer.
INSERT INTO Inv_T_TransferLine (Id, TenantId, TransferId, ProductId, Description, DemandQuantity, Quantity, UomId,
CreationTime, CreatorId, IsDeleted)
SELECT x.LineId, @Tenant, @Doc, m.ProductId, m.Description, m.Quantity,
CASE WHEN p.TrackingMethod IN ('Lot', 'Serial') THEN 0 ELSE m.Quantity END, m.UomId, GETUTCDATE(), @UserId, 0
FROM @Lines x
INNER JOIN Mm_T_WorkOrderMaterial m ON m.Id = x.MaterialId
INNER JOIN Inv_T_Product p ON p.Id = m.ProductId;
INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
SELECT NEWID(), @Tenant, x.LineId, m.LotNo, m.Quantity, GETUTCDATE(), @UserId, 0
FROM @Lines x
INNER JOIN Mm_T_WorkOrderMaterial m ON m.Id = x.MaterialId
INNER JOIN Inv_T_Product p ON p.Id = m.ProductId
WHERE m.LotNo IS NOT NULL AND p.TrackingMethod IN ('Lot', 'Serial');
UPDATE m SET ConsumptionTransferId = @Doc
FROM Mm_T_WorkOrderMaterial m
INNER JOIN @Lines x ON x.MaterialId = m.Id;
EXEC dbo.Inv_P_TransferAfterSave @Doc, @UserId;
FETCH NEXT FROM loc_cursor INTO @Loc;
END
CLOSE loc_cursor;
DEALLOCATE loc_cursor;
END
GO

View file

@ -0,0 +1,45 @@
CREATE OR ALTER PROCEDURE [dbo].[Mm_P_WorkOrderMaterialAfterSave]
@Id uniqueidentifier,
@UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @Id IS NULL RETURN;
-- Malzeme satırı ekipmanın departmanına bağlı bir iç konumdaki stok satırından (ürün + lot/seri) seçilir. Lookup bunu
-- süzer, kayıt burada doğrulanır: ürün, lot ve birim stok satırından yazılır (formdaki kopya değil stok esastır), miktar
-- eldeki miktarı aşamaz. İş emri departman onayını almışsa satır hemen Bakım Sarf Tüketimi teslimatına eklenir.
DECLARE @Order uniqueidentifier, @Loc uniqueidentifier, @Stock uniqueidentifier, @Qty decimal(18, 4), @Dept uniqueidentifier,
@Approved bit, @StockLoc uniqueidentifier, @OnHand decimal(18, 4);
SELECT @Order = m.WorkOrderId, @Loc = m.LocationId, @Stock = m.StockId, @Qty = m.Quantity, @Dept = p.EquipmentDepartmentId,
@Approved = CASE WHEN o.ApprovalStatus = N'Onaylandı' THEN 1 ELSE 0 END
FROM Mm_T_WorkOrderMaterial m
INNER JOIN Mm_T_WorkOrder o ON o.Id = m.WorkOrderId
LEFT JOIN Inv_T_Product p ON p.Id = o.EquipmentId
WHERE m.Id = @Id AND m.IsDeleted = 0 AND m.ConsumptionTransferId IS NULL;
IF @Order IS NULL RETURN;
IF @Loc IS NOT NULL AND NOT EXISTS (SELECT 1 FROM Inv_T_Location
WHERE Id = @Loc AND LocationType = 'Internal' AND DepartmentId = @Dept)
THROW 50409, N'Depo/konum ekipmanın departmanına ait bir iç konum olmalıdır.', 1;
IF @Stock IS NOT NULL
BEGIN
SELECT @StockLoc = LocationId, @OnHand = Quantity FROM Inv_T_Stock WHERE Id = @Stock AND IsDeleted = 0;
IF @StockLoc IS NULL OR @StockLoc <> @Loc
THROW 50410, N'Seçilen ürün - lot/seri satırı seçilen depo/konumda değil.', 1;
IF @Qty > @OnHand
THROW 50411, N'Miktar seçilen lot/serinin eldeki miktarını aşamaz.', 1;
UPDATE m SET ProductId = s.ProductId, LotNo = NULLIF(s.LotNo, ''), UomId = s.UomId
FROM Mm_T_WorkOrderMaterial m
INNER JOIN Inv_T_Stock s ON s.Id = m.StockId
WHERE m.Id = @Id;
END
IF @Approved = 1
EXEC dbo.Mm_P_WorkOrderConsume @Order, @UserId;
END
GO

View file

@ -3,13 +3,71 @@ AS
BEGIN BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
-- Zamanlanmış iş (Maintenance Instruction Schedule, her gece 01:00). Aktif bakım talimatlarının -- Zamanlanmış iş (Maintenance Instruction Schedule, her gece 01:00).
-- sonraki bakım tarihini Başlangıç Tarihi + k × periyot dizisinde bugüne eşit ya da bugünden sonraki -- 0. Sonraki bakım tarihi boş olan aktif talimatın tarihi önce hesaplanır; böylece başlangıcı geçmiş ya da yeni
-- ilk tarihe taşır; Bitiş Tarihi geçmişse ya da talimat pasifse tarih boşalır. İş emri tablosu -- onaylanan talimatın bugünkü vadesi aynı çalıştırmada iş emri alır.
-- geldiğinde vadesi gelen ve onaylanmış talimattan iş emri bu yordamda açılır. -- 1. Sonraki bakım tarihi bugün ya da geçmiş olan aktif ve onaylanmış her talimattan o vade için Taslak, Otomatik bakım
-- İş host ve her kiracı için çağrılır, yordam parametre almaz; bütün kiracıların satırlarını işler -- iş emri açar: numara Mm.WorkOrder numaratöründen, ekip talimatın ilk ekibi, malzemeler talimattan; kullanım konumu
-- ve aynı gün tekrar çalışması sonucu değiştirmez. -- ekipmanın departmanının ilk iç konumudur. Aynı talimat ve vade için otomatik emir varsa tekrar açılmaz; önceki
-- emir kapanmamış olsa da her vade yeni emir alır.
-- 2. Aktif talimatların sonraki bakım tarihini Başlangıç Tarihi + k × periyot dizisinde bugüne eşit ya da bugünden
-- sonraki ilk tarihe taşır; Bitiş Tarihi geçmişse ya da talimat pasifse tarih boşalır.
-- İş host ve her kiracı için çağrılır, yordam parametre almaz; bütün kiracıların satırlarını işler ve aynı gün tekrar
-- çalışması sonucu değiştirmez.
DECLARE @Today date = CAST(GETDATE() AS date); DECLARE @Today date = CAST(GETDATE() AS date);
DECLARE @Ins uniqueidentifier, @Tenant uniqueidentifier, @Due date, @Wo uniqueidentifier, @No nvarchar(128), @Pass int = 1;
WHILE @Pass <= 2
BEGIN
IF @Pass = 2
BEGIN
DECLARE due_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT i.Id, i.TenantId, i.NextDueDate
FROM Mm_T_MaintenanceInstruction i
WHERE i.IsDeleted = 0 AND i.IsActive = 1 AND i.ApprovalStatus = N'Onaylandı'
AND i.NextDueDate IS NOT NULL AND i.NextDueDate <= @Today
AND NOT EXISTS (SELECT 1 FROM Mm_T_WorkOrder w
WHERE w.MaintenanceInstructionId = i.Id AND w.Source = 'Automatic' AND w.IsDeleted = 0
AND CAST(w.PlannedStart AS date) = i.NextDueDate);
OPEN due_cursor;
FETCH NEXT FROM due_cursor INTO @Ins, @Tenant, @Due;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Wo = NEWID();
SET @No = NULL;
EXEC dbo.Adm_P_SequenceNext N'Mm.WorkOrder', @Tenant, @No OUTPUT;
INSERT INTO Mm_T_WorkOrder (Id, TenantId, BranchId, WorkOrderNo, Name, EquipmentId, RequestDate, MaintenanceKind,
ResourceType, MaintenanceTypeId, TeamId, Source, MaintenanceInstructionId, PlannedStart,
Priority, Status, IsActive, CreationTime, IsDeleted)
SELECT @Wo, i.TenantId, i.BranchId, LEFT(@No, 32), LEFT(CONCAT(i.Name, N' - ', p.Name), 256), i.EquipmentId, @Today,
'Preventive', 'Internal', i.MaintenanceTypeId,
TRY_CAST(LEFT(i.TeamIds, CHARINDEX('|', CONCAT(i.TeamIds, '|')) - 1) AS uniqueidentifier),
'Automatic', i.Id, DATEADD(hour, 8, CAST(@Due AS datetime)), 0, 'Draft', 1, GETUTCDATE(), 0
FROM Mm_T_MaintenanceInstruction i
INNER JOIN Inv_T_Product p ON p.Id = i.EquipmentId
WHERE i.Id = @Ins;
INSERT INTO Mm_T_WorkOrderMaterial (Id, TenantId, WorkOrderId, ProductId, Quantity, UomId, LocationId, Description,
CreationTime, IsDeleted)
SELECT NEWID(), m.TenantId, @Wo, m.ProductId, m.Quantity, m.UomId,
(SELECT TOP 1 l.Id
FROM Mm_T_MaintenanceInstruction i
INNER JOIN Inv_T_Product p ON p.Id = i.EquipmentId
INNER JOIN Inv_T_Location l ON l.DepartmentId = p.EquipmentDepartmentId
WHERE i.Id = @Ins AND l.IsDeleted = 0 AND l.IsActive = 1 AND l.LocationType = 'Internal'
ORDER BY l.Code, l.Name),
m.Description, GETUTCDATE(), 0
FROM Mm_T_MaintenanceInstructionMaterial m
WHERE m.MaintenanceInstructionId = @Ins AND m.IsDeleted = 0 AND m.IsActive = 1;
EXEC dbo.Mm_P_WorkOrderAfterSave @Wo, NULL;
FETCH NEXT FROM due_cursor INTO @Ins, @Tenant, @Due;
END
CLOSE due_cursor;
DEALLOCATE due_cursor;
END
UPDATE i SET UPDATE i SET
NextDueDate = CASE WHEN n.NextDate > i.EndDate THEN NULL ELSE n.NextDate END NextDueDate = CASE WHEN n.NextDate > i.EndDate THEN NULL ELSE n.NextDate END
@ -33,7 +91,10 @@ BEGIN
ELSE DATEADD(day, (k.K + 1) * s.Step, i.StartDate) ELSE DATEADD(day, (k.K + 1) * s.Step, i.StartDate)
END AS NextDate END AS NextDate
) n ) n
WHERE i.IsDeleted = 0 AND i.IsActive = 1 AND i.PeriodValue > 0; WHERE i.IsDeleted = 0 AND i.IsActive = 1 AND i.PeriodValue > 0 AND (@Pass = 2 OR i.NextDueDate IS NULL);
SET @Pass += 1;
END
UPDATE Mm_T_MaintenanceInstruction SET NextDueDate = NULL UPDATE Mm_T_MaintenanceInstruction SET NextDueDate = NULL
WHERE NextDueDate IS NOT NULL AND (IsDeleted = 1 OR IsActive = 0 OR PeriodValue <= 0); WHERE NextDueDate IS NOT NULL AND (IsDeleted = 1 OR IsActive = 0 OR PeriodValue <= 0);

View file

@ -0,0 +1,27 @@
IF OBJECT_ID(N'[dbo].[Mm_T_CostCenter]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Mm_T_CostCenter]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[ParentId] uniqueidentifier NULL,
[Name] nvarchar(256) NOT NULL,
[Code] nvarchar(64) NULL,
[DepartmentId] uniqueidentifier NULL,
[CustomerId] uniqueidentifier NULL,
[IsActive] bit NOT NULL DEFAULT 1,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[IsDeleted] bit NOT NULL DEFAULT 0,
[DeletionTime] datetime2 NULL,
[DeleterId] uniqueidentifier NULL,
CONSTRAINT [PK_Mm_T_CostCenter] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO

View file

@ -0,0 +1,45 @@
IF OBJECT_ID(N'[dbo].[Mm_T_WorkOrder]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Mm_T_WorkOrder]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[WorkOrderNo] nvarchar(32) NULL,
[Name] nvarchar(256) NOT NULL,
[EquipmentId] uniqueidentifier NOT NULL,
[RequestDate] date NULL,
[MaintenanceKind] nvarchar(16) NOT NULL DEFAULT 'Corrective',
[ResourceType] nvarchar(16) NOT NULL DEFAULT 'Internal',
[MaintenanceTypeId] uniqueidentifier NULL,
[TeamId] uniqueidentifier NULL,
[Source] nvarchar(16) NOT NULL DEFAULT 'Manual',
[MaintenanceInstructionId] uniqueidentifier NULL,
[ResponsibleUserId] uniqueidentifier NULL,
[PlannedStart] datetime NULL,
[PlannedEnd] datetime NULL,
[ActualStart] datetime NULL,
[ActualEnd] datetime NULL,
[Priority] int NOT NULL DEFAULT 0,
[Status] nvarchar(16) NOT NULL DEFAULT 'Draft',
[Notes] nvarchar(MAX) NULL,
[DeptApproverUserNames] nvarchar(MAX) NULL,
[ApprovalUserName] nvarchar(256) NULL,
[ApprovalStatus] nvarchar(50) NULL,
[ApprovalDate] datetime NULL,
[ApprovalDescription] nvarchar(200) NULL,
[IsActive] bit NOT NULL DEFAULT 1,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[IsDeleted] bit NOT NULL DEFAULT 0,
[DeletionTime] datetime2 NULL,
[DeleterId] uniqueidentifier NULL,
CONSTRAINT [PK_Mm_T_WorkOrder] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO

View file

@ -0,0 +1,26 @@
IF OBJECT_ID(N'[dbo].[Mm_T_WorkOrderDowntime]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Mm_T_WorkOrderDowntime]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[WorkOrderId] uniqueidentifier NOT NULL,
[StartTime] datetime NOT NULL,
[EndTime] datetime NULL,
[DurationMinutes] int NOT NULL DEFAULT 0,
[FailureTypeId] uniqueidentifier NULL,
[Description] nvarchar(512) NULL,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[IsDeleted] bit NOT NULL DEFAULT 0,
[DeletionTime] datetime2 NULL,
[DeleterId] uniqueidentifier NULL,
CONSTRAINT [PK_Mm_T_WorkOrderDowntime] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO

View file

@ -0,0 +1,28 @@
IF OBJECT_ID(N'[dbo].[Mm_T_WorkOrderLabor]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Mm_T_WorkOrderLabor]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[WorkOrderId] uniqueidentifier NOT NULL,
[UserId] uniqueidentifier NOT NULL,
[StartTime] datetime NOT NULL,
[EndTime] datetime NULL,
[DurationMinutes] int NOT NULL DEFAULT 0,
[RegularMinutes] int NOT NULL DEFAULT 0,
[OvertimeMinutes] int NOT NULL DEFAULT 0,
[Description] nvarchar(256) NULL,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[IsDeleted] bit NOT NULL DEFAULT 0,
[DeletionTime] datetime2 NULL,
[DeleterId] uniqueidentifier NULL,
CONSTRAINT [PK_Mm_T_WorkOrderLabor] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO

View file

@ -0,0 +1,37 @@
IF OBJECT_ID(N'[dbo].[Mm_T_WorkOrderMaterial]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Mm_T_WorkOrderMaterial]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[WorkOrderId] uniqueidentifier NOT NULL,
[ProductId] uniqueidentifier NOT NULL,
[Quantity] decimal(18, 4) NOT NULL DEFAULT 1,
[UomId] nvarchar(64) NOT NULL DEFAULT 'Adet',
[LocationId] uniqueidentifier NULL,
[StockId] uniqueidentifier NULL,
[LotNo] nvarchar(64) NULL,
[ConsumptionTransferId] uniqueidentifier NULL,
[Description] nvarchar(256) NULL,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[IsDeleted] bit NOT NULL DEFAULT 0,
[DeletionTime] datetime2 NULL,
[DeleterId] uniqueidentifier NULL,
CONSTRAINT [PK_Mm_T_WorkOrderMaterial] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Tablo stok satırı seçimiyle kurulmadan önce oluşmuş veritabanında kolonlar eklenir.
IF COL_LENGTH(N'dbo.Mm_T_WorkOrderMaterial', N'StockId') IS NULL
ALTER TABLE [dbo].[Mm_T_WorkOrderMaterial] ADD [StockId] uniqueidentifier NULL;
GO
IF COL_LENGTH(N'dbo.Mm_T_WorkOrderMaterial', N'LotNo') IS NULL
ALTER TABLE [dbo].[Mm_T_WorkOrderMaterial] ADD [LotNo] nvarchar(64) NULL;
GO

View file

@ -32,7 +32,7 @@
"MenuTr": "Onaycılar", "MenuTr": "Onaycılar",
"TitleEn": "Approvers", "TitleEn": "Approvers",
"TitleTr": "Onaycılar", "TitleTr": "Onaycılar",
"DescEn": "Approvers — the single list of who approves what for each department across the application.\nWhere: Administration › Definitions › Approvers.\nFields: department (shown as Branch - Department), approval area (Purchasing / Warehouse / Human Resources / Finance / Maintenance), approver user, active.\nUsed by: approval workflows read the approvers of the record's department and area. Purchasing › Material Requests: the department approval uses area Purchasing for the requester's department; the purchasing approval is not defined here: it goes to users with update permission on Awaiting Purchasing Approval (directly or through their role). Several approvers may be defined for the same department and area; any one of them can approve. Maintenance › Maintenance Instructions: the department approval uses area Maintenance for the equipment's department. Passive rows are ignored by workflows.", "DescEn": "Approvers — the single list of who approves what for each department across the application.\nWhere: Administration › Definitions › Approvers.\nFields: department (shown as Branch - Department), approval area (Purchasing / Warehouse / Human Resources / Finance / Maintenance), approver user, active.\nUsed by: approval workflows read the approvers of the record's department and area. Purchasing › Material Requests: the department approval uses area Purchasing for the requester's department; the purchasing approval is not defined here: it goes to users with update permission on Awaiting Purchasing Approval (directly or through their role). Several approvers may be defined for the same department and area; any one of them can approve. Maintenance › Instructions: the department approval uses area Maintenance for the equipment's department. Passive rows are ignored by workflows.",
"DescTr": "Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste.\nNerede: Yönetim › Tanımlamalar › Onaycılar.\nAlanlar: departman (Şube - Departman olarak gösterilir), onay yeri (Satınalma / Depo / İnsan Kaynakları / Finans / Bakım), onaylayacak kişi, aktif.\nKullanıldığı yer: onay akışları kaydın departmanı ve onay yerine göre onaycıları buradan okur. Satınalma › Talepler: departman onayı talep edenin departmanındaki Satınalma satırlarını, satınalma onayı burada tanımlanmaz: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle) onaylar. Aynı departman ve onay yerine birden çok onaycı girilebilir; herhangi birinin onayı yeterlidir. Bakım › Bakım Talimatları: departman onayı ekipmanın departmanındaki Bakım satırlarını kullanır. Pasif satırlar akışlarda kullanılmaz.", "DescTr": "Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste.\nNerede: Yönetim › Tanımlamalar › Onaycılar.\nAlanlar: departman (Şube - Departman olarak gösterilir), onay yeri (Satınalma / Depo / İnsan Kaynakları / Finans / Bakım), onaylayacak kişi, aktif.\nKullanıldığı yer: onay akışları kaydın departmanı ve onay yerine göre onaycıları buradan okur. Satınalma › Talepler: departman onayı talep edenin departmanındaki Satınalma satırlarını, satınalma onayı burada tanımlanmaz: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle) onaylar. Aynı departman ve onay yerine birden çok onaycı girilebilir; herhangi birinin onayı yeterlidir. Bakım › Bakım Talimatları: departman onayı ekipmanın departmanındaki Bakım satırlarını kullanır. Pasif satırlar akışlarda kullanılmaz.",
"Texts": [ "Texts": [
{ {

View file

@ -57,6 +57,12 @@
"En": "Equipment Category", "En": "Equipment Category",
"Tr": "Ekipman Kategorisi" "Tr": "Ekipman Kategorisi"
}, },
{
"FieldName": "EquipmentCostCenterId",
"CaptionName": "App.Listform.ListformField.CostCenter",
"En": "Cost Center",
"Tr": "Masraf Merkezi"
},
{ {
"FieldName": "EquipmentSupplierId", "FieldName": "EquipmentSupplierId",
"CaptionName": "App.Listform.ListformField.Supplier", "CaptionName": "App.Listform.ListformField.Supplier",
@ -1070,6 +1076,132 @@
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "Id": "00000000-0000-0000-0000-000000000000"
}, },
{
"EditType": null,
"ListFormCode": "App.Inventory.ProductEquipment",
"RoleId": null,
"UserId": null,
"ColumnJoinTableDto": {
"JoinType": null,
"TableName": null,
"JoinFieldName": null,
"BaseTableJoinFieldName": null,
"SelectFieldName": null,
"FieldNameAlias": null,
"JoinCondition2": "AND",
"JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null
},
"FieldName": "EquipmentCostCenterId",
"CaptionName": "App.Listform.ListformField.CostCenter",
"PlaceHolder": null,
"ReadOnly": false,
"Visible": true,
"IsActive": true,
"Width": 0,
"ListOrderNo": 4,
"SourceDbType": 9,
"CultureName": "en",
"DataType": "string",
"SortIndex": 0,
"SortDirection": null,
"AllowSearch": true,
"AllowEditing": true,
"AllowAdding": true,
"ColumnCssClass": null,
"ColumnCssValue": null,
"BandName": null,
"ColumnFilterDto": {
"AllowFiltering": true,
"FilterOperations": null,
"SelectedFilterOperation": null,
"FilterValue": null
},
"ColumnHeaderDto": {
"AllowHeaderFiltering": true,
"AllowSearch": false,
"DataSource": null,
"DataSourceString": ""
},
"ColumnGroupingDto": {
"AllowGrouping": true,
"GroupIndex": null,
"AutoExpandGroup": false
},
"ColumnCustomizationDto": {
"Fixed": false,
"FixedPosition": "left",
"AllowReordering": true
},
"ColumnTotalSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"ColumnGroupSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"LookupDto": {
"DataSourceType": 2,
"ValueExpr": "Key",
"DisplayExpr": "Name",
"CascadeRelationField": null,
"CascadeFilterOperator": "=",
"CascadeParentFields": null,
"CascadeEmptyFields": null,
"LookupQuery": "SELECT c.\"Id\" AS \"Key\", CONCAT(CASE WHEN p.\"Id\" IS NULL THEN '' ELSE CONCAT(p.\"Name\", ' / ') END, c.\"Name\") AS \"Name\" FROM \"Mm_T_CostCenter\" c LEFT JOIN \"Mm_T_CostCenter\" p ON p.\"Id\" = c.\"ParentId\" WHERE c.\"TenantId\" = '@TENANTID' AND c.\"IsDeleted\" = 'false' AND c.\"IsActive\" = 'true' ORDER BY \"Name\""
},
"ValidationRuleDto": [],
"ColumnStylingDto": [],
"PermissionDto": {
"Deny": false,
"C": "App.Inventory.ProductEquipment.Create",
"R": "App.Inventory.ProductEquipment",
"U": "App.Inventory.ProductEquipment.Update",
"E": true,
"I": true
},
"CanRead": false,
"CanCreate": false,
"CanUpdate": false,
"CanExport": false,
"DefaultValue": null,
"DefaultValueType": 0,
"PivotSettingsDto": {
"IsPivot": true,
"Expanded": false,
"SortOrder": "asc",
"Area": "filter",
"Format": null,
"SummaryType": null,
"GroupInterval": "",
"WordWrapEnabled": false
},
"Alignment": "left",
"Format": null,
"EditOrderNo": 3,
"EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox",
"ColSpan": 1,
"EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}",
"GridBoxOptions": null,
"TagBoxOptions": null,
"ImageUploadOptions": null,
"EditorScript": null,
"LastModificationTime": null,
"LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00",
"CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000"
},
{ {
"EditType": null, "EditType": null,
"ListFormCode": "App.Inventory.ProductEquipment", "ListFormCode": "App.Inventory.ProductEquipment",
@ -1093,7 +1225,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 4, "ListOrderNo": 5,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1181,7 +1313,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 3, "EditOrderNo": 4,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1219,7 +1351,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 5, "ListOrderNo": 6,
"SourceDbType": 5, "SourceDbType": 5,
"CultureName": "en", "CultureName": "en",
"DataType": "date", "DataType": "date",
@ -1307,7 +1439,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 4, "EditOrderNo": 5,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxDateBox", "EditorType2": "dxDateBox",
"ColSpan": 1, "ColSpan": 1,
@ -1345,7 +1477,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 6, "ListOrderNo": 7,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1433,7 +1565,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 5, "EditOrderNo": 6,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextBox", "EditorType2": "dxTextBox",
"ColSpan": 1, "ColSpan": 1,
@ -1471,7 +1603,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 7, "ListOrderNo": 8,
"SourceDbType": 7, "SourceDbType": 7,
"CultureName": "en", "CultureName": "en",
"DataType": "number", "DataType": "number",
@ -1559,7 +1691,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 6, "EditOrderNo": 7,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxNumberBox", "EditorType2": "dxNumberBox",
"ColSpan": 1, "ColSpan": 1,
@ -1597,7 +1729,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 8, "ListOrderNo": 9,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1685,7 +1817,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 7, "EditOrderNo": 8,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextBox", "EditorType2": "dxTextBox",
"ColSpan": 1, "ColSpan": 1,
@ -1723,7 +1855,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 9, "ListOrderNo": 10,
"SourceDbType": 5, "SourceDbType": 5,
"CultureName": "en", "CultureName": "en",
"DataType": "date", "DataType": "date",
@ -1811,7 +1943,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 8, "EditOrderNo": 9,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxDateBox", "EditorType2": "dxDateBox",
"ColSpan": 1, "ColSpan": 1,
@ -1849,7 +1981,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 10, "ListOrderNo": 11,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1937,7 +2069,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 9, "EditOrderNo": 10,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextBox", "EditorType2": "dxTextBox",
"ColSpan": 1, "ColSpan": 1,
@ -1962,7 +2094,8 @@
"App.Inventory.ProductEquipment.Desc", "App.Inventory.ProductEquipment.Desc",
"App.Listform.ListformField.ValidityDate", "App.Listform.ListformField.ValidityDate",
"App.Listform.ListformField.WarrantyEndDate", "App.Listform.ListformField.WarrantyEndDate",
"App.Listform.ListformField.EquipmentCategory" "App.Listform.ListformField.EquipmentCategory",
"App.Listform.ListformField.CostCenter"
], ],
"PermissionGroupNames": [], "PermissionGroupNames": [],
"PermissionNames": [ "PermissionNames": [

File diff suppressed because it is too large Load diff

View file

@ -28,12 +28,12 @@
"MenuParentTr": "Bakım", "MenuParentTr": "Bakım",
"PermissionGroupEn": "Maintenance", "PermissionGroupEn": "Maintenance",
"PermissionGroupTr": "Bakım", "PermissionGroupTr": "Bakım",
"MenuEn": "Maintenance Instructions", "MenuEn": "Instructions",
"MenuTr": "Bakım Talimatları", "MenuTr": "Bakım Talimatları",
"TitleEn": "Maintenance Instructions", "TitleEn": "Instructions",
"TitleTr": "Bakım Talimatları", "TitleTr": "Bakım Talimatları",
"DescEn": "Maintenance Instructions — periodic maintenance plans of equipment.\nWhere: Maintenance › Maintenance › Maintenance Instructions; tabs: Materials to Use, Checklist, Documents, General (instruction text), Approval Information.\nFields: branch, maintenance code (automatic), maintenance name, maintenance type, equipment (only products with an equipment category, shown as name [internal reference]/serial number), maintenance teams (teams of the selected branch), period (every N days / weeks / months / years), start date, end date, next maintenance (read only), active.\nBehaviour: the instruction is sent to department approval with the start button; approvers are the Approvers defined for the equipment's department in the Maintenance approval area, and the rejection reason is chosen from Maintenance › Reject Reasons. The Maintenance Instruction Schedule job recalculates the next maintenance date every night (start date + k × period, cleared after the end date); work orders will be opened from approved instructions when the work order screen is added.", "DescEn": "Instructions — periodic maintenance plans of equipment.\nWhere: Maintenance › Maintenance › Instructions; tabs: Materials to Use, Checklist, Documents, General (instruction text), Approval Information.\nFields: branch, maintenance code (automatic), maintenance name, maintenance type, equipment (only products with an equipment category, shown as name [internal reference]/serial number), maintenance teams (teams of the selected branch), period (every N days / weeks / months / years), start date, end date, next maintenance (read only), active.\nBehaviour: the instruction is sent to department approval with the start button; approvers are the Approvers defined for the equipment's department in the Maintenance approval area, and the rejection reason is chosen from Maintenance › Reject Reasons. The Maintenance Instruction Schedule job recalculates the next maintenance date every night (start date + k × period, cleared after the end date); the same job opens a draft work order in Maintenance Work Orders for every due date of an approved instruction and copies its materials.",
"DescTr": "Bakım Talimatları — ekipmanların periyodik bakım planları.\nNerede: Bakım › Bakım › Bakım Talimatları; sekmeler: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar, Genel (talimat metni), Onay Bilgileri.\nAlanlar: şube, bakım kodu (otomatik), bakım adı, bakım tipi, ekipman (yalnız ekipman kategorisi olan ürünler; ad [iç referans]/seri no olarak), bakım ekipleri (seçili şubenin ekipleri), periyot (her N gün / hafta / ay / yıl), başlangıç tarihi, bitiş tarihi, sonraki bakım (salt okunur), aktif.\nDavranış: talimat başlat düğmesiyle departman onayına gönderilir; onaycılar Onaycılar ekranında ekipmanın departmanı için Bakım onay yerine tanımlı kişilerdir, red nedeni Bakım › Red Nedenleri'nden seçilir. Maintenance Instruction Schedule işi sonraki bakım tarihini her gece yeniden hesaplar (başlangıç + k × periyot, bitiş tarihinden sonra boşalır); iş emri ekranı eklendiğinde onaylı talimatlardan iş emri açılacaktır.", "DescTr": "Bakım Talimatları — ekipmanların periyodik bakım planları.\nNerede: Bakım › Bakım › Bakım Talimatları; sekmeler: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar, Genel (talimat metni), Onay Bilgileri.\nAlanlar: şube, bakım kodu (otomatik), bakım adı, bakım tipi, ekipman (yalnız ekipman kategorisi olan ürünler; ad [iç referans]/seri no olarak), bakım ekipleri (seçili şubenin ekipleri), periyot (her N gün / hafta / ay / yıl), başlangıç tarihi, bitiş tarihi, sonraki bakım (salt okunur), aktif.\nDavranış: talimat başlat düğmesiyle departman onayına gönderilir; onaycılar Onaycılar ekranında ekipmanın departmanı için Bakım onay yerine tanımlı kişilerdir, red nedeni Bakım › Red Nedenleri'nden seçilir. Maintenance Instruction Schedule işi sonraki bakım tarihini her gece yeniden hesaplar (başlangıç + k × periyot, bitiş tarihinden sonra boşalır); aynı iş, onaylı talimatın her vadesinde Bakım İş Emirleri'nde taslak iş emri açar ve malzemelerini kopyalar.",
"Texts": [ "Texts": [
{ {
"Key": "App.Widget.AwaitingApproval", "Key": "App.Widget.AwaitingApproval",

View file

@ -33,7 +33,7 @@
"MenuTr": "Onay Bilgileri", "MenuTr": "Onay Bilgileri",
"TitleEn": "Approval Information", "TitleEn": "Approval Information",
"TitleTr": "Onay Bilgileri", "TitleTr": "Onay Bilgileri",
"DescEn": "Maintenance Instruction Approval Information — approval state of the instruction (read only).\nWhere: Maintenance › Maintenance › Maintenance Instructions › Approval Information tab (no menu of its own; shows the instruction record itself).\nFields: approval status (workflow step), approver user name, approval date, approval description (rejection reason included), department approvers.\nThe workflow writes these fields; department approvers are the Approvers defined for the equipment's department in the Maintenance approval area.", "DescEn": "Maintenance Instruction Approval Information — approval state of the instruction (read only).\nWhere: Maintenance › Maintenance › Instructions › Approval Information tab (no menu of its own; shows the instruction record itself).\nFields: approval status (workflow step), approver user name, approval date, approval description (rejection reason included), department approvers.\nThe workflow writes these fields; department approvers are the Approvers defined for the equipment's department in the Maintenance approval area.",
"DescTr": "Bakım Talimatı Onay Bilgileri — talimatın onay durumu (salt okunur).\nNerede: Bakım › Bakım › Bakım Talimatları › Onay Bilgileri sekmesi (kendi menüsü yoktur; talimat kaydının kendisini gösterir).\nAlanlar: onay durumu (akış adımı), onaylayan kullanıcı, onay tarihi, onay açıklaması (red nedeni dahil), departman onaycıları.\nAlanları iş akışı yazar; departman onaycıları Onaycılar ekranında ekipmanın departmanı için Bakım onay yerine tanımlı kişilerdir." "DescTr": "Bakım Talimatı Onay Bilgileri — talimatın onay durumu (salt okunur).\nNerede: Bakım › Bakım › Bakım Talimatları › Onay Bilgileri sekmesi (kendi menüsü yoktur; talimat kaydının kendisini gösterir).\nAlanlar: onay durumu (akış adımı), onaylayan kullanıcı, onay tarihi, onay açıklaması (red nedeni dahil), departman onaycıları.\nAlanları iş akışı yazar; departman onaycıları Onaycılar ekranında ekipmanın departmanı için Bakım onay yerine tanımlı kişilerdir."
}, },
"Groups": [ "Groups": [

View file

@ -33,7 +33,7 @@
"MenuTr": "Kontrol Listesi", "MenuTr": "Kontrol Listesi",
"TitleEn": "Checklist", "TitleEn": "Checklist",
"TitleTr": "Kontrol Listesi", "TitleTr": "Kontrol Listesi",
"DescEn": "Checklist — the items the technician checks while carrying out the maintenance instruction.\nWhere: Maintenance › Maintenance › Maintenance Instructions › Checklist tab (no menu of its own).\nFields: check item, description, required (the item cannot be skipped on the work order), active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will copy these items.", "DescEn": "Checklist — the items the technician checks while carrying out the maintenance instruction.\nWhere: Maintenance › Maintenance › Instructions › Checklist tab (no menu of its own).\nFields: check item, description, required (the item cannot be skipped on the work order), active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will copy these items.",
"DescTr": "Kontrol Listesi — bakım talimatı uygulanırken teknisyenin kontrol ettiği maddeler.\nNerede: Bakım › Bakım › Bakım Talimatları › Kontrol Listesi sekmesi (kendi menüsü yoktur).\nAlanlar: kontrol maddesi, açıklama, zorunlu (iş emrinde atlanamaz), aktif.\nŞube ve talimat talimattan gelir; talimattan açılacak iş emri bu maddeleri kopyalayacaktır." "DescTr": "Kontrol Listesi — bakım talimatı uygulanırken teknisyenin kontrol ettiği maddeler.\nNerede: Bakım › Bakım › Bakım Talimatları › Kontrol Listesi sekmesi (kendi menüsü yoktur).\nAlanlar: kontrol maddesi, açıklama, zorunlu (iş emrinde atlanamaz), aktif.\nŞube ve talimat talimattan gelir; talimattan açılacak iş emri bu maddeleri kopyalayacaktır."
}, },
"Groups": [ "Groups": [

View file

@ -33,7 +33,7 @@
"MenuTr": "Dokümanlar", "MenuTr": "Dokümanlar",
"TitleEn": "Documents", "TitleEn": "Documents",
"TitleTr": "Dokümanlar", "TitleTr": "Dokümanlar",
"DescEn": "Documents — manuals, procedures, drawings and certificates attached to a maintenance instruction.\nWhere: Maintenance › Maintenance › Maintenance Instructions › Documents tab (no menu of its own).\nFields: document name, document type (user manual / procedure / technical drawing / certificate / other), file, version, active.\nThe file is stored with the record; a new version is added as a new row so the previous one stays available.", "DescEn": "Documents — manuals, procedures, drawings and certificates attached to a maintenance instruction.\nWhere: Maintenance › Maintenance › Instructions › Documents tab (no menu of its own).\nFields: document name, document type (user manual / procedure / technical drawing / certificate / other), file, version, active.\nThe file is stored with the record; a new version is added as a new row so the previous one stays available.",
"DescTr": "Dokümanlar — bakım talimatına eklenen kılavuz, prosedür, çizim ve sertifikalar.\nNerede: Bakım › Bakım › Bakım Talimatları › Dokümanlar sekmesi (kendi menüsü yoktur).\nAlanlar: doküman adı, doküman tipi (kullanım kılavuzu / prosedür / teknik çizim / sertifika / diğer), dosya, versiyon, aktif.\nDosya kayıtla birlikte saklanır; yeni versiyon yeni satır olarak eklenir, önceki versiyon erişilebilir kalır.", "DescTr": "Dokümanlar — bakım talimatına eklenen kılavuz, prosedür, çizim ve sertifikalar.\nNerede: Bakım › Bakım › Bakım Talimatları › Dokümanlar sekmesi (kendi menüsü yoktur).\nAlanlar: doküman adı, doküman tipi (kullanım kılavuzu / prosedür / teknik çizim / sertifika / diğer), dosya, versiyon, aktif.\nDosya kayıtla birlikte saklanır; yeni versiyon yeni satır olarak eklenir, önceki versiyon erişilebilir kalır.",
"Texts": [ "Texts": [
{ {

View file

@ -33,7 +33,7 @@
"MenuTr": "Genel", "MenuTr": "Genel",
"TitleEn": "General", "TitleEn": "General",
"TitleTr": "Genel", "TitleTr": "Genel",
"DescEn": "Maintenance Instruction General — the written maintenance instruction.\nWhere: Maintenance › Maintenance › Maintenance Instructions › General tab (no menu of its own; edits the instruction record itself).\nFields: maintenance instruction (rich text: steps, safety notes, tools).\nThe text is shown to the technician on the work order created from the instruction.", "DescEn": "Maintenance Instruction General — the written maintenance instruction.\nWhere: Maintenance › Maintenance › Instructions › General tab (no menu of its own; edits the instruction record itself).\nFields: maintenance instruction (rich text: steps, safety notes, tools).\nThe text is shown to the technician on the work order created from the instruction.",
"DescTr": "Bakım Talimatı Genel — bakım talimatının yazılı metni.\nNerede: Bakım › Bakım › Bakım Talimatları › Genel sekmesi (kendi menüsü yoktur; talimat kaydının kendisini düzenler).\nAlanlar: bakım talimatı (zengin metin: adımlar, güvenlik notları, gerekli aletler).\nMetin, talimattan açılacak iş emrinde teknisyene gösterilecektir." "DescTr": "Bakım Talimatı Genel — bakım talimatının yazılı metni.\nNerede: Bakım › Bakım › Bakım Talimatları › Genel sekmesi (kendi menüsü yoktur; talimat kaydının kendisini düzenler).\nAlanlar: bakım talimatı (zengin metin: adımlar, güvenlik notları, gerekli aletler).\nMetin, talimattan açılacak iş emrinde teknisyene gösterilecektir."
}, },
"Groups": [ "Groups": [

View file

@ -33,7 +33,7 @@
"MenuTr": "Kullanılacak Malzemeler", "MenuTr": "Kullanılacak Malzemeler",
"TitleEn": "Materials to Use", "TitleEn": "Materials to Use",
"TitleTr": "Kullanılacak Malzemeler", "TitleTr": "Kullanılacak Malzemeler",
"DescEn": "Materials to Use — the spare parts and consumables a maintenance instruction needs.\nWhere: Maintenance › Maintenance › Maintenance Instructions › Materials to Use tab (no menu of its own).\nFields: material (from Products, shown as [internal reference] name), quantity, unit (from Units of Measure; filled from the product when the material is selected), description, active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will take its material list from here.", "DescEn": "Materials to Use — the spare parts and consumables a maintenance instruction needs.\nWhere: Maintenance › Maintenance › Instructions › Materials to Use tab (no menu of its own).\nFields: material (from Products, shown as [internal reference] name), quantity, unit (from Units of Measure; filled from the product when the material is selected), description, active.\nThe branch and the instruction come from the instruction; the work order created from the instruction will take its material list from here.",
"DescTr": "Kullanılacak Malzemeler — bakım talimatının gerektirdiği yedek parça ve sarf malzemeleri.\nNerede: Bakım › Bakım › Bakım Talimatları › Kullanılacak Malzemeler sekmesi (kendi menüsü yoktur).\nAlanlar: malzeme (Ürünler'den, [iç referans] ad olarak), miktar, birim (Ölçü Birimleri'nden; malzeme seçilince üründen dolar), açıklama, aktif.\nŞube ve talimat talimattan gelir; talimattan açılacak iş emri malzeme listesini buradan alacaktır." "DescTr": "Kullanılacak Malzemeler — bakım talimatının gerektirdiği yedek parça ve sarf malzemeleri.\nNerede: Bakım › Bakım › Bakım Talimatları › Kullanılacak Malzemeler sekmesi (kendi menüsü yoktur).\nAlanlar: malzeme (Ürünler'den, [iç referans] ad olarak), miktar, birim (Ölçü Birimleri'nden; malzeme seçilince üründen dolar), açıklama, aktif.\nŞube ve talimat talimattan gelir; talimattan açılacak iş emri malzeme listesini buradan alacaktır."
}, },
"Groups": [ "Groups": [

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,937 @@
{
"Wizard": {
"ComponentKind": 0,
"WizardName": "Mm_WorkOrderNote",
"WizardCode": "App.Maintenance.WorkOrderNote",
"SeededAt": "2026-10-18T08:48:09.937684Z",
"CustomComponentName": null,
"PermissionGroupName": "App.Maintenance",
"ModuleId": "Mm",
"Menu": {
"MenuParentPath": [
{
"Code": "App.Maintenance",
"Icon": "FcServices",
"En": "Maintenance",
"Tr": "Bakım"
}
],
"MenuParentCode": "App.Maintenance.Operations",
"MenuParentIcon": "FcAutomatic",
"CreateMenu": false,
"MenuCode": "App.Maintenance.WorkOrderNote",
"MenuOrder": 0,
"MenuUrl": "/admin/list/App.Maintenance.WorkOrderNote",
"MenuIcon": "FcList"
},
"Language": {
"MenuParentEn": "Maintenance",
"MenuParentTr": "Bakım",
"PermissionGroupEn": "Maintenance",
"PermissionGroupTr": "Bakım",
"MenuEn": "Notes",
"MenuTr": "Notlar",
"TitleEn": "Notes",
"TitleTr": "Notlar",
"DescEn": "Work Order Notes — free notes of the maintenance work order.\nWhere: Maintenance › Maintenance › Maintenance Work Orders › Notes tab (no menu of its own; edits the work order record itself).\nFields: notes (rich text: findings, steps carried out, recommendations).\nThe notes stay on the work order and are shown with it in exports.",
"DescTr": "İş Emri Notları — bakım iş emrinin serbest notları.\nNerede: Bakım › Bakım › Bakım İş Emirleri › Notlar sekmesi (kendi menüsü yoktur; iş emri kaydının kendisini düzenler).\nAlanlar: notlar (zengin metin: tespitler, yapılan adımlar, öneriler).\nNotlar iş emrinde kalır ve dışa aktarımlarda iş emriyle birlikte gelir."
},
"Groups": [
{
"Items": [
{
"FieldName": "Id",
"CaptionName": "App.Listform.ListformField.Id",
"En": "Id",
"Tr": "Kimlik"
},
{
"FieldName": "Notes",
"CaptionName": "App.Listform.ListformField.Notes",
"En": "Notes",
"Tr": "Notlar"
}
]
}
]
},
"ListForm": {
"EditType": null,
"DataSourceCode": "Default",
"KeyFieldDbSourceType": 9,
"TableName": null,
"DefaultFilter": "\"IsDeleted\" = 'false'",
"SelectCommand": "Mm_T_WorkOrder",
"SelectCommandType": 1,
"SelectFieldsDefaultValueDto": [],
"SeedFilePath": null,
"SeedSyncInsert": false,
"SeedSyncUpdate": false,
"SeedSyncDelete": false,
"DeleteCommand": "UPDATE \"Mm_T_WorkOrder\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\" IN @Id",
"DeleteBeforeCommand": null,
"DeleteAfterCommand": null,
"DeleteFieldsDefaultValueDto": [
{
"FieldName": "DeleterId",
"FieldDbType": 9,
"Value": "@USERID",
"CustomValueType": 2,
"SqlQuery": null
},
{
"FieldName": "Id",
"FieldDbType": 9,
"Value": "@ID",
"CustomValueType": 2,
"SqlQuery": null
}
],
"InsertCommand": null,
"InsertBeforeCommand": null,
"InsertAfterCommand": null,
"InsertFieldsDefaultValueDto": [
{
"FieldName": "CreationTime",
"FieldDbType": 6,
"Value": "@NOW",
"CustomValueType": 2,
"SqlQuery": null
},
{
"FieldName": "CreatorId",
"FieldDbType": 9,
"Value": "@USERID",
"CustomValueType": 2,
"SqlQuery": null
},
{
"FieldName": "IsDeleted",
"FieldDbType": 3,
"Value": "false",
"CustomValueType": 1,
"SqlQuery": null
},
{
"FieldName": "Id",
"FieldDbType": 9,
"Value": "@NEWID",
"CustomValueType": 2,
"SqlQuery": null
}
],
"UpdateCommand": null,
"UpdateBeforeCommand": null,
"UpdateAfterCommand": null,
"UpdateFieldsDefaultValueDto": [
{
"FieldName": "LastModificationTime",
"FieldDbType": 6,
"Value": "@NOW",
"CustomValueType": 2,
"SqlQuery": null
},
{
"FieldName": "LastModifierId",
"FieldDbType": 9,
"Value": "@USERID",
"CustomValueType": 2,
"SqlQuery": null
}
],
"FormFieldsDefaultValueDto": [],
"WidgetsDto": [],
"ExtraFilterEditDto": [],
"ListFormCode": "App.Maintenance.WorkOrderNote",
"CultureName": "en",
"Name": "App.Maintenance.WorkOrderNote",
"KeyFieldName": "Id",
"Title": "App.Maintenance.WorkOrderNote.Title",
"SortMode": "single",
"PageSize": 10,
"Width": 0,
"Height": 0,
"FullHeight": false,
"Description": "App.Maintenance.WorkOrderNote.Desc",
"FilterRowDto": {
"Visible": true,
"ApplyFilter": "auto",
"AllowUserUiFilterSave": true
},
"RowDto": {
"RowHeight": "auto",
"WhiteSpace": "normal",
"OverflowWrap": "break-word"
},
"HeaderFilterDto": {
"Visible": true,
"AllowSearch": false,
"Height": 325,
"SearchTimeout": 500,
"Width": 252
},
"FilterPanelDto": {
"Visible": false,
"Texts": null,
"FilterEnabled": false,
"CustomizeText": null
},
"SearchPanelDto": {
"Visible": true,
"Width": 160
},
"GroupPanelDto": {
"Visible": true,
"AutoExpandAll": false
},
"SelectionDto": {
"Mode": "none",
"AllowSelectAll": false,
"SelectAllMode": "allPages",
"ShowCheckBoxesMode": "always"
},
"ColumnOptionDto": {
"ShowBorders": true,
"ShowRowLines": true,
"ShowColumnLines": false,
"RowAlternationEnabled": true,
"AllowColumnReordering": true,
"AllowColumnResizing": true,
"ColumnResizingMode": "widget",
"ColumnAutoWidth": true,
"RtlEnabled": false,
"ColumnFixingEnabled": true,
"ColumnChooserEnabled": true,
"ColumnChooserMode": "dragAndDrop",
"HoverStateEnabled": false,
"ColumnHidingEnabled": true,
"FocusedRowEnabled": true,
"ShowColumnHeaders": true
},
"PivotOptionDto": {
"ColumnChooserEnabled": false,
"AllowFieldDragging": true,
"ShowFieldPanel": true,
"ShowDataFields": true,
"ShowColumnFields": true,
"ShowRowFields": true,
"ShowFilterFields": true,
"ShowChart": false,
"ChartHeight": 320,
"ChartCommonSeriesType": "bar"
},
"TreeOptionDto": {
"KeyExpr": null,
"ParentIdExpr": null,
"HasItemsExpr": null,
"RootValue": null,
"ExpandedRowKeys": [],
"AutoExpandAll": false,
"RecursiveSelection": false,
"TitleExpr": null,
"StartExpr": null,
"EndExpr": null,
"ProgressExpr": null
},
"GanttOptionDto": {
"KeyExpr": null,
"ParentIdExpr": null,
"HasItemsExpr": null,
"RootValue": null,
"ExpandedRowKeys": [],
"AutoExpandAll": false,
"RecursiveSelection": false,
"TitleExpr": null,
"ScaleType": "weeks",
"StartExpr": null,
"EndExpr": null,
"ProgressExpr": null,
"EditingEnabled": false,
"AllowTaskAdding": false,
"AllowTaskUpdating": false,
"AllowTaskResourceUpdating": false,
"AllowTaskDeleting": false,
"AllowDependencyAdding": false,
"AllowDependencyDeleting": false,
"AllowResourceAdding": false,
"AllowResourceUpdating": false,
"AllowResourceDeleting": false
},
"SchedulerOptionDto": {
"TextExpr": null,
"UserNameExpr": null,
"DescriptionExpr": null,
"StartDateExpr": null,
"EndDateExpr": null,
"AllDayExpr": null,
"RecurrenceRuleExpr": null,
"RecurrenceExceptionExpr": null,
"StartDayHour": 8,
"EndDayHour": 20,
"DefaultView": "week",
"ShowAllDayPanel": true,
"CellDuration": 30,
"FirstDayOfWeek": 1,
"CrossScrollingEnabled": false,
"AllowResizing": false,
"AllowDragging": false,
"AllowDeleting": false,
"AllowEditing": false,
"AllowAdding": false
},
"TodoOptionDto": {
"TitleExpr": null,
"StatusExpr": null,
"DescriptionExpr": null,
"AnalysisExpr": null,
"DueDateExpr": null,
"TagExpr": null,
"AssigneeExpr": null,
"PriorityExpr": null,
"CompletedExpr": null,
"OrderExpr": null,
"TimesheetExpr": null,
"SubTaskExpr": null,
"StatusOrder": null,
"AllowDragging": true
},
"PagerOptionDto": {
"Visible": true,
"ShowPageSizeSelector": true,
"ShowInfo": false,
"ShowNavigationButtons": true,
"AllowedPageSizes": "10,20,50,100",
"InfoText": "Page {0} of {1} ({2} items)",
"DisplayMode": "adaptive",
"ScrollingMode": "standard",
"LoadPanelEnabled": "auto",
"LoadPanelText": "Loading..."
},
"EditingOptionDto": {
"Mode": "popup",
"RefreshMode": "full",
"AllowUpdating": true,
"AllowDetail": false,
"AllowDeleting": false,
"AllowAllDeleting": false,
"AllowAdding": false,
"AllowDuplicate": false,
"OpenDetailAfterInsert": false,
"UseIcons": false,
"ConfirmDelete": true,
"NewRowPosition": "viewportTop",
"SelectTextOnEditStart": false,
"StartEditAction": "click",
"EditColumnName": null,
"Popup": {
"Title": "App.Maintenance.WorkOrderNote.Title",
"ShowTitle": true,
"Width": 900,
"Height": 480,
"FullScreen": false,
"HideOnOutsideClick": true,
"ResizeEnabled": true,
"DragEnabled": true,
"RestorePosition": true,
"Position": "center"
},
"SendOnlyChangedFormValuesUpdate": false,
"AddPageUrl": null,
"AddDialogName": null,
"AddDialogParameters": null
},
"EditingFormDto": [
{
"Order": 1,
"ItemType": "group",
"Caption": "",
"ColCount": 2,
"ColSpan": 2
}
],
"PermissionDto": {
"C": "App.Maintenance.WorkOrderNote.Create",
"R": "App.Maintenance.WorkOrderNote",
"U": "App.Maintenance.WorkOrderNote.Update",
"D": "App.Maintenance.WorkOrderNote.Delete",
"E": "App.Maintenance.WorkOrderNote.Export",
"I": "App.Maintenance.WorkOrderNote.Import",
"N": "App.Maintenance.WorkOrderNote.Note"
},
"CommandColumnDto": [],
"StateStoringDto": {
"Enabled": true,
"Type": "custom",
"StorageKey": "listFormGridStorage-App.Maintenance.WorkOrderNote",
"SavingTimeout": 5000
},
"CustomJsSources": [],
"CustomStyleSources": [],
"UpdateServiceAddress": "list-form-data/update",
"InsertServiceAddress": "list-form-data/insert",
"DeleteServiceAddress": "list-form-data/delete",
"IsTenant": true,
"IsBranch": false,
"IsOrganizationUnit": false,
"ListFormType": "List",
"IsSubForm": false,
"ShowNote": false,
"SubFormsListFormType": "Form",
"SubFormsDto": [],
"ExtraFilterDto": [],
"LayoutDto": {
"Grid": true,
"Card": true,
"Pivot": true,
"Chart": true,
"Tree": false,
"Gantt": false,
"Scheduler": false,
"Todo": false,
"DefaultLayout": "grid"
},
"WorkflowDto": {
"ApprovalUserFieldName": null,
"ApprovalDateFieldName": null,
"ApprovalStatusFieldName": null,
"ApprovalDescriptionFieldName": null,
"ApprovalIsFilterUserName": false,
"ApprovalIsResetWorkflow": false,
"ApprovalIsManualStart": false,
"Criteria": []
},
"UserId": null,
"RoleId": null,
"CommonDto": {
"AdjustOnZoom": true,
"ContainerBackgroundColor": "#FFFFFF",
"Palette": "Material",
"PaletteExtensionMode": "blend",
"DefaultPane": null,
"Disabled": false,
"Theme": "generic.light"
},
"AdaptivelayoutDto": {
"Height": 80,
"Width": 80,
"KeepLabels": true
},
"AnimationDto": {
"Duration": 1000,
"Easing": "easeOutCubic",
"Enabled": true,
"MaxPointCountSupported": 300
},
"AnnotationsDto": [],
"ArgumentAxisDto": {
"ArgumentType": null,
"AggregationInterval": null,
"Grid": {
"Color": "#d3d3d3",
"Visible": false,
"Width": 1
},
"HoverMode": "none",
"Label": {
"DisplayMode": "standard",
"RotationAngle": 90,
"OverlappingBehavior": "hide"
},
"Position": "bottom",
"Title": null,
"Visible": true,
"Width": 1,
"WorkdaysOnly": false
},
"CommonAnnotationSettingsDto": {
"Argument": null,
"Border": {
"Color": "#d3d3d3",
"CornerRadius": 0,
"DashStyle": "solid",
"Visible": false,
"Width": 1
},
"Color": "#ffffff",
"Description": null,
"Font": {
"Color": "#FFFFFF",
"Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif",
"Size": 12,
"Weight": 400
},
"Height": -1,
"Image": null,
"OffsetX": -1,
"OffsetY": -1,
"PaddingLeftRight": 10,
"PaddingTopBottom": 10,
"Series": null,
"Text": null,
"TooltipEnabled": true,
"Type": null,
"Value": null,
"Width": 0,
"WordWrap": "normal",
"X": 0,
"Y": 0
},
"CommonAxisSettingsDto": {
"Grid": {
"Color": "#d3d3d3",
"Visible": false,
"Width": 1
},
"Title": null,
"Visible": true,
"Width": 1
},
"CommonPaneSettingsDto": {
"BackgroundColor": null
},
"CommonSeriesSettingsDto": {
"ArgumentField": "arg",
"Axis": null,
"BarOverlapGroup": null,
"BarPadding": 0,
"BarWidth": 0,
"Color": null,
"CornerRadius": 0,
"DashStyle": "solid",
"IgnoreEmptyPoints": false,
"Pane": null,
"RangeValue1Field": "val1",
"RangeValue2Field": "val2",
"SelectionMode": "none",
"ShowInLegend": true,
"Type": null,
"ValueField": null,
"Visible": true,
"Width": 2,
"Label": null
},
"CrosshairDto": {
"Color": "#f05b41",
"DashStyle": "dot",
"Enabled": false,
"Width": 1,
"HorizontalLine": {
"Color": "#f05b41",
"DashStyle": "dot",
"Label": {
"BackgroundColor": "#f05b41",
"CustomizeText": null,
"Font": {
"Color": "#FFFFFF",
"Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif",
"Size": 12,
"Weight": 400
},
"Visible": false,
"Format": null
},
"Visible": true,
"Width": 1
},
"Label": {
"BackgroundColor": "#f05b41",
"CustomizeText": null,
"Font": {
"Color": "#FFFFFF",
"Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif",
"Size": 12,
"Weight": 400
},
"Visible": false,
"Format": null
},
"VerticalLine": {
"Color": "#f05b41",
"DashStyle": "dot",
"Label": {
"BackgroundColor": "#f05b41",
"CustomizeText": null,
"Font": {
"Color": "#FFFFFF",
"Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif",
"Size": 12,
"Weight": 400
},
"Visible": false,
"Format": null
},
"Visible": true,
"Width": 1
}
},
"ExportDto": {
"BackgroundColor": "#FFFFFF",
"Enabled": true,
"AllowExportSelectedData": false,
"Margin": 10,
"PrintingEnabled": true
},
"LegendDto": {
"BackgroundColor": null,
"Border": {
"Color": "#d3d3d3",
"CornerRadius": 0,
"DashStyle": "solid",
"Visible": false,
"Width": 1
},
"ColumnCount": 0,
"Orientation": "vertical",
"Position": "outside",
"RowCount": 0,
"Title": null,
"Visible": true
},
"MarginDto": {
"Bottom": 0,
"Left": 0,
"Right": 0,
"Top": 0
},
"PanesDto": [],
"ScrollBarDto": {
"Color": "gray",
"Offset": 5,
"Position": "top",
"Visible": false,
"Width": 10
},
"SeriesDto": [],
"SizeDto": {
"UseSize": false,
"Width": 400,
"Height": 200
},
"TitleDto": {
"Text": null,
"VerticalAlignment": "top",
"HorizontalAlignment": "center",
"Subtitle": null,
"TextOverflow": "ellipsis",
"WordWrap": null
},
"TooltipDto": {
"ArgumentFormat": null,
"ArrowLength": 10,
"Border": {
"Color": "#d3d3d3",
"CornerRadius": 0,
"DashStyle": "solid",
"Visible": false,
"Width": 1
},
"Color": "#ffffff",
"Enabled": false,
"Font": {
"Color": "#000000",
"Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif",
"Size": 12,
"Weight": 400
},
"Format": null,
"Location": "center",
"PaddingLeftRight": 18,
"PaddingTopBottom": 15,
"Shared": false
},
"ValueAxisDto": [],
"ZoomAndPanDto": {
"AllowMouseWheel": true,
"AllowTouchGestures": true,
"ArgumentAxis": "none",
"DragToZoom": false,
"PanKey": "shift",
"ValueAxis": "none",
"DragBoxStyle": {
"Color": null,
"Opacity": 0
}
},
"LastModificationTime": null,
"LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00",
"CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000"
},
"Fields": [
{
"EditType": null,
"ListFormCode": "App.Maintenance.WorkOrderNote",
"RoleId": null,
"UserId": null,
"ColumnJoinTableDto": {
"JoinType": null,
"TableName": null,
"JoinFieldName": null,
"BaseTableJoinFieldName": null,
"SelectFieldName": null,
"FieldNameAlias": null,
"JoinCondition2": "AND",
"JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null
},
"FieldName": "Id",
"CaptionName": "App.Listform.ListformField.Id",
"PlaceHolder": null,
"ReadOnly": false,
"Visible": false,
"IsActive": true,
"Width": 0,
"ListOrderNo": 1,
"SourceDbType": 9,
"CultureName": "en",
"DataType": "string",
"SortIndex": 0,
"SortDirection": null,
"AllowSearch": true,
"AllowEditing": true,
"AllowAdding": true,
"ColumnCssClass": null,
"ColumnCssValue": null,
"BandName": null,
"ColumnFilterDto": {
"AllowFiltering": true,
"FilterOperations": null,
"SelectedFilterOperation": null,
"FilterValue": null
},
"ColumnHeaderDto": {
"AllowHeaderFiltering": true,
"AllowSearch": false,
"DataSource": null,
"DataSourceString": ""
},
"ColumnGroupingDto": {
"AllowGrouping": true,
"GroupIndex": null,
"AutoExpandGroup": false
},
"ColumnCustomizationDto": {
"Fixed": false,
"FixedPosition": "left",
"AllowReordering": true
},
"ColumnTotalSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"ColumnGroupSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"LookupDto": {
"DataSourceType": 0,
"ValueExpr": "Key",
"DisplayExpr": "Name",
"CascadeRelationField": null,
"CascadeFilterOperator": "=",
"CascadeParentFields": null,
"CascadeEmptyFields": null,
"LookupQuery": null
},
"ValidationRuleDto": [],
"ColumnStylingDto": [],
"PermissionDto": {
"Deny": false,
"C": "App.Maintenance.WorkOrderNote.Create",
"R": "App.Maintenance.WorkOrderNote",
"U": "App.Maintenance.WorkOrderNote.Update",
"E": true,
"I": true
},
"CanRead": false,
"CanCreate": false,
"CanUpdate": false,
"CanExport": false,
"DefaultValue": null,
"DefaultValueType": 0,
"PivotSettingsDto": {
"IsPivot": true,
"Expanded": false,
"SortOrder": "asc",
"Area": "filter",
"Format": null,
"SummaryType": null,
"GroupInterval": "",
"WordWrapEnabled": false
},
"Alignment": null,
"Format": null,
"EditOrderNo": null,
"EditGroupOrderNo": null,
"EditorType2": "dxTextBox",
"ColSpan": 1,
"EditorOptions": null,
"GridBoxOptions": null,
"TagBoxOptions": null,
"ImageUploadOptions": null,
"EditorScript": null,
"LastModificationTime": null,
"LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00",
"CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000"
},
{
"EditType": null,
"ListFormCode": "App.Maintenance.WorkOrderNote",
"RoleId": null,
"UserId": null,
"ColumnJoinTableDto": {
"JoinType": null,
"TableName": null,
"JoinFieldName": null,
"BaseTableJoinFieldName": null,
"SelectFieldName": null,
"FieldNameAlias": null,
"JoinCondition2": "AND",
"JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null
},
"FieldName": "Notes",
"CaptionName": "App.Listform.ListformField.Notes",
"PlaceHolder": null,
"ReadOnly": false,
"Visible": true,
"IsActive": true,
"Width": 0,
"ListOrderNo": 2,
"SourceDbType": 16,
"CultureName": "en",
"DataType": "string",
"SortIndex": 0,
"SortDirection": null,
"AllowSearch": true,
"AllowEditing": true,
"AllowAdding": true,
"ColumnCssClass": null,
"ColumnCssValue": null,
"BandName": null,
"ColumnFilterDto": {
"AllowFiltering": true,
"FilterOperations": null,
"SelectedFilterOperation": null,
"FilterValue": null
},
"ColumnHeaderDto": {
"AllowHeaderFiltering": true,
"AllowSearch": false,
"DataSource": null,
"DataSourceString": ""
},
"ColumnGroupingDto": {
"AllowGrouping": true,
"GroupIndex": null,
"AutoExpandGroup": false
},
"ColumnCustomizationDto": {
"Fixed": false,
"FixedPosition": "left",
"AllowReordering": true
},
"ColumnTotalSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"ColumnGroupSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"LookupDto": {
"DataSourceType": 0,
"ValueExpr": "Key",
"DisplayExpr": "Name",
"CascadeRelationField": null,
"CascadeFilterOperator": "=",
"CascadeParentFields": null,
"CascadeEmptyFields": null,
"LookupQuery": null
},
"ValidationRuleDto": [],
"ColumnStylingDto": [],
"PermissionDto": {
"Deny": false,
"C": "App.Maintenance.WorkOrderNote.Create",
"R": "App.Maintenance.WorkOrderNote",
"U": "App.Maintenance.WorkOrderNote.Update",
"E": true,
"I": true
},
"CanRead": false,
"CanCreate": false,
"CanUpdate": false,
"CanExport": false,
"DefaultValue": null,
"DefaultValueType": 0,
"PivotSettingsDto": {
"IsPivot": true,
"Expanded": false,
"SortOrder": "asc",
"Area": "filter",
"Format": null,
"SummaryType": null,
"GroupInterval": "",
"WordWrapEnabled": false
},
"Alignment": "left",
"Format": null,
"EditOrderNo": 1,
"EditGroupOrderNo": 1,
"EditorType2": "dxHtmlEditor",
"ColSpan": 2,
"EditorOptions": "{\"height\":320}",
"GridBoxOptions": null,
"TagBoxOptions": null,
"ImageUploadOptions": null,
"EditorScript": null,
"LastModificationTime": null,
"LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00",
"CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000"
}
],
"IsDeletedField": true,
"IsCreatedField": true,
"InsertedRecords": {
"LanguageKeys": [
"App.Maintenance.WorkOrderNote",
"App.Maintenance.WorkOrderNote.Title",
"App.Maintenance.WorkOrderNote.Desc"
],
"PermissionGroupNames": [],
"PermissionNames": [
"App.Maintenance.WorkOrderNote",
"App.Maintenance.WorkOrderNote.Create",
"App.Maintenance.WorkOrderNote.Update",
"App.Maintenance.WorkOrderNote.Delete",
"App.Maintenance.WorkOrderNote.Export",
"App.Maintenance.WorkOrderNote.Import",
"App.Maintenance.WorkOrderNote.Note"
],
"MenuCodes": [],
"DataSourceCodes": [],
"ModuleIds": []
}
}

View file

@ -17,7 +17,7 @@ const LOGO_SRC_PATH = '/img/logo/'
// Dosyanın gerçek boyutu. Tarayıcı yeri önceden ayırsın diye yazılır; yoksa görsel // Dosyanın gerçek boyutu. Tarayıcı yeri önceden ayırsın diye yazılır; yoksa görsel
// yüklendiği anda yerleşim kayar (CLS). Gösterim ölçüsü className'den gelir. // yüklendiği anda yerleşim kayar (CLS). Gösterim ölçüsü className'den gelir.
const LOGO_INTRINSIC_WIDTH = 141 const LOGO_INTRINSIC_WIDTH = 80
const LOGO_INTRINSIC_HEIGHT = 64 const LOGO_INTRINSIC_HEIGHT = 64
const Logo = (props: LogoProps) => { const Logo = (props: LogoProps) => {