Ürünlere Ekipman Tab eklendi

This commit is contained in:
Sedat Öztürk 2026-10-18 02:15:46 +03:00
parent cd41d9dff3
commit 569fc80f12
11 changed files with 2238 additions and 26 deletions

View file

@ -14104,6 +14104,76 @@
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment",
"ParentName": "App.Inventory.Product",
"DisplayName": "App.Inventory.ProductEquipment",
"Order": 12,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment.Create",
"ParentName": "App.Inventory.ProductEquipment",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment.Update",
"ParentName": "App.Inventory.ProductEquipment",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment.Delete",
"ParentName": "App.Inventory.ProductEquipment",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment.Export",
"ParentName": "App.Inventory.ProductEquipment",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment.Import",
"ParentName": "App.Inventory.ProductEquipment",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.ProductEquipment.Note",
"ParentName": "App.Inventory.ProductEquipment",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Product",

File diff suppressed because one or more lines are too long

View file

@ -69234,6 +69234,20 @@
"Key": "App.Mcp.Error.InvalidWizard",
"Value": "Wizard JSON okunamadı. Seed dosyası biçimini ({\"Wizard\": {...}}) ya da düz wizard cevaplarını gönderin."
},
{
"Id": "a5956e4f-7fd3-5897-a037-5673d4a0e3dd",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Mcp.Error.WizardCodeMissing",
"Value": "WizardCode is missing; {0} belongs to screen '{1}'. deploy_wizard replaces the whole file: read it with get_wizard, change it and send the full output back."
},
{
"Id": "3cd07d74-1ad3-5b8a-bc76-bab135677ffd",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Mcp.Error.WizardCodeMissing",
"Value": "WizardCode yazılmamış; {0} dosyası '{1}' ekranına ait. deploy_wizard dosyanın tamamını değiştirir: get_wizard ile okuyun, değiştirin ve çıktının tamamını geri gönderin."
},
{
"Id": "9221bf6b-577c-5d08-a95e-7a22d9fd9c3b",
"CultureName": "en",
@ -89058,6 +89072,90 @@
"Key": "App.Inventory.ProductAccounting.Desc",
"Value": "Ürün Muhasebe — ürünün maliyet ve gelir hesapları.\nNerede: Envanter › Tanımlamalar › Ürünler › Muhasebe sekmesi (kendi menüsü yoktur; ürün kaydının kendisini düzenler).\nAlanlar: gelir hesabı ve gider hesabı kodları (hesap planı tablosu olana kadar serbest metin).\nBoş bırakılan hesaplar muhasebe entegrasyonunda kategori ya da firma varsayılanından alınır."
},
{
"Id": "b3ec8cfa-6715-5e09-8322-1c5e13766e24",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.ProductEquipment",
"Value": "Equipment"
},
{
"Id": "74ed8a58-1d61-5eb1-8cd1-a9633096112f",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.ProductEquipment",
"Value": "Ekipman"
},
{
"Id": "2ce44c40-5b72-5459-b30f-096b8e5551e3",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.ProductEquipment.Title",
"Value": "Equipment"
},
{
"Id": "cd0bd31e-7cfc-596f-9b0f-609f1ab42a1e",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.ProductEquipment.Title",
"Value": "Ekipman"
},
{
"Id": "5e614740-249a-5312-82ca-189ad1a7940d",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.ProductEquipment.Desc",
"Value": "Product Equipment — equipment information of products used as machines, devices or vehicles.\nWhere: Inventory › Definitions › Products › Equipment tab, left of Bills of Materials (no menu of its own; edits the product record itself).\nFields: supplier (from Contacts), supplier reference, model, serial number, effective date (date the equipment was put into use), cost, warranty end date, equipment category (from Maintenance › Equipment Categories) and the department the equipment belongs to (from HR › Departments, shown as branch / department).\nMaintenance work orders and instructions find the equipment through its category; the cost here is the equipment's acquisition value and is separate from the product's inventory cost."
},
{
"Id": "76ed9feb-f13d-580f-8ed1-c779bb904483",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.ProductEquipment.Desc",
"Value": "Ürün Ekipman — makine, cihaz ya da taşıt olarak kullanılan ürünlerin ekipman bilgileri.\nNerede: Envanter › Tanımlamalar › Ürünler › Ekipman sekmesi, Reçeteler'in solunda (kendi menüsü yoktur; ürün kaydının kendisini düzenler).\nAlanlar: tedarikçi (Kontaklar'dan), tedarikçi referansı, model, seri numarası, geçerlilik tarihi (ekipmanın kullanıma girdiği tarih), maliyet, garanti bitiş tarihi, ekipman kategorisi (Bakım › Ekipman Kategorileri'nden) ve ekipmanın ait olduğu departman (İK › Departmanlar'dan, şube / departman olarak).\nBakım iş emirleri ve talimatları ekipmanı kategorisiyle bulur; buradaki maliyet ekipmanın edinim değeridir, ürünün stok maliyetinden ayrıdır."
},
{
"Id": "a7f71b27-8776-57b7-9def-1d28a17bab15",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ValidityDate",
"Value": "Effective Date"
},
{
"Id": "e3771a31-8317-5e89-80b9-0339206cf3d4",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ValidityDate",
"Value": "Geçerlilik Tarihi"
},
{
"Id": "5d5d0652-0201-52aa-83b1-1aa2db6cf8fe",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarrantyEndDate",
"Value": "Warranty End Date"
},
{
"Id": "625a22a1-5be2-51a0-9816-d9e6bf3d3668",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarrantyEndDate",
"Value": "Garanti Bitiş Tarihi"
},
{
"Id": "606205ac-76d5-526d-9430-2d8411250e24",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.EquipmentCategory",
"Value": "Equipment Category"
},
{
"Id": "bef5869a-76ae-51b3-aa4d-88187b556818",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.EquipmentCategory",
"Value": "Ekipman Kategorisi"
},
{
"Id": "1b72cecf-d8da-5d68-b15d-65d27c0219c6",
"CultureName": "en",
@ -89105,14 +89203,14 @@
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Product.Desc",
"Value": "Products — the product card used by sales, purchasing, inventory and manufacturing.\nWhere: Inventory › Definitions › Products; tabs: General Information, Attributes & Variants, Variants, Purchase (supplier prices), Inventory, Accounting, Bills of Materials.\nFields: name, image, Sales / Expenses / Purchase flags (Sales = shown only on sales orders, Purchase = can be purchased), type (goods/service), track inventory and tracking method (serial number / lot / quantity), internal reference, category, unit (from Units of Measure), purchase unit, sales price, cost, active.\nBehaviour: for services inventory tracking is turned off and locked; the tracking method is editable only when tracking is on (default: by quantity); the purchase unit follows the unit if empty. Products with attributes are used through their variants."
"Value": "Products — the product card used by sales, purchasing, inventory and manufacturing.\nWhere: Inventory › Definitions › Products; tabs: General Information, Attributes & Variants, Variants, Purchase (supplier prices), Inventory, Accounting, Equipment, Bills of Materials.\nFields: name, image, Sales / Expenses / Purchase flags (Sales = shown only on sales orders, Purchase = can be purchased), type (goods/service), track inventory and tracking method (serial number / lot / quantity), internal reference, category, unit (from Units of Measure), purchase unit, sales price, cost, active.\nBehaviour: for services inventory tracking is turned off and locked; the tracking method is editable only when tracking is on (default: by quantity); the purchase unit follows the unit if empty. Products with attributes are used through their variants."
},
{
"Id": "4155696a-9ebc-5f57-af3f-ada19b2911be",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Product.Desc",
"Value": "Ürünler — satış, satınalma, stok ve üretimin ortak kullandığı ürün kartı.\nNerede: Envanter › Tanımlamalar › Ürünler; sekmeler: Genel Bilgi, Nitelik & Varyantlar, Varyantlar, Satınalma (tedarikçi fiyatları), Stok, Muhasebe, Reçeteler.\nAlanlar: ad, resim, Satış / Masraflar / Satınalma bayrakları (Satış = yalnız satış siparişlerinde görünür, Satınalma = satın alınabilir), tür (mal/hizmet), envanter takibi ve takip yöntemi (seri no / lot / miktar), iç referans, kategori, birim (Ölçü Birimleri'nden), satınalma birimi, satış fiyatı, maliyet, aktif.\nDavranış: hizmette envanter takibi kapanır ve kilitlenir; takip yöntemi yalnız takip açıkken girilir (varsayılan miktara göre); satınalma birimi boşsa birimi izler. Nitelikli ürünler varyantlarıyla kullanılır."
"Value": "Ürünler — satış, satınalma, stok ve üretimin ortak kullandığı ürün kartı.\nNerede: Envanter › Tanımlamalar › Ürünler; sekmeler: Genel Bilgi, Nitelik & Varyantlar, Varyantlar, Satınalma (tedarikçi fiyatları), Stok, Muhasebe, Ekipman, Reçeteler.\nAlanlar: ad, resim, Satış / Masraflar / Satınalma bayrakları (Satış = yalnız satış siparişlerinde görünür, Satınalma = satın alınabilir), tür (mal/hizmet), envanter takibi ve takip yöntemi (seri no / lot / miktar), iç referans, kategori, birim (Ölçü Birimleri'nden), satınalma birimi, satış fiyatı, maliyet, aktif.\nDavranış: hizmette envanter takibi kapanır ve kilitlenir; takip yöntemi yalnız takip açıkken girilir (varsayılan miktara göre); satınalma birimi boşsa birimi izler. Nitelikli ürünler varyantlarıyla kullanılır."
},
{
"Id": "50653a85-2c91-5e19-ab2f-858d3e941c38",

View file

@ -4023,7 +4023,6 @@ Kontrol edilmeli (koddan tespit edilenler):
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Hr.Attendance.Widget.Absent`, `App.Hr.Attendance.Widget.Late`, `App.Hr.Attendance.Widget.Overtime`, `App.Hr.Attendance.Widget.Incomplete` |
| Komutlar | UpdateBefore: SQL · UpdateAfter: `Hr_S_TimesheetCalculate` · DeleteBefore: SQL · DeleteAfter: `Hr_S_TimesheetCalculate` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |

View file

@ -22,6 +22,13 @@ Onaylanan analiz (talep "Inventory -> Tanımlamalar"):
- Haftalık çalışma saati ayardan (`%WeeklyWorkingTimeLimit%`) okunur, yoksa 40 (onaylı).
- Reçete patlatmada alt reçete: önce bileşenin varyantına özel, yoksa genel; birden fazlaysa en eski oluşturulan.
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`).
- 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`).
- 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.
Onaylanan analiz (talep "Envanter -> Tanımlamalar"):
- Depolar, Konumlar, Operasyon Türleri üç ayrı liste ekranı; tablolar `Inv_T_Warehouse`, `Inv_T_Location`, `Inv_T_OperationType`.
@ -44,7 +51,7 @@ Onaylanan analiz (talep "Envanter -> Tanımlamalar"):
Sekmeler (menüsüz alt formlar):
- Nitelikler › Nitelik Değerleri
- Reçeteler › Bileşenler, Operasyonlar, Diğer (aynı satır), Genel Bakış (menülü, Tree)
- Ürünler › Genel Bilgi, Stok, Muhasebe (aynı satır), Nitelik & Varyantlar, Varyantlar (menülü, salt okunur), Satınalma, Reçeteler (menülü)
- Ürünler › Genel Bilgi, Stok, Muhasebe, Ekipman (aynı satır), Nitelik & Varyantlar, Varyantlar (menülü, salt okunur), Satınalma, Reçeteler (menülü); Ekipman Reçeteler'in solundadır
Konumlar ağaç görünümüyle açılır (`ParentId`); Grid'e geçilebilir.
@ -56,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_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 sekmelerinin alanları |
| `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_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_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) |
@ -83,7 +90,7 @@ Tüm tablolar kiracı + tam audit + soft delete, anahtar `Id uniqueidentifier`.
### 7. Entegrasyonlar
Dış entegrasyon yok. Reçete operasyonları iş merkezi ve operasyonu Üretim modülünden okur; Üretim de ürün ve nitelik değerlerini buradan okur. Ölçü Birimleri, Kontaklar, Para Birimleri, Ülkeler, Şubeler, Departmanlar ve Kullanıcılar yalnız lookup kaynağıdır. Satış ve satınalma sipariş ekranları ürünü `CanBeSold` / `CanBePurchased` ile süzecek; stok hareket belgeleri (Operasyonlar dalı) operasyon türünü, numaratörünü ve konumları bu daldan alır; ürünün Envanter Takibi ve Takip Yöntemi hareketin stoğa ve lota nasıl işleneceğini belirler.
Dış entegrasyon yok. Ürünün Ekipman sekmesi kategoriyi Bakım modülünün Ekipman Kategorileri'nden okur. Reçete operasyonları iş merkezi ve operasyonu Üretim modülünden okur; Üretim de ürün ve nitelik değerlerini buradan okur. Ölçü Birimleri, Kontaklar, Para Birimleri, Ülkeler, Şubeler, Departmanlar ve Kullanıcılar yalnız lookup kaynağıdır. Satış ve satınalma sipariş ekranları ürünü `CanBeSold` / `CanBePurchased` ile süzecek; stok hareket belgeleri (Operasyonlar dalı) operasyon türünü, numaratörünü ve konumları bu daldan alır; ürünün Envanter Takibi ve Takip Yöntemi hareketin stoğa ve lota nasıl işleneceğini belirler.
### 8. Akış örneği
@ -105,14 +112,16 @@ Dış entegrasyon yok. Reçete operasyonları iş merkezi ve operasyonu Üretim
- **Form açılınca Aktif kutusu boş geliyor?** Eski ürün ekranlarında form varsayılanları wizard deploy'unda yazılamadı (bkz. 10). Kayıtta kutu işaretlenmelidir. Depolar, Konumlar ve Operasyon Türleri'nde varsayılan tablodan okunur.
- **Depo seçimi boş geliyor?** Önce şube seçilmelidir; depo listesi şubeye göre süzülür ve yalnız aktif depolar gelir.
- **Aynı depo kodu kaydedilemiyor?** Depo kodu kiracı içinde tekildir; silinen (soft delete) bir deponun kodu da tekrar kullanılamaz.
- **Ekipman sekmesi neden boş görünüyor?** Sekmenin yetkisi (`App.Inventory.ProductEquipment`) role verilmelidir. Var olan veritabanında kolonlar migrate ile eklenmez; tablo tasarımcısıyla eklenmelidir (bkz. 10).
- **Depo ya da konum silinebilir mi?** Konumu veya operasyon türü olan depoyu, alt konumu olan konumu silmeyin; pasife alın.
### 10. Dosyalar ve geri alma
- **Tablolar:** `sql/object/Inv_T_*.sql` (12 tablo; bu talepte `Inv_T_Warehouse`, `Inv_T_Location`, `Inv_T_OperationType`).
- **Wizard'lar:** ProductCategory, Attribute, AttributeValue, ProductVariant, BomOverview, Bom, BomComponent, BomOperation, BomOther, Product, ProductGeneral, ProductAttributeLine, ProductSupplier, ProductStock, ProductAccounting, 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`.
- **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.
- **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 -->
@ -342,7 +351,7 @@ Wizard'lar `Inventory_Stock.json`, `Inventory_StockMove.json`; nesneler `Inv_T_S
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Alt formlar | `App.Inventory.ProductGeneral` (Id → Id), `App.Inventory.ProductAttributeLine` (Id → ProductId), `App.Inventory.ProductSupplier` (Id → ProductId), `App.Inventory.ProductStock` (Id → Id), `App.Inventory.ProductAccounting` (Id → Id), `App.Inventory.Bom` (Id → ProductId) |
| Alt formlar | `App.Inventory.ProductGeneral` (Id → Id), `App.Inventory.ProductAttributeLine` (Id → ProductId), `App.Inventory.ProductSupplier` (Id → ProductId), `App.Inventory.ProductStock` (Id → Id), `App.Inventory.ProductAccounting` (Id → Id), `App.Inventory.ProductEquipment` (Id → Id), `App.Inventory.Bom` (Id → ProductId) |
| Widget'lar | `App.Widget.Total`, `App.Widget.Saleable`, `App.Widget.Purchasable`, `App.Widget.Service` |
| Form varsayılanları | IsActive=true, IsFavorite=false, CanBeSold=true, CanBeExpensed=false, CanBePurchased=false, UomId=Adet, PurchaseUomId=Adet, SalesPrice=0, Cost=0, TrackInventory=true, TrackingMethod=Quantity, ProductType=Wares |
| Veri aynası | `data/App.Inventory.Product.json` |
@ -409,7 +418,6 @@ Wizard'lar `Inventory_Stock.json`, `Inventory_StockMove.json`; nesneler `Inv_T_S
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Alt formlar | `App.Inventory.BomComponent` (Id → BomId), `App.Inventory.BomOperation` (Id → BomId), `App.Inventory.BomOther` (Id → Id), `App.Inventory.BomOverview` (Id → BomId) |
| Widget'lar | `App.Widget.Total`, `App.Widget.VariantBased`, `App.Widget.Active` |
| Form varsayılanları | UomId=Adet, IsActive=true, Quantity=1 |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
@ -754,6 +762,32 @@ Wizard'lar `Inventory_Stock.json`, `Inventory_StockMove.json`; nesneler `Inv_T_S
| `IncomeAccount` | Gelir Hesabı | dxTextBox | | ✓ | |
| `ExpenseAccount` | Gider Hesabı | dxTextBox | | ✓ | |
#### Ekipman — `App.Inventory.ProductEquipment`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Inventory_ProductEquipment.json` |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Inventory.ProductEquipment` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Ürün Ekipman — makine, cihaz ya da taşıt olarak kullanılan ürünlerin ekipman bilgileri. |
| Kaynak | `Inv_T_Product` · 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 |
| --- | --- | --- | --- | --- | --- |
| `EquipmentDepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
| `EquipmentCategoryId` | Ekipman Kategorisi | dxSelectBox | | ✓ | sorgu: Mm_T_EquipmentCategory |
| `EquipmentSupplierId` | Tedarikçi | dxSelectBox | | ✓ | sorgu: Adm_T_Contact |
| `EquipmentValidityDate` | Geçerlilik Tarihi | dxDateBox | | ✓ | |
| `EquipmentSupplierRef` | Tedarikçi Referansı | dxTextBox | | ✓ | |
| `EquipmentCost` | Maliyet | dxNumberBox | | ✓ | |
| `EquipmentModel` | Model | dxTextBox | | ✓ | |
| `EquipmentWarrantyEndDate` | Garanti Bitiş Tarihi | dxDateBox | | ✓ | |
| `EquipmentSerialNo` | Seri Numarası | dxTextBox | | ✓ | |
### Operasyonlar (`App.Inventory.Operations`)
#### Alımlar — `App.Inventory.Receipt`
@ -954,7 +988,7 @@ Wizard'lar `Inventory_Stock.json`, `Inventory_StockMove.json`; nesneler `Inv_T_S
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Inventory.TransferOther` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Ek Bilgi — transfer belgesinin nakliye ve diğer bilgileri (alım, teslimat ve iç transferlerin Ek Bilgi sekmesi). |
| Açıklama | Ek Bilgi — transfer belgesinin nakliye ve diğer bilgileri. Tablo: Inv_T_Transfer (belgenin kendi satırı) · tenant ve şube kapsamlı · Alım, Teslimat ve İç Transfer ekranlarının Ek Bilgi sekmesi olarak açılır; kendi menüsü yoktur. |
| Kaynak | `Inv_T_Transfer` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
@ -980,7 +1014,7 @@ Wizard'lar `Inventory_Stock.json`, `Inventory_StockMove.json`; nesneler `Inv_T_S
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | `App.Inventory.TransferNote` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Not — transfer belgesinin serbest notu (alım, teslimat ve iç transferlerin Not sekmesi). |
| Açıklama | Not — transfer belgesinin serbest metin notu. Tablo: Inv_T_Transfer (belgenin kendi satırı) · tenant ve şube kapsamlı · Alım, Teslimat ve İç Transfer ekranlarının Not sekmesi olarak açılır; kendi menüsü yoktur. |
| Kaynak | `Inv_T_Transfer` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |

View file

@ -17,7 +17,7 @@ Bakım modülünün (KADİFETEKS Odoo Bakım modülünden taşınan) tanım list
- Hizmet Tipleri tablosundaki "Bakım Tipi" başlıklı kolon hizmetin adıdır → `Name` / "Hizmet Tipi"; Bakım Tipleri'ne lookup yoktur (kullanıcı onayı).
- Odoo'daki "Satış Ekip Üyeleri" etiketi hatalıdır; alan "Ekip Üyeleri" olarak açıldı.
- Red Nedenleri, Satınalma'daki `App.Prc.RejectReason` ile birleştirilmedi; Bakım'a ait kodlu ayrı liste.
- Ürün kartına ekipman işareti/kategorisi eklenmesi bu bölümün kapsamında değildir.
- Ü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).
### 3. Menü ve ekranlar
@ -56,7 +56,7 @@ Yetki ağacı: `App.Maintenance` › `App.Maintenance.Definitions` › her ekran
### 7. Entegrasyonlar
Yok. Kullanıcı lookup'ları AbpUsers'tan, şube lookup'ı kullanıcıya atanmış aktif şubelerdir (`Sas_T_Branch` ⋈ `Sas_T_BranchUsers`, kiracıya süzülü; `LookupQueryValues.UserBranchValues`), yeni kayıt ilk şubeyle açılır (`UserDefaultBranchValue`).
Ekipman Kategorileri, Envanter › Ürünler › Ekipman sekmesinin kategori seçeneğidir (`Inv_T_Product.EquipmentCategoryId`); kullanılmış kategori silinmez, pasife alınır. Kullanıcı lookup'ları AbpUsers'tan, şube lookup'ı kullanıcıya atanmış aktif şubelerdir (`Sas_T_Branch` ⋈ `Sas_T_BranchUsers`, kiracıya süzülü; `LookupQueryValues.UserBranchValues`), yeni kayıt ilk şubeyle açılır (`UserDefaultBranchValue`).
### 8. Akış örneği
@ -99,12 +99,12 @@ Yok. Kullanıcı lookup'ları AbpUsers'tan, şube lookup'ı kullanıcıya atanm
| 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 |
| Form varsayılanları | IsActive=true, BranchId= |
| Veri aynası | `data/App.Maintenance.EquipmentCategory.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: kullanıcının şubeleri (Sas_T_Branch ⋈ Sas_T_BranchUsers), varsayılan ilk şube |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `Name` | Kategori Adı | dxTextBox | ✓ | ✓ | |
| `ResponsibleUserId` | Sorumlu | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
@ -124,12 +124,12 @@ Yok. Kullanıcı lookup'ları AbpUsers'tan, şube lookup'ı kullanıcıya atanm
| 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 |
| Form varsayılanları | IsActive=true, BranchId= |
| Veri aynası | `data/App.Maintenance.Team.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: kullanıcının şubeleri (Sas_T_Branch ⋈ Sas_T_BranchUsers), varsayılan ilk şube |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `Name` | Ekip Adı | dxTextBox | ✓ | ✓ | |
| `ManagerUserId` | Ekip Yöneticisi | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `MemberUserIds` | Ekip Üyeleri | dxTagBox | | ✓ | sorgu: AbpUsers |

View file

@ -778,7 +778,6 @@ Talep, raporun yalnızca ay bazında gösterilmesini istiyor. Çeyrek bazlı top
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Today`, `App.Widget.TotalHours` |
| Form varsayılanları | UserId=@USERID, BranchId= |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |

View file

@ -35,6 +35,15 @@ CREATE TABLE IF NOT EXISTS public."Inv_T_Product"
"PurchaseDescription" text NULL,
"IncomeAccount" varchar(64) NULL,
"ExpenseAccount" varchar(64) NULL,
"EquipmentSupplierId" uuid NULL,
"EquipmentSupplierRef" varchar(64) NULL,
"EquipmentModel" varchar(128) NULL,
"EquipmentSerialNo" varchar(64) NULL,
"EquipmentValidityDate" date NULL,
"EquipmentCost" numeric(18, 4) NOT NULL DEFAULT 0,
"EquipmentWarrantyEndDate" date NULL,
"EquipmentCategoryId" uuid NULL,
"EquipmentDepartmentId" uuid NULL,
"IsActive" boolean NOT NULL DEFAULT TRUE,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL,

View file

@ -37,6 +37,15 @@ BEGIN
[PurchaseDescription] nvarchar(MAX) NULL,
[IncomeAccount] nvarchar(64) NULL,
[ExpenseAccount] nvarchar(64) NULL,
[EquipmentSupplierId] uniqueidentifier NULL,
[EquipmentSupplierRef] nvarchar(64) NULL,
[EquipmentModel] nvarchar(128) NULL,
[EquipmentSerialNo] nvarchar(64) NULL,
[EquipmentValidityDate] date NULL,
[EquipmentCost] decimal(18, 4) NOT NULL DEFAULT 0,
[EquipmentWarrantyEndDate] date NULL,
[EquipmentCategoryId] uniqueidentifier NULL,
[EquipmentDepartmentId] uniqueidentifier NULL,
[IsActive] bit NOT NULL DEFAULT 1,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL,

View file

@ -32,8 +32,8 @@
"MenuTr": "Ürünler",
"TitleEn": "Products",
"TitleTr": "Ürünler",
"DescEn": "Products — the product card used by sales, purchasing, inventory and manufacturing.\nWhere: Inventory › Definitions › Products; tabs: General Information, Attributes & Variants, Variants, Purchase (supplier prices), Inventory, Accounting, Bills of Materials.\nFields: name, image, Sales / Expenses / Purchase flags (Sales = shown only on sales orders, Purchase = can be purchased), type (goods/service), track inventory and tracking method (serial number / lot / quantity), internal reference, category, unit (from Units of Measure), purchase unit, sales price, cost, active.\nBehaviour: for services inventory tracking is turned off and locked; the tracking method is editable only when tracking is on (default: by quantity); the purchase unit follows the unit if empty. Products with attributes are used through their variants.",
"DescTr": "Ürünler — satış, satınalma, stok ve üretimin ortak kullandığı ürün kartı.\nNerede: Envanter › Tanımlamalar › Ürünler; sekmeler: Genel Bilgi, Nitelik & Varyantlar, Varyantlar, Satınalma (tedarikçi fiyatları), Stok, Muhasebe, Reçeteler.\nAlanlar: ad, resim, Satış / Masraflar / Satınalma bayrakları (Satış = yalnız satış siparişlerinde görünür, Satınalma = satın alınabilir), tür (mal/hizmet), envanter takibi ve takip yöntemi (seri no / lot / miktar), iç referans, kategori, birim (Ölçü Birimleri'nden), satınalma birimi, satış fiyatı, maliyet, aktif.\nDavranış: hizmette envanter takibi kapanır ve kilitlenir; takip yöntemi yalnız takip açıkken girilir (varsayılan miktara göre); satınalma birimi boşsa birimi izler. Nitelikli ürünler varyantlarıyla kullanılır.",
"DescEn": "Products — the product card used by sales, purchasing, inventory and manufacturing.\nWhere: Inventory › Definitions › Products; tabs: General Information, Attributes & Variants, Variants, Purchase (supplier prices), Inventory, Accounting, Equipment, Bills of Materials.\nFields: name, image, Sales / Expenses / Purchase flags (Sales = shown only on sales orders, Purchase = can be purchased), type (goods/service), track inventory and tracking method (serial number / lot / quantity), internal reference, category, unit (from Units of Measure), purchase unit, sales price, cost, active.\nBehaviour: for services inventory tracking is turned off and locked; the tracking method is editable only when tracking is on (default: by quantity); the purchase unit follows the unit if empty. Products with attributes are used through their variants.",
"DescTr": "Ürünler — satış, satınalma, stok ve üretimin ortak kullandığı ürün kartı.\nNerede: Envanter › Tanımlamalar › Ürünler; sekmeler: Genel Bilgi, Nitelik & Varyantlar, Varyantlar, Satınalma (tedarikçi fiyatları), Stok, Muhasebe, Ekipman, Reçeteler.\nAlanlar: ad, resim, Satış / Masraflar / Satınalma bayrakları (Satış = yalnız satış siparişlerinde görünür, Satınalma = satın alınabilir), tür (mal/hizmet), envanter takibi ve takip yöntemi (seri no / lot / miktar), iç referans, kategori, birim (Ölçü Birimleri'nden), satınalma birimi, satış fiyatı, maliyet, aktif.\nDavranış: hizmette envanter takibi kapanır ve kilitlenir; takip yöntemi yalnız takip açıkken girilir (varsayılan miktara göre); satınalma birimi boşsa birimi izler. Nitelikli ürünler varyantlarıyla kullanılır.",
"Texts": [
{
"Key": "App.Widget.Saleable",
@ -634,6 +634,19 @@
}
]
},
{
"TabType": "Form",
"TabTitle": "App.Inventory.ProductEquipment",
"Code": "App.Inventory.ProductEquipment",
"IsRefresh": false,
"Relation": [
{
"ParentFieldName": "Id",
"DbType": 9,
"ChildFieldName": "Id"
}
]
},
{
"TabType": "List",
"TabTitle": "App.Inventory.Bom",

File diff suppressed because it is too large Load diff