{ "ListFormCode": "App.DevRequests", "KeyFieldName": "Id", "GeneratedAt": "2026-10-06T21:01:13.15342Z", "Order": 0, "Rows": [ { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "TenantId": null, "UserName": "system@sozsoft.com", "RequestDate": null, "Status": "Testing", "Title": "Satınalma -> Malzeme Talepleri", "Description": "

Malzeme Talepleri : Satınalma yapılması için departmantların iç ve dış olmak üzere talep ettikleri ürünlerin kaydıdır. Talep eden, Talep Eden Departman, Mal Alımı olduğu zaman konulacak Depo ve Konum bilgisi ve Talep Tarihi bilgilerinden sonra Ürün ve talep edilen miktar bilgisi girilmeli. Ürün tanımında yer alan Birim bilgisi yine sistemle entegre şekilde gelmektedir. Termin Tarihi ürünün ne zaman ihtiyaç olduğu ve Talep Nedeni olarak ne amaçla istediği belirtilmelidir. Yine bu kaydın üst kısmında Taslak, Departman Onayı, Satınalma Onayı, Onaylandı, İşlemde, Tamamlandı gibi durumları da onay mekanizması Workflow gibi bir yöntemle yönetmeliyiz. Talepten sonra hemen talep edenin Departman Onaycısı onaylayacak bir liste üzerinden görmeli ve onaylamalı. Bu kişi Adm_T_Approver entity içerisindeki Onay Yeri : Satınalma ve Departman bazında gösterilecek) Sonrasında kayıt Satınalma departmanına düşmeli ondan sonra bu kayıt Satınalma Sorumlusu kabul etmeli ve Satınalma ile ilgili teklif toplama süreci başlamalı.



Taleplerim, Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Planlama Bekleyenler, Tüm Talepler listesinden oluşmalı.


Red Nedenleri : Bazı Satınalma talepleri hem departman onaycısı hemde satınalma tarafından reddedilebilir. Reddetme sebepleri aşağıadki gibidir. Bu liste Satınalma -> Tanımlamalar menüsüne yerleştirilmelidir.


", "DueDate": "2026-10-06T21:01:00", "Tags": "PO", "Assignees": "system@sozsoft.com", "Priority": "5", "Completed": false, "SortOrder": 0, "Timesheets": "[{\"id\":\"746e8bc8-6246-5c53-2a75-3a24332eaef1\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_RejectReason tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"4d4ea437-e4fb-2542-a53a-3a24332ed605\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_MaterialRequest tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"c0e3a5b2-d85a-4813-343c-3a24332eec78\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_MaterialRequestLine tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"2922d002-6d30-3a07-7a51-3a2433302610\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.Definitions.Sequence ekran\\u0131na sat\\u0131r eklendi\",\"duration\":0.0167},{\"id\":\"980b02af-79bd-aaea-2e64-3a243330a1a5\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_MaterialRequestAfterSave SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"40f8aa4e-18ef-0e78-7f2d-3a2433310e09\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_MaterialRequestAfterSave SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"ffd1898f-6e00-6835-55cc-3a243331dc2c\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Adm_Approver.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"dc78ece5-0050-4749-7af1-3a2433326e07\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Adm_Approver.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"62e616c5-12b2-8803-4114-3a243332d2da\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_RejectReason.json wizard\\u0027\\u0131 deploy edildi (5 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"13a7f703-538b-a85d-9ee5-3a2433334bd2\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_MaterialRequestItem tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"b5e54d3a-6d12-009d-94a4-3a243333accc\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_MaterialRequestAfterSave SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"2c98a5ae-ccd7-8df9-3305-3a2433346916\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_MaterialRequestLine.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"2aa54ca5-5ca4-f039-a14e-3a243336492d\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_MyMaterialRequest.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0333},{\"id\":\"8aa70c93-93b9-0d5d-cf4f-3a2433372a47\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_MaterialRequestDeptApproval.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"ca3b6c15-8aa2-deb4-df27-3a2433380491\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_MaterialRequestPurchaseApproval.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"215c456f-2290-ecaf-be55-3a243338d23f\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_MaterialRequestPlanning.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"fd28ec5d-5402-9b18-d830-3a243339ec92\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_MaterialRequest.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"e504030b-7f9d-3f4c-c6e8-3a24333a8db8\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.Prc mod\\u00FCl dok\\u00FCman\\u0131 kaydedildi\",\"duration\":0.0167},{\"id\":\"276aa28b-7210-616a-a412-3a24333aa710\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"14 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"24b186d3-397e-9eec-a86b-3a24333adcfa\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167}]", "SubTasks": "[{\"id\":\"834d9315-9266-2050-6954-3a24333aa6be\",\"title\":\"create_table: Prc_T_RejectReason\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"e5ffb0e9-9c69-4c53-b1d6-3a24333aa6be\",\"title\":\"create_table: Prc_T_MaterialRequest\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"f11f6c49-bfdb-a5fb-7d2c-3a24333aa6be\",\"title\":\"create_table: Prc_T_MaterialRequestItem\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"e4509378-28d6-80f6-7948-3a24333aa6be\",\"title\":\"save_sql_object: Prc_P_MaterialRequestAfterSave\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"a3053a8c-3eae-cf4d-11ad-3a24333aa6be\",\"title\":\"deploy_wizard: Adm_Approver.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"708f3732-6afd-913e-667d-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_RejectReason.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"81e8f785-94a1-b919-12a9-3a24333aa6be\",\"title\":\"insert_row: App.Definitions.Sequence \\u2014 MaterialRequest\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"c637a664-1206-b91e-f0e5-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_MaterialRequestLine.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"fad3ffa4-b62b-9d35-0796-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_MyMaterialRequest.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"44b18a01-7267-e5e1-9ac4-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_MaterialRequestDeptApproval.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"15c20659-f079-944a-90d0-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_MaterialRequestPurchaseApproval.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"cdc5d85b-3cce-6973-7694-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_MaterialRequestPlanning.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"15c9c83c-f96a-0386-b462-3a24333aa6be\",\"title\":\"deploy_wizard: Prc_MaterialRequest.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"54d0d2ad-15bf-8f0b-81c7-3a24333aa6be\",\"title\":\"save_module_doc: App.Prc.MaterialRequests\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true}]", "Analysis": "

1. Amaç

\n

Departmanların iç/dış ihtiyaç duydukları malzemeleri satınalmaya iletmesi, talebin önce departman onaycısı sonra satınalma tarafından onaylanması ve onaylı talebin satınalma sorumlusuna (teklif toplama/planlama) düşmesi. Kullanıcılar: talep eden personel, departman onaycıları (Adm_T_Approver › Onay Yeri = Satınalma), satınalma ekibi.

\n\n

2. Görsel analizi

\n

[image-1] Talep formu (başlık + satır sekmesi). Üstte durum çubuğu: Taslak › Departman Onayı › Satınalma Onayı › Onaylandı › İşlemde › Kısmi Tamamlandı › Tamamlandı. Başlık: belge no (SRO/00001 → bizde MT-YYYY-00001), öncelik yıldızları (0–3), Talep Eden (kullanıcı), Departman, Genel Açıklama, Depo, Konum, Şirket (kiracı — alan açılmaz), Talep Tarihi. Sekme \"Talep Satırları\": Ürün, Miktar, Birim, Karşılama Şekli, Termin Tarihi, Talep Nedeni, Kendi Depomda, Tüm Depolar, Teslim, Planlanacak Miktar, Satınalma Sorumlusu, satır durumu rozeti. Görünen satır demo veri adayı değildir (müşteri ortamına ait ürün kodu).

\n

[image-2] Onay / Red Bilgileri sekmesi. İki grup: Departman Onayı (Departman Onaycıları — etiket listesi, Onaylayan, Onay Tarihi, Onay Notu) ve Satınalma Onayı (Onaylayan, Onay Tarihi, Onay Notu). Tümü salt okunur, akış doldurur.

\n

[image-3] Red Nedenleri listesi. Basit tanım listesi: Red Nedeni, Aktif, sürükle-sırala tutamacı. Satırlar demo veri: İhtiyaç yok, Miktar uygun değil, Yanlış ürün seçildi, Bütçe uygun değil, Diğer (hepsi aktif).

\n\n

3. Çözüm yolu

\n

Wizard List (ComponentKind 0) + menüsüz alt form (satırlar) + Grid Workflow (§10.7 \"onaylı talep formu\" iskeleti). Aynı tablo üzerinde durum filtresiyle ayrılmış beş liste ekranı. Onaycı kullanıcı listeleri kayıt sonrası SQL prosedürüyle (save_sql_object) Adm_T_Approver'dan doldurulur ve akış düğümü @Kolon onaycısıyla okur (İzin Talepleri'ndeki @ManagerUserNames deseni). Serbest yerleşim gerekmediği için custom component yok.

\n\n

4. Menü yeri

\n

Satınalma › Malzeme Talepleri › {5 liste} ; Satınalma › Tanımlamalar › Red Nedenleri

\n\n\n\n\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.PrcSatınalma / Purchasing—Var
AraApp.Prc.DefinitionsTanımlamalar / Definitions—Var
EkranApp.Prc.RejectReasonRed Nedenleri / Rejection ReasonsFcCancelYeni
AraApp.Prc.MaterialRequestsMalzeme Talepleri / Material RequestsFcListYeni
EkranApp.Prc.MyMaterialRequestTaleplerim / My RequestsFcPortraitModeYeni
EkranApp.Prc.MaterialRequestDeptApprovalDepartman Onayı Bekleyenler / Awaiting Department ApprovalFcApprovalYeni
EkranApp.Prc.MaterialRequestPurchaseApprovalSatınalma Onayı Bekleyenler / Awaiting Purchasing ApprovalFcApprovalYeni
EkranApp.Prc.MaterialRequestPlanningPlanlama Bekleyenler / Awaiting PlanningFcPlannerYeni
EkranApp.Prc.MaterialRequestTüm Talepler / All RequestsFcDocumentYeni
\n

ModuleId Prc, izin grubu App.Prc, route /admin/list/{ListFormCode}. Taleplerim talepte menü listesi olarak açıkça istendiği için persona kuralına rağmen menüde durur (girdi).

\n

Yetki: App.Prc › App.Prc.Definitions (Var) › App.Prc.RejectReason ; App.Prc › App.Prc.MaterialRequests (Yeni) › her liste ; alt form: App.Prc › App.Prc.MaterialRequests › {Liste} › App.Prc.MaterialRequestLine.

\n\n

5. Veri modeli

\n

Prc_T_RejectReason (yeni) — Tanım tablosu: Evet (talep \"Tanımlamalar menüsüne\" diyor, görselde Aktif kolonu). Kiracı + tam audit.

\n\n\n\n
KolonTipZorunluNot
Namenvarchar(128)✓Red nedeni
SortOrderint✓varsayılan 0; görseldeki sıralama tutamacı
IsActivebit✓DEFAULT 1
\n\n

Prc_T_MaterialRequest (yeni) — Tanım tablosu: Hayır (hareket belgesi). Kiracı + tam audit.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
RequestNonvarchar(32)Numaratör (Adm_T_Sequence \"MaterialRequest\", MT-YYYY-00001, yıllık sıfırlama)
Priorityint✓0–3 yıldız, DEFAULT 0
RequesterUserIduniqueidentifier✓AbpUsers; varsayılan @USERID
DepartmentIduniqueidentifier✓Hr_T_Department; talep edenin AbpUsers.DepartmentId'sinden dolar, değiştirilebilir
WarehouseIduniqueidentifier✓Inv_T_Warehouse
LocationIduniqueidentifier✓Inv_T_Location, depoya göre süzülür
RequestDatedatetime✓DEFAULT GETDATE()
Descriptionnvarchar(MAX)Genel Açıklama (dxTextArea)
Statusnvarchar(32)✓Draft / DeptApproval / PurchaseApproval / Approved / InProgress / PartiallyDone / Done / Rejected; DEFAULT 'Draft'
ApprovalStatus, ApproverId, ApprovalDate, ApprovalNotenvarchar(32) / uniqueidentifier / datetime / nvarchar(MAX)WorkflowDto alanları
DeptApproverUserNamesnvarchar(MAX)\"|\" ayrılmış, prosedür doldurur; formda \"Departman Onaycıları\" (salt okunur)
PurchaseApproverUserNamesnvarchar(MAX)\"|\" ayrılmış, prosedür doldurur (gizli)
DeptApprovedBy, DeptApprovalDate, DeptApprovalNoteuniqueidentifier / datetime / nvarchar(MAX)Görsel 2 sol grup
PurchaseApprovedBy, PurchaseApprovalDate, PurchaseApprovalNoteuniqueidentifier / datetime / nvarchar(MAX)Görsel 2 sağ grup
RejectReasonIduniqueidentifierPrc_T_RejectReason (aktifler)
\n\n

Prc_T_MaterialRequestLine (yeni) — Tanım tablosu: Hayır. Kiracı + tam audit; FK MaterialRequestId → Prc_T_MaterialRequest (Cascade).

\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
MaterialRequestIduniqueidentifier✓üst kayıt
ProductIduniqueidentifier✓Inv_T_Product, yalnız IsActive=1 ve CanBePurchased=1; görüntü \"[InternalReference] Name\"
Quantitydecimal(18,4)✓> 0
UomIduniqueidentifier✓Adm_T_Uom; üründen COALESCE(PurchaseUomId, UomId) ile dolar, salt okunur
FulfillmentMethodnvarchar(16)✓Purchase (Satınalma) / Transfer (Depodan Transfer); DEFAULT 'Purchase'
DueDatedate✓Termin; talep tarihinden önce olamaz
RequestReasonnvarchar(256)✓Talep Nedeni
DeliveredQuantitydecimal(18,4)✓Teslim, DEFAULT 0, salt okunur
PlannedQuantitydecimal(18,4)Planlanacak Miktar; satır eklenince Quantity ile dolar, satınalma düzenler
PurchaseResponsibleUserIduniqueidentifierAbpUsers; Satınalma Sorumlusu (planlamada atanır)
LineStatusnvarchar(16)✓Waiting / Planned / Done / Cancelled; DEFAULT 'Waiting'
\n

Var olan tablo değişikliği: Adm_T_Approver.ApprovalArea statik listesine PurchaseDesk (Satınalma Masası / Purchasing Desk) seçeneği eklenir (Onaycılar wizard güncellemesi, kolon değişmez).

\n\n

6. Alt form ağacı

\n\n
SekmeHedef ListFormCodeTabTypeMenüİlişkiEkle / Düzenle / SilYetki yolu
Talep SatırlarıApp.Prc.MaterialRequestLineListMenüsüzId → MaterialRequestId✓ / ✓ / ✓App.Prc › App.Prc.MaterialRequests › {Liste} › App.Prc.MaterialRequestLine
\n

Onay / Red Bilgileri ayrı tablo değildir; ana formun ikinci düzenleme grubu (salt okunur alanlar) olarak çizilir. Alt form beş listenin hepsinde aynı ekrandır; ekleme/silme yalnız Status = Draft iken açıktır (alt formun Insert/Delete BeforeCommand'ında üst kayıt durumu kontrolü).

\n\n

7. Etkilenen kısımlar

\n

Yeni: 3 tablo, 1 prosedür (Prc_P_MaterialRequestResolveApprovers), 1 tanım ekranı, 1 alt form, 5 liste ekranı, ara menü App.Prc.MaterialRequests ve aynı kodlu ara yetki, her ekranın C/R/U/D/E/I/N yetkileri, dil anahtarları (alanlar, durum ve karşılama şekli statik seçenekleri), Adm_T_Sequence'e \"MaterialRequest\" satırı. Değişen: Onaycılar (App.Definitions.Approver) ApprovalArea seçeneği. İş akışı: iki onay düğümü + talep sahibine Inform (e-posta). Ürün, depo, konum, departman ekranlarına dokunulmaz.

\n\n

8. Görünümler ve davranış

\n

Liste filtreleri (aynı tablo, DefaultFilter): Taleplerim = RequesterUserId = @USERID (tüm durumlar; ekle açık); Departman Onayı Bekleyenler = Status = 'DeptApproval' + ApprovalIsFilterUserName; Satınalma Onayı Bekleyenler = Status = 'PurchaseApproval' + ApprovalIsFilterUserName; Planlama Bekleyenler = Status IN ('Approved','InProgress','PartiallyDone'); Tüm Talepler = filtresiz. Onay listelerinde ekleme kapalı.

\n

Görünümler: her listede Grid + Card + Pivot + Chart (açılış grid); Tüm Talepler'de ek olarak Todo (kanban) Status kolonuyla, durum sırası görseldeki çubukla aynı. Alt formda widget yok.

\n

Widget'lar: Tüm Talepler: Toplam · Departman Onayında · Satınalma Onayında · Onaylandı · Reddedildi. Taleplerim: Taleplerim · Onay Bekleyen · Onaylanan · Reddedilen. Red Nedenleri: Toplam · Aktif · Pasif.

\n

İş akışı (WorkflowDto, Taleplerim + iki onay listesi + Tüm Talepler'de aynı grafik): Start → Approval \"Departman Onayı\" (Approver = @DeptApproverUserNames) → onayda Approval \"Satınalma Onayı\" (Approver = @PurchaseApproverUserNames) → onayda Inform (talep sahibi) → End \"Onaylandı\"; her iki ret dalı → Inform → End \"Reddedildi\". ApprovalIsResetWorkflow = true (Taslak'a dönen kayıt düzenlenince akış baştan).

\n

Durum geçişleri: Kayıt Draft açılır; satır girildikten sonra toolbar butonu \"Onaya Gönder\" (CommandColumnDto, yalnız Draft ve en az bir satır varken) Status = DeptApproval yapar ve akışı başlatır. Prosedür (UpdateAfterCommand) akış düğümüne göre Status'u DeptApproval → PurchaseApproval → Approved / Rejected olarak senkronlar ve Dept*/Purchase* onay alanlarını ApproverId/ApprovalDate/ApprovalNote'tan kopyalar. Approved sonrası İşlemde / Kısmi Tamamlandı / Tamamlandı, Planlama Bekleyenler'deki satır butonlarıyla elle verilir; satırların tamamı LineStatus = Done olunca Status = Done, bir kısmı Done ise PartiallyDone (aynı prosedür).

\n

Onaycı çözümü (prosedür): DeptApproverUserNames = Adm_T_Approver'da DepartmentId = talebin departmanı, ApprovalArea = 'Purchase', IsActive = 1 kullanıcıların UserName'leri; PurchaseApproverUserNames = ApprovalArea = 'PurchaseDesk', IsActive = 1 kullanıcılar. Liste boşsa \"Onaya Gönder\" hata mesajıyla durur (boş onaycı akışı kilitler).

\n

Red: Ret notu zorunlu; RejectReasonId onay listelerinde onaycı tarafından düzenlenebilir alan, Rejected durumunda zorunlu (doğrulama prosedürde).

\n

EditorScript: RequestDate açılışta bugün; RequesterUserId açılışta @USERID ve DepartmentId kullanıcının departmanı; WarehouseId değişince LocationId temizlenir ve konum lookup'ı depoya süzülür (cascade); ProductId değişince UomId üründen dolar; Quantity değişince PlannedQuantity boşsa Quantity'ye eşitlenir; DueDate < RequestDate ise uyarı ve engel. Status ≠ Draft iken başlık alanları salt okunur.

\n\n

9. Kararlar

\n\n\n

10. Üretim planı

\n
    \n
  1. create_table: Prc_T_RejectReason
  2. \n
  3. create_table: Prc_T_MaterialRequest
  4. \n
  5. create_table: Prc_T_MaterialRequestLine
  6. \n
  7. save_sql_object: Prc_P_MaterialRequestResolveApprovers
  8. \n
  9. deploy_wizard: Adm_Approver.json (PurchaseDesk seçeneği, güncelleme)
  10. \n
  11. deploy_wizard: Prc_RejectReason.json (seed 5 satır)
  12. \n
  13. insert_row: App.Definitions.Sequence — MaterialRequest
  14. \n
  15. deploy_wizard: Prc_MaterialRequestLine.json
  16. \n
  17. deploy_wizard: Prc_MyMaterialRequest.json
  18. \n
  19. deploy_wizard: Prc_MaterialRequestDeptApproval.json
  20. \n
  21. deploy_wizard: Prc_MaterialRequestPurchaseApproval.json
  22. \n
  23. deploy_wizard: Prc_MaterialRequestPlanning.json
  24. \n
  25. deploy_wizard: Prc_MaterialRequest.json
  26. \n
\n\n

11. Üretime hazır

\n

Şartlı — (onay) etiketli 4 karar: Satınalma onaycısı için PurchaseDesk onay yeri, \"Onaya Gönder\" butonuyla Taslak aşaması, stok miktarı kolonlarının (Kendi Depomda / Tüm Depolar) stok modülüne ertelenmesi, Karşılama Şekli seçenekleri.

MCP

\n

Üretilenler: tablolar Prc_T_RejectReason, Prc_T_MaterialRequest, Prc_T_MaterialRequestItem; prosedür Prc_P_MaterialRequestAfterSave (SQL Server + PostgreSQL); numaratör MaterialRequest (MT-{yyyy}-00001, yıllık); ekranlar App.Prc.RejectReason (5 demo satır), menüsüz alt form App.Prc.MaterialRequestLine, App.Prc.MyMaterialRequest, App.Prc.MaterialRequestDeptApproval, App.Prc.MaterialRequestPurchaseApproval, App.Prc.MaterialRequestPlanning, App.Prc.MaterialRequest; Onaycılar'a PurchaseDesk (Satınalma Masası) onay yeri; menü Satınalma › Malzeme Talepleri (yeni ara menü/yetki) ve Satınalma › Tanımlamalar › Red Nedenleri; modül dokümanı App.Prc › Malzeme Talepleri.

\n

Analizden sapmalar / varsayımlar:

\n\n

DB Migrate bekleyen wizard'lar: Adm_Approver.json, Prc_RejectReason.json, Prc_MaterialRequestLine.json, Prc_MyMaterialRequest.json, Prc_MaterialRequestDeptApproval.json, Prc_MaterialRequestPurchaseApproval.json, Prc_MaterialRequestPlanning.json, Prc_MaterialRequest.json.

" } ] }