Envanter -> Tanımlamalar kısmına Depolar, Konumlar

This commit is contained in:
Sedat ÖZTÜRK 2026-10-09 11:53:38 +03:00
parent 372c83e52d
commit 2a449a158d
16 changed files with 6650 additions and 12 deletions

View file

@ -16113,6 +16113,216 @@
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prj"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse",
"ParentName": "App.Inventory.Definitions",
"DisplayName": "App.Inventory.Warehouse",
"Order": 7,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse.Create",
"ParentName": "App.Inventory.Warehouse",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse.Update",
"ParentName": "App.Inventory.Warehouse",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse.Delete",
"ParentName": "App.Inventory.Warehouse",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse.Export",
"ParentName": "App.Inventory.Warehouse",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse.Import",
"ParentName": "App.Inventory.Warehouse",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Warehouse.Note",
"ParentName": "App.Inventory.Warehouse",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location",
"ParentName": "App.Inventory.Definitions",
"DisplayName": "App.Inventory.Location",
"Order": 8,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location.Create",
"ParentName": "App.Inventory.Location",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location.Update",
"ParentName": "App.Inventory.Location",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location.Delete",
"ParentName": "App.Inventory.Location",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location.Export",
"ParentName": "App.Inventory.Location",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location.Import",
"ParentName": "App.Inventory.Location",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.Location.Note",
"ParentName": "App.Inventory.Location",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType",
"ParentName": "App.Inventory.Definitions",
"DisplayName": "App.Inventory.OperationType",
"Order": 9,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType.Create",
"ParentName": "App.Inventory.OperationType",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType.Update",
"ParentName": "App.Inventory.OperationType",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType.Delete",
"ParentName": "App.Inventory.OperationType",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType.Export",
"ParentName": "App.Inventory.OperationType",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType.Import",
"ParentName": "App.Inventory.OperationType",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
},
{
"GroupName": "App.Inventory",
"Name": "App.Inventory.OperationType.Note",
"ParentName": "App.Inventory.OperationType",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Inventory"
}
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,36 @@
{
"ListFormCode": "App.Inventory.Warehouse",
"KeyFieldName": "Id",
"GeneratedAt": "2026-10-09T08:29:55.6201049Z",
"Order": 0,
"Rows": [
{
"Name": "KADİFETEKS MENSUCAT SANAYİ A.Ş.",
"Code": "WH",
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"IsActive": true,
"Id": "89f31a2d-9cb5-97b5-740b-3a2431f55623"
},
{
"Name": "Grup Şirketler",
"Code": "GRP",
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"IsActive": true,
"Id": "c27e0d96-e943-fe45-48f9-3a2431f55623"
},
{
"Name": "İkitelli Fabrika",
"Code": "IKT",
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"IsActive": true,
"Id": "1840580a-7984-cb0a-4008-3a2431f55623"
},
{
"Name": "Kuzuluk Fabrika",
"Code": "KZL",
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
"IsActive": true,
"Id": "a729660b-5397-6019-1b2e-3a2431f55623"
}
]
}

View file

@ -35228,6 +35228,20 @@
"Key": "App.Listform.ListformField.Location",
"Value": "Lokasyon"
},
{
"Id": "8a1540c5-7744-52ea-a887-3ad9fffdd2e1",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.LocationCode",
"Value": "Location Code"
},
{
"Id": "05b99f2e-845f-5ca9-a86e-4463972c08d2",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.LocationCode",
"Value": "Lokasyon Kodu"
},
{
"Id": "ad70f409-e4b8-5c30-82a8-b781fab7577a",
"CultureName": "en",
@ -92403,6 +92417,370 @@
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.Actual",
"Value": "Gerçek"
},
{
"Id": "2703e48c-93fa-583f-88d5-8ee4a8ff2ddd",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Warehouse",
"Value": "Warehouses"
},
{
"Id": "f22bc9a0-3a0b-5f56-8c87-4db49d7a99c4",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Warehouse",
"Value": "Depolar"
},
{
"Id": "119743d4-b560-5cdf-8652-f15e6744fb30",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Warehouse.Title",
"Value": "Warehouses"
},
{
"Id": "4671a210-d344-509a-b713-b2a088be9d82",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Warehouse.Title",
"Value": "Depolar"
},
{
"Id": "f7adfb68-039d-55a6-872b-db0da50ae265",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Warehouse.Desc",
"Value": "Warehouses — physical places where stock is kept, each bound to a branch.\nWhere: Inventory › Definitions › Warehouses.\nFields: warehouse name, warehouse code (unique within the tenant), branch, active.\nUsed by: Inventory › Definitions › Locations and Operation Types select a warehouse filtered by branch. Do not delete a warehouse that has locations or operation types; set it passive instead."
},
{
"Id": "09b83cc4-3f49-586b-b0fc-300d06717dc8",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Warehouse.Desc",
"Value": "Depolar — stoğun fiziksel olarak tutulduğu yerler; her depo bir şubeye bağlıdır.\nNerede: Envanter › Tanımlamalar › Depolar.\nAlanlar: depo adı, depo kodu (kiracı içinde tekil), şube, aktif.\nKullanıldığı yer: Envanter › Tanımlamalar › Konumlar ve Operasyon Türleri şubeye göre süzülen depo seçer. Konumu ya da operasyon türü olan depoyu silmeyin; pasife alın."
},
{
"Id": "a6f782df-3267-5e20-a39c-a82da7791d4e",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarehouseName",
"Value": "Warehouse Name"
},
{
"Id": "b1b5adfa-3c0e-5bb8-9eeb-f2448f136bc3",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarehouseName",
"Value": "Depo Adı"
},
{
"Id": "2f52b130-2e08-5f31-aa4a-6aedd7bae2ef",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarehouseCode",
"Value": "Warehouse Code"
},
{
"Id": "434411e1-5956-5a93-bee0-2afa95951827",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarehouseCode",
"Value": "Depo Kodu"
},
{
"Id": "f7944cdd-4dfd-5f8a-a8df-f96c017e3a92",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.BranchName",
"Value": "Branch Name"
},
{
"Id": "f8c5cd51-264d-561b-b28c-511703276db0",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.BranchName",
"Value": "Şube Adı"
},
{
"Id": "f8a954fa-184e-5545-8a49-b96c9c1cc094",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Location",
"Value": "Locations"
},
{
"Id": "7bd8ffed-5175-51ac-b73d-0bdbc4c4d6aa",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Location",
"Value": "Konumlar"
},
{
"Id": "4b04dd67-b523-58f7-8cb6-4eac51cad957",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Location.Title",
"Value": "Locations"
},
{
"Id": "3ea4a569-0fa5-5cad-b2de-223a7e7bc6fe",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Location.Title",
"Value": "Konumlar"
},
{
"Id": "5c6bdc68-6a9f-5d92-aa58-670432742fd9",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.Location.Desc",
"Value": "Locations — nested storage locations defined per branch and warehouse (e.g. GRP › Stock › Main Depot AB07).\nWhere: Inventory › Definitions › Locations; opens as a tree built on the parent location.\nFields: branch, warehouse (filtered by branch), parent location (filtered by warehouse, empty for root), code, name, location type (Internal / External), department, responsible user, active.\nUsed by: Inventory › Definitions › Operation Types (source and destination location). Changing the branch clears warehouse, parent and department."
},
{
"Id": "693dfb4d-09c1-505a-b8d6-5ef4948e0f7d",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.Location.Desc",
"Value": "Konumlar — şube ve depo bazında iç içe tanımlanan stok konumları (ör. GRP › Stock › Ana Depo AB07).\nNerede: Envanter › Tanımlamalar › Konumlar; üst konum üzerinden ağaç olarak açılır.\nAlanlar: şube, depo (şubeye göre süzülür), üst konum (depoya göre süzülür, kökte boş), kod, ad, konum türü (İç / Dış), departman, depo sorumlusu, aktif.\nKullanıldığı yer: Envanter › Tanımlamalar › Operasyon Türleri (kaynak ve hedef konum). Şube değişince depo, üst konum ve departman temizlenir."
},
{
"Id": "9fde1d00-55d5-5981-b7fd-742440c5153e",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarehouseResponsible",
"Value": "Warehouse Responsible"
},
{
"Id": "cea82a89-40e2-529f-8f82-dab76cce8851",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.WarehouseResponsible",
"Value": "Depo Sorumlusu"
},
{
"Id": "8625fb1d-2d6d-5907-881c-a7a78ae182f6",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.LocationType",
"Value": "Location Type"
},
{
"Id": "05cc2993-c5c8-5e59-81bd-a28a4b1e7d65",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.LocationType",
"Value": "Konum Türü"
},
{
"Id": "774a0d3d-2763-545b-93e5-da80dac99988",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.Warehouse",
"Value": "Warehouse"
},
{
"Id": "eab78b58-fdf4-5a07-8152-2be547e3704b",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.Warehouse",
"Value": "Depo"
},
{
"Id": "9616190a-97f9-5273-9b55-e325bee7f743",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ParentLocation",
"Value": "Parent Location"
},
{
"Id": "00ff84f4-fe27-566a-8660-3027133dd8a6",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.ParentLocation",
"Value": "Üst Lokasyon"
},
{
"Id": "959b8e88-4ade-5a73-8ff1-d525de7d46cc",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.OperationType",
"Value": "Operation Types"
},
{
"Id": "13ae2233-0bf4-57e4-9cfe-293bb630550c",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.OperationType",
"Value": "Operasyon Türleri"
},
{
"Id": "143d3055-518c-548b-8027-13b8f939bc58",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.OperationType.Title",
"Value": "Operation Types"
},
{
"Id": "218f9b1d-f969-5095-9319-5dd3748b3543",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.OperationType.Title",
"Value": "Operasyon Türleri"
},
{
"Id": "3b3c1593-a2d4-55de-a3b7-cae43d846300",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Inventory.OperationType.Desc",
"Value": "Operation Types — stock operation types defined per branch and warehouse (e.g. Receipts, Deliveries, Internal Transfers).\nWhere: Inventory › Definitions › Operation Types.\nFields: operation type name, type (Receipt / Delivery / Internal Transfer / Manufacturing / Repair), branch, warehouse (filtered by branch), sequence prefix, barcode, default source and destination locations (filtered by warehouse), active.\nUsed by: stock movement documents pick their type from here. Changing the branch clears warehouse and locations."
},
{
"Id": "4b719197-c5b3-58ae-81ba-f9bec2c2b631",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Inventory.OperationType.Desc",
"Value": "Operasyon Türleri — şube ve depo bazında tanımlanan stok operasyon türleri (ör. Alımlar, Teslimatlar, İç Transferler).\nNerede: Envanter › Tanımlamalar › Operasyon Türleri.\nAlanlar: operasyon türü adı, tür (Alım / Teslimat / İç Transfer / Üretim / Onarım), şube, depo (şubeye göre süzülür), sıra öneki, barkod, varsayılan kaynak ve hedef konum (depoya göre süzülür), aktif.\nKullanıldığı yer: stok hareket belgeleri türünü buradan seçer. Şube değişince depo ve konumlar temizlenir."
},
{
"Id": "5dc6bd0a-b938-54cf-95f1-80ad873bd874",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Receipt",
"Value": "Receipt"
},
{
"Id": "8fe85150-5074-5890-8572-46b62456f024",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Receipt",
"Value": "Alım"
},
{
"Id": "05f7523a-a649-5b7a-a8d9-792d85c96c56",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Delivery",
"Value": "Delivery"
},
{
"Id": "c1b396b1-8ed6-5ff4-9a32-fde2f27f109e",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Delivery",
"Value": "Teslimat"
},
{
"Id": "da59c552-24c5-56b9-bfcf-e535bb4727ba",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.InternalTransfer",
"Value": "Internal Transfer"
},
{
"Id": "4616f6ba-b384-5bb8-b35e-5a753edcb9ab",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.InternalTransfer",
"Value": "İç Transfer"
},
{
"Id": "6522fd12-870d-58de-87df-5f136eda83ea",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Manufacturing",
"Value": "Manufacturing"
},
{
"Id": "6a7875c4-00d4-54ee-8d86-61895fee910d",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Manufacturing",
"Value": "Üretim"
},
{
"Id": "efd07d8e-20ab-56e5-be28-d48af6c36d49",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Repair",
"Value": "Repair"
},
{
"Id": "80054947-d783-582c-90a5-8cae2083730e",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.StaticLookup.Repair",
"Value": "Onarım"
},
{
"Id": "26d5ed92-f768-5b24-9658-3360005a7290",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.OperationTypeName",
"Value": "Operation Type"
},
{
"Id": "fab904f1-6557-5736-8f89-297ff264ed56",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.OperationTypeName",
"Value": "Operasyon Türü"
},
{
"Id": "0c47de7d-2967-5dee-9afb-4fed27c91d22",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.OperationKind",
"Value": "Kind"
},
{
"Id": "c7250e62-b7f5-55b3-9fe5-f1c6dc4e48e8",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.OperationKind",
"Value": "Tür"
},
{
"Id": "a7dc1058-63c0-5cb9-9fef-b500641301e7",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.SequencePrefix",
"Value": "Sequence Prefix"
},
{
"Id": "095805ef-5df8-578d-992e-be1d59398d59",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.SequencePrefix",
"Value": "Sıra Öneki"
},
{
"Id": "0325196f-c464-563d-ad35-735a6d922af0",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.SourceLocation",
"Value": "Source Location"
},
{
"Id": "09f6024f-3162-5128-9cc6-663072923feb",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.SourceLocation",
"Value": "Kaynak Konum"
},
{
"Id": "9d6169e0-93cd-59df-a04b-a6781269e706",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.DestinationLocation",
"Value": "Destination Location"
},
{
"Id": "cb8814d8-afca-5734-89ff-bd74c465bbbf",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.DestinationLocation",
"Value": "Hedef Konum"
}
]
}

View file

@ -2763,6 +2763,39 @@
"IsDisabled": false,
"ElementId": null,
"ModuleId": "Prj"
},
{
"ParentCode": "App.Inventory.Definitions",
"Code": "App.Inventory.Warehouse",
"DisplayName": "App.Inventory.Warehouse",
"Order": 7,
"Url": "/admin/list/App.Inventory.Warehouse",
"Icon": "FcHome",
"RequiredPermissionName": "App.Inventory.Warehouse",
"IsDisabled": false,
"ModuleId": "Inventory"
},
{
"ParentCode": "App.Inventory.Definitions",
"Code": "App.Inventory.Location",
"DisplayName": "App.Inventory.Location",
"Order": 8,
"Url": "/admin/list/App.Inventory.Location",
"Icon": "FcTreeStructure",
"RequiredPermissionName": "App.Inventory.Location",
"IsDisabled": false,
"ModuleId": "Inventory"
},
{
"ParentCode": "App.Inventory.Definitions",
"Code": "App.Inventory.OperationType",
"DisplayName": "App.Inventory.OperationType",
"Order": 9,
"Url": "/admin/list/App.Inventory.OperationType",
"Icon": "FcProcess",
"RequiredPermissionName": "App.Inventory.OperationType",
"IsDisabled": false,
"ModuleId": "Inventory"
}
]
}

View file

@ -7,7 +7,7 @@
### 1. Amaç ve kapsam
Envanterin ana verisi: ürün kartı (satış/masraf/satınalma bayrakları, mal/hizmet, envanter takibi ve yöntemi, nitelik–varyant, tedarikçi fiyatları, stok ve muhasebe bilgileri), ölçü birimine bağlı reçeteler (bileşen + operasyon; ürün ya da varyant bazında) ve çok seviyeli reçete patlatma raporu. İş merkezleri ve operasyonlar Üretim modülündedir ([App.Production.md](App.Production.md)). Kullanıcılar: stok, satınalma ve üretim planlama ekipleri. Stok hareketi, sipariş ve üretim emri bu dalın kapsamı dışındadır.
Envanterin ana verisi: ürün kartı (satış/masraf/satınalma bayrakları, mal/hizmet, envanter takibi ve yöntemi, nitelik–varyant, tedarikçi fiyatları, stok ve muhasebe bilgileri), ölçü birimine bağlı reçeteler (bileşen + operasyon; ürün ya da varyant bazında), çok seviyeli reçete patlatma raporu ve fiziksel stok yapısı: şubeye bağlı depolar, depolarda iç içe konumlar, şube/depo bazında operasyon türleri. İş merkezleri ve operasyonlar Üretim modülündedir ([App.Production.md](App.Production.md)). Kullanıcılar: stok, satınalma ve üretim planlama ekipleri. Stok hareketi, sipariş ve üretim emri bu dalın kapsamı dışındadır.
### 2. Analiz ve kararlar
@ -22,23 +22,35 @@ 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.
Onaylanan analiz (talep "Envanter -> Tanımlamalar"):
- Depolar, Konumlar, Operasyon Türleri üç ayrı liste ekranı; tablolar `Inv_T_Warehouse`, `Inv_T_Location`, `Inv_T_OperationType`.
- Şube platform şube filtresiyle değil kolonla tutulur (`IsBranch = false`, `BranchId` → `Sas_T_Branch`): talep Şube Adı'nı listede görünen, seçilen alan olarak istedi. Görsellerdeki "Firma" sütunu Şube'ye karşılık gelir.
- Konum ve Operasyon Türü'nde şube ayrıca tutulur ("şube ve depo bazında"); depo listesini süzer.
- Konumlar'da Malzeme Türü ve Depolama Kategorisi alınmadı (talepte yok, kaynak tablo yok). Operasyon Türü'nde yalnız Genel sekmesinin çekirdek alanları alındı; Donanım, Barkod Uygulaması, lot/seri, paket, iade türü, kart rengi kapsam dışı.
- Depolar demo verisi: görseldeki 4 depo (WH, GRP, IKT, KZL), ilk aktif şubeye (Branch1) bağlı (onaylı).
Üretimde verilen ek kararlar:
- Query kaynağı türetilmiş tabloya (`FROM (…) AS "Q"`) sarıldığı için özyinelemeli CTE kullanılamaz. Varyant kartezyeni ürün başına en fazla **5 nitelik**, reçete patlatma en fazla **4 bileşen seviyesi** ile sabit derinlikli birleşimlerle kuruldu; derinlik sınırı döngü korumasıdır.
- Genel Bakış'ta kök reçete satırının maliyeti boştur; maliyetler bileşen ve operasyon satırlarındadır.
- Depo kodu tekilliği `UQ_Inv_T_Warehouse_TenantId_Code` kısıtıyla sağlanır (ayrı InsertBefore kontrolü yazılmadı; aynı kod kaydedilirken veritabanı hatası döner).
- `Inv_T_Location`'da `WarehouseId`/`ParentId`/`DepartmentId` için FK yazılmadı: migrate scriptleri dosya adı sırasıyla çalışır ve `Inv_T_Location` `Inv_T_Warehouse`'tan önce sıralanır. Bütünlük lookup'larla korunur; `Inv_T_OperationType` → `Inv_T_Location` FK'leri vardır.
### 3. Menü ve ekranlar
`Envanter (App.Inventory) › Tanımlamalar (App.Inventory.Definitions)` altında sırasıyla: Ürün Kategorileri, Nitelikler, Ürünler, Ürün Varyantları, Reçeteler, Reçeteye Genel Bakış.
`Envanter (App.Inventory) › Tanımlamalar (App.Inventory.Definitions)` altında sırasıyla: Ürün Kategorileri, Nitelikler, Ürünler, Ürün Varyantları, Reçeteler, Reçeteye Genel Bakış, Depolar, Konumlar, Operasyon Türleri.
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ü)
Konumlar ağaç görünümüyle açılır (`ParentId`); Grid'e geçilebilir.
### 4. Veri modeli
Tüm tablolar kiracı + tam audit + soft delete, anahtar `Id uniqueidentifier`. Birim kolonları `nvarchar(64)` → `Adm_T_Uom.Id`; tedarikçi → `Adm_T_Contact`; para birimi → `Sas_H_Currency`; menşe → `Sas_H_Country`; sorumlu → `AbpUsers`.
Tüm tablolar kiracı + tam audit + soft delete, anahtar `Id uniqueidentifier`. Birim kolonları `nvarchar(64)` → `Adm_T_Uom.Id`; tedarikçi → `Adm_T_Contact`; para birimi → `Sas_H_Currency`; menşe → `Sas_H_Country`; sorumlu → `AbpUsers`; şube → `Sas_T_Branch`.
| Tablo | İçerik |
| --- | --- |
@ -48,6 +60,9 @@ Tüm tablolar kiracı + tam audit + soft delete, anahtar `Id uniqueidentifier`.
| `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 |
| `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_Warehouse` | Şube, kod (kiracı içinde tekil, 16), ad, aktif |
| `Inv_T_Location` | Şube, depo, üst konum, kod (32), ad, konum türü (`Internal`/`External`), departman (`Hr_T_Department`), depo sorumlusu, aktif |
| `Inv_T_OperationType` | Şube, depo, ad, tür (`Receipt`/`Delivery`/`InternalTransfer`/`Manufacturing`/`Repair`), sıra öneki, barkod, kaynak ve hedef konum, aktif |
### 5. İş kuralları ve hesaplar
@ -58,14 +73,16 @@ Tüm tablolar kiracı + tam audit + soft delete, anahtar `Id uniqueidentifier`.
- **Reçete bileşeni:** ürün seçilince birim üründen dolar.
- **Reçete operasyonu:** operasyon seçilince iş merkezi ve varsayılan süre dolar.
- **Çoklu değer alanları** (`dxTagBox`) `|` ile ayrılmış metin kolonunda saklanır.
- **Şube › depo › konum zinciri:** Konum ve Operasyon Türü formunda depo seçili şubenin aktif depolarına, üst/kaynak/hedef konum seçili deponun konumlarına, departman seçili şubenin departmanlarına süzülür. Şube değişince depo, konum ve departman; depo değişince konum alanları temizlenir.
- **Varsayılanlar:** yeni konumda tür İç, yeni operasyon türünde tür Alım, tüm yeni tanımlarda Aktif işaretli.
### 6. Yetki ve görünürlük
İzin grubu `App.Inventory`. Her ekranın okuma yetkisi `App.Inventory.Definitions` altında; alt formların yetkisi bağlı oldukları listenin altındadır. Her listede `.Create/.Update/.Delete/.Export/.Import/.Note`. Yetkiler hiçbir role otomatik verilmez. Yeni sekmelerin yetkisi role verilmeden sekmeler boş görünür. Tüm ekranlar kiracı filtrelidir.
İzin grubu `App.Inventory`. Her ekranın okuma yetkisi `App.Inventory.Definitions` altında; alt formların yetkisi bağlı oldukları listenin altındadır. Her listede `.Create/.Update/.Delete/.Export/.Import/.Note`. Yetkiler hiçbir role otomatik verilmez. Yeni sekmelerin yetkisi role verilmeden sekmeler boş görünür. Tüm ekranlar kiracı filtrelidir. Depolar, Konumlar ve Operasyon Türleri platform şube filtresi kullanmaz; kullanıcı yetkisi olan her ekranda kiracının tüm şubelerinin kayıtlarını görür.
### 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 ve Kullanıcılar yalnız lookup kaynağıdır. Satış ve satınalma sipariş ekranları ürünü `CanBeSold` / `CanBePurchased` ile süzecek; bu dalda sipariş ekranı yoktur.
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 operasyon türünü ve konumları bu daldan seçecek; bu dalda sipariş ve hareket ekranı yoktur.
### 8. Akış örneği
@ -75,22 +92,28 @@ Dış entegrasyon yok. Reçete operasyonları iş merkezi ve operasyonu Üretim
4. Ürünler'de "(40X40mm) Mamül Sepeti Üst Geçme Kepi" › Nitelik & Varyantlar sekmesine üç niteliği ekle. Varyantlar sekmesinde 12 kombinasyon görünür.
5. Reçeteler'de kep için 1 Adet reçete aç. Bileşenler'e 20 Adet AUTONİCS PR12-4DN Sensör, Operasyonlar'a Apre ekle.
6. Genel Bakış sekmesi ağacı ve maliyetleri gösterir.
7. Depolar'da "Grup Şirketler" (GRP) deposunu şubeye bağla.
8. Konumlar'da GRP için "Stock" kök konumunu, altına "ALDORA MOBİLYA G/Ç" (kod GRP ALD, departman, sorumlu), onun altına "ANA DEPO AB07" konumunu İç türüyle gir; ağaç üç seviye gösterir.
9. Operasyon Türleri'nde GRP için "Alımlar" (tür Alım, sıra öneki GRP/IN/, hedef konum Stock) tanımla.
### 9. Sık sorulanlar
- **Varyant neden kayboldu?** Nitelik satırından değer ya da nitelik silinirse kombinasyon ve anahtarı değişir. O varyantı kullanan reçete ve tedarikçi satırlarının varyantı yeniden seçilmelidir.
- **Genel Bakış'ta alt seviye görünmüyor?** Bileşenin aktif ve miktarı > 0 bir reçetesi olmalıdır. 4 seviyeden derin yapılar gösterilmez.
- **Kaç nitelik desteklenir?** Ürün başına 5. Fazlası varyant listesine katılmaz.
- **Form açılınca Aktif kutusu boş geliyor?** Form varsayılanları wizard deploy'unda yazılamadı (bkz. 10). Kayıtta kutu işaretlenmelidir; tablo varsayılanları yalnızca alan gönderilmezse uygulanır.
- **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.
- **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` (9 tablo).
- **Wizard'lar:** ProductCategory, Attribute, AttributeValue, ProductVariant, BomOverview, Bom, BomComponent, BomOperation, BomOther, Product, ProductGeneral, ProductAttributeLine, ProductSupplier, ProductStock, ProductAccounting (`.json`).
- **Demo veri aynaları:** `data/App.Inventory.{ProductCategory,Attribute,Product}.json`.
- **Geri alma:** Wizard Manager'da ana ekranlar (Product, Bom, Attribute) önce, alt formları sonra silinir. Tablolar ancak açık onayla `dropTables` ile düşürülür.
- **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`).
- **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.
- **Sorgu bağımlılığı:** Sorgular SQL Server'a özgüdür (`STRING_SPLIT`, `CONCAT_WS`, `STRING_AGG`, `CROSS APPLY`).
- **Açık nokta:** Form varsayılanları (Aktif = true, Birim = Adet, Miktar = 1, Süre = 60, Kur = TRY) düz wizard biçimiyle dosyaya yazılmadı. ListForm düzenleyicisinden ya da `ListForm` bölümlü yeniden deploy ile eklenmelidir.
- **Açık nokta:** Eski ürün ekranlarının form varsayılanları (Aktif = true, Birim = Adet, Miktar = 1, Süre = 60, Kur = TRY) düz wizard biçimiyle dosyaya yazılmadı. ListForm düzenleyicisinden ya da `ListForm` bölümlü yeniden deploy ile eklenmelidir.
<!-- module-doc:auto:begin -->
## Ek — Ekran envanteri (otomatik)
@ -269,6 +292,89 @@ Dış entegrasyon yok. Reçete operasyonları iş merkezi ve operasyonu Üretim
| `BomId` | Reçete | dxTextBox | | | |
| `IsDeleted` | Silindi | dxCheckBox | | | |
#### Depolar — `App.Inventory.Warehouse`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Warehouse.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Inventory.Definitions` › `App.Inventory.Warehouse` (sıra 7) |
| Yetki | `App.Inventory.Warehouse` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Depolar — stoğun fiziksel olarak tutulduğu yerler; her depo bir şubeye bağlıdır. |
| Geliştirme talebi | Envanter -> Tanımlamalar |
| Kaynak | `Inv_T_Warehouse` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | IsActive=true |
| Veri aynası | `data/App.Inventory.Warehouse.json` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `Code` | Depo Kodu | dxTextBox | ✓ | ✓ | |
| `Name` | Depo Adı | dxTextBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Konumlar — `App.Inventory.Location`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Location.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Inventory.Definitions` › `App.Inventory.Location` (sıra 8) |
| Yetki | `App.Inventory.Location` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Konumlar — şube ve depo bazında iç içe tanımlanan stok konumları (ör. GRP › Stock › Ana Depo AB07). |
| Geliştirme talebi | Envanter -> Tanımlamalar |
| Kaynak | `Inv_T_Location` · 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ı | LocationType=Internal, IsActive=true |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) |
| `Code` | Konum Kodu | dxTextBox | | ✓ | |
| `Name` | Konum | dxTextBox | ✓ | ✓ | |
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department (← BranchId) |
| `ResponsibleUserId` | Depo Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `LocationType` | Konum Türü | dxSelectBox | ✓ | ✓ | liste: Internal, External |
| `ParentId` | Üst Lokasyon | dxSelectBox | | ✓ | sorgu: Inv_T_Location (← WarehouseId) |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Operasyon Türleri — `App.Inventory.OperationType`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/OperationType.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Inventory.Definitions` › `App.Inventory.OperationType` (sıra 9) |
| Yetki | `App.Inventory.OperationType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Operasyon Türleri — şube ve depo bazında tanımlanan stok operasyon türleri (ör. Alımlar, Teslimatlar, İç Transferler). |
| Geliştirme talebi | Envanter -> Tanımlamalar |
| Kaynak | `Inv_T_OperationType` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
| Form varsayılanları | OperationKind=Receipt, IsActive=true |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) |
| `Name` | Operasyon Türü | dxTextBox | ✓ | ✓ | |
| `OperationKind` | Tür | dxSelectBox | ✓ | ✓ | liste: Receipt, Delivery, InternalTransfer, Manufacturing, Repair |
| `SequencePrefix` | Sıra Öneki | dxTextBox | | ✓ | |
| `Barcode` | Barkod | dxTextBox | | ✓ | |
| `SourceLocationId` | Kaynak Konum | dxSelectBox | | ✓ | sorgu: Inv_T_Location (← WarehouseId) |
| `DestinationLocationId` | Hedef Konum | dxSelectBox | | ✓ | sorgu: Inv_T_Location (← WarehouseId) |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### Nitelik Değerleri — `App.Inventory.AttributeValue`
| Özellik | Değer |

View file

@ -0,0 +1,34 @@
CREATE TABLE IF NOT EXISTS public."Inv_T_Location"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"BranchId" uuid NOT NULL,
"WarehouseId" uuid NOT NULL,
"ParentId" uuid NULL,
"Code" varchar(32) NULL,
"Name" varchar(128) NOT NULL,
"LocationType" varchar(16) NOT NULL DEFAULT 'Internal',
"DepartmentId" uuid NULL,
"ResponsibleUserId" 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_Inv_T_Location" PRIMARY KEY ("Id")
);
CREATE INDEX IF NOT EXISTS "IX_Inv_T_Location_WarehouseId" ON public."Inv_T_Location" ("WarehouseId");
CREATE INDEX IF NOT EXISTS "IX_Inv_T_Location_ParentId" ON public."Inv_T_Location" ("ParentId");
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_Inv_T_Location_BranchId') THEN
ALTER TABLE public."Inv_T_Location" ADD CONSTRAINT "FK_Inv_T_Location_BranchId" FOREIGN KEY ("BranchId") REFERENCES public."Sas_T_Branch" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION;
END IF;
END
$$;

View file

@ -0,0 +1,48 @@
CREATE TABLE IF NOT EXISTS public."Inv_T_OperationType"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"BranchId" uuid NOT NULL,
"WarehouseId" uuid NOT NULL,
"Name" varchar(128) NOT NULL,
"OperationKind" varchar(32) NOT NULL DEFAULT 'Receipt',
"SequencePrefix" varchar(16) NULL,
"Barcode" varchar(64) NULL,
"SourceLocationId" uuid NULL,
"DestinationLocationId" 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_Inv_T_OperationType" PRIMARY KEY ("Id")
);
CREATE INDEX IF NOT EXISTS "IX_Inv_T_OperationType_WarehouseId" ON public."Inv_T_OperationType" ("WarehouseId");
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_Inv_T_OperationType_BranchId') THEN
ALTER TABLE public."Inv_T_OperationType" ADD CONSTRAINT "FK_Inv_T_OperationType_BranchId" FOREIGN KEY ("BranchId") REFERENCES public."Sas_T_Branch" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION;
END IF;
END
$$;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_Inv_T_OperationType_SourceLocationId') THEN
ALTER TABLE public."Inv_T_OperationType" ADD CONSTRAINT "FK_Inv_T_OperationType_SourceLocationId" FOREIGN KEY ("SourceLocationId") REFERENCES public."Inv_T_Location" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION;
END IF;
END
$$;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_Inv_T_OperationType_DestinationLocationId') THEN
ALTER TABLE public."Inv_T_OperationType" ADD CONSTRAINT "FK_Inv_T_OperationType_DestinationLocationId" FOREIGN KEY ("DestinationLocationId") REFERENCES public."Inv_T_Location" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION;
END IF;
END
$$;

View file

@ -0,0 +1,35 @@
CREATE TABLE IF NOT EXISTS public."Inv_T_Warehouse"
(
"Id" uuid NOT NULL DEFAULT gen_random_uuid(),
"TenantId" uuid NULL,
"BranchId" uuid NOT NULL,
"Code" varchar(16) NOT NULL,
"Name" varchar(128) NOT 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_Inv_T_Warehouse" PRIMARY KEY ("Id")
);
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'UQ_Inv_T_Warehouse_TenantId_Code') THEN
ALTER TABLE public."Inv_T_Warehouse" ADD CONSTRAINT "UQ_Inv_T_Warehouse_TenantId_Code" UNIQUE ("TenantId", "Code");
END IF;
END
$$;
CREATE INDEX IF NOT EXISTS "IX_Inv_T_Warehouse_BranchId" ON public."Inv_T_Warehouse" ("BranchId");
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'FK_Inv_T_Warehouse_BranchId') THEN
ALTER TABLE public."Inv_T_Warehouse" ADD CONSTRAINT "FK_Inv_T_Warehouse_BranchId" FOREIGN KEY ("BranchId") REFERENCES public."Sas_T_Branch" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION;
END IF;
END
$$;

View file

@ -0,0 +1,47 @@
IF OBJECT_ID(N'[dbo].[Inv_T_Location]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Inv_T_Location]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[WarehouseId] uniqueidentifier NOT NULL,
[ParentId] uniqueidentifier NULL,
[Code] nvarchar(32) NULL,
[Name] nvarchar(128) NOT NULL,
[LocationType] nvarchar(16) NOT NULL DEFAULT 'Internal',
[DepartmentId] uniqueidentifier NULL,
[ResponsibleUserId] 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_Inv_T_Location] 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
IF INDEXPROPERTY(OBJECT_ID(N'[dbo].[Inv_T_Location]'), 'IX_Inv_T_Location_WarehouseId', 'IndexID') IS NULL
BEGIN
CREATE INDEX [IX_Inv_T_Location_WarehouseId] ON [dbo].[Inv_T_Location] ([WarehouseId] ASC);
END
GO
IF INDEXPROPERTY(OBJECT_ID(N'[dbo].[Inv_T_Location]'), 'IX_Inv_T_Location_ParentId', 'IndexID') IS NULL
BEGIN
CREATE INDEX [IX_Inv_T_Location_ParentId] ON [dbo].[Inv_T_Location] ([ParentId] ASC);
END
GO
IF OBJECT_ID(N'[dbo].[FK_Inv_T_Location_BranchId]', 'F') IS NULL
BEGIN
ALTER TABLE [dbo].[Inv_T_Location] ADD CONSTRAINT [FK_Inv_T_Location_BranchId] FOREIGN KEY ([BranchId]) REFERENCES [dbo].[Sas_T_Branch] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;
END
GO

View file

@ -0,0 +1,53 @@
IF OBJECT_ID(N'[dbo].[Inv_T_OperationType]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Inv_T_OperationType]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[WarehouseId] uniqueidentifier NOT NULL,
[Name] nvarchar(128) NOT NULL,
[OperationKind] nvarchar(32) NOT NULL DEFAULT 'Receipt',
[SequencePrefix] nvarchar(16) NULL,
[Barcode] nvarchar(64) NULL,
[SourceLocationId] uniqueidentifier NULL,
[DestinationLocationId] 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_Inv_T_OperationType] 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
IF INDEXPROPERTY(OBJECT_ID(N'[dbo].[Inv_T_OperationType]'), 'IX_Inv_T_OperationType_WarehouseId', 'IndexID') IS NULL
BEGIN
CREATE INDEX [IX_Inv_T_OperationType_WarehouseId] ON [dbo].[Inv_T_OperationType] ([WarehouseId] ASC);
END
GO
IF OBJECT_ID(N'[dbo].[FK_Inv_T_OperationType_BranchId]', 'F') IS NULL
BEGIN
ALTER TABLE [dbo].[Inv_T_OperationType] ADD CONSTRAINT [FK_Inv_T_OperationType_BranchId] FOREIGN KEY ([BranchId]) REFERENCES [dbo].[Sas_T_Branch] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;
END
GO
IF OBJECT_ID(N'[dbo].[FK_Inv_T_OperationType_SourceLocationId]', 'F') IS NULL
BEGIN
ALTER TABLE [dbo].[Inv_T_OperationType] ADD CONSTRAINT [FK_Inv_T_OperationType_SourceLocationId] FOREIGN KEY ([SourceLocationId]) REFERENCES [dbo].[Inv_T_Location] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;
END
GO
IF OBJECT_ID(N'[dbo].[FK_Inv_T_OperationType_DestinationLocationId]', 'F') IS NULL
BEGIN
ALTER TABLE [dbo].[Inv_T_OperationType] ADD CONSTRAINT [FK_Inv_T_OperationType_DestinationLocationId] FOREIGN KEY ([DestinationLocationId]) REFERENCES [dbo].[Inv_T_Location] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;
END
GO

View file

@ -0,0 +1,42 @@
IF OBJECT_ID(N'[dbo].[Inv_T_Warehouse]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Inv_T_Warehouse]
(
[Id] uniqueidentifier NOT NULL DEFAULT NEWID(),
[TenantId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[Code] nvarchar(16) NOT NULL,
[Name] nvarchar(128) NOT 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_Inv_T_Warehouse] 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
IF OBJECT_ID(N'[dbo].[UQ_Inv_T_Warehouse_TenantId_Code]', 'UQ') IS NULL
BEGIN
ALTER TABLE [dbo].[Inv_T_Warehouse] ADD CONSTRAINT [UQ_Inv_T_Warehouse_TenantId_Code] UNIQUE NONCLUSTERED ([TenantId] ASC, [Code] ASC);
END
GO
IF INDEXPROPERTY(OBJECT_ID(N'[dbo].[Inv_T_Warehouse]'), 'IX_Inv_T_Warehouse_BranchId', 'IndexID') IS NULL
BEGIN
CREATE INDEX [IX_Inv_T_Warehouse_BranchId] ON [dbo].[Inv_T_Warehouse] ([BranchId] ASC);
END
GO
IF OBJECT_ID(N'[dbo].[FK_Inv_T_Warehouse_BranchId]', 'F') IS NULL
BEGIN
ALTER TABLE [dbo].[Inv_T_Warehouse] ADD CONSTRAINT [FK_Inv_T_Warehouse_BranchId] FOREIGN KEY ([BranchId]) REFERENCES [dbo].[Sas_T_Branch] ([Id]) ON DELETE NO ACTION ON UPDATE NO ACTION;
END
GO

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