diff --git a/README.md b/README.md index 2b6642c9..70e13a26 100644 --- a/README.md +++ b/README.md @@ -1271,7 +1271,7 @@ ekranın kendi ayrıntılı açıklamasını gösterir (`DescTr`/`DescEn`, `lowc | --- | --- | --- | | [App.Administration.md](configs/seeds/docs/modules/App.Administration.md) | Yönetim (`App.Administration`) | Tanımlamalar (Kontaklar: satış ve satınalmanın ortak müşteri/tedarikçi kartı ve sekmeleri, kontak etiketleri) | | [App.Hr.md](configs/seeds/docs/modules/App.Hr.md) | İnsan Kaynakları (`App.Hr`) | Tanımlamalar (dizin + genel tanımlar), Organizasyon ve Yetkinlik, Personel Kaydı (Kimlik › Kullanıcılar › detay), İşe Alım, Çalışma Takvimi ve Vardiyalar, İzin Yönetimi, Puantaj ve Devam Takibi, Sağlık Kartları, Eğitimler, Performans Yönetimi, Disiplin Dosyaları, Araçlar, Ziyaretçiler, Olay Günlüğü, Intranet | -| [App.Prc.md](configs/seeds/docs/modules/App.Prc.md) | Satınalma (`App.Prc`) | Tanımlamalar (ödeme/teslimat koşulları, ödeme/teslim yöntemleri, red nedenleri) · Malzeme Talepleri · Siparişler (sözleşme, tedarikçi bazlı teklif talebi ihalesi + fiyat/termin kıyası, satınalma siparişi) | +| [App.Prc.md](configs/seeds/docs/modules/App.Prc.md) | Satınalma (`App.Prc`) | Tanımlamalar (ödeme/teslimat koşulları, ödeme/teslim yöntemleri, red nedenleri) · Talepler · Siparişler (sözleşme, tedarikçi bazlı teklif talebi ihalesi + fiyat/termin kıyası, satınalma siparişi) | | [App.Inventory.md](configs/seeds/docs/modules/App.Inventory.md) | Envanter (`App.Inventory`) | Tanımlamalar (ürün kategorileri, nitelikler, ürünler ve varyantlar, reçeteler, reçete patlatma) | | [App.Production.md](configs/seeds/docs/modules/App.Production.md) | Üretim (`App.Production`) | Tanımlamalar (iş merkezi etiketleri, iş merkezleri, operasyonlar) | @@ -1484,6 +1484,9 @@ Gövdedeki yer tutucular alıcı bazında çözülür (`NotificationMessageToken (`Platform Bildirim: {tip}`). Kural motorundan gelen bildirimlerde kolon boş kalır, elle gönderimde ekrandan ya da şablondan gelir — yani konu artık gövdeye gömülmez. +**Mail gövdesi:** `NotificationWorker` maili her zaman HTML gönderir. Etiket taşıyan mesaj (teklif talebi tablosu, +HTML şablon) olduğu gibi, etiketsiz düz metin HTML kodlanıp satır sonları `
` yapılarak gider. + ### 13.6. Göndericiler (`Sozsoft.Sender`) | Kanal | Sağlayıcı | diff --git a/api/src/Sozsoft.Platform.Domain/BackgroundWorkers/NotificationWorker.cs b/api/src/Sozsoft.Platform.Domain/BackgroundWorkers/NotificationWorker.cs index a630ab7a..26ec08ec 100644 --- a/api/src/Sozsoft.Platform.Domain/BackgroundWorkers/NotificationWorker.cs +++ b/api/src/Sozsoft.Platform.Domain/BackgroundWorkers/NotificationWorker.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Net; +using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -23,7 +25,7 @@ namespace Sozsoft.Platform.BackgroundWorkers; /// yalnizca basarili gonderimde IsSent isaretler. Okundu bilgisi kullanicinin aksiyonudur, /// gonderim onu belirlemez. Tetikleme zamanlanmis istir (Recurring Jobs, WorkerType = NotificationWorker). /// -public class NotificationWorker : BackgroundWorkerBase +public partial class NotificationWorker : BackgroundWorkerBase { protected IRepository Repository { get; } protected ISozsoftRocketSender ErpRocketSender { get; } @@ -124,11 +126,22 @@ public class NotificationWorker : BackgroundWorkerBase notification.Identifier, new KeyValuePair(senderName ?? senderEmail!, senderEmail!), new { }, - notification.Message, + ToMailHtml(notification.Message), notification.Subject.IsNullOrWhiteSpace() ? $"Platform Bildirim: {notification.NotificationType?.Name}" - : notification.Subject)).Success, + : notification.Subject, + IsBodyHtml: true)).Success, cancellationToken, includeDetails: true); } + + /// + /// Kuyruga hem HTML govde (teklif talebi tablosu, sablon) hem duz metin (kural mesaji) yazilir; mail her zaman + /// HTML gider. Etiket tasimayan mesaj kodlanir ve satir sonlari korunur, yoksa duz metin tek satira duserdi. + /// + private static string ToMailHtml(string message) => + HtmlTagPattern().IsMatch(message) ? message : WebUtility.HtmlEncode(message).ReplaceLineEndings("
"); + + [GeneratedRegex(@"]*)?/?>", RegexOptions.IgnoreCase)] + private static partial Regex HtmlTagPattern(); } diff --git a/configs/seeds/data/Abp.Identity.Permissions.json b/configs/seeds/data/Abp.Identity.Permissions.json index 694beae0..a72e7266 100644 --- a/configs/seeds/data/Abp.Identity.Permissions.json +++ b/configs/seeds/data/Abp.Identity.Permissions.json @@ -16977,9 +16977,9 @@ { "GroupName": "App.Prc", "Name": "App.Prc.PurchaseAgreement", - "ParentName": "App.Prc.Orders", + "ParentName": null, "DisplayName": "App.Prc.PurchaseAgreement", - "Order": 1, + "Order": 4, "IsEnabled": true, "MultiTenancySide": 3, "Modules": "Prc" @@ -17049,7 +17049,7 @@ "Name": "App.Prc.PurchaseRfq", "ParentName": "App.Prc.Orders", "DisplayName": "App.Prc.PurchaseRfq", - "Order": 2, + "Order": 1, "IsEnabled": true, "MultiTenancySide": 3, "Modules": "Prc" @@ -17534,12 +17534,82 @@ "MultiTenancySide": 3, "Modules": "Prc" }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier", + "ParentName": "App.Prc.PurchaseRfq", + "DisplayName": "App.Prc.PurchaseRfqAlternativeSupplier", + "Order": 13, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "ParentName": "App.Prc.PurchaseRfqAlternativeSupplier", + "DisplayName": "App.Platform.Create", + "Order": 1, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "ParentName": "App.Prc.PurchaseRfqAlternativeSupplier", + "DisplayName": "App.Platform.Update", + "Order": 2, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier.Delete", + "ParentName": "App.Prc.PurchaseRfqAlternativeSupplier", + "DisplayName": "App.Platform.Delete", + "Order": 3, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier.Export", + "ParentName": "App.Prc.PurchaseRfqAlternativeSupplier", + "DisplayName": "App.Platform.Export", + "Order": 4, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier.Import", + "ParentName": "App.Prc.PurchaseRfqAlternativeSupplier", + "DisplayName": "App.Platform.Import", + "Order": 5, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, + { + "GroupName": "App.Prc", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier.Note", + "ParentName": "App.Prc.PurchaseRfqAlternativeSupplier", + "DisplayName": "App.Platform.Note", + "Order": 6, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Prc" + }, { "GroupName": "App.Prc", "Name": "App.Prc.PurchaseOrder", "ParentName": "App.Prc.Orders", "DisplayName": "App.Prc.PurchaseOrder", - "Order": 3, + "Order": 2, "IsEnabled": true, "MultiTenancySide": 3, "Modules": "Prc" diff --git a/configs/seeds/data/App.Definitions.Approver.json b/configs/seeds/data/App.Definitions.Approver.json index 40c7fa71..7de0b665 100644 --- a/configs/seeds/data/App.Definitions.Approver.json +++ b/configs/seeds/data/App.Definitions.Approver.json @@ -8,7 +8,7 @@ "Id": "db014b58-ec8b-4a65-b406-078f66323b7c", "DepartmentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f", "ApprovalArea": "Purchase", - "ApproverUserId": "9e2ef88f-7f14-8397-7963-3a243e534333", + "ApprovalUserName": "system@sozsoft.com", "IsActive": true } ] diff --git a/configs/seeds/data/App.DevRequests/4784f377-808b-424b-a7e5-13afd94034a3.json b/configs/seeds/data/App.DevRequests/4784f377-808b-424b-a7e5-13afd94034a3.json index aae8c0a4..24f014eb 100644 --- a/configs/seeds/data/App.DevRequests/4784f377-808b-424b-a7e5-13afd94034a3.json +++ b/configs/seeds/data/App.DevRequests/4784f377-808b-424b-a7e5-13afd94034a3.json @@ -20,7 +20,7 @@ "SortOrder": 0, "Timesheets": "[{\"id\":\"b090c5f3-7e78-e61b-9a1f-3a2439d72a93\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.05},{\"id\":\"6e47873f-cb96-cdf1-a2f0-3a2439fcc685\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_PurchaseAgreement tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"792cbfed-054a-4599-dcea-3a2439fcd49c\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_PurchaseAgreementLine tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"89751be6-dc2c-f596-d83c-3a2439fcf5aa\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_PurchaseOrder tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"e2b18fa5-f434-94b9-f7bd-3a2439fd0699\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_T_PurchaseOrderLine tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"f27b1c6f-6091-cff2-9925-3a2439fd2844\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_V_PurchaseAgreementLine SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"6b57a538-2933-7e3c-e16f-3a2439fd47f2\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_V_PurchaseOrderAlternative SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"44272fab-8d19-8273-1ce6-3a2439fd6235\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_V_MaterialRequestImportable SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"7f1e130d-6366-efdf-e12f-3a2439fd8a75\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_PurchaseOrderRecalc SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"b8dc0103-cd1c-6100-3504-3a2439fdcf44\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_PurchaseOrderImportRequest SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"c963cd09-117a-aca1-8f14-3a2439fdfa15\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_PurchaseRfqFromAgreement SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"dc1cc0ba-682e-be1e-62a3-3a2439fe5213\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_PurchaseOrderSend SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"ae66d8da-94d2-fc81-5e6f-3a2439fe7f6e\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_PurchaseOrderSetStatus SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"628ac417-faea-78ef-d5dc-3a2439fea66f\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_P_PurchaseOrderAfterSave SQL nesnesi kaydedildi\",\"duration\":0.0167},{\"id\":\"ec552145-092b-5d87-c2ca-3a2439ff173b\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseAgreementLine.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"34411293-5062-2d4d-f1ec-3a2439ffc2e0\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseAgreement.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"83ff13cc-8a45-b9f7-16ab-3a243a004a28\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseOrderLine.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"39bbdd49-aa1b-94b4-f74a-3a243a00a3cd\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseOrderQuote.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"31f271a5-8a74-8ff1-41bb-3a243a010904\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseOrderOther.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"e6c0871a-43af-9484-602e-3a243a0170f2\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseOrderAlternative.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"2a002298-b9db-af6c-c8bb-3a243a029d1f\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseRfq.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"bee0726e-b2e1-2a50-adce-3a243a035b30\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Prc_PurchaseOrder.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"fc502ae7-243d-d183-7795-3a243a03ddfe\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.Prc mod\\u00FCl dok\\u00FCman\\u0131 kaydedildi\",\"duration\":0.0167},{\"id\":\"e1906058-b09e-5825-dc3d-3a243a03eb85\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"1 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"7aa93016-4507-a099-510e-3a243a0407e4\",\"date\":\"2026-10-11\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167}]", "SubTasks": "[{\"id\":\"4c741007-3ae1-6b6e-d678-3a243a03eb53\",\"title\":\"Yeniden \\u00FCretim (silinen dosyalar): 4 create_table, 3 g\\u00F6r\\u00FCn\\u00FCm, 6 yordam, 8 deploy_wizard, save_module_doc: App.Prc.Orders\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-11\",\"completed\":true}]", - "Analysis": "

1. Amaç

\n

Satınalma ekibinin onaylanmış malzeme taleplerinden tedarikçilere teklif talebi (RFQ) açması, gelen teklifleri işlemesi, teklifi satınalma siparişine çevirmesi ve tedarikçiyle çerçeve sözleşme (kapsamlı sipariş) yönetmesi. Kullanıcılar satınalma personeli ve alıcılardır.

\n\n

2. Görsel analizi

\n\n\n

3. Çözüm yolu

\n

Wizard List ekranları + menüsüz alt formlar + SQL nesneleri (görünüm, saklı yordam) + Custom Endpoint komut butonları + DynamicReport şablonu + bildirim türü. Teklif talebi ve satınalma siparişi tek belgedir (aynı tablo, Status ile ayrılır); Teklif Talepleri tüm durumları, Satınalma Siparişleri yalnız siparişe dönmüşleri gösterir. Tümü çerçeve içidir.

\n\n

4. Menü yeri

\n

Satınalma › Siparişler › {Sözleşmeler, Teklif Talepleri, Satınalma Siparişleri}

\n\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.PrcSatınalma / Purchasing—Var
AraApp.Prc.OrdersSiparişler / OrdersFcShopYeni
EkranApp.Prc.PurchaseAgreementSözleşmeler / Purchase AgreementsFcRulesYeni
EkranApp.Prc.PurchaseRfqTeklif Talepleri / Requests for QuotationFcDocumentYeni
EkranApp.Prc.PurchaseOrderSatınalma Siparişleri / Purchase OrdersFcPaidYeni
\n

ModuleId Prc, izin grubu App.Prc, route /admin/list/{ListFormCode}. Sözleşmeler sipariş başlığının lookup kaynağı olduğu için üstte durur.

\n

Yetki: App.Prc (Var) › App.Prc.Orders (Yeni) › {PurchaseAgreement, PurchaseRfq, PurchaseOrder}; alt formlar taşındıkları listenin altında.

\n\n

5. Veri modeli

\n

Tüm tablolar kiracı + tam audit + soft delete. Var olan kaynaklar: Adm_T_Contact (tedarikçi, e-posta, Satınalma sekmesi varsayılanları), Inv_T_Product (PurchaseTaxRate, PurchaseDescription, satınalma birimi), Inv_T_ProductSupplier, Adm_T_Uom, Sas_H_Currency, Inv_T_OperationType (Tür = Alım), Prc_T_PaymentTerm, Prc_T_Incoterm, Prj_T_Project, Prc_T_MaterialRequest / Prc_T_MaterialRequestItem, AbpUsers.

\n\n

Prc_T_PurchaseAgreement — Tanım tablosu: Hayır (belge).

\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
AgreementNonvarchar(32)✓Numaratör PurchaseAgreement, BO00001
SupplierIduniqueidentifier✓Adm_T_Contact
BuyerUserIduniqueidentifier✓AbpUsers, varsayılan @USERID
AgreementTypenvarchar(16)✓Blanket (Kapsamlı Sipariş) / Tender (İhale); varsayılan Blanket
CurrencyIdnvarchar(8)✓Sas_H_Currency, varsayılan TRY
StartDate, EndDatedateGeçerlilik
Referencenvarchar(64)
OperationTypeIduniqueidentifierInv_T_OperationType (Alım)
Termsnvarchar(MAX)dxHtmlEditor
Statusnvarchar(16)✓Draft / Confirmed / Closed / Cancelled; varsayılan Draft
\n\n

Prc_T_PurchaseAgreementLine — Tanım tablosu: Hayır. AgreementId (FK, cascade, ✓), ProductId ✓, Description nvarchar(512), Quantity decimal(18,4) ✓, UomId nvarchar ✓, UnitPrice decimal(18,4) ✓. Sipariş Edildi görünümde (Prc_V_PurchaseAgreementLine) Satınalma Siparişi durumundaki kalemlerden (aynı sözleşme + ürün) toplanır.

\n\n

Prc_T_PurchaseOrder (teklif talebi + sipariş) — Tanım tablosu: Hayır.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
OrderNonvarchar(32)✓Numaratör PurchaseOrder, P00001
SupplierIduniqueidentifier✓Adm_T_Contact
SupplierReferencenvarchar(64)
AgreementIduniqueidentifierPrc_T_PurchaseAgreement (aynı tedarikçi, Confirmed)
MaterialRequestIduniqueidentifierAktarılacak malzeme talebi seçimi
CurrencyIdnvarchar(8)✓Tedarikçinin SupplierCurrency'sinden, yoksa TRY
OrderDeadlinedatetimeSipariş Zaman Sınırı
ExpectedArrivaldatetimeBeklenen Geliş
RequireConfirmationbit NOT NULL DEFAULT 0✓Onay İsteyin
OperationTypeIduniqueidentifierTeslim Alacak
ConfirmDatedatetimeOnaylama Tarihi (Siparişi Onayla yazar)
ArrivalDatedatetimeVarış (siparişte elle girilir)
SupplierResponsenvarchar(16)✓Waiting / Quoted / NotQuoted; varsayılan Waiting
QuoteDatedatetime
QuotedByUserIduniqueidentifierTeklifi Veren — AbpUsers
QuoteValidUntildateTeklif Geçerliliği
BuyerUserIduniqueidentifier✓Alıcı; tedarikçinin BuyerUserId'si, yoksa @USERID
SourceDocumentnvarchar(512)Kaynak; kalemlerin talep numaralarından SP yazar
ProjectIduniqueidentifierProje — Prj_T_Project (Diğer Bilgiler)
IncotermId / IncotermLocationuniqueidentifier / nvarchar(128)Tedarikçi varsayılanından
PaymentTermIduniqueidentifierTedarikçi varsayılanından
Termsnvarchar(MAX)Şart ve koşullar
UntaxedAmount, TaxAmount, TotalAmountdecimal(18,2) DEFAULT 0SP hesaplar, salt okunur
Statusnvarchar(16)✓Draft / Sent / Purchase / Cancelled; varsayılan Draft
LastSentDatedatetimeSon e-posta gönderimi
\n\n

Prc_T_PurchaseOrderLine — Tanım tablosu: Hayır. PurchaseOrderId (FK, cascade, ✓), ProductId ✓, Description nvarchar(512), Quantity decimal(18,4) ✓, UomId ✓, UnitPrice decimal(18,4) ✓, TaxRate decimal(5,2) ✓ (ürünün PurchaseTaxRate'i), Amount decimal(18,2) (Quantity × UnitPrice, SP), MaterialRequestItemId uniqueidentifier (Talep).

\n\n

Görünümler / yordamlar: Prc_V_PurchaseOrder (başlık + tedarikçi OTD oranı + geç bayrakları), Prc_V_PurchaseOrderLine (talep no), Prc_V_PurchaseOrderAlternative (Teklifler sekmesi), Prc_V_PurchaseAgreementLine (Sipariş Edildi), Prc_V_MaterialRequestImportable (aktarılabilir talepler); Prc_P_PurchaseOrderRecalc(@Id), Prc_P_PurchaseOrderSetStatus(@Id,@Action), Prc_P_PurchaseOrderSend(@Id), Prc_P_PurchaseOrderImportRequest(@Id), Prc_P_PurchaseAgreementSetStatus(@Id,@Action), Prc_P_PurchaseRfqFromAgreement(@AgreementId).

\n\n

6. Alt form ağacı

\n\n\n\n\n\n\n\n
SekmeHedef ListFormCodeTabTypeMenüİlişkiEkle / Düzenle / SilYetki yolu
Ürünler (Sözleşme)App.Prc.PurchaseAgreementLineListMenüsüzId → AgreementId✓ / ✓ / ✓… › PurchaseAgreement › PurchaseAgreementLine
Ürünler (Teklif & Sipariş)App.Prc.PurchaseOrderLineListMenüsüzId → PurchaseOrderId✓ / ✓ / ✓… › PurchaseRfq › PurchaseOrderLine
Tedarikçi Teklifi (yalnız Teklif)App.Prc.PurchaseOrderQuoteFormMenüsüzId → Id✓ / ✓ / –… › PurchaseRfq › PurchaseOrderQuote
Diğer BilgilerApp.Prc.PurchaseOrderOtherFormMenüsüzId → Id✓ / ✓ / –… › PurchaseRfq › PurchaseOrderOther
TekliflerApp.Prc.PurchaseOrderAlternativeListMenüsüzId → BaseOrderId (görünüm)– / – / –… › PurchaseRfq › PurchaseOrderAlternative
\n

Satınalma Siparişleri aynı alt formları (Tedarikçi Teklifi hariç) taşır. Teklif ve Sözleşme ekranlarında OpenDetailAfterInsert: true.

\n\n

7. Etkilenen kısımlar

\n\n\n

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

\n\n\n

9. Kararlar

\n\n\n

10. Üretim planı

\n
    \n
  1. create_table: Prc_T_PurchaseAgreement
  2. \n
  3. create_table: Prc_T_PurchaseAgreementLine
  4. \n
  5. create_table: Prc_T_PurchaseOrder
  6. \n
  7. create_table: Prc_T_PurchaseOrderLine
  8. \n
  9. save_sql_object: Prc_V_PurchaseAgreementLine
  10. \n
  11. save_sql_object: Prc_V_PurchaseOrderLine
  12. \n
  13. save_sql_object: Prc_V_PurchaseOrder
  14. \n
  15. save_sql_object: Prc_V_PurchaseOrderAlternative
  16. \n
  17. save_sql_object: Prc_V_MaterialRequestImportable
  18. \n
  19. save_sql_object: Prc_P_PurchaseOrderRecalc
  20. \n
  21. save_sql_object: Prc_P_PurchaseOrderSetStatus
  22. \n
  23. save_sql_object: Prc_P_PurchaseOrderSend
  24. \n
  25. save_sql_object: Prc_P_PurchaseOrderImportRequest
  26. \n
  27. save_sql_object: Prc_P_PurchaseAgreementSetStatus
  28. \n
  29. save_sql_object: Prc_P_PurchaseRfqFromAgreement
  30. \n
  31. generate_crud_endpoints / Custom Endpoint: durum, gönderim ve aktarım komutları
  32. \n
  33. insert_row: App.Definitions.Sequence — PurchaseOrder, PurchaseAgreement
  34. \n
  35. save_report_template: Prc_PurchaseOrderPrint
  36. \n
  37. bildirim türü/kuralı: Prc.RfqSent, Prc.PurchaseOrderSent
  38. \n
  39. deploy_wizard: Prc_PurchaseAgreementLine.json
  40. \n
  41. deploy_wizard: Prc_PurchaseAgreement.json
  42. \n
  43. deploy_wizard: Prc_PurchaseOrderLine.json
  44. \n
  45. deploy_wizard: Prc_PurchaseOrderQuote.json
  46. \n
  47. deploy_wizard: Prc_PurchaseOrderOther.json
  48. \n
  49. deploy_wizard: Prc_PurchaseOrderAlternative.json
  50. \n
  51. deploy_wizard: Prc_PurchaseRfq.json
  52. \n
  53. deploy_wizard: Prc_PurchaseOrder.json
  54. \n
  55. save_module_doc: App.Prc.Orders
  56. \n
\n\n

11. Üretime hazır

\n

Evet

MCP

\n

Üretilenler: tablolar Prc_T_PurchaseAgreement, Prc_T_PurchaseAgreementLine, Prc_T_PurchaseOrder, Prc_T_PurchaseOrderLine; görünümler Prc_V_PurchaseAgreementLine, Prc_V_PurchaseOrderAlternative, Prc_V_MaterialRequestImportable; yordamlar Prc_P_PurchaseOrder{AfterSave, Recalc, ImportRequest, SetStatus, Send}, Prc_P_PurchaseRfqFromAgreement; ekranlar Satınalma › Siparişler › Sözleşmeler / Teklif Talepleri / Satınalma Siparişleri ve 5 menüsüz sekme; diziler PurchaseOrder1 (P00001), PurchaseAgreement1 (BO00001); bildirim türleri Prc.RfqSent, Prc.PurchaseOrderSent; modül dokümanı App.Prc.Orders.

\n

Analizden sapmalar (platform kısıtı):

\n\n

Kontrol edilecek: ekran komutları (kalem kayıt/silme, AfterSave çağrıları) T-SQL yazıldı, PostgreSQL'de çalışmaz; Adm_T_Notification kolon adları varsayıldı; AgreementId cascade süzmesi.

\n

DB Migrate bekleyen wizard'lar: Prc_PurchaseAgreementLine, Prc_PurchaseAgreement, Prc_PurchaseOrderLine, Prc_PurchaseOrderQuote, Prc_PurchaseOrderOther, Prc_PurchaseOrderAlternative, Prc_PurchaseRfq, Prc_PurchaseOrder.

MCP

\n

Yeniden üretim (kullanıcı ilk üretimin dosyalarını sildi). Onaylı analiz ve ilk üretimin kararları aynen uygulandı; içerik ilk üretimle aynıdır.

\n

Yeniden yazılanlar: tablolar Prc_T_PurchaseAgreement, Prc_T_PurchaseAgreementLine, Prc_T_PurchaseOrder, Prc_T_PurchaseOrderLine; görünümler Prc_V_PurchaseAgreementLine, Prc_V_PurchaseOrderAlternative, Prc_V_MaterialRequestImportable; yordamlar Prc_P_PurchaseOrder{AfterSave, Recalc, ImportRequest, SetStatus, Send}, Prc_P_PurchaseRfqFromAgreement; 8 wizard; modül dokümanı App.Prc.Orders.

\n

Yeniden yazılmayanlar (veritabanında duruyordu): diziler PurchaseOrder1, PurchaseAgreement1; bildirim türleri Prc.RfqSent, Prc.PurchaseOrderSent.

\n

Sapmalar ve açık konular önceki MCP notundaki gibidir: İşlem alanı (buton yerine), e-postada PDF eki yok, Yazdır şablonu migrate sonrası eklenecek, Sözleşme kalemlerinde Sipariş Edildi kolonu yok, ortak sekme yetkileri Teklif Talepleri altında, demo veri yok; komutlar T-SQL.

\n

DB Migrate bekleyen wizard'lar: Prc_PurchaseAgreementLine, Prc_PurchaseAgreement, Prc_PurchaseOrderLine, Prc_PurchaseOrderQuote, Prc_PurchaseOrderOther, Prc_PurchaseOrderAlternative, Prc_PurchaseRfq, Prc_PurchaseOrder.

" + "Analysis": "

1. Amaç

\n

Satınalma ekibinin onaylanmış malzeme taleplerinden tedarikçilere teklif talebi (RFQ) açması, gelen teklifleri işlemesi, teklifi satınalma siparişine çevirmesi ve tedarikçiyle çerçeve sözleşme (kapsamlı sipariş) yönetmesi. Kullanıcılar satınalma personeli ve alıcılardır.

\n\n

2. Görsel analizi

\n\n\n

3. Çözüm yolu

\n

Wizard List ekranları + menüsüz alt formlar + SQL nesneleri (görünüm, saklı yordam) + Custom Endpoint komut butonları + DynamicReport şablonu + bildirim türü. Teklif talebi ve satınalma siparişi tek belgedir (aynı tablo, Status ile ayrılır); Teklif Talepleri tüm durumları, Satınalma Siparişleri yalnız siparişe dönmüşleri gösterir. Tümü çerçeve içidir.

\n\n

4. Menü yeri

\n

Satınalma › Siparişler › {Sözleşmeler, Teklif Talepleri, Satınalma Siparişleri}

\n\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.PrcSatınalma / Purchasing—Var
AraApp.Prc.OrdersSiparişler / OrdersFcShopYeni
EkranApp.Prc.PurchaseAgreementSözleşmeler / Purchase AgreementsFcRulesYeni
EkranApp.Prc.PurchaseRfqTeklif Talepleri / Requests for QuotationFcDocumentYeni
EkranApp.Prc.PurchaseOrderSatınalma Siparişleri / Purchase OrdersFcPaidYeni
\n

ModuleId Prc, izin grubu App.Prc, route /admin/list/{ListFormCode}. Sözleşmeler sipariş başlığının lookup kaynağı olduğu için üstte durur.

\n

Yetki: App.Prc (Var) › App.Prc.Orders (Yeni) › {PurchaseAgreement, PurchaseRfq, PurchaseOrder}; alt formlar taşındıkları listenin altında.

\n\n

5. Veri modeli

\n

Tüm tablolar kiracı + tam audit + soft delete. Var olan kaynaklar: Adm_T_Contact (tedarikçi, e-posta, Satınalma sekmesi varsayılanları), Inv_T_Product (PurchaseTaxRate, PurchaseDescription, satınalma birimi), Inv_T_ProductSupplier, Adm_T_Uom, Sas_H_Currency, Inv_T_OperationType (Tür = Alım), Prc_T_PaymentTerm, Prc_T_Incoterm, Prj_T_Project, Prc_T_MaterialRequest / Prc_T_MaterialRequestItem, AbpUsers.

\n\n

Prc_T_PurchaseAgreement — Tanım tablosu: Hayır (belge).

\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
AgreementNonvarchar(32)✓Numaratör PurchaseAgreement, BO00001
SupplierIduniqueidentifier✓Adm_T_Contact
BuyerUserIduniqueidentifier✓AbpUsers, varsayılan @USERID
AgreementTypenvarchar(16)✓Blanket (Kapsamlı Sipariş) / Tender (İhale); varsayılan Blanket
CurrencyIdnvarchar(8)✓Sas_H_Currency, varsayılan TRY
StartDate, EndDatedateGeçerlilik
Referencenvarchar(64)
OperationTypeIduniqueidentifierInv_T_OperationType (Alım)
Termsnvarchar(MAX)dxHtmlEditor
Statusnvarchar(16)✓Draft / Confirmed / Closed / Cancelled; varsayılan Draft
\n\n

Prc_T_PurchaseAgreementLine — Tanım tablosu: Hayır. AgreementId (FK, cascade, ✓), ProductId ✓, Description nvarchar(512), Quantity decimal(18,4) ✓, UomId nvarchar ✓, UnitPrice decimal(18,4) ✓. Sipariş Edildi görünümde (Prc_V_PurchaseAgreementLine) Satınalma Siparişi durumundaki kalemlerden (aynı sözleşme + ürün) toplanır.

\n\n

Prc_T_PurchaseOrder (teklif talebi + sipariş) — Tanım tablosu: Hayır.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
OrderNonvarchar(32)✓Numaratör PurchaseOrder, P00001
SupplierIduniqueidentifier✓Adm_T_Contact
SupplierReferencenvarchar(64)
AgreementIduniqueidentifierPrc_T_PurchaseAgreement (aynı tedarikçi, Confirmed)
MaterialRequestIduniqueidentifierAktarılacak malzeme talebi seçimi
CurrencyIdnvarchar(8)✓Tedarikçinin SupplierCurrency'sinden, yoksa TRY
OrderDeadlinedatetimeSipariş Zaman Sınırı
ExpectedArrivaldatetimeBeklenen Geliş
RequireConfirmationbit NOT NULL DEFAULT 0✓Onay İsteyin
OperationTypeIduniqueidentifierTeslim Alacak
ConfirmDatedatetimeOnaylama Tarihi (Siparişi Onayla yazar)
ArrivalDatedatetimeVarış (siparişte elle girilir)
SupplierResponsenvarchar(16)✓Waiting / Quoted / NotQuoted; varsayılan Waiting
QuoteDatedatetime
QuotedByUserIduniqueidentifierTeklifi Veren — AbpUsers
QuoteValidUntildateTeklif Geçerliliği
BuyerUserIduniqueidentifier✓Alıcı; tedarikçinin BuyerUserId'si, yoksa @USERID
SourceDocumentnvarchar(512)Kaynak; kalemlerin talep numaralarından SP yazar
ProjectIduniqueidentifierProje — Prj_T_Project (Diğer Bilgiler)
IncotermId / IncotermLocationuniqueidentifier / nvarchar(128)Tedarikçi varsayılanından
PaymentTermIduniqueidentifierTedarikçi varsayılanından
Termsnvarchar(MAX)Şart ve koşullar
UntaxedAmount, TaxAmount, TotalAmountdecimal(18,2) DEFAULT 0SP hesaplar, salt okunur
Statusnvarchar(16)✓Draft / Sent / Purchase / Cancelled; varsayılan Draft
LastSentDatedatetimeSon e-posta gönderimi
\n\n

Prc_T_PurchaseOrderLine — Tanım tablosu: Hayır. PurchaseOrderId (FK, cascade, ✓), ProductId ✓, Description nvarchar(512), Quantity decimal(18,4) ✓, UomId ✓, UnitPrice decimal(18,4) ✓, TaxRate decimal(5,2) ✓ (ürünün PurchaseTaxRate'i), Amount decimal(18,2) (Quantity × UnitPrice, SP), MaterialRequestItemId uniqueidentifier (Talep).

\n\n

Görünümler / yordamlar: Prc_V_PurchaseOrder (başlık + tedarikçi OTD oranı + geç bayrakları), Prc_V_PurchaseOrderLine (talep no), Prc_V_PurchaseOrderAlternative (Teklifler sekmesi), Prc_V_PurchaseAgreementLine (Sipariş Edildi), Prc_V_MaterialRequestImportable (aktarılabilir talepler); Prc_P_PurchaseOrderRecalc(@Id), Prc_P_PurchaseOrderSetStatus(@Id,@Action), Prc_P_PurchaseOrderSend(@Id), Prc_P_PurchaseOrderImportRequest(@Id), Prc_P_PurchaseAgreementSetStatus(@Id,@Action), Prc_P_PurchaseRfqFromAgreement(@AgreementId).

\n\n

6. Alt form ağacı

\n\n\n\n\n\n\n\n
SekmeHedef ListFormCodeTabTypeMenüİlişkiEkle / Düzenle / SilYetki yolu
Ürünler (Sözleşme)App.Prc.PurchaseAgreementLineListMenüsüzId → AgreementId✓ / ✓ / ✓… › PurchaseAgreement › PurchaseAgreementLine
Ürünler (Teklif & Sipariş)App.Prc.PurchaseOrderLineListMenüsüzId → PurchaseOrderId✓ / ✓ / ✓… › PurchaseRfq › PurchaseOrderLine
Tedarikçi Teklifi (yalnız Teklif)App.Prc.PurchaseOrderQuoteFormMenüsüzId → Id✓ / ✓ / –… › PurchaseRfq › PurchaseOrderQuote
Diğer BilgilerApp.Prc.PurchaseOrderOtherFormMenüsüzId → Id✓ / ✓ / –… › PurchaseRfq › PurchaseOrderOther
TekliflerApp.Prc.PurchaseOrderAlternativeListMenüsüzId → BaseOrderId (görünüm)– / – / –… › PurchaseRfq › PurchaseOrderAlternative
\n

Satınalma Siparişleri aynı alt formları (Tedarikçi Teklifi hariç) taşır. Teklif ve Sözleşme ekranlarında OpenDetailAfterInsert: true.

\n\n

7. Etkilenen kısımlar

\n\n\n

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

\n\n\n

9. Kararlar

\n\n\n

10. Üretim planı

\n
    \n
  1. create_table: Prc_T_PurchaseAgreement
  2. \n
  3. create_table: Prc_T_PurchaseAgreementLine
  4. \n
  5. create_table: Prc_T_PurchaseOrder
  6. \n
  7. create_table: Prc_T_PurchaseOrderLine
  8. \n
  9. save_sql_object: Prc_V_PurchaseAgreementLine
  10. \n
  11. save_sql_object: Prc_V_PurchaseOrderLine
  12. \n
  13. save_sql_object: Prc_V_PurchaseOrder
  14. \n
  15. save_sql_object: Prc_V_PurchaseOrderAlternative
  16. \n
  17. save_sql_object: Prc_V_MaterialRequestImportable
  18. \n
  19. save_sql_object: Prc_P_PurchaseOrderRecalc
  20. \n
  21. save_sql_object: Prc_P_PurchaseOrderSetStatus
  22. \n
  23. save_sql_object: Prc_P_PurchaseOrderSend
  24. \n
  25. save_sql_object: Prc_P_PurchaseOrderImportRequest
  26. \n
  27. save_sql_object: Prc_P_PurchaseAgreementSetStatus
  28. \n
  29. save_sql_object: Prc_P_PurchaseRfqFromAgreement
  30. \n
  31. generate_crud_endpoints / Custom Endpoint: durum, gönderim ve aktarım komutları
  32. \n
  33. insert_row: App.Definitions.Sequence — PurchaseOrder, PurchaseAgreement
  34. \n
  35. save_report_template: Prc_PurchaseOrderPrint
  36. \n
  37. bildirim türü/kuralı: Prc.RfqSent, Prc.PurchaseOrderSent
  38. \n
  39. deploy_wizard: Prc_PurchaseAgreementLine.json
  40. \n
  41. deploy_wizard: Prc_PurchaseAgreement.json
  42. \n
  43. deploy_wizard: Prc_PurchaseOrderLine.json
  44. \n
  45. deploy_wizard: Prc_PurchaseOrderQuote.json
  46. \n
  47. deploy_wizard: Prc_PurchaseOrderOther.json
  48. \n
  49. deploy_wizard: Prc_PurchaseOrderAlternative.json
  50. \n
  51. deploy_wizard: Prc_PurchaseRfq.json
  52. \n
  53. deploy_wizard: Prc_PurchaseOrder.json
  54. \n
  55. save_module_doc: App.Prc.Orders
  56. \n
\n\n

11. Üretime hazır

\n

Evet

MCP

\n

Üretilenler: tablolar Prc_T_PurchaseAgreement, Prc_T_PurchaseAgreementLine, Prc_T_PurchaseOrder, Prc_T_PurchaseOrderLine; görünümler Prc_V_PurchaseAgreementLine, Prc_V_PurchaseOrderAlternative, Prc_V_MaterialRequestImportable; yordamlar Prc_P_PurchaseOrder{AfterSave, Recalc, ImportRequest, SetStatus, Send}, Prc_P_PurchaseRfqFromAgreement; ekranlar Satınalma › Siparişler › Sözleşmeler / Teklif Talepleri / Satınalma Siparişleri ve 5 menüsüz sekme; diziler PurchaseOrder1 (P00001), PurchaseAgreement1 (BO00001); bildirim türleri Prc.RfqSent, Prc.PurchaseOrderSent; modül dokümanı App.Prc.Orders.

\n

Analizden sapmalar (platform kısıtı):

\n\n

Kontrol edilecek: ekran komutları (kalem kayıt/silme, AfterSave çağrıları) T-SQL yazıldı, PostgreSQL'de çalışmaz; Adm_T_Notification kolon adları varsayıldı; AgreementId cascade süzmesi.

\n

DB Migrate bekleyen wizard'lar: Prc_PurchaseAgreementLine, Prc_PurchaseAgreement, Prc_PurchaseOrderLine, Prc_PurchaseOrderQuote, Prc_PurchaseOrderOther, Prc_PurchaseOrderAlternative, Prc_PurchaseRfq, Prc_PurchaseOrder.

MCP

\n

Yeniden üretim (kullanıcı ilk üretimin dosyalarını sildi). Onaylı analiz ve ilk üretimin kararları aynen uygulandı; içerik ilk üretimle aynıdır.

\n

Yeniden yazılanlar: tablolar Prc_T_PurchaseAgreement, Prc_T_PurchaseAgreementLine, Prc_T_PurchaseOrder, Prc_T_PurchaseOrderLine; görünümler Prc_V_PurchaseAgreementLine, Prc_V_PurchaseOrderAlternative, Prc_V_MaterialRequestImportable; yordamlar Prc_P_PurchaseOrder{AfterSave, Recalc, ImportRequest, SetStatus, Send}, Prc_P_PurchaseRfqFromAgreement; 8 wizard; modül dokümanı App.Prc.Orders.

\n

Yeniden yazılmayanlar (veritabanında duruyordu): diziler PurchaseOrder1, PurchaseAgreement1; bildirim türleri Prc.RfqSent, Prc.PurchaseOrderSent.

\n

Sapmalar ve açık konular önceki MCP notundaki gibidir: İşlem alanı (buton yerine), e-postada PDF eki yok, Yazdır şablonu migrate sonrası eklenecek, Sözleşme kalemlerinde Sipariş Edildi kolonu yok, ortak sekme yetkileri Teklif Talepleri altında, demo veri yok; komutlar T-SQL.

\n

DB Migrate bekleyen wizard'lar: Prc_PurchaseAgreementLine, Prc_PurchaseAgreement, Prc_PurchaseOrderLine, Prc_PurchaseOrderQuote, Prc_PurchaseOrderOther, Prc_PurchaseOrderAlternative, Prc_PurchaseRfq, Prc_PurchaseOrder.

" } ] } diff --git a/configs/seeds/data/App.DevRequests/53294e77-a4fb-45e4-a80e-acf07b5d75be.json b/configs/seeds/data/App.DevRequests/53294e77-a4fb-45e4-a80e-acf07b5d75be.json index c1a2749a..0308ab2e 100644 --- a/configs/seeds/data/App.DevRequests/53294e77-a4fb-45e4-a80e-acf07b5d75be.json +++ b/configs/seeds/data/App.DevRequests/53294e77-a4fb-45e4-a80e-acf07b5d75be.json @@ -10,8 +10,8 @@ "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.


", + "Title": "Satınalma -> Talepler", + "Description": "

Talepler : 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", @@ -20,7 +20,7 @@ "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.

" + "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 › Talepler › {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.MaterialRequestsTalepler / 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 › Talepler (yeni ara menü/yetki) ve Satınalma › Tanımlamalar › Red Nedenleri; modül dokümanı App.Prc › Talepler.

\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.

" } ] } diff --git a/configs/seeds/data/App.DevRequests/fc6d0fbb-6b04-4d15-9d27-fec98e5c30fb.json b/configs/seeds/data/App.DevRequests/fc6d0fbb-6b04-4d15-9d27-fec98e5c30fb.json index 3900ae21..7f44ab9c 100644 --- a/configs/seeds/data/App.DevRequests/fc6d0fbb-6b04-4d15-9d27-fec98e5c30fb.json +++ b/configs/seeds/data/App.DevRequests/fc6d0fbb-6b04-4d15-9d27-fec98e5c30fb.json @@ -20,7 +20,7 @@ "SortOrder": 10, "Timesheets": "[{\"id\":\"5eeb942f-071a-75e0-1ad6-3a243219320c\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0167},{\"id\":\"d0e49c7b-da82-481c-85d2-3a24321c8660\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Adm_T_Approver tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"7ff88954-171a-2ee9-ec8f-3a24321d0f63\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Approver.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"48a59c85-5eda-5991-4e53-3a24321db3f3\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.Administration mod\\u00FCl dok\\u00FCman\\u0131 kaydedildi\",\"duration\":0.0167},{\"id\":\"bab3c506-9ad8-d234-5572-3a24321dbcf4\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"2 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"09e17f9b-4670-e7b3-d5d1-3a24321dcee3\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167},{\"id\":\"3279c17a-42fe-0dfd-e46a-3a24321dd838\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.DevRequests ekran\\u0131nda sat\\u0131r g\\u00FCncellendi (Status)\",\"duration\":0.0167}]", "SubTasks": "[{\"id\":\"ef29af4c-7249-7197-d021-3a24321dbcea\",\"title\":\"create_table: Adm_T_Approver\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true},{\"id\":\"b3f03b7c-60cb-97a7-f2f6-3a24321dbcea\",\"title\":\"deploy_wizard: Approver.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-09\",\"completed\":true}]", - "Analysis": "

Amaç

\n

Uygulamadaki tüm onay adımlarının onaycılarını tek listede toplamak: hangi departmanın hangi onay yerinde (Satınalma, Depo …) kimin onaylayacağı. İlk kullanıcısı Satınalma modülüdür (Malzeme Talepleri departman onayı); yöneticiler ve sistem sorumluları tanımlar.

\n\n

Çözüm yolu

\n

Tek Wizard List ekranı (tablo kaynaklı, popup düzenleme). Akışlar onaycıyı bu tablodan kayıt sonrası prosedürle okur ve @Kolon onaycısı olarak kullanır (§4.7); bu ekranın kendisinde iş akışı yoktur. Bu yapı, platform tablosu Hr_T_Department'a kolon eklemeyi gereksiz kılar.

\n\n

Menü yeri

\n

Yönetim › Tanımlamalar › Onaycılar

\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.AdministrationYönetim / Administration—Var
AraApp.Administration.DefinitionsTanımlamalar / Definitions—Var
EkranApp.Definitions.ApproverOnaycılar / ApproversFcApprovalYeni
\n

ModuleId: Adm · İzin grubu: App.Administration · Route: /admin/list/App.Definitions.Approver

\n

Yetki: App.Administration › App.Administration.Definitions (Var) › App.Definitions.Approver (Yeni)

\n\n

Veri modeli

\n

Adm_T_Approver — yeni, tenant + audit + soft delete. Tanım tablosu: Evet (onay akışlarının onaycı kaynağı).

\n\n\n\n\n\n\n
KolonTipZorunluNot
DepartmentIduniqueidentifier✓→ Hr_T_Department; listede \"Şube / Departman\" adı
ApprovalAreanvarchar(32)✓Purchase / Warehouse / HumanResources / Finance (Satınalma / Depo / İnsan Kaynakları / Finans); DEFAULT 'Purchase'
ApproverUserIduniqueidentifier✓→ AbpUsers (aktif)
IsActivebit✓DEFAULT 1
\n

Tekil kısıt: TenantId + DepartmentId + ApprovalArea + ApproverUserId. Aynı departman ve onay yerine birden çok onaycı girilebilir; akış bunları | ile birleştirip herhangi birinin onayını kabul eder.

\n\n

Etkilenen kısımlar

\n\n\n

Görünümler ve davranış

\n\n\n

Kararlar

\n\n\n

Üretim planı

\n
    \n
  1. create_table: Adm_T_Approver
  2. \n
  3. deploy_wizard: Approver.json
  4. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n" + "Analysis": "

Amaç

\n

Uygulamadaki tüm onay adımlarının onaycılarını tek listede toplamak: hangi departmanın hangi onay yerinde (Satınalma, Depo …) kimin onaylayacağı. İlk kullanıcısı Satınalma modülüdür (Talepler departman onayı); yöneticiler ve sistem sorumluları tanımlar.

\n\n

Çözüm yolu

\n

Tek Wizard List ekranı (tablo kaynaklı, popup düzenleme). Akışlar onaycıyı bu tablodan kayıt sonrası prosedürle okur ve @Kolon onaycısı olarak kullanır (§4.7); bu ekranın kendisinde iş akışı yoktur. Bu yapı, platform tablosu Hr_T_Department'a kolon eklemeyi gereksiz kılar.

\n\n

Menü yeri

\n

Yönetim › Tanımlamalar › Onaycılar

\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.AdministrationYönetim / Administration—Var
AraApp.Administration.DefinitionsTanımlamalar / Definitions—Var
EkranApp.Definitions.ApproverOnaycılar / ApproversFcApprovalYeni
\n

ModuleId: Adm · İzin grubu: App.Administration · Route: /admin/list/App.Definitions.Approver

\n

Yetki: App.Administration › App.Administration.Definitions (Var) › App.Definitions.Approver (Yeni)

\n\n

Veri modeli

\n

Adm_T_Approver — yeni, tenant + audit + soft delete. Tanım tablosu: Evet (onay akışlarının onaycı kaynağı).

\n\n\n\n\n\n\n
KolonTipZorunluNot
DepartmentIduniqueidentifier✓→ Hr_T_Department; listede \"Şube / Departman\" adı
ApprovalAreanvarchar(32)✓Purchase / Warehouse / HumanResources / Finance (Satınalma / Depo / İnsan Kaynakları / Finans); DEFAULT 'Purchase'
ApprovalUserNamenvarchar(256)✓→ AbpUsers.UserName (aktif)
IsActivebit✓DEFAULT 1
\n

Tekil kısıt: TenantId + DepartmentId + ApprovalArea + ApprovalUserName. Aynı departman ve onay yerine birden çok onaycı girilebilir; akış bunları | ile birleştirip herhangi birinin onayını kabul eder.

\n\n

Etkilenen kısımlar

\n\n\n

Görünümler ve davranış

\n\n\n

Kararlar

\n\n\n

Üretim planı

\n
    \n
  1. create_table: Adm_T_Approver
  2. \n
  3. deploy_wizard: Approver.json
  4. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n" } ] } diff --git a/configs/seeds/data/App.Languages.LanguageText.json b/configs/seeds/data/App.Languages.LanguageText.json index 66a588c0..16a1c9c3 100644 --- a/configs/seeds/data/App.Languages.LanguageText.json +++ b/configs/seeds/data/App.Languages.LanguageText.json @@ -93004,7 +93004,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Definitions.Approver.Desc", - "Value": "Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste.\nNerede: Yönetim › Tanımlamalar › Onaycılar.\nAlanlar: departman (Şube - Departman olarak gösterilir), onay yeri (Satınalma / Depo / İnsan Kaynakları / Finans), onaylayacak kişi, aktif.\nKullanıldığı yer: onay akışları kaydın departmanı ve onay yerine göre onaycıları buradan okur. Satınalma › Malzeme Talepleri: departman onayı talep edenin departmanındaki Satınalma satırlarını, satınalma onayı burada tanımlanmaz: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle) onaylar. Aynı departman ve onay yerine birden çok onaycı girilebilir; herhangi birinin onayı yeterlidir. Pasif satırlar akışlarda kullanılmaz." + "Value": "Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste.\nNerede: Yönetim › Tanımlamalar › Onaycılar.\nAlanlar: departman (Şube - Departman olarak gösterilir), onay yeri (Satınalma / Depo / İnsan Kaynakları / Finans), onaylayacak kişi, aktif.\nKullanıldığı yer: onay akışları kaydın departmanı ve onay yerine göre onaycıları buradan okur. Satınalma › Talepler: departman onayı talep edenin departmanındaki Satınalma satırlarını, satınalma onayı burada tanımlanmaz: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle) onaylar. Aynı departman ve onay yerine birden çok onaycı girilebilir; herhangi birinin onayı yeterlidir. Pasif satırlar akışlarda kullanılmaz." }, { "Id": "cd7ff644-eefa-516e-8c8c-8b4fa0ec76f8", @@ -93130,7 +93130,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.RejectReason.Desc", - "Value": "Red Nedenleri — satınalma taleplerinin reddedilme sebepleri (ihtiyaç yok, miktar uygun değil, yanlış ürün, bütçe uygun değil, diğer).\nNerede: Satınalma › Tanımlamalar › Red Nedenleri.\nAlanlar: red nedeni, sıra (seçim listesindeki sırası), aktif.\nKullanıldığı yer: Satınalma › Malzeme Talepleri — departman onaycısı ya da satınalma talebi reddederken neden seçer. Yalnız aktif nedenler listelenir; kullanılmış neden silinmez, pasife alınır." + "Value": "Red Nedenleri — satınalma taleplerinin reddedilme sebepleri (ihtiyaç yok, miktar uygun değil, yanlış ürün, bütçe uygun değil, diğer).\nNerede: Satınalma › Tanımlamalar › Red Nedenleri.\nAlanlar: red nedeni, sıra (seçim listesindeki sırası), aktif.\nKullanıldığı yer: Satınalma › Talepler — departman onaycısı ya da satınalma talebi reddederken neden seçer. Yalnız aktif nedenler listelenir; kullanılmış neden silinmez, pasife alınır." }, { "Id": "31115331-7e79-54e9-ae55-a2e682571c43", @@ -93186,7 +93186,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.MaterialRequestLine.Desc", - "Value": "Talep Satırları — malzeme talebinde istenen ürünler.\nNerede: Satınalma › Malzeme Talepleri › Taleplerim, Departman Onayı Bekleyenler ve Satınalma Onayı Bekleyenler › Talep Satırları sekmesi; Tüm Talepler satırları kolon olarak gösterir (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), miktar, birim (ürünün satınalma biriminden gelir, salt okunur), karşılama şekli (Satınalma / Depodan Transfer), termin tarihi, talep nedeni, teslim edilen miktar (salt okunur), planlanacak miktar (boşsa miktar), satınalma sorumlusu, satır durumu (Bekliyor / Planlandı / Tamamlandı / İptal).\nKurallar: satır yalnız talep onaya gönderilmeden eklenip silinebilir. Satır durumları değişince talebin durumu yeniden hesaplanır (İşlemde / Kısmi Tamamlandı / Tamamlandı)." + "Value": "Talep Satırları — malzeme talebinde istenen ürünler.\nNerede: Satınalma › Talepler › Taleplerim, Departman Onayı Bekleyenler ve Satınalma Onayı Bekleyenler › Talep Satırları sekmesi; Tüm Talepler satırları kolon olarak gösterir (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), miktar, birim (ürünün satınalma biriminden gelir, salt okunur), karşılama şekli (Satınalma / Depodan Transfer), termin tarihi, talep nedeni, teslim edilen miktar (salt okunur), planlanacak miktar (boşsa miktar), satınalma sorumlusu, satır durumu (Bekliyor / Planlandı / Tamamlandı / İptal).\nKurallar: satır yalnız talep onaya gönderilmeden eklenip silinebilir. Satır durumları değişince talebin durumu yeniden hesaplanır (İşlemde / Kısmi Tamamlandı / Tamamlandı)." }, { "Id": "d6911bd6-3f4a-582d-8328-e01403808802", @@ -93368,7 +93368,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.MyMaterialRequest.Desc", - "Value": "Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla.\nNerede: Satınalma › Malzeme Talepleri › Taleplerim.\nAlanlar: talep no (MT-YYYY-00001, otomatik), öncelik, talep eden (siz), departman (varsayılan olarak sizin departmanınız), malın konulacağı depo ve konum, talep tarihi, genel açıklama; Talep Satırları sekmesi: ürün, miktar, birim, karşılama şekli, termin tarihi, talep nedeni.\nAkış: satırları girip onaya gönderin — önce departman onaycısı (Onaycılar › departmanınız için Satınalma onay yeri), ardından satınalma (Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle)) onaylar ya da reddeder. Satırlar yalnız onaya göndermeden önce eklenip silinebilir. Onay durumu, onaylayan, tarih ve açıklama (red nedeniyle birlikte) iş akışınca doldurulur; düzenleme formunda değil listede görünür.\nİlişkili: Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Tüm Talepler." + "Value": "Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla.\nNerede: Satınalma › Talepler › Taleplerim.\nAlanlar: talep no (MT-YYYY-00001, otomatik), öncelik, talep eden (siz), departman (varsayılan olarak sizin departmanınız), malın konulacağı depo ve konum, talep tarihi, genel açıklama; Talep Satırları sekmesi: ürün, miktar, birim, karşılama şekli, termin tarihi, talep nedeni.\nAkış: satırları girip onaya gönderin — önce departman onaycısı (Onaycılar › departmanınız için Satınalma onay yeri), ardından satınalma (Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle)) onaylar ya da reddeder. Satırlar yalnız onaya göndermeden önce eklenip silinebilir. Onay durumu, onaylayan, tarih ve açıklama (red nedeniyle birlikte) iş akışınca doldurulur; düzenleme formunda değil listede görünür.\nİlişkili: Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Tüm Talepler." }, { "Id": "ce3d734c-f508-5647-8f8d-2bf6b056c79a", @@ -93522,7 +93522,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.MaterialRequests", - "Value": "Malzeme Talepleri" + "Value": "Talepler" }, { "Id": "cf76b42b-82ed-5838-9fb2-30b0c8caf3e5", @@ -93634,7 +93634,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.MaterialRequestDeptApproval.Desc", - "Value": "Departman Onayı Bekleyenler — departman onaycısının kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Malzeme Talepleri › Departman Onayı Bekleyenler.\nKim: Yönetim › Tanımlamalar › Onaycılar'da talep edenin departmanı için Satınalma onay yerinde tanımlı onaycılar; her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi açıp Talep Satırları sekmesini inceleyin, ardından Onayla (talep satınalma onayına geçer) ya da red nedeni (Satınalma › Tanımlamalar › Red Nedenleri) seçip isteğe bağlı notla Reddet; neden ve not onay açıklamasına yazılır. Burada satır eklenip silinemez.\nİlişkili: Taleplerim, Satınalma Onayı Bekleyenler, Tüm Talepler." + "Value": "Departman Onayı Bekleyenler — departman onaycısının kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Talepler › Departman Onayı Bekleyenler.\nKim: Yönetim › Tanımlamalar › Onaycılar'da talep edenin departmanı için Satınalma onay yerinde tanımlı onaycılar; her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi açıp Talep Satırları sekmesini inceleyin, ardından Onayla (talep satınalma onayına geçer) ya da red nedeni (Satınalma › Tanımlamalar › Red Nedenleri) seçip isteğe bağlı notla Reddet; neden ve not onay açıklamasına yazılır. Burada satır eklenip silinemez.\nİlişkili: Taleplerim, Satınalma Onayı Bekleyenler, Tüm Talepler." }, { "Id": "1c9a636f-fdfa-50bf-b3a4-874deed5dad1", @@ -93676,7 +93676,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.MaterialRequestPurchaseApproval.Desc", - "Value": "Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Malzeme Talepleri › Satınalma Onayı Bekleyenler.\nKim: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle); talebin onaycı listesi talep kaydedilince yenilenir, her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi ve satırlarını inceleyip Onayla (talep Onaylandı olur, talep edene bilgi gider) ya da red nedeni seçip isteğe bağlı notla Reddet; ikisi de onay açıklamasına yazılır.\nİlişkili: Departman Onayı Bekleyenler, Tüm Talepler." + "Value": "Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Talepler › Satınalma Onayı Bekleyenler.\nKim: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle); talebin onaycı listesi talep kaydedilince yenilenir, her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi ve satırlarını inceleyip Onayla (talep Onaylandı olur, talep edene bilgi gider) ya da red nedeni seçip isteğe bağlı notla Reddet; ikisi de onay açıklamasına yazılır.\nİlişkili: Departman Onayı Bekleyenler, Tüm Talepler." }, { "Id": "04e8c193-a841-520d-b338-0d4a73ca066b", @@ -93718,7 +93718,7 @@ "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.MaterialRequest.Desc", - "Value": "Tüm Talepler — kurumun bütün malzeme talepleri, tüm durumlarıyla, kalem kalem; satınalma yönetiminin listesi.\nNerede: Satınalma › Malzeme Talepleri › Tüm Talepler.\nAlanlar: her satır bir talep kalemidir — talep başlığı (talep no, öncelik, talep eden, departman, depo ve konum, talep tarihi, genel açıklama, onay durumu / onaylayan / tarih / açıklama) ile kalemin bilgileri (ürün, miktar, birim, karşılama yöntemi, termin, talep nedeni, teslim edilen miktar, satınalma sorumlusu, satır durumu) yan yanadır. Kalemi olmayan talep, kalem kolonları boş tek satır olarak görünür.\nAkış: talep Taleplerim ekranında açılır, Departman Onayı Bekleyenler › Satınalma Onayı Bekleyenler ekranlarında onaylanır; bu liste ekleme ve silme yapmaz; başlık alanları ve o iş akışının yazdığı onay durumu salt okunurdur, satırı düzenlemek yalnız kalemin satınalma sorumlusunu ve satır durumunu değiştirir. Kartlar kalemi değil talebi sayar.\nİlişkili: Taleplerim, Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Satınalma › Tanımlamalar › Red Nedenleri." + "Value": "Tüm Talepler — kurumun bütün malzeme talepleri, tüm durumlarıyla, kalem kalem; satınalma yönetiminin listesi.\nNerede: Satınalma › Talepler › Tüm Talepler.\nAlanlar: her satır bir talep kalemidir — talep başlığı (talep no, öncelik, talep eden, departman, depo ve konum, talep tarihi, genel açıklama, onay durumu / onaylayan / tarih / açıklama) ile kalemin bilgileri (ürün, miktar, birim, karşılama yöntemi, termin, talep nedeni, teslim edilen miktar, satınalma sorumlusu, satır durumu) yan yanadır. Kalemi olmayan talep, kalem kolonları boş tek satır olarak görünür.\nAkış: talep Taleplerim ekranında açılır, Departman Onayı Bekleyenler › Satınalma Onayı Bekleyenler ekranlarında onaylanır; bu liste ekleme ve silme yapmaz; başlık alanları ve o iş akışının yazdığı onay durumu salt okunurdur, satırı düzenlemek yalnız kalemin satınalma sorumlusunu ve satır durumunu değiştirir. Kartlar kalemi değil talebi sayar.\nİlişkili: Taleplerim, Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Satınalma › Tanımlamalar › Red Nedenleri." }, { "Id": "3d2aa673-6148-5445-9fb8-c260913a910f", @@ -93991,14 +93991,14 @@ "CultureName": "en", "ResourceName": "Platform", "Key": "App.Prc.PurchaseAgreementLine.Desc", - "Value": "Agreement Lines — the products, quantities and agreed unit prices of a purchase agreement.\nWhere: Purchasing › Orders › Purchase Agreements › Products tab (no menu of its own).\nFields: product (active, purchasable products), description, agreed quantity, unit (copied from the product's purchase unit), agreed unit price.\nUsage: when an RFQ or purchase order is linked to this agreement, product prices are taken from these lines and an empty RFQ is filled with the remaining quantities." + "Value": "Agreement Lines — the products, quantities and agreed unit prices of a purchase agreement.\nWhere: Purchasing › Purchase Agreements › Products tab (no menu of its own).\nFields: product (active, purchasable products), description, agreed quantity, unit (copied from the product's purchase unit), agreed unit price.\nUsage: when an RFQ or purchase order is linked to this agreement, product prices are taken from these lines and an empty RFQ is filled with the remaining quantities." }, { "Id": "811582a9-71a3-50a8-8d81-c5d3da9bc2ad", "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.PurchaseAgreementLine.Desc", - "Value": "Sözleşme Kalemleri — satınalma sözleşmesinin ürünleri, miktarları ve anlaşılan birim fiyatları.\nNerede: Satınalma › Siparişler › Sözleşmeler › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), açıklama, sözleşme miktarı, birim (ürünün satınalma biriminden gelir), anlaşılan birim fiyat.\nKullanım: bir teklif talebi ya da sipariş bu sözleşmeye bağlandığında ürün fiyatları bu kalemlerden alınır; boş teklif talebi kalan miktarlarla doldurulur." + "Value": "Sözleşme Kalemleri — satınalma sözleşmesinin ürünleri, miktarları ve anlaşılan birim fiyatları.\nNerede: Satınalma › Sözleşmeler › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), açıklama, sözleşme miktarı, birim (ürünün satınalma biriminden gelir), anlaşılan birim fiyat.\nKullanım: bir teklif talebi ya da sipariş bu sözleşmeye bağlandığında ürün fiyatları bu kalemlerden alınır; boş teklif talebi kalan miktarlarla doldurulur." }, { "Id": "6dd9b354-4ad2-5ca9-9dea-e90c6bf59a7e", @@ -94047,14 +94047,14 @@ "CultureName": "en", "ResourceName": "Platform", "Key": "App.Prc.PurchaseAgreement.Desc", - "Value": "Purchase Agreements — blanket orders and tenders agreed with suppliers, with agreed quantities and unit prices.\nWhere: Purchasing › Orders › Purchase Agreements; the Products tab holds the agreement lines.\nFields: agreement no (automatic, BO00001), supplier, buyer, agreement type (Blanket Order / Tender), currency, validity start and end dates, reference, operation type, terms and conditions, status (Draft / Confirmed / Closed / Cancelled).\nUsage: select a confirmed agreement on an RFQ or purchase order; prices come from the agreement lines and an empty RFQ is filled with the remaining quantities. The New RFQ button opens Requests for Quotation." + "Value": "Purchase Agreements — blanket orders and tenders agreed with suppliers, with agreed quantities and unit prices.\nWhere: Purchasing › Purchase Agreements; the Products tab holds the agreement lines.\nFields: agreement no (automatic, BO00001), supplier, buyer, agreement type (Blanket Order / Tender), currency, validity start and end dates, reference, operation type, terms and conditions, status (Draft / Confirmed / Closed / Cancelled).\nUsage: select a confirmed agreement on an RFQ or purchase order; prices come from the agreement lines and an empty RFQ is filled with the remaining quantities. The New RFQ button opens Requests for Quotation." }, { "Id": "5a050995-ce09-5ff3-9ff3-b1171bf9ceee", "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.PurchaseAgreement.Desc", - "Value": "Sözleşmeler — tedarikçilerle yapılan kapsamlı sipariş ve ihale sözleşmeleri; anlaşılan miktar ve birim fiyatlarıyla.\nNerede: Satınalma › Siparişler › Sözleşmeler; Ürünler sekmesi sözleşme kalemlerini taşır.\nAlanlar: sözleşme no (otomatik, BO00001), tedarikçi, alıcı, sözleşme türü (Kapsamlı Sipariş / İhale), para birimi, geçerlilik başlangıç ve bitiş tarihleri, referans, operasyon türü, şartlar ve koşullar, durum (Taslak / Doğrulanmış / Kapanmış / İptal).\nKullanım: doğrulanmış sözleşme teklif talebinde ya da siparişte seçilir; fiyatlar sözleşme kalemlerinden gelir, boş teklif talebi kalan miktarlarla dolar. Yeni Teklif butonu Teklif Talepleri'ni açar." + "Value": "Sözleşmeler — tedarikçilerle yapılan kapsamlı sipariş ve ihale sözleşmeleri; anlaşılan miktar ve birim fiyatlarıyla.\nNerede: Satınalma › Sözleşmeler; Ürünler sekmesi sözleşme kalemlerini taşır.\nAlanlar: sözleşme no (otomatik, BO00001), tedarikçi, alıcı, sözleşme türü (Kapsamlı Sipariş / İhale), para birimi, geçerlilik başlangıç ve bitiş tarihleri, referans, operasyon türü, şartlar ve koşullar, durum (Taslak / Doğrulanmış / Kapanmış / İptal).\nKullanım: doğrulanmış sözleşme teklif talebinde ya da siparişte seçilir; fiyatlar sözleşme kalemlerinden gelir, boş teklif talebi kalan miktarlarla dolar. Yeni Teklif butonu Teklif Talepleri'ni açar." }, { "Id": "868827b4-e369-5dde-af21-c886d0dfed9a", @@ -94770,20 +94770,6 @@ "Key": "App.Listform.ListformField.SupplierReference", "Value": "Tedarikçi Referansı" }, - { - "Id": "320bc696-0950-5d34-9536-d7eef9e4c295", - "CultureName": "en", - "ResourceName": "Platform", - "Key": "App.Listform.ListformField.RequireConfirmation", - "Value": "Ask Confirmation" - }, - { - "Id": "db342594-f004-584e-8049-55131139c53a", - "CultureName": "tr", - "ResourceName": "Platform", - "Key": "App.Listform.ListformField.RequireConfirmation", - "Value": "Onay İsteyin" - }, { "Id": "30212a0e-adb0-5c34-8dbd-9b2bd8925923", "CultureName": "en", @@ -94999,14 +94985,70 @@ "CultureName": "en", "ResourceName": "Platform", "Key": "App.Prc.PurchaseRfqImportItem.Desc", - "Value": "RFQ Request Lines — the lines of approved material requests that can still be quoted, listed for the open request for quotation.\nWhere: Purchasing › Orders › Requests for Quotation › Request Lines tab (no menu of its own); grouped by request.\nFields: request no, requester, product, quantity, unit, requested date, reason, transfer.\nUsage: tick Transfer on as many lines as needed (several requests at once) and press Save; the lines are copied to the RFQ with the agreement or supplier price and the requested date, and disappear from this list. Only an RFQ in RFQ or RFQ Sent status takes lines; a line already on another active RFQ or order is not listed." + "Value": "RFQ Request Lines — the lines of approved material requests that can still be quoted, listed for the open request for quotation.\nWhere: Purchasing › Orders › Requests for Quotation › Request Lines tab (no menu of its own); grouped by request.\nFields: request no, requester, product, quantity, unit, requested date, reason.\nUsage: select as many lines as needed with the row checkboxes (several requests at once) and press Transfer Selected; the lines are copied to the RFQ with the agreement or supplier price and the requested date, and disappear from this list. Only an RFQ in RFQ or RFQ Sent status takes lines; a line already on another active RFQ or order is not listed." }, { "Id": "377297ab-417d-5583-89eb-f6c7ee0a0f66", "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.PurchaseRfqImportItem.Desc", - "Value": "Teklif Talep Kalemleri — onaylı malzeme taleplerinin henüz teklif istenmemiş kalemleri, açık teklif talebi için listelenir.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden, aktar.\nKullanım: istenen kadar satırda (birden fazla talep birlikte) Aktar işaretlenip Kaydet'e basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile teklife kopyalanır ve bu listeden düşer. Yalnız Teklif Talebi ya da Gönderildi durumundaki teklife kalem aktarılır; başka bir açık teklifte ya da siparişte olan kalem listelenmez." + "Value": "Teklif Talep Kalemleri — onaylı malzeme taleplerinin henüz teklif istenmemiş kalemleri, açık teklif talebi için listelenir.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden.\nKullanım: istenen kadar satır, satır başındaki kutuyla seçilir (birden fazla talep birlikte) ve Seçilenleri Aktar'a basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile teklife kopyalanır ve bu listeden düşer. Yalnız Teklif Talebi ya da Gönderildi durumundaki teklife kalem aktarılır; başka bir açık teklifte ya da siparişte olan kalem listelenmez." + }, + { + "Id": "d03b92da-2b80-58f8-85ff-c6d1f46568ed", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier", + "Value": "Alternative Suppliers" + }, + { + "Id": "f1ece2b7-5680-5367-b74b-752b50cf110e", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier", + "Value": "Alternatif Tedarikçiler" + }, + { + "Id": "4446385c-7939-5d84-a399-9a335f491721", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier.Title", + "Value": "Alternative Suppliers" + }, + { + "Id": "89fcdde4-a466-5c1b-a555-c5fb6f16a49c", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier.Title", + "Value": "Alternatif Tedarikçiler" + }, + { + "Id": "23221e5e-0567-5f10-ba1b-ce1d09c0e9ae", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier.Desc", + "Value": "Alternative Suppliers — the active contacts that do not yet have a request for quotation in the tender, listed to add alternatives to an open RFQ.\nWhere: Purchasing › Orders › Requests for Quotation › Create Alternative button (modal; no menu of its own).\nFields: name, city, phone, e-mail, supplier currency.\nUsage: select the suppliers with the row checkboxes and press Create for Selected; for each one an RFQ is opened in the same tender with a copy of the current lines (price from the supplier's price list, currency and terms from the contact card) and the supplier leaves this list. Only an RFQ in RFQ or RFQ Sent status takes alternatives; prices are entered with the Price Entry button." + }, + { + "Id": "4680af95-76ed-5e22-9712-d1f8f87909a4", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier.Desc", + "Value": "Alternatif Tedarikçiler — ihalede henüz teklif talebi olmayan aktif kontaklar, açık teklif talebine alternatif eklemek için listelenir.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Alternatif Oluştur butonu (modal; kendi menüsü yoktur).\nAlanlar: ad, şehir, telefon, e-posta, tedarikçi para birimi.\nKullanım: tedarikçiler satır başındaki kutuyla seçilir ve Seçilenler İçin Oluştur'a basılır; her biri için aynı ihalede o anki kalemlerin kopyasıyla teklif talebi açılır (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından) ve tedarikçi bu listeden düşer. Yalnız Teklif Talebi ya da Gönderildi durumundaki teklife alternatif eklenir; fiyatlar Fiyat Girişi butonuyla girilir." + }, + { + "Id": "740bf0ef-b578-5df4-9e9f-965385a4466a", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier.CreateSelected", + "Value": "Create for Selected" + }, + { + "Id": "77f863a7-b3c0-5ce5-97cf-745d959d60a6", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfqAlternativeSupplier.CreateSelected", + "Value": "Seçilenler İçin Oluştur" }, { "Id": "d9cc2ab9-013b-570a-8d78-7af6e62ec4c3", @@ -95022,20 +95064,6 @@ "Key": "App.Listform.ListformField.BaseId", "Value": "Ana Belge" }, - { - "Id": "45dc952c-b38b-559e-92ae-1edd304cb773", - "CultureName": "en", - "ResourceName": "Platform", - "Key": "App.Listform.ListformField.Transfer", - "Value": "Transfer" - }, - { - "Id": "b41a0c77-801b-5247-b35a-7880611e45e1", - "CultureName": "tr", - "ResourceName": "Platform", - "Key": "App.Listform.ListformField.Transfer", - "Value": "Aktar" - }, { "Id": "e55b855c-35b4-5a79-be40-684965c8c3ca", "CultureName": "en", @@ -95181,14 +95209,14 @@ "CultureName": "en", "ResourceName": "Platform", "Key": "App.Prc.PurchaseRfqAlternative.Desc", - "Value": "Tender Quotes — the other requests for quotation of the same tender; alternatives are created here.\nWhere: Purchasing › Orders › Requests for Quotation › Quotes tab (no menu of its own).\nFields: RFQ no, supplier, status, supplier response, order deadline, expected arrival, untaxed amount, total, currency.\nUsage: Add + supplier creates an alternative RFQ in the same tender with a copy of the current lines (price from the supplier's price list, currency and terms from the contact card); a supplier can be in a tender once. Prices of all alternatives are entered together in the Price Comparison tab." + "Value": "Tender Quotes — the other requests for quotation of the same tender.\nWhere: Purchasing › Orders › Requests for Quotation › Quotes tab (no menu of its own).\nFields: RFQ no, supplier, status, supplier response, order deadline, expected arrival, untaxed amount, total, currency.\nUsage: alternatives are created with the Create Alternative button: the suppliers are multi-selected in its modal (Alternative Suppliers screen); a supplier can be in a tender once. Prices of all alternatives are entered together in the Price Comparison tab." }, { "Id": "18b7fd92-8a1b-56bb-9b1f-587605c955cd", "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.PurchaseRfqAlternative.Desc", - "Value": "İhale Teklifleri — aynı ihalenin diğer teklif talepleri; alternatifler burada oluşturulur.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Teklifler sekmesi (kendi menüsü yoktur).\nAlanlar: teklif talep no, tedarikçi, durum, tedarikçi yanıtı, sipariş zaman sınırı, beklenen geliş, vergi hariç tutar, toplam, para birimi.\nKullanım: Ekle + tedarikçi seçimi aynı ihalede, o anki kalemlerin kopyasıyla alternatif teklif talebi açar (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından); bir tedarikçi ihalede bir kez bulunur. Bütün alternatiflerin fiyatları Fiyat Karşılaştırması sekmesinde birlikte girilir." + "Value": "İhale Teklifleri — aynı ihalenin diğer teklif talepleri.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Teklifler sekmesi (kendi menüsü yoktur).\nAlanlar: teklif talep no, tedarikçi, durum, tedarikçi yanıtı, sipariş zaman sınırı, beklenen geliş, vergi hariç tutar, toplam, para birimi.\nKullanım: alternatifler Alternatif Oluştur butonuyla açılır: modalında (Alternatif Tedarikçiler ekranı) tedarikçiler çoklu seçilir; bir tedarikçi ihalede bir kez bulunur. Bütün alternatiflerin fiyatları Fiyat Karşılaştırması sekmesinde birlikte girilir." }, { "Id": "21d2f612-dde9-517c-8441-f554f131689a", @@ -95335,14 +95363,14 @@ "CultureName": "en", "ResourceName": "Platform", "Key": "App.Prc.PurchaseOrderImportItem.Desc", - "Value": "Order Request Lines — the lines of approved material requests that are not on any RFQ or order yet, listed for a draft purchase order written without quotes.\nWhere: Purchasing › Orders › Purchase Orders › Request Lines tab (no menu of its own); grouped by request; only a draft order takes lines.\nFields: request no, requester, product, quantity, unit, requested date, reason, transfer.\nUsage: tick Transfer on the lines to order (several requests at once) and press Save; the lines are copied with the agreement or supplier price and the requested date, and the order's Source shows the request numbers." + "Value": "Order Request Lines — the lines of approved material requests that are not on any RFQ or order yet, listed for a draft purchase order written without quotes.\nWhere: Purchasing › Orders › Purchase Orders › Request Lines tab (no menu of its own); grouped by request; only a draft order takes lines.\nFields: request no, requester, product, quantity, unit, requested date, reason.\nUsage: select the lines to order with the row checkboxes (several requests at once) and press Transfer Selected; the lines are copied with the agreement or supplier price and the requested date, and the order's Source shows the request numbers." }, { "Id": "a6c01942-c13c-5ff4-9367-ac1ab75975f5", "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.PurchaseOrderImportItem.Desc", - "Value": "Sipariş Talep Kalemleri — onaylı malzeme taleplerinin henüz hiçbir teklifte ya da siparişte olmayan kalemleri, teklifsiz yazılan taslak sipariş için listelenir.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır; yalnız taslak sipariş kalem alır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden, aktar.\nKullanım: sipariş edilecek satırlarda (birden fazla talep birlikte) Aktar işaretlenip Kaydet'e basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile kopyalanır, siparişin Kaynak'ında talep numaraları görünür." + "Value": "Sipariş Talep Kalemleri — onaylı malzeme taleplerinin henüz hiçbir teklifte ya da siparişte olmayan kalemleri, teklifsiz yazılan taslak sipariş için listelenir.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır; yalnız taslak sipariş kalem alır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden.\nKullanım: sipariş edilecek satırlar, satır başındaki kutuyla seçilir (birden fazla talep birlikte) ve Seçilenleri Aktar'a basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile kopyalanır, siparişin Kaynak'ında talep numaraları görünür." }, { "Id": "c5599c91-6f69-5811-bf9e-659fd95ce8a9", @@ -95391,14 +95419,28 @@ "CultureName": "en", "ResourceName": "Platform", "Key": "App.Prc.PurchaseRfq.ImportRequestsInfo", - "Value": "Tick Transfer on the lines to bring in (several requests at once) and press Save in the table toolbar." + "Value": "Select the lines to bring in with the row checkboxes (several requests at once) and press Transfer Selected in the table toolbar." }, { "Id": "2bf8cbca-a022-53fa-9c86-61d478c6cba0", "CultureName": "tr", "ResourceName": "Platform", "Key": "App.Prc.PurchaseRfq.ImportRequestsInfo", - "Value": "Aktarılacak satırlarda Aktar'ı işaretleyin (birden fazla talep birlikte) ve tablonun araç çubuğundaki Kaydet'e basın." + "Value": "Aktarılacak satırları satır başındaki kutuyla seçin (birden fazla talep birlikte) ve tablonun araç çubuğundaki Seçilenleri Aktar'a basın." + }, + { + "Id": "0b16a115-63f2-5785-be3b-2ca8ba2f1176", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseImportItem.TransferSelected", + "Value": "Transfer Selected" + }, + { + "Id": "99368842-f9c5-5c17-b638-235921f6e2bf", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseImportItem.TransferSelected", + "Value": "Seçilenleri Aktar" }, { "Id": "e6f0c745-a48c-520e-b3cd-d1bce35ba78d", @@ -95415,18 +95457,32 @@ "Value": "Alternatif Oluştur" }, { - "Id": "461bfd03-19c2-510a-a228-c8c277004e39", + "Id": "e1611382-be41-5a60-b2e5-210433eb2e04", "CultureName": "en", "ResourceName": "Platform", - "Key": "App.Prc.PurchaseRfq.AlternativeSuppliers", - "Value": "Suppliers" + "Key": "App.Prc.PurchaseRfq.CreateAlternativeInfo", + "Value": "Select the suppliers to ask for a quote with the row checkboxes and press Create for Selected; an RFQ is opened in the same tender for each." }, { - "Id": "916e6daf-bfee-5da6-8720-a5f5dc51cc72", + "Id": "a2e31da5-2be6-55f7-b34c-b5e8c348471e", "CultureName": "tr", "ResourceName": "Platform", - "Key": "App.Prc.PurchaseRfq.AlternativeSuppliers", - "Value": "Tedarikçiler" + "Key": "App.Prc.PurchaseRfq.CreateAlternativeInfo", + "Value": "Teklif istenecek tedarikçileri satır başındaki kutuyla seçin ve Seçilenler İçin Oluştur'a basın; her biri için aynı ihalede teklif talebi açılır." + }, + { + "Id": "311bdd52-49cd-556a-90db-46cae4264ade", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfq.PriceEntryInfo", + "Value": "Enter the unit price and delivery date of every supplier in the tender in the table and press Save in the table toolbar." + }, + { + "Id": "2b447885-0de3-550e-9703-2db968713789", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Prc.PurchaseRfq.PriceEntryInfo", + "Value": "İhaledeki bütün tedarikçilerin birim fiyat ve teslim tarihlerini tabloya yazın ve tablonun araç çubuğundaki Kaydet'e basın." }, { "Id": "a367fc99-7842-5092-ae10-5e8130c67c4e", diff --git a/configs/seeds/data/App.Menus.Menu.json b/configs/seeds/data/App.Menus.Menu.json index c474fc30..d4a5b8e0 100644 --- a/configs/seeds/data/App.Menus.Menu.json +++ b/configs/seeds/data/App.Menus.Menu.json @@ -2858,7 +2858,7 @@ "Id": "b9c609a2-b30d-4b63-835c-58e9d4cdda5f", "Code": "App.Prc.MaterialRequests", "DisplayName": "App.Prc.MaterialRequests", - "Order": 2, + "Order": 3, "Url": null, "Icon": "FcList", "ParentCode": "App.Prc", @@ -2918,7 +2918,7 @@ "Id": "99ab4ed0-b594-4492-817e-a091fb7c3080", "Code": "App.Prc.MaterialRequest", "DisplayName": "App.Prc.MaterialRequest", - "Order": 5, + "Order": 4, "Url": "/admin/list/App.Prc.MaterialRequest", "Icon": "FcDocument", "ParentCode": "App.Prc.MaterialRequests", @@ -2930,47 +2930,63 @@ "ModuleId": "Prc" }, { - "ParentCode": "App.Prc", + "Id": "5d54d835-263f-4ae6-ac7a-3b79577f5706", "Code": "App.Prc.Orders", "DisplayName": "App.Prc.Orders", - "Order": 3, + "Order": 4, "Url": null, "Icon": "FcShop", + "ParentCode": "App.Prc", "RequiredPermissionName": null, + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Prc" }, { - "ParentCode": "App.Prc.Orders", + "Id": "0a2f1086-2530-4e88-a8c0-f39c3106796e", "Code": "App.Prc.PurchaseAgreement", "DisplayName": "App.Prc.PurchaseAgreement", - "Order": 1, + "Order": 2, "Url": "/admin/list/App.Prc.PurchaseAgreement", "Icon": "FcRules", + "ParentCode": "App.Prc", "RequiredPermissionName": "App.Prc.PurchaseAgreement", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Prc" }, { - "ParentCode": "App.Prc.Orders", + "Id": "ce4a1289-75c5-4b6e-8782-ca3ce2e5995f", "Code": "App.Prc.PurchaseRfq", "DisplayName": "App.Prc.PurchaseRfq", - "Order": 2, + "Order": 1, "Url": "/admin/list/App.Prc.PurchaseRfq", "Icon": "FcDocument", + "ParentCode": "App.Prc.Orders", "RequiredPermissionName": "App.Prc.PurchaseRfq", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Prc" }, { - "ParentCode": "App.Prc.Orders", + "Id": "199bdd52-0d5c-40a5-8ae8-2d9c6aeaab17", "Code": "App.Prc.PurchaseOrder", "DisplayName": "App.Prc.PurchaseOrder", - "Order": 3, + "Order": 2, "Url": "/admin/list/App.Prc.PurchaseOrder", "Icon": "FcPaid", + "ParentCode": "App.Prc.Orders", "RequiredPermissionName": "App.Prc.PurchaseOrder", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Prc" } ] diff --git a/configs/seeds/data/App.Notifications.NotificationRules.json b/configs/seeds/data/App.Notifications.NotificationRules.json index 2aaac07d..9982819f 100644 --- a/configs/seeds/data/App.Notifications.NotificationRules.json +++ b/configs/seeds/data/App.Notifications.NotificationRules.json @@ -4,36 +4,6 @@ "GeneratedAt": "2026-09-18T06:12:57.546144Z", "Order": 2, "Rows": [ - { - "Id": "a6dec106-16eb-5386-ae07-dfc4e456165b", - "NotificationTypeId": "095dcdb5-7c4a-5668-81bb-abc7b01b2158", - "RecipientType": "Role", - "RecipientId": "admin", - "Channel": "UiActivity", - "IsActive": true, - "IsFixed": false, - "IsCustomized": false - }, - { - "Id": "49cbe5aa-1848-5277-9ec1-d26d474c8f0e", - "NotificationTypeId": "c58237f7-edd6-55a3-9bc9-aab82f63ca3e", - "RecipientType": "Role", - "RecipientId": "admin", - "Channel": "Desktop", - "IsActive": true, - "IsFixed": false, - "IsCustomized": false - }, - { - "Id": "859b287f-24aa-5ee8-9146-e5249cd195af", - "NotificationTypeId": "78a4b82b-de80-5826-bf9b-e49a2436cd43", - "RecipientType": "Role", - "RecipientId": "admin", - "Channel": "Rocket", - "IsActive": true, - "IsFixed": false, - "IsCustomized": false - }, { "Id": "940fb243-3d79-59cd-8cda-26c59a143306", "NotificationTypeId": "8eaa322e-76bb-592a-8200-666442c03e23", diff --git a/configs/seeds/docs/modules/App.Administration.md b/configs/seeds/docs/modules/App.Administration.md index d954abbc..acc01f99 100644 --- a/configs/seeds/docs/modules/App.Administration.md +++ b/configs/seeds/docs/modules/App.Administration.md @@ -55,7 +55,7 @@ Tüm tablolar kiracı (`TenantId`) + tam audit + soft delete taşır. - `Adm_T_Contact` — kimlik/adres (Country, City, District, Township, PostalCode)/vergi, satış ve satınalma koşulları (`Prc_T_*` tanım tablolarına Id ile), kullanıcılar (`AbpUsers`), para birimi (`Sas_H_Currency.Name`), sektör (`Adm_T_Sector`), dil (`Sas_H_Language.CultureName`), muhasebe alanları, Latitude/Longitude (float), Notes (HTML, nvarchar(MAX)), IsActive. - `Adm_T_ContactPerson` (ContactId → `Adm_T_Contact.Id`, Photo, Name, JobTitle, Email, Phone, Mobile, Notes) - `Adm_T_ContactBankAccount` (ContactId → `Adm_T_Contact.Id`, BankName, Iban, AccountHolder, Currency, IsDefault) -- `Adm_T_Approver` (DepartmentId → `Hr_T_Department.Id` FK, ApprovalArea nvarchar(32) DEFAULT 'Purchase', ApproverUserId → `AbpUsers`, IsActive); tekil `TenantId + DepartmentId + ApprovalArea + ApproverUserId`. +- `Adm_T_Approver` (DepartmentId → `Hr_T_Department.Id` FK, ApprovalArea nvarchar(32) DEFAULT 'Purchase', ApprovalUserName nvarchar(256) → `AbpUsers.UserName`, IsActive); tekil `TenantId + DepartmentId + ApprovalArea + ApprovalUserName`. ### 5. İş kuralları ve hesaplar @@ -72,7 +72,7 @@ Yetki ağacı: `App.Administration` grubu › `App.Administration.Definitions` ### 7. Entegrasyonlar -Dış entegrasyon yok. Ülke/Şehir/İlçe, Para Birimi, Dil, Sektör, Kullanıcılar, Departmanlar, Şubeler ve Satınalma tanımları yalnızca okunur. Onaycılar'ı Satınalma › Malzeme Talepleri departman onayı (`ApprovalArea = 'Purchase'`) okuyacaktır; diğer onay yerleri ilgili modüllerin akışları için hazırdır. +Dış entegrasyon yok. Ülke/Şehir/İlçe, Para Birimi, Dil, Sektör, Kullanıcılar, Departmanlar, Şubeler ve Satınalma tanımları yalnızca okunur. Onaycılar'ı Satınalma › Talepler departman onayı (`ApprovalArea = 'Purchase'`) okuyacaktır; diğer onay yerleri ilgili modüllerin akışları için hazırdır. ### 8. Akış örneği @@ -178,7 +178,7 @@ Dış entegrasyon yok. Ülke/Şehir/İlçe, Para Birimi, Dil, Sektör, Kullanıc | Menü | `App.Administration.Definitions` › `App.Definitions.Approver` (sıra 6) | | Yetki | `App.Definitions.Approver` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste. | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Adm_T_Approver` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | @@ -191,7 +191,7 @@ Dış entegrasyon yok. Ülke/Şehir/İlçe, Para Birimi, Dil, Sektör, Kullanıc | --- | --- | --- | --- | --- | --- | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | | `ApprovalArea` | Onay Yeri | dxSelectBox | ✓ | ✓ | liste: Purchase, Warehouse, HumanResources, Finance | -| `ApproverUserId` | Onaylayacak Kişi | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | +| `ApprovalUserName` | Onaylayacak Kişi | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | #### İlgili Kişiler — `App.Definitions.ContactPerson` diff --git a/configs/seeds/docs/modules/App.Prc.md b/configs/seeds/docs/modules/App.Prc.md index 5b3702e6..bb0c6e30 100644 --- a/configs/seeds/docs/modules/App.Prc.md +++ b/configs/seeds/docs/modules/App.Prc.md @@ -67,7 +67,7 @@ Yok. Tanımlar Yönetim › Tanımlamalar › Kontaklar'ın Satış ve Satınalm - Geri alma: Kontak sekmeleri bu tanımlara bağlı olduğu için önce kontak tarafındaki seçimler temizlenir; ekranlar `delete_wizard` ile silinir, tablolar yalnızca açık onayla `dropTables: true` ile düşürülür. -## Malzeme Talepleri (`App.Prc.MaterialRequests`) +## Talepler (`App.Prc.MaterialRequests`) ### 1. Amaç ve kapsam @@ -85,12 +85,12 @@ Departmanların iç ve dış ihtiyaç duydukları malzemeleri satınalmaya iletm - Onay ve red bilgileri popup düzenleme formunda yer almaz (iş akışı yazar); listede kolon olarak görünür. - Red nedeni ayrı kolonda tutulmaz: onay düğümleri red sırasında Red Nedenleri listesinden (`Prc_T_RejectReason`, zorunlu) seçim ister; seçilen neden ve not `ApprovalDescription`'a ve iş akışı notuna yazılır. - Satır tablosu `Prc_T_MaterialRequestItem` adıyla açıldı (birim kolonu `Adm_T_Uom.Id` ile aynı tipte, nvarchar). İlk açılan `Prc_T_MaterialRequestLine` scripti (UomId uniqueidentifier) kullanılmıyor. -- Talebin durumu yalnız iş akışından gelir: `ApprovalStatus` boş (taslak) › Departman Onayı › Satınalma Onayı › Onaylandı ya da Reddedildi. Ayrı `Status` kolonu yoktur; karşılama satır durumundan (Bekliyor / Tamamlandı / İptal) izlenir. +- Talebin durumu iş akışından gelir: `ApprovalStatus` boş (taslak) › Departman Onayı › Satınalma Onayı › Onaylandı ya da Reddedildi. Onaylanan talep satınalmada aynı alanda ilerler: kalemi taslak teklif talebindeyse Teklif Talebi, gönderilmiş (ya da siparişe dönüşmüş) teklif talebindeyse Teklif Talebi Gönderildi, iptal olmayan bir siparişteyse Satınalma Siparişi; kalemler belgelerden çıkarılır ya da belgeler iptal edilirse Onaylandı'ya döner. Kalemler farklı aşamadaysa en ileri aşama yazılır (`Prc_P_MaterialRequestSyncStatus`). Ayrı `Status` kolonu yoktur; karşılama satır durumundan (Bekliyor / Tamamlandı / İptal) izlenir. - Planlama aşaması kaldırıldı (Planlama Bekleyenler listesi, satırdaki Planlandı durumu ve Planlanacak Miktar). ### 3. Menü ve ekranlar -Satınalma (`App.Prc`) › Malzeme Talepleri (`App.Prc.MaterialRequests`): +Satınalma (`App.Prc`) › Talepler (`App.Prc.MaterialRequests`): | Ekran | Kod | Filtre / not | | --- | --- | --- | @@ -105,18 +105,18 @@ Talep Satırları (`App.Prc.MaterialRequestLine`) menüsüz alt formdur; Taleple Tüm tablolar kiracı + tam audit + soft delete taşır. -- `Prc_T_MaterialRequest`: RequestNo, Priority (0–3), RequesterUserId, DepartmentId, WarehouseId, LocationId, RequestDate, Description, ApprovalUserName, ApprovalStatus, ApprovalDate, ApprovalDescription (iş akışı), DeptApproverUserNames / PurchaseApproverUserNames (`|` ayrılmış kullanıcı adları). +- `Prc_T_MaterialRequest`: RequestNo, Priority (0–3), RequesterUserId, BranchId (`Sas_T_Branch`), DepartmentId, WarehouseId, LocationId, RequestDate, Description, ApprovalUserName, ApprovalStatus, ApprovalDate, ApprovalDescription (iş akışı), DeptApproverUserNames / PurchaseApproverUserNames (`|` ayrılmış kullanıcı adları). - `Prc_T_MaterialRequestItem`: MaterialRequestId (FK, cascade), ProductId, Quantity, UomId (nvarchar, `Adm_T_Uom`), FulfillmentMethod (Purchase / Transfer), DueDate, RequestReason, DeliveredQuantity, PurchaseResponsibleUserId, LineStatus (Waiting / Done / Cancelled). - `Prc_T_RejectReason`: Name, SortOrder, IsActive. - Görünüm `Prc_V_MaterialRequestLine`: talep başlığı LEFT JOIN silinmemiş kalemler; `Id` kalemin Id'si (kalemi olmayan talepte talebin Id'si), `MaterialRequestId` talep. Tüm Talepler'in kaynağıdır. -- Prosedür `Prc_P_MaterialRequestAfterSave(@Id)`. +- Prosedürler `Prc_P_MaterialRequestAfterSave(@Id)`, `Prc_P_MaterialRequestSyncStatus(@DocId)` (teklif/sipariş Recalc'i, durum işlemi ve belge silme sonrasında; `@DocId` boşsa onaylanmış bütün talepler). ### 5. İş kuralları ve hesaplar - `Prc_P_MaterialRequestAfterSave` talep kaydı/güncellemesi sonrasında çalışır ve onaycı kullanıcı listelerini (`DeptApproverUserNames`, `PurchaseApproverUserNames`) Onaycılar'dan yeniden yazar. Onaycılar sonradan değişirse talep yeniden kaydedilene kadar liste eski kalır. İki liste formda ve listede gizlidir; iş akışı onaycıyı bu alanlardan okur (`@DeptApproverUserNames`, `@PurchaseApproverUserNames`). - Onaya gönderilmiş talebe satır eklenemez ve satır silinemez (alt form Insert/Delete Before komutu). Onay sürecindeki ya da onaylanmış talep silinemez; reddedilen talep silinebilir. - Ürün listesi yalnız aktif ve satın alınabilir ürünleri gösterir; birim ürünün satınalma biriminden (yoksa biriminden) kopyalanır, salt okunurdur. -- Depo değişince konum temizlenir; konum listesi depoya göre süzülür. Talep eden değişince departmanı kullanıcı kartından gelir; yeni kayıtta departman oturumdaki kullanıcının departmanıdır. +- Şube ayrı alandır ve iki zinciri süzer: Şube › Departman, Şube › Depo › Konum; şube değişince departman, depo ve konum, depo değişince konum temizlenir. Talep eden değişince şubesi ve departmanı kullanıcının departmanından gelir; yeni kayıtta şube ve departman oturumdaki kullanıcınınkidir. Açıklama HTML editörüdür, formda tam satırdır. - Tüm Talepler'de düzenleme `UpdateCommand` ile yalnız `Prc_T_MaterialRequestItem`'ın `PurchaseResponsibleUserId` ve `LineStatus` kolonlarını yazar; başlık alanları salt okunurdur. Kartlar kalemi değil talebi sayar (tablodan okur). - Onaycı listesi boşsa akış o adımda hata verir: Onaycılar'a ilgili departman için Satınalma satırı tanımlanmalı ve en az bir kullanıcıya (ya da rolüne) Satınalma Onayı Bekleyenler güncelleme yetkisi verilmelidir. @@ -152,6 +152,49 @@ Yönetim › Tanımlamalar › Onaycılar (onay yeri Satınalma); Yönetim › R - Numaratör: `App.Definitions.Sequence` › `MaterialRequest`. - Geri alma: Wizard Manager'da talep bazlı silme (alt form en son değil, önce listeler); tablolar yalnız açık onayla düşürülür. + +## Sözleşmeler (`App.Prc.PurchaseAgreement`) + +### 1. Amaç ve kapsam + +_Henüz yazılmadı._ + +### 2. Analiz ve kararlar + +_Henüz yazılmadı._ + +### 3. Menü ve ekranlar + +_Henüz yazılmadı._ + +### 4. Veri modeli + +_Henüz yazılmadı._ + +### 5. İş kuralları ve hesaplar + +_Henüz yazılmadı._ + +### 6. Yetki ve görünürlük + +_Henüz yazılmadı._ + +### 7. Entegrasyonlar + +_Henüz yazılmadı._ + +### 8. Akış örneği + +_Henüz yazılmadı._ + +### 9. Sık sorulanlar + +_Henüz yazılmadı._ + +### 10. Dosyalar ve geri alma + +_Henüz yazılmadı._ + ## Siparişler (`App.Prc.Orders`) @@ -162,14 +205,15 @@ Satınalma ekibinin onaylanmış malzeme taleplerinden tedarikçilere teklif tal ### 2. Analiz ve kararlar - Teklif talebi ve satınalma siparişi **ayrı belgelerdir** (`Prc_T_PurchaseRfq`, `Prc_T_PurchaseOrder`), ayrı numaratörle: `PurchaseRfq` (RFQ00001) ve `PurchaseOrder1` (P00001). Sözleşme `PurchaseAgreement1` (BO00001). -- **Tedarikçi başına bir teklif belgesi.** Aynı ihtiyaç için açılan belgeler bir ihaledir: `TenderGroupId` ihalenin kök (ilk) belgesinin Id'sidir. Alternatif tedarikçi belgenin **Teklifler** sekmesinde Ekle + tedarikçi seçimiyle eklenir; o anki kalemleriyle birlikte kopya belge açılır (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından). Bir tedarikçi ihalede bir kez bulunur. -- Bir teklif birden fazla malzeme talebinden oluşabilir: belgenin **Talep Kalemleri** sekmesi aktarılabilir bütün talep kalemlerini talebe göre gruplu listeler; toplu düzenleme (batch) modunda istenen satırlarda Aktar işaretlenip tek Kaydet ile kopyalanır. Aynı sekme teklifsiz yazılan taslak siparişte de vardır. Talep ilişkisi kalem düzeyindedir (`MaterialRequestItemId`). +- **Tedarikçi başına bir teklif belgesi.** Aynı ihtiyaç için açılan belgeler bir ihaledir: `TenderGroupId` ihalenin kök (ilk) belgesinin Id'sidir. Alternatif tedarikçiler **Alternatif Oluştur** modalında (`App.Prc.PurchaseRfqAlternativeSupplier`: ihalede belgesi olmayan aktif kontaklar) ListForm'un çoklu seçimiyle seçilir, **Seçilenler İçin Oluştur** butonu seçili her kontak için o anki kalemleriyle birlikte kopya belge açılır (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından). Bir tedarikçi ihalede bir kez bulunur. +- Bir teklif birden fazla malzeme talebinden oluşabilir: belgenin **Talep Kalemleri** sekmesi aktarılabilir bütün talep kalemlerini talebe göre gruplu listeler; satırlar ListForm'un çoklu seçimiyle (`Selection.Mode = multiple`, satır başı kutusu) seçilir ve sekmenin araç çubuğundaki **Seçilenleri Aktar** butonu (Commands, `OnClick`) seçili her satır için `list-form-data/update` çağırır; ekranın `UpdateCommand`'ı (`Prc_P_PurchaseImportItem @Id`) kalemi kopyalar. Ekran bir modalda açıksa (Talepten Aktar, Alternatif Oluştur) buton işi bitince modalı kapatır ve ana liste yenilenir; sekmede açıksa yalnız listeyi yeniler. Hata olursa modal açık kalır. Ayrı bir işaret kolonu yoktur. Aynı sekme teklifsiz yazılan taslak siparişte de vardır. Talep ilişkisi kalem düzeyindedir (`MaterialRequestItemId`). - Popup (Yeni/Düzenle) formu yalnız belgenin kendi alanlarını taşır; talep aktarımı, alternatif, fiyat girişi ve durum işlemleri liste araç çubuğundaki butonlardadır (sekmelerden de yapılabilir). Vergi hariç / KDV / toplam kalemlerden hesaplandığı için formda değil listede görünür. -- Hızlı fiyat girişi: **Fiyat Karşılaştırması** sekmesi toplu düzenleme modundadır; ihalenin bütün tedarikçilerinin birim fiyat, teslim tarihi ve Seçili değerleri tek tabloda satır içinde yazılıp birlikte kaydedilir. -- Araç çubuğu butonları ListForm'un Commands (özel buton) kaydıyla, `OnClick` modunda yazılır; çekirdek değişmez. Talepten Aktar `PurchaseRequestImport`, Alternatif Oluştur `PurchaseRfqAlternative` diyaloğunu (kullanıcı onayıyla eklenen iki Satınalma modalı, `ui/src/views/purchasing`) seçili satırla açar. Modallar belgenin sekme ekranlarını (`App.Prc.*ImportItem`, `App.Prc.PurchaseRfqAlternative`, `App.Prc.PurchaseRfqComparison`) platformun Grid bileşeniyle gösterir; ayrı bir uç yoktur. +- Hızlı fiyat girişi: **Fiyat Karşılaştırması** sekmesi toplu düzenleme modundadır; ihalenin bütün tedarikçilerinin birim fiyat, teslim tarihi ve Seçili değerleri tek tabloda satır içinde yazılıp birlikte kaydedilir. Aynı ekran liste araç çubuğundaki ayrı **Fiyat Girişi** butonuyla modalda da açılır. Satır kaydı `Prc_P_PurchaseRfqComparisonSave`'dir: batch kaydı satırları eşzamanlı istekle gönderdiği için yordam önce ihalenin kök teklifini kilitler (`UPDLOCK`/`FOR UPDATE`, `TenderGroupId`), sonra satırı günceller ve teklifi yeniden hesaplar; grid ihaledeki bütün tedarikçi tekliflerinin satırlarını taşıdığı için kilit ihale düzeyindedir ve satırlar sırayla işlenir. `IX_Prc_T_PurchaseRfqLine_PurchaseRfqId` yeniden hesabın tablo taraması yapıp başka tekliflerin satırlarını kilitlemesini önler. +- Fiyat Girişi'nde birim fiyatı 0'dan büyük kaydedilen teklif, yanıtı `Waiting` ise kendiliğinden `Quoted` olur; boşsa Teklif Tarihi kayıt anı, Teklif Geçerliliği sipariş son tarihi (`OrderDeadline`) yazılır (`Prc_P_PurchaseRfqComparisonSave`). Elle girilmiş tarih ve `NotQuoted` yanıtı değişmez. +- Araç çubuğu butonları ListForm'un Commands (özel buton) kaydıyla, `OnClick` modunda yazılır; çekirdek değişmez. Talepten Aktar, Alternatif Oluştur ve Fiyat Girişi seçili satırla aynı `PurchaseDocGrid` diyaloğunu (`ui/src/views/purchasing/PurchaseDocGridDialog.tsx`) açar; buton `listFormCode`, başlık (`title`) ve açıklama (`info`) dil anahtarını verir. Diyalog belgeye (`BaseId`) süzülmüş tek ekranı (`App.Prc.*ImportItem`, `App.Prc.PurchaseRfqAlternativeSupplier`, `App.Prc.PurchaseRfqComparison`) platformun Grid bileşeniyle gösterir; ayrı bir uç yoktur. - Teklif durumları: Taslak (Teklif Talebi) › Teklif Talebi Gönderildi (tedarikçiye e-posta kuyruğa alındı) › Satınalma Siparişi (dönüştürüldü) / İptal Edildi. Sipariş durumları: Taslak › Onaylandı / İptal; tekliften dönüşen sipariş onaylı açılır. - **Kıyas (Fiyat Karşılaştırması):** fiyat `Sas_H_Currency.Rate` ile TL'ye çevrilir (kur = 1 birimin TL karşılığı). Puan = Fiyat ağırlığı × (en düşük TL fiyat / TL fiyat) + Termin ağırlığı × (en kısa termin günü / termin günü); termin günü = teslim tarihi − ihalenin açılış günü (en az 1). Ağırlıklar ihale genelinde tektir, varsayılan %70 fiyat / %30 termin, toplamı 100 olmalıdır. En yüksek puan **Önerilen**'dir. Fiyatı 0, terminsiz, "Teklif Verilmedi" ya da iptal edilmiş belgenin satırı puanlanmaz. Kalemin teslim tarihi boşsa belgenin Beklenen Geliş'i kullanılır. -- **Siparişe Dönüştür kalem bazındadır** (ihale genelinde, ihaledeki herhangi bir belgeden): kalemin **Seçili** satırı varsa o, yoksa Önerilen satır kazanır. Kazanan her teklif belgesi için ayrı satınalma siparişi açılır; en az bir kalem kazanan teklif Satınalma Siparişi, hiç kazanamayan teklif İptal Edildi olur. +- **Siparişe Dönüştür kalem bazındadır** (ihale genelinde, ihaledeki herhangi bir belgeden): kalemin **Seçili** satırı varsa o, yoksa Önerilen satır kazanır. Kazanan her teklif belgesi için ayrı satınalma siparişi açılır ve sipariş teklifin şubesini, operasyon türünü ve deposunu taşır; en az bir kalem kazanan teklif Satınalma Siparişi, hiç kazanamayan teklif İptal Edildi olur. - **Kaynak** kolonu: teklifte kalemlerin talep numaraları; tekliften dönüşen siparişte teklif talep no; doğrudan yazılan siparişte talep numaraları. - Durum butonları (Gönder, İhaleyi Gönder, Siparişe Dönüştür, Siparişi Onayla, İptal, Taslak olarak ayarla) onay sorar, işlemi gizli `PendingAction` alanına yazıp ekranın kendi güncelleme ucuyla (`list-form-data/update`) kaydeder; kayıt sonrası yordam işlemi `Prc_P_*SetStatus` ile çalıştırır ve alanı temizler. Alan formda görünmez. - E-posta, bildirim kuyruğundan (`Adm_T_Notification`, kanal Mail) tedarikçinin kontak e-postasına gider; teklif e-postası fiyat içermez (ürün, miktar, istenen termin, teklif son tarihi), sipariş e-postası fiyatlı. Kuyruk mesajı 2048 karakterle sınırlıdır; çok kalemli belgede tablo kısalır. @@ -178,33 +222,34 @@ Satınalma ekibinin onaylanmış malzeme taleplerinden tedarikçilere teklif tal ### 3. Menü ve ekranlar +Satınalma (`App.Prc`) › Sözleşmeler (`App.Prc.PurchaseAgreement`, Siparişler'in hemen üstünde; sekme: Ürünler). + Satınalma (`App.Prc`) › Siparişler (`App.Prc.Orders`): | Ekran | Kod | Not | | --- | --- | --- | -| Sözleşmeler | `App.Prc.PurchaseAgreement` | sekme: Ürünler | | Teklif Talepleri | `App.Prc.PurchaseRfq` | tüm durumlar; sekmeler Ürünler, Talep Kalemleri, Tedarikçi Teklifi, Diğer Bilgiler, Teklifler (Ekle = alternatif), Fiyat Karşılaştırması (toplu düzenleme) | | Satınalma Siparişleri | `App.Prc.PurchaseOrder` | tüm durumlar; ekle/sil (yalnız teklifsiz taslak); sekmeler Ürünler, Talep Kalemleri, Diğer Bilgiler, Teklifler | -Menüsüz alt formlar: teklif tarafında `App.Prc.PurchaseRfqLine`, `App.Prc.PurchaseRfqImportItem`, `App.Prc.PurchaseRfqQuote`, `App.Prc.PurchaseRfqOther`, `App.Prc.PurchaseRfqAlternative`, `App.Prc.PurchaseRfqComparison`; sipariş tarafında `App.Prc.PurchaseOrderLine`, `App.Prc.PurchaseOrderImportItem`, `App.Prc.PurchaseOrderOther`, `App.Prc.PurchaseOrderAlternative`; sözleşmede `App.Prc.PurchaseAgreementLine`. +Menüsüz alt formlar: teklif tarafında `App.Prc.PurchaseRfqLine`, `App.Prc.PurchaseRfqImportItem`, `App.Prc.PurchaseRfqQuote`, `App.Prc.PurchaseRfqOther`, `App.Prc.PurchaseRfqAlternative`, `App.Prc.PurchaseRfqAlternativeSupplier` (yalnız Alternatif Oluştur modalında), `App.Prc.PurchaseRfqComparison`; sipariş tarafında `App.Prc.PurchaseOrderLine`, `App.Prc.PurchaseOrderImportItem`, `App.Prc.PurchaseOrderOther`, `App.Prc.PurchaseOrderAlternative`; sözleşmede `App.Prc.PurchaseAgreementLine`. ### 4. Veri modeli Tüm tablolar kiracı + tam audit + soft delete. -- `Prc_T_PurchaseRfq`: RfqNo, TenderGroupId, SupplierId, SupplierReference, AgreementId, CurrencyId, OrderDeadline, ExpectedArrival, RequireConfirmation, OperationTypeId, SupplierResponse (Waiting/Quoted/NotQuoted), QuoteDate, QuoteValidUntil, BuyerUserId, SourceDocument, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, PriceWeight (70), DeliveryWeight (30), UntaxedAmount, TaxAmount, TotalAmount, Status (Draft/Sent/Purchase/Cancelled), PendingAction, LastSentDate. +- `Prc_T_PurchaseRfq`: RfqNo, TenderGroupId, SupplierId, SupplierReference, AgreementId, BranchId, OperationTypeId, WarehouseId (üçü de zorunlu; Şube › Depo › Operasyon Türü zinciriyle süzülür; alternatife ve siparişe kopyalanır), CurrencyId, OrderDeadline, ExpectedArrival, SupplierResponse (Waiting/Quoted/NotQuoted), QuoteDate, QuoteValidUntil, BuyerUserId, SourceDocument, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, PriceWeight (70), DeliveryWeight (30), UntaxedAmount, TaxAmount, TotalAmount, Status (Draft/Sent/Purchase/Cancelled), PendingAction, LastSentDate. - `Prc_T_PurchaseRfqLine`: PurchaseRfqId (FK cascade), TenderLineId (alternatiflerde aynı kalemi eşler), ProductId, Description, Quantity, UomId, UnitPrice, TaxRate, Amount, DeliveryDate (tedarikçinin termini; aktarımda talebin istenen termini), MaterialRequestItemId, IsSelected. -- `Prc_T_PurchaseOrder`: OrderNo, PurchaseRfqId (kaynak teklif), SupplierId, SupplierReference, AgreementId, CurrencyId, ExpectedArrival, OperationTypeId, ConfirmDate, ArrivalDate, BuyerUserId, SourceDocument, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, tutarlar, Status (Draft/Purchase/Cancelled), PendingAction, LastSentDate. +- `Prc_T_PurchaseOrder`: OrderNo, PurchaseRfqId (kaynak teklif), SupplierId, SupplierReference, AgreementId, BranchId, OperationTypeId (Inv_T_OperationType), WarehouseId (teslim alınacak depo, Inv_T_Warehouse; üçü de zorunlu; Şube › Depo › Operasyon Türü zinciriyle süzülür), CurrencyId, ExpectedArrival, ConfirmDate, ArrivalDate, BuyerUserId, SourceDocument, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, tutarlar, Status (Draft/Purchase/Cancelled), PendingAction, LastSentDate. - `Prc_T_PurchaseOrderLine`: PurchaseOrderId (FK cascade), ProductId, Description, Quantity, UomId, UnitPrice, TaxRate, Amount, DeliveryDate, MaterialRequestItemId, PurchaseRfqLineId. -- Görünümler: `Prc_V_MaterialRequestAvailableItem` (aktarılabilir talep kalemleri), `Prc_V_PurchaseImportItem` (Talep Kalemleri sekmesi: kalem alabilen açık belge × aktarılabilir kalem, `Id` = belge|kalem), `Prc_V_PurchaseRfqComparison` (kıyas ve puan), `Prc_V_PurchaseRfqAlternative` (ihalenin belgeleri; teklif ve sipariş için `BaseId`), `Prc_V_PurchaseAgreementLine` (sözleşmenin sipariş edilen miktarı). -- Yordamlar: `Prc_P_PurchaseRfq{AfterSave,Recalc,CreateAlternative,FromAgreement,Send,SetStatus,Award}`, `Prc_P_PurchaseOrder{AfterSave,Recalc,Send,SetStatus}`, `Prc_P_PurchaseImportItem` (teklif ve sipariş için ortak, kalem bazlı aktarım), `Adm_P_SequenceNext`. +- Görünümler: `Prc_V_MaterialRequestAvailableItem` (aktarılabilir talep kalemleri), `Prc_V_PurchaseImportItem` (Talep Kalemleri sekmesi: kalem alabilen açık belge × aynı şubedeki aktarılabilir kalem, `Id` = belge|kalem), `Prc_V_PurchaseRfqComparison` (kıyas ve puan), `Prc_V_PurchaseRfqAlternative` (ihalenin belgeleri; teklif ve sipariş için `BaseId`), `Prc_V_PurchaseRfqAlternativeSupplier` (açık teklif × ihalede belgesi olmayan aktif kontak, `Id` = teklif|kontak), `Prc_V_PurchaseAgreementLine` (sözleşmenin sipariş edilen miktarı). +- Yordamlar: `Prc_P_PurchaseRfq{AfterSave,Recalc,ComparisonSave,CreateAlternative,FromAgreement,Send,SetStatus,Award}`, `Prc_P_PurchaseOrder{AfterSave,Recalc,Send,SetStatus}`, `Prc_P_PurchaseImportItem` (teklif ve sipariş için ortak, kalem bazlı aktarım), `Adm_P_SequenceNext`. ### 5. İş kuralları ve hesaplar - Teklif kaydı ve Tedarikçi Teklifi / Diğer Bilgiler sekmesindeki kayıt sonrası `Prc_P_PurchaseRfqAfterSave`: ağırlık toplamı 100 kontrolü; boş ödeme/teslimat koşulu ve Incoterm konumu tedarikçinin Satınalma sekmesinden (alıcı yalnız ilk kayıtta); yanıt Bekleniyor dışına alınınca boş teklif tarihi; ağırlıkların ihalenin diğer belgelerine yazılması; sözleşme kalemleri (yalnız kalemsiz belgede); tutarlar; buton işlemi (`PendingAction`). -- Aktarım (`Prc_P_PurchaseImportItem`, işaretlenen her satır için): belge teklif aşamasında (teklif) ya da taslak (sipariş); talep Onaylandı; kalem Karşılama = Satınalma, Durum = Bekliyor; iptal olmayan bir teklifte ya da siparişte yer almıyor. Fiyat: sözleşme kalemi › tedarikçi fiyatı (`Inv_T_ProductSupplier`) › 0. Kalem bu arada başka belgeye geçmişse hata. -- Alternatif (`Prc_P_PurchaseRfqCreateAlternative`): belge teklif aşamasında olmalı; tedarikçinin ihalede iptal olmayan belgesi varsa hata. -- Tutar = Miktar × Birim Fiyat; KDV = Σ(Tutar × Oran/100); Toplam = Vergi Hariç + KDV. Kalem her eklenip/değişip/silindiğinde yeniden hesaplanır. +- Aktarım (`Prc_P_PurchaseImportItem`, seçilen her satır için): belge teklif aşamasında (teklif) ya da taslak (sipariş); talep Onaylandı; kalem Karşılama = Satınalma, Durum = Bekliyor; iptal olmayan bir teklifte ya da siparişte yer almıyor. Fiyat: sözleşme kalemi › tedarikçi fiyatı (`Inv_T_ProductSupplier`) › 0. Kalem bu arada başka belgeye geçmişse hata. +- Alternatif (`Prc_P_PurchaseRfqCreateAlternative @Key, @UserId`, `@Key` = teklif|kontak, seçilen her satır için): belge teklif aşamasında olmalı; tedarikçinin ihalede iptal olmayan belgesi varsa hata. +- Kalem Tutarı KDV dahildir: Tutar = yuvarla(yuvarla(Miktar × Birim Fiyat) × (1 + Oran/100)); Vergi Hariç = Σ yuvarla(Miktar × Birim Fiyat); KDV = Σ(Tutar − kalemin vergi hariç tutarı); Toplam = Vergi Hariç + KDV = Σ Tutar. Formdaki script ve `Prc_P_Purchase{Rfq,Order}Recalc` aynı formülü kullanır; kalem her eklenip/değişip/silindiğinde yeniden hesaplanır. - Teklif işlemleri: E-posta ile Gönder (taslak ya da gönderilmiş; kalem ve tedarikçi e-postası şart; Taslak → Gönderildi) · İhaleyi Gönder (ihalenin bütün taslak belgeleri) · Siparişe Dönüştür (taslak ya da gönderilmiş; ihale daha önce dönüştürülmemiş olmalı) · İptal (siparişe dönüşmüş teklif iptal edilemez) · Taslak olarak ayarla (yalnız iptalden; ihale siparişe dönüşmüşse olmaz). - Sipariş işlemleri: Siparişi Onayla (taslak, kalemli) · E-posta ile Gönder (iptal dışında) · İptal · Taslak olarak ayarla (yalnız iptalden). - Siparişe dönüşmüş ya da iptal edilmiş teklif ve kalemleri değiştirilemez; iptal edilmiş siparişin kalemi değiştirilemez. Gönderilmiş ya da dönüşmüş teklif silinemez; yalnız teklifsiz yazılmış taslak sipariş silinebilir. @@ -213,11 +258,11 @@ Tüm tablolar kiracı + tam audit + soft delete. ### 6. Yetki ve görünürlük -Yetki ağacı: `App.Prc` › `App.Prc.Orders` › her liste (+ Create/Update/Delete/Export/Import/Note). Her alt formun yetkisi kendi listesinin altındadır: teklif sekmeleri `App.Prc.PurchaseRfq`, sipariş sekmeleri `App.Prc.PurchaseOrder` altında; sekmeler ekranlar arasında paylaşılmaz. Teklif kullanıcısına Fiyat Karşılaştırması'nın Update yetkisi de verilmelidir (fiyat ve seçim buradan girilir). Yetkiler hiçbir role otomatik atanmaz. Kiracı kapsamlı, şube filtresi yok. +Yetki ağacı: `App.Prc` › `App.Prc.Orders` › teklif ve sipariş listeleri, `App.Prc` › `App.Prc.PurchaseAgreement` (+ Create/Update/Delete/Export/Import/Note). Her alt formun yetkisi kendi listesinin altındadır: teklif sekmeleri `App.Prc.PurchaseRfq`, sipariş sekmeleri `App.Prc.PurchaseOrder` altında; sekmeler ekranlar arasında paylaşılmaz. Teklif kullanıcısına Fiyat Karşılaştırması'nın Update yetkisi de verilmelidir (fiyat ve seçim buradan girilir). Yetkiler hiçbir role otomatik atanmaz. Kiracı kapsamlı, şube filtresi yok. ### 7. Entegrasyonlar -Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmesi varsayılanları); Envanter (Ürünler, tedarikçi fiyatları, Operasyon Türleri); Satınalma › Tanımlamalar (Ödeme Koşulları, Teslimat Koşulları); Proje modülü; Malzeme Talepleri (aktarım); Para Birimleri (kur); Bildirimler: tipler `TeklifTalebiGonderildi`, `SatinalmaSiparisiGonderildi`, her birinin Custom/Mail kuralı (kural kapatılırsa e-posta kuyruğa girmez; NotificationWorker gönderir); Diziler (`PurchaseRfq`, `PurchaseOrder1`, `PurchaseAgreement1`). +Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmesi varsayılanları); Envanter (Ürünler, tedarikçi fiyatları, Operasyon Türleri); Satınalma › Tanımlamalar (Ödeme Koşulları, Teslimat Koşulları); Proje modülü; Talepler (aktarım); Para Birimleri (kur); Bildirimler: tipler `TeklifTalebiGonderildi`, `SatinalmaSiparisiGonderildi`, her birinin Custom/Mail kuralı (kural kapatılırsa e-posta kuyruğa girmez; NotificationWorker gönderir); Diziler (`PurchaseRfq`, `PurchaseOrder1`, `PurchaseAgreement1`). ### 8. Akış örneği @@ -231,8 +276,8 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes ### 9. Sık sorulanlar - **Butonlar nerede?** Listede bir belge seçilir; işlemler araç çubuğundadır (detay sayfasının araç çubuğunda da görünür). Buton yetkisi: durum işlemleri ekranın Update, Talepten Aktar ilgili Talep Kalemleri ekranının Update, Alternatif Oluştur Teklifler ekranının Create yetkisi. -- **Talep Kalemleri sekmesi boş?** Talep onaylanmış olmalı ve aktarılabilir (Satınalma, Bekliyor, başka açık teklifte ya da siparişte olmayan) kalemi bulunmalı; belge Teklif Talebi / Gönderildi (sipariş için Taslak) durumunda olmalı. -- **Talepten Aktar / Alternatif Oluştur modalı nasıl kullanılır?** Talepten Aktar'da aktarılacak satırlarda Aktar işaretlenip tablonun Kaydet'ine basılır. Alternatif Oluştur'da Tedarikçiler sekmesinde Ekle ile tedarikçi seçilir, Fiyat Girişi sekmesinde bütün tedarikçilerin fiyat ve terminleri yazılıp Kaydet'e basılır. +- **Talep Kalemleri sekmesi boş?** Talep onaylanmış olmalı ve aktarılabilir (Satınalma, Bekliyor, başka açık teklifte ya da siparişte olmayan) kalemi bulunmalı; belge Teklif Talebi / Gönderildi (sipariş için Taslak) durumunda olmalı; belge yalnız kendi şubesindeki taleplerin kalemlerini görür. +- **Talepten Aktar / Alternatif Oluştur / Fiyat Girişi modalı nasıl kullanılır?** Talepten Aktar'da aktarılacak satırlar satır başındaki kutuyla seçilir (başlıktaki kutu sayfadakilerin tümünü seçer) ve araç çubuğundaki Seçilenleri Aktar'a basılır. Alternatif Oluştur'da ihaleye eklenecek tedarikçiler satır başındaki kutuyla seçilip Seçilenler İçin Oluştur'a basılır (iki modal da iş bitince kendiliğinden kapanır). Fiyat Girişi ayrı butondur: bütün tedarikçilerin fiyat ve terminleri yazılıp tablonun Kaydet'ine basılır, modal Kapat ile kapanır. - **Alternatif ekledim, kalemleri eksik?** Alternatif, açıldığı andaki kalemleri kopyalar; sonradan eklenen kalem yalnız eklendiği belgededir. - **Önerilen neden boş?** Satırın fiyatı ve teslim tarihi (ya da belgenin Beklenen Geliş'i) girilmiş olmalı; Teklif Verilmedi yanıtlı ya da iptal edilmiş belge kıyasa girmez. - **E-posta gitmedi?** Tedarikçinin kontak e-postasını, Bildirim Kuralları'nda ilgili tipin Mail kuralını ve Bildirimler ekranındaki satırı (IsSent) kontrol edin; NotificationWorker aktif olmalı. @@ -241,9 +286,9 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes ### 10. Dosyalar ve geri alma - Tablolar: `sql/object/Prc_T_PurchaseRfq.sql`, `Prc_T_PurchaseRfqLine.sql`, `Prc_T_PurchaseOrder.sql`, `Prc_T_PurchaseOrderLine.sql`, `Prc_T_PurchaseAgreement.sql`, `Prc_T_PurchaseAgreementLine.sql` (+ postgres). -- Görünüm/yordam: `Prc_V_MaterialRequestAvailableItem`, `Prc_V_PurchaseImportItem`, `Prc_V_PurchaseRfqComparison`, `Prc_V_PurchaseRfqAlternative`, `Prc_V_PurchaseAgreementLine`, `Prc_P_PurchaseRfq*`, `Prc_P_PurchaseOrder*`, `Prc_P_PurchaseImportItem`, `Adm_P_SequenceNext` (sql + postgres object). +- Görünüm/yordam: `Prc_V_MaterialRequestAvailableItem`, `Prc_V_PurchaseImportItem`, `Prc_V_PurchaseRfqComparison`, `Prc_V_PurchaseRfqAlternative`, `Prc_V_PurchaseRfqAlternativeSupplier`, `Prc_V_PurchaseAgreementLine`, `Prc_P_PurchaseRfq*`, `Prc_P_PurchaseOrder*`, `Prc_P_PurchaseImportItem`, `Adm_P_SequenceNext` (sql + postgres object). - Wizard'lar: `Prc_PurchaseRfq{,Line,ImportItem,Quote,Other,Alternative,Comparison}.json`, `Prc_PurchaseOrder{,Line,ImportItem,Other,Alternative}.json`, `Prc_PurchaseAgreement{,Line}.json`. -- Arayüz: `ui/src/views/purchasing/PurchaseRequestImportDialog.tsx`, `PurchaseRfqAlternativeDialog.tsx` (kayıt: `DialogShowComponent`). +- Arayüz: `ui/src/views/purchasing/PurchaseDocGridDialog.tsx` (kayıt: `DialogShowComponent`, ad `PurchaseDocGrid`). - Veri: Diziler `PurchaseRfq`, `PurchaseOrder1`, `PurchaseAgreement1`; Bildirim Türleri ve Kuralları `TeklifTalebiGonderildi`, `SatinalmaSiparisiGonderildi`. - Geri alma: önce ana ekranlar (`Prc_PurchaseRfq`, `Prc_PurchaseOrder`, `Prc_PurchaseAgreement`), sonra alt formlar `delete_wizard` ile silinir; tablolar yalnız açık onayla düşürülür. @@ -355,7 +400,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Menü | `App.Prc.Definitions` › `App.Prc.RejectReason` (sıra 5) | | Yetki | `App.Prc.RejectReason` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Red Nedenleri — satınalma taleplerinin reddedilme sebepleri (ihtiyaç yok, miktar uygun değil, yanlış ürün, bütçe uygun değil, diğer). | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Prc_T_RejectReason` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | @@ -370,7 +415,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | -### Malzeme Talepleri (`App.Prc.MaterialRequests`) +### Talepler (`App.Prc.MaterialRequests`) #### Taleplerim — `App.Prc.MyMaterialRequest` @@ -381,7 +426,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Menü | `App.Prc.MaterialRequests` › `App.Prc.MyMaterialRequest` (sıra 1) | | Yetki | `App.Prc.MyMaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla. | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "RequesterUserId" = '@USERID'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | @@ -389,7 +434,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Alt formlar | `App.Prc.MaterialRequestLine` (Id → MaterialRequestId) | | Widget'lar | `App.Prc.MaterialRequest.Widget.Mine`, `App.Prc.MaterialRequest.Widget.Pending`, `App.Prc.MaterialRequest.Widget.Approved`, `App.Prc.MaterialRequest.Widget.Rejected` | | Komutlar | InsertAfter: `Prc_P_MaterialRequestAfterSave` · UpdateAfter: `Prc_P_MaterialRequestAfterSave` · DeleteBefore: SQL | -| Form varsayılanları | RequestNo=MaterialRequest1, RequesterUserId=@USERID, DepartmentId=, RequestDate=@NOW, Priority=0 | +| Form varsayılanları | RequestNo=MaterialRequest1, RequesterUserId=@USERID, BranchId=, DepartmentId=, RequestDate=@NOW, Priority=0 | | Onay akışı | Start 'Onaya Gönderildi' → Approval 'Departman Onayı' → Approval 'Satınalma Onayı' → End 'Onaylandı' → End 'Reddedildi' | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | @@ -397,11 +442,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `RequestNo` | Talep No | dxTextBox | | ✓ | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script | -| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | -| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse · script | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | +| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department (← BranchId) | +| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) | | `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location (← WarehouseId) | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | | -| `Description` | Genel Açıklama | dxTextBox | | ✓ | | +| `Description` | Genel Açıklama | dxHtmlEditor | | ✓ | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | | | `ApprovalDate` | Onay Tarihi | dxDateBox | | | | @@ -418,7 +464,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestDeptApproval` (sıra 2) | | Yetki | `App.Prc.MaterialRequestDeptApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Departman Onayı Bekleyenler — departman onaycısının kararını bekleyen malzeme talepleri. | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Departman Onayı'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup | @@ -434,11 +480,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `RequestNo` | Talep No | dxTextBox | | ✓ | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | | `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse | | `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | | -| `Description` | Genel Açıklama | dxTextArea | | ✓ | | +| `Description` | Genel Açıklama | dxHtmlEditor | | ✓ | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | | | `PurchaseApproverUserNames` | Satınalma Onaycıları | dxTextBox | | | | @@ -455,7 +502,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestPurchaseApproval` (sıra 3) | | Yetki | `App.Prc.MaterialRequestPurchaseApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri. | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Satınalma Onayı'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup | @@ -471,11 +518,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `RequestNo` | Talep No | dxTextBox | | ✓ | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | | `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse | | `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | | -| `Description` | Genel Açıklama | dxTextArea | | ✓ | | +| `Description` | Genel Açıklama | dxHtmlEditor | | ✓ | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | | | `PurchaseApproverUserNames` | Satınalma Onaycıları | dxTextBox | | | | @@ -492,7 +540,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequest` (sıra 5) | | Yetki | `App.Prc.MaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Tüm Talepler — kurumun bütün malzeme talepleri, tüm durumlarıyla, kalem kalem; satınalma yönetiminin listesi. | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Prc_V_MaterialRequestLine` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup | @@ -504,11 +552,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `RequestNo` | Talep No | dxTextBox | | | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | | | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | | sorgu: AbpUsers | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | | sorgu: Sas_T_Branch | | `DepartmentId` | Departman | dxSelectBox | ✓ | | sorgu: Hr_T_Department | | `WarehouseId` | Depo | dxSelectBox | ✓ | | sorgu: Inv_T_Warehouse | | `LocationId` | Konum | dxSelectBox | ✓ | | sorgu: Inv_T_Location (← WarehouseId) | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | | | -| `Description` | Genel Açıklama | dxTextBox | | | | +| `Description` | Genel Açıklama | dxHtmlEditor | | | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | | | `ApprovalDate` | Onay Tarihi | dxDateBox | | | | @@ -533,7 +582,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Menü | Menüsüz (alt form) | | Yetki | `App.Prc.MaterialRequestLine` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Talep Satırları — malzeme talebinde istenen ürünler. | -| Geliştirme talebi | Satınalma -> Malzeme Talepleri | +| Geliştirme talebi | Satınalma -> Talepler | | Kaynak | `Prc_T_MaterialRequestItem` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | @@ -554,7 +603,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `PurchaseResponsibleUserId` | Satınalma Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers | | `LineStatus` | Satır Durumu | dxSelectBox | ✓ | ✓ | liste: Waiting, Done, Cancelled | -### Siparişler (`App.Prc.Orders`) +### Sözleşmeler (`App.Prc.PurchaseAgreement`) #### Sözleşmeler — `App.Prc.PurchaseAgreement` @@ -562,7 +611,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | --- | --- | | Wizard | `wizard/Prc_PurchaseAgreement.json` | | Yol | Liste (Wizard) | -| Menü | `App.Prc.Orders` › `App.Prc.PurchaseAgreement` (sıra 1) | +| Menü | `App.Prc` › `App.Prc.PurchaseAgreement` (sıra 3) | | Yetki | `App.Prc.PurchaseAgreement` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Sözleşmeler — tedarikçilerle yapılan kapsamlı sipariş ve ihale sözleşmeleri; anlaşılan miktar ve birim fiyatlarıyla. | | Geliştirme talebi | Satınalma -> Siparişler | @@ -573,106 +622,23 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Alt formlar | `App.Prc.PurchaseAgreementLine` (Id → AgreementId) | | Widget'lar | `App.Prc.AgreementStatus.Draft`, `App.Prc.AgreementStatus.Confirmed`, `App.Prc.AgreementStatus.Closed`, `App.Prc.AgreementStatus.Cancelled` | | Komutlar | UpdateBefore: SQL | -| Form varsayılanları | AgreementNo=PurchaseAgreement1, BuyerUserId=@USERID, CurrencyId=TRY, StartDate=@NOW, Status=Draft | +| Form varsayılanları | AgreementNo=PurchaseAgreement1, BuyerUserId=@USERID, CurrencyId=TRY, StartDate=@NOW, Status=Draft, BranchId= | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | -| `AgreementNo` | Sözleşme | dxTextBox | ✓ | ✓ | | | `SupplierId` | Tedarikçi | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Contact | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | +| `AgreementNo` | Sözleşme | dxTextBox | ✓ | ✓ | | | `BuyerUserId` | Alıcı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | | `AgreementType` | Sözleşme Türü | dxSelectBox | ✓ | ✓ | liste: Blanket, Tender | | `CurrencyId` | Kur | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency | | `StartDate` | Başlama Tarihi | dxDateBox | | ✓ | | | `EndDate` | Bitiş Tarihi | dxDateBox | | ✓ | | -| `Reference` | Referans | dxTextBox | | ✓ | | -| `OperationTypeId` | Operasyon Türü | dxSelectBox | | ✓ | sorgu: Inv_T_OperationType | +| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) | +| `OperationTypeId` | Operasyon Türü | dxSelectBox | | ✓ | sorgu: Inv_T_OperationType (← WarehouseId) | | `Status` | Durumu | dxSelectBox | ✓ | ✓ | liste: Draft, Confirmed, Closed, Cancelled | | `Terms` | Şartlar ve Koşullar | dxHtmlEditor | | ✓ | | -#### Teklif Talepleri — `App.Prc.PurchaseRfq` - -| Özellik | Değer | -| --- | --- | -| Wizard | `wizard/Prc_PurchaseRfq.json` | -| Yol | Liste (Wizard) | -| Menü | `App.Prc.Orders` › `App.Prc.PurchaseRfq` (sıra 2) | -| Yetki | `App.Prc.PurchaseRfq` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | -| Açıklama | Teklif Talepleri — her tedarikçi için ayrı satınalma belgesi; aynı ihtiyaç için açılan belgeler bir ihale oluşturur ve siparişten önce kıyaslanır. | -| Geliştirme talebi | Satınalma -> Siparişler | -| Kaynak | `Prc_T_PurchaseRfq` · filtre `"IsDeleted" = 'false'` | -| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | -| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | -| Kapsam | Kiracı | -| Alt formlar | `App.Prc.PurchaseRfqLine` (Id → PurchaseRfqId), `App.Prc.PurchaseRfqImportItem` (Id → BaseId), `App.Prc.PurchaseRfqQuote` (Id → Id), `App.Prc.PurchaseRfqOther` (Id → Id), `App.Prc.PurchaseRfqAlternative` (Id → BaseId), `App.Prc.PurchaseRfqComparison` (Id → BaseId) | -| Widget'lar | `App.Widget.Draft`, `App.Widget.Sent`, `App.Widget.Expired`, `App.Widget.Completed` | -| Komutlar | InsertAfter: `Prc_P_PurchaseRfqAfterSave` · UpdateBefore: SQL · UpdateAfter: `Prc_P_PurchaseRfqAfterSave` · DeleteBefore: SQL | -| Form varsayılanları | RfqNo=PurchaseRfq, BuyerUserId=@USERID, CurrencyId=TRY, RequireConfirmation=false, Status=Draft | -| Butonlar | `App.Prc.PurchaseRfq.ImportRequests`, `App.Prc.PurchaseRfq.CreateAlternative`, `App.Prc.PurchaseOrder.Action.Send`, `App.Prc.PurchaseRfq.Action.SendTender`, `App.Prc.PurchaseRfq.Action.Award`, `App.Prc.PurchaseOrder.Action.Cancel`, `App.Prc.PurchaseOrder.Action.Draft` | - -| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | -| --- | --- | --- | --- | --- | --- | -| `SupplierId` | Tedarikçi | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Contact · script | -| `RfqNo` | Teklif Talep No | dxTextBox | ✓ | ✓ | | -| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Sent, Purchase, Cancelled | -| `OrderDeadline` | Sipariş Zaman Sınırı | dxDateBox | | ✓ | | -| `SupplierReference` | Tedarikçi Referansı | dxTextBox | | ✓ | | -| `ExpectedArrival` | Beklenen Geliş | dxDateBox | | ✓ | | -| `AgreementId` | Sözleşme | dxSelectBox | | ✓ | sorgu: Prc_T_PurchaseAgreement (← SupplierId) | -| `RequireConfirmation` | Onay İsteyin | dxCheckBox | | ✓ | | -| `CurrencyId` | Para Birimi | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency | -| `OperationTypeId` | Operasyon Türü | dxSelectBox | | ✓ | sorgu: Inv_T_OperationType | -| `PendingAction` | İşlem | dxTextBox | | | | -| `TenderGroupId` | İhale | dxSelectBox | | | sorgu: Prc_T_PurchaseRfq | -| `SupplierResponse` | Tedarikçi Yanıtı | dxSelectBox | | | liste: Waiting, Quoted, NotQuoted | -| `SourceDocument` | Kaynak | dxTextBox | | | | -| `BuyerUserId` | Alıcı | dxSelectBox | | | sorgu: AbpUsers | -| `UntaxedAmount` | Vergi Hariç Tutar | dxNumberBox | | | | -| `TaxAmount` | Vergi Tutarı | dxNumberBox | | | | -| `TotalAmount` | Toplam Tutar | dxNumberBox | | | | -| `LastSentDate` | Son Gönderim | dxDateBox | | | | -| `Terms` | Şartlar | dxHtmlEditor | | ✓ | | - -#### Satınalma Siparişleri — `App.Prc.PurchaseOrder` - -| Özellik | Değer | -| --- | --- | -| Wizard | `wizard/Prc_PurchaseOrder.json` | -| Yol | Liste (Wizard) | -| Menü | `App.Prc.Orders` › `App.Prc.PurchaseOrder` (sıra 3) | -| Yetki | `App.Prc.PurchaseOrder` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | -| Açıklama | Satınalma Siparişleri — tedarikçilere verilen siparişler; teklif talebi ihalesinden dönüştürülür ya da teklif toplamadan doğrudan yazılır. | -| Geliştirme talebi | Satınalma -> Siparişler | -| Kaynak | `Prc_T_PurchaseOrder` · filtre `"IsDeleted" = 'false'` | -| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | -| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | -| Kapsam | Kiracı | -| Alt formlar | `App.Prc.PurchaseOrderLine` (Id → PurchaseOrderId), `App.Prc.PurchaseOrderImportItem` (Id → BaseId), `App.Prc.PurchaseOrderOther` (Id → Id), `App.Prc.PurchaseOrderAlternative` (Id → BaseId) | -| Widget'lar | `App.Widget.Draft`, `App.Prc.PurchaseOrder.Widget.AwaitingArrival`, `App.Prc.PurchaseOrder.Widget.LateReceipt`, `App.Widget.TotalRevenue` | -| Komutlar | InsertAfter: `Prc_P_PurchaseOrderAfterSave` · UpdateBefore: SQL · UpdateAfter: `Prc_P_PurchaseOrderAfterSave` · DeleteBefore: SQL | -| Form varsayılanları | OrderNo=PurchaseOrder1, BuyerUserId=@USERID, CurrencyId=TRY, Status=Draft | -| Butonlar | `App.Prc.PurchaseRfq.ImportRequests`, `App.Prc.PurchaseOrder.Action.Confirm`, `App.Prc.PurchaseOrder.Action.Send`, `App.Prc.PurchaseOrder.Action.Cancel`, `App.Prc.PurchaseOrder.Action.Draft` | - -| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | -| --- | --- | --- | --- | --- | --- | -| `SupplierId` | Tedarikçi | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Contact · script | -| `OrderNo` | Referans | dxTextBox | ✓ | ✓ | | -| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Purchase, Cancelled | -| `ConfirmDate` | Onaylama Tarihi | dxDateBox | | ✓ | | -| `SupplierReference` | Tedarikçi Referansı | dxTextBox | | ✓ | | -| `ExpectedArrival` | Beklenen Geliş | dxDateBox | | ✓ | | -| `AgreementId` | Sözleşme | dxSelectBox | | ✓ | sorgu: Prc_T_PurchaseAgreement (← SupplierId) | -| `ArrivalDate` | Varış | dxDateBox | | ✓ | | -| `CurrencyId` | Para Birimi | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency | -| `OperationTypeId` | Operasyon Türü | dxSelectBox | | ✓ | sorgu: Inv_T_OperationType | -| `PendingAction` | İşlem | dxTextBox | | | | -| `SourceDocument` | Kaynak | dxTextBox | | | | -| `BuyerUserId` | Alıcı | dxSelectBox | | | sorgu: AbpUsers | -| `UntaxedAmount` | Vergi Hariç Tutar | dxNumberBox | | | | -| `TaxAmount` | Vergi Tutarı | dxNumberBox | | | | -| `TotalAmount` | Toplam Tutar | dxNumberBox | | | | -| `LastSentDate` | Son Gönderim | dxDateBox | | | | -| `Terms` | Şartlar | dxHtmlEditor | | ✓ | | - #### Sözleşme Kalemleri — `App.Prc.PurchaseAgreementLine` | Özellik | Değer | @@ -698,6 +664,95 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | | | `Description` | Açıklama | dxTextArea | | ✓ | | +### Siparişler (`App.Prc.Orders`) + +#### Teklif Talepleri — `App.Prc.PurchaseRfq` + +| Özellik | Değer | +| --- | --- | +| Wizard | `wizard/Prc_PurchaseRfq.json` | +| Yol | Liste (Wizard) | +| Menü | `App.Prc.Orders` › `App.Prc.PurchaseRfq` (sıra 1) | +| Yetki | `App.Prc.PurchaseRfq` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | +| Açıklama | Teklif Talepleri — her tedarikçi için ayrı satınalma belgesi; aynı ihtiyaç için açılan belgeler bir ihale oluşturur ve siparişten önce kıyaslanır. | +| Geliştirme talebi | Satınalma -> Siparişler | +| Kaynak | `Prc_T_PurchaseRfq` · filtre `"IsDeleted" = 'false'` | +| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | +| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | +| Kapsam | Kiracı | +| Alt formlar | `App.Prc.PurchaseRfqLine` (Id → PurchaseRfqId), `App.Prc.PurchaseRfqImportItem` (Id → BaseId), `App.Prc.PurchaseRfqQuote` (Id → Id), `App.Prc.PurchaseRfqOther` (Id → Id), `App.Prc.PurchaseRfqAlternative` (Id → BaseId), `App.Prc.PurchaseRfqComparison` (Id → BaseId) | +| Widget'lar | `App.Widget.Draft`, `App.Widget.Sent`, `App.Widget.Expired`, `App.Widget.Completed` | +| Komutlar | InsertAfter: `Prc_P_PurchaseRfqAfterSave` · UpdateBefore: SQL · UpdateAfter: `Prc_P_PurchaseRfqAfterSave` · DeleteBefore: SQL | +| Form varsayılanları | RfqNo=PurchaseRfq, BuyerUserId=@USERID, CurrencyId=TRY, Status=Draft, BranchId= | +| Butonlar | `App.Prc.PurchaseRfq.ImportRequests`, `App.Prc.PurchaseRfq.CreateAlternative`, `App.Prc.PurchaseRfq.PriceEntry`, `App.Prc.PurchaseOrder.Action.Send`, `App.Prc.PurchaseRfq.Action.SendTender`, `App.Prc.PurchaseRfq.Action.Award`, `App.Prc.PurchaseOrder.Action.Cancel`, `App.Prc.PurchaseOrder.Action.Draft` | + +| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | +| --- | --- | --- | --- | --- | --- | +| `SupplierId` | Tedarikçi | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Contact · script | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | +| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) | +| `OperationTypeId` | Operasyon Türü | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_OperationType (← WarehouseId) | +| `RfqNo` | Teklif Talep No | dxTextBox | ✓ | ✓ | | +| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Sent, Purchase, Cancelled | +| `OrderDeadline` | Sipariş Zaman Sınırı | dxDateBox | | ✓ | | +| `SupplierReference` | Tedarikçi Referansı | dxTextBox | | ✓ | | +| `ExpectedArrival` | Beklenen Geliş | dxDateBox | | ✓ | | +| `AgreementId` | Sözleşme | dxSelectBox | | ✓ | sorgu: Prc_T_PurchaseAgreement (← SupplierId,BranchId) | +| `CurrencyId` | Para Birimi | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency | +| `PendingAction` | İşlem | dxTextBox | | | | +| `TenderGroupId` | İhale | dxSelectBox | | | sorgu: Prc_T_PurchaseRfq | +| `SupplierResponse` | Tedarikçi Yanıtı | dxSelectBox | | | liste: Waiting, Quoted, NotQuoted | +| `SourceDocument` | Kaynak | dxTextBox | | | | +| `BuyerUserId` | Alıcı | dxSelectBox | | | sorgu: AbpUsers | +| `UntaxedAmount` | Vergi Hariç Tutar | dxNumberBox | | | | +| `TaxAmount` | Vergi Tutarı | dxNumberBox | | | | +| `TotalAmount` | Toplam Tutar | dxNumberBox | | | | +| `LastSentDate` | Son Gönderim | dxDateBox | | | | +| `Terms` | Şartlar | dxHtmlEditor | | ✓ | | + +#### Satınalma Siparişleri — `App.Prc.PurchaseOrder` + +| Özellik | Değer | +| --- | --- | +| Wizard | `wizard/Prc_PurchaseOrder.json` | +| Yol | Liste (Wizard) | +| Menü | `App.Prc.Orders` › `App.Prc.PurchaseOrder` (sıra 2) | +| Yetki | `App.Prc.PurchaseOrder` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | +| Açıklama | Satınalma Siparişleri — tedarikçilere verilen siparişler; teklif talebi ihalesinden dönüştürülür ya da teklif toplamadan doğrudan yazılır. | +| Geliştirme talebi | Satınalma -> Siparişler | +| Kaynak | `Prc_T_PurchaseOrder` · filtre `"IsDeleted" = 'false'` | +| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | +| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | +| Kapsam | Kiracı | +| Alt formlar | `App.Prc.PurchaseOrderLine` (Id → PurchaseOrderId), `App.Prc.PurchaseOrderImportItem` (Id → BaseId), `App.Prc.PurchaseOrderOther` (Id → Id), `App.Prc.PurchaseOrderAlternative` (Id → BaseId) | +| Widget'lar | `App.Widget.Draft`, `App.Prc.PurchaseOrder.Widget.AwaitingArrival`, `App.Prc.PurchaseOrder.Widget.LateReceipt`, `App.Widget.TotalRevenue` | +| Komutlar | InsertAfter: `Prc_P_PurchaseOrderAfterSave` · UpdateBefore: SQL · UpdateAfter: `Prc_P_PurchaseOrderAfterSave` · DeleteBefore: SQL · DeleteAfter: `Prc_P_MaterialRequestSyncStatus` | +| Form varsayılanları | OrderNo=PurchaseOrder1, BuyerUserId=@USERID, CurrencyId=TRY, Status=Draft, BranchId= | +| Butonlar | `App.Prc.PurchaseRfq.ImportRequests`, `App.Prc.PurchaseOrder.Action.Confirm`, `App.Prc.PurchaseOrder.Action.Send`, `App.Prc.PurchaseOrder.Action.Cancel`, `App.Prc.PurchaseOrder.Action.Draft` | + +| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | +| --- | --- | --- | --- | --- | --- | +| `SupplierId` | Tedarikçi | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Contact · script | +| `OrderNo` | Referans | dxTextBox | ✓ | ✓ | | +| `AgreementId` | Sözleşme | dxSelectBox | | ✓ | sorgu: Prc_T_PurchaseAgreement (← SupplierId,BranchId) | +| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | +| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) | +| `OperationTypeId` | Operasyon Türü | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_OperationType (← WarehouseId) | +| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Purchase, Cancelled | +| `ConfirmDate` | Onaylama Tarihi | dxDateBox | | ✓ | | +| `SupplierReference` | Tedarikçi Referansı | dxTextBox | | ✓ | | +| `ExpectedArrival` | Beklenen Geliş | dxDateBox | | ✓ | | +| `ArrivalDate` | Varış | dxDateBox | | ✓ | | +| `CurrencyId` | Para Birimi | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency | +| `PendingAction` | İşlem | dxTextBox | | | | +| `SourceDocument` | Kaynak | dxTextBox | | | | +| `BuyerUserId` | Alıcı | dxSelectBox | | | sorgu: AbpUsers | +| `UntaxedAmount` | Vergi Hariç Tutar | dxNumberBox | | | | +| `TaxAmount` | Vergi Tutarı | dxNumberBox | | | | +| `TotalAmount` | Toplam Tutar | dxNumberBox | | | | +| `LastSentDate` | Son Gönderim | dxDateBox | | | | +| `Terms` | Şartlar | dxHtmlEditor | | ✓ | | + #### Teklif Kalemleri — `App.Prc.PurchaseRfqLine` | Özellik | Değer | @@ -720,10 +775,10 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `PurchaseRfqId` | Teklif Talebi | dxTextBox | | | | | `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script | | `Description` | Açıklama | dxTextBox | | ✓ | | -| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | | +| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | script | | `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom | -| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | | -| `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | | +| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | script | +| `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | script | | `Amount` | Tutar | dxNumberBox | | ✓ | script | | `DeliveryDate` | Teslim Tarihi | dxDateBox | | ✓ | | | `MaterialRequestItemId` | Talep | dxSelectBox | | ✓ | sorgu: Prc_T_MaterialRequestItem | @@ -740,8 +795,9 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Geliştirme talebi | Satınalma -> Siparişler | | Kaynak | `Prc_V_PurchaseImportItem` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | -| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · batch | +| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · batch | | Kapsam | Kiracı | +| Butonlar | `App.Prc.PurchaseImportItem.TransferSelected` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | @@ -753,7 +809,6 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `UomId` | Birim | dxSelectBox | | | sorgu: Adm_T_Uom | | `DueDate` | Bitiş Tarihi | dxDateBox | | | | | `RequestReason` | Talep Nedeni | dxTextBox | | | | -| `Transfer` | Aktar | dxCheckBox | | ✓ | | #### Tedarikçi Teklifi — `App.Prc.PurchaseRfqQuote` @@ -812,11 +867,11 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Yol | Liste (Wizard) | | Menü | Menüsüz (alt form) | | Yetki | `App.Prc.PurchaseRfqAlternative` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | -| Açıklama | İhale Teklifleri — aynı ihalenin diğer teklif talepleri; alternatifler burada oluşturulur. | +| Açıklama | İhale Teklifleri — aynı ihalenin diğer teklif talepleri. | | Geliştirme talebi | Satınalma -> Siparişler | | Kaynak | `Prc_V_PurchaseRfqAlternative` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | -| Düzenleme | ekle ✓ · düzenle ✗ · sil ✗ · popup | +| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup | | Kapsam | Kiracı | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | @@ -846,7 +901,6 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · batch | | Kapsam | Kiracı | -| Komutlar | UpdateBefore: SQL · UpdateAfter: `Prc_P_PurchaseRfqRecalc` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | @@ -888,10 +942,10 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `PurchaseOrderId` | Satınalma Siparişi | dxTextBox | | | | | `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script | | `Description` | Açıklama | dxTextBox | | ✓ | | -| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | | +| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | script | | `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom | -| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | | -| `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | | +| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | script | +| `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | script | | `Amount` | Tutar | dxNumberBox | | ✓ | script | | `DeliveryDate` | Teslim Tarihi | dxDateBox | | ✓ | | | `MaterialRequestItemId` | Talep | dxSelectBox | | ✓ | sorgu: Prc_T_MaterialRequestItem | @@ -908,8 +962,9 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | Geliştirme talebi | Satınalma -> Siparişler | | Kaynak | `Prc_V_PurchaseImportItem` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | -| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · batch | +| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · batch | | Kapsam | Kiracı | +| Butonlar | `App.Prc.PurchaseImportItem.TransferSelected` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | @@ -921,7 +976,6 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `UomId` | Birim | dxSelectBox | | | sorgu: Adm_T_Uom | | `DueDate` | Bitiş Tarihi | dxDateBox | | | | | `RequestReason` | Talep Nedeni | dxTextBox | | | | -| `Transfer` | Aktar | dxCheckBox | | ✓ | | #### Diğer Bilgiler — `App.Prc.PurchaseOrderOther` @@ -975,4 +1029,29 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes | `TotalAmount` | Toplam Tutar | dxNumberBox | | | | | `CurrencyId` | Para Birimi | dxTextBox | | | | +#### Alternatif Tedarikçiler — `App.Prc.PurchaseRfqAlternativeSupplier` + +| Özellik | Değer | +| --- | --- | +| Wizard | `wizard/Prc_PurchaseRfqAlternativeSupplier.json` | +| Yol | Liste (Wizard) | +| Menü | Menüsüz (alt form) | +| Yetki | `App.Prc.PurchaseRfqAlternativeSupplier` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | +| Açıklama | Alternatif Tedarikçiler — ihalede henüz teklif talebi olmayan aktif kontaklar, açık teklif talebine alternatif eklemek için listelenir. | +| Geliştirme talebi | Satınalma -> Siparişler | +| Kaynak | `Prc_V_PurchaseRfqAlternativeSupplier` | +| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | +| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · batch | +| Kapsam | Kiracı | +| Butonlar | `App.Prc.PurchaseRfqAlternativeSupplier.CreateSelected` | + +| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | +| --- | --- | --- | --- | --- | --- | +| `BaseId` | Ana Belge | dxTextBox | | | | +| `Name` | Adı | dxTextBox | | | | +| `City` | Şehir | dxTextBox | | | | +| `Phone` | Telefon | dxTextBox | | | | +| `Email` | E-posta | dxTextBox | | | | +| `SupplierCurrency` | Tedarikçi Para Birimi | dxTextBox | | | | + diff --git a/configs/seeds/postgres/object/Adm_T_Approver.sql b/configs/seeds/postgres/object/Adm_T_Approver.sql index bf6ca40c..9306c2f9 100644 --- a/configs/seeds/postgres/object/Adm_T_Approver.sql +++ b/configs/seeds/postgres/object/Adm_T_Approver.sql @@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS public."Adm_T_Approver" "TenantId" uuid NULL, "DepartmentId" uuid NOT NULL, "ApprovalArea" varchar(32) NOT NULL DEFAULT 'Purchase', - "ApproverUserId" uuid NOT NULL, + "ApprovalUserName" varchar(256) NOT NULL, "IsActive" boolean NOT NULL DEFAULT TRUE, "CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'), "CreatorId" uuid NULL, @@ -18,8 +18,8 @@ CREATE TABLE IF NOT EXISTS public."Adm_T_Approver" DO $$ BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApproverUserId') THEN - ALTER TABLE public."Adm_T_Approver" ADD CONSTRAINT "UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApproverUserId" UNIQUE ("TenantId", "DepartmentId", "ApprovalArea", "ApproverUserId"); + IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApprovalUserName') THEN + ALTER TABLE public."Adm_T_Approver" ADD CONSTRAINT "UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApprovalUserName" UNIQUE ("TenantId", "DepartmentId", "ApprovalArea", "ApprovalUserName"); END IF; END $$; diff --git a/configs/seeds/postgres/object/Prc_P_MaterialRequestAfterSave.sql b/configs/seeds/postgres/object/Prc_P_MaterialRequestAfterSave.sql index db8dafe6..7730d944 100644 --- a/configs/seeds/postgres/object/Prc_P_MaterialRequestAfterSave.sql +++ b/configs/seeds/postgres/object/Prc_P_MaterialRequestAfterSave.sql @@ -10,7 +10,8 @@ BEGIN "DeptApproverUserNames" = ( SELECT string_agg(u."UserName", '|') FROM "Adm_T_Approver" a - INNER JOIN "AbpUsers" u ON u."Id" = a."ApproverUserId" AND u."IsDeleted" = false + INNER JOIN "AbpUsers" u ON u."UserName" = a."ApprovalUserName" AND u."IsDeleted" = false AND u."IsActive" = true + AND u."TenantId" IS NOT DISTINCT FROM a."TenantId" WHERE a."IsDeleted" = false AND a."IsActive" = true AND a."ApprovalArea" = 'Purchase' AND a."DepartmentId" = r."DepartmentId" AND a."TenantId" IS NOT DISTINCT FROM r."TenantId"), diff --git a/configs/seeds/postgres/object/Prc_P_MaterialRequestSyncStatus.sql b/configs/seeds/postgres/object/Prc_P_MaterialRequestSyncStatus.sql new file mode 100644 index 00000000..c4181c44 --- /dev/null +++ b/configs/seeds/postgres/object/Prc_P_MaterialRequestSyncStatus.sql @@ -0,0 +1,47 @@ +-- Onaylanan talebin durumu satınalmada ilerledikçe iş akışının durum alanında devam eder: kalemlerinden biri +-- iptal olmayan bir siparişteyse Satınalma Siparişi, gönderilmiş teklif talebindeyse Teklif Talebi Gönderildi, +-- taslak teklif talebindeyse Teklif Talebi; hiçbirinde değilse Onaylandı'ya döner. Akış "Onaylandı"da bittiği +-- için bu değerler hiçbir onay düğümüyle eşleşmez ve akış butonları kapalı kalır. p_doc_id verilirse yalnız o +-- belgenin (teklifte bütün ihalenin) kalemlerine bağlı talepler; boşsa onaylanmış bütün talepler yeniden hesaplanır. +CREATE OR REPLACE PROCEDURE public."Prc_P_MaterialRequestSyncStatus"(p_doc_id uuid DEFAULT NULL) +LANGUAGE plpgsql AS $$ +DECLARE v_group uuid; +BEGIN + SELECT COALESCE("TenderGroupId", "Id") INTO v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_doc_id; + IF v_group IS NULL THEN + SELECT COALESCE(q."TenderGroupId", q."Id") INTO v_group + FROM "Prc_T_PurchaseOrder" o + INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = o."PurchaseRfqId" + WHERE o."Id" = p_doc_id; + END IF; + + UPDATE "Prc_T_MaterialRequest" m SET "ApprovalStatus" = s.stage + FROM (SELECT r."Id", CASE + WHEN EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i + INNER JOIN "Prc_T_PurchaseOrderLine" ol ON ol."MaterialRequestItemId" = i."Id" AND ol."IsDeleted" = false + INNER JOIN "Prc_T_PurchaseOrder" o ON o."Id" = ol."PurchaseOrderId" AND o."IsDeleted" = false AND o."Status" <> 'Cancelled' + WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false) THEN 'Satınalma Siparişi' + WHEN EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i + INNER JOIN "Prc_T_PurchaseRfqLine" rl ON rl."MaterialRequestItemId" = i."Id" AND rl."IsDeleted" = false + INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" AND q."IsDeleted" = false AND q."Status" IN ('Sent', 'Purchase') + WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false) THEN 'Teklif Talebi Gönderildi' + WHEN EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i + INNER JOIN "Prc_T_PurchaseRfqLine" rl ON rl."MaterialRequestItemId" = i."Id" AND rl."IsDeleted" = false + INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" AND q."IsDeleted" = false AND q."Status" = 'Draft' + WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false) THEN 'Teklif Talebi' + ELSE 'Onaylandı' END AS stage + FROM "Prc_T_MaterialRequest" r + WHERE r."IsDeleted" = false + AND r."ApprovalStatus" IN ('Onaylandı', 'Teklif Talebi', 'Teklif Talebi Gönderildi', 'Satınalma Siparişi') + -- Silinen satır da kapsamda kalır: kalemi belgeden çıkarılan talep geri dönmelidir. + AND (p_doc_id IS NULL OR EXISTS ( + SELECT 1 FROM "Prc_T_MaterialRequestItem" i + WHERE i."MaterialRequestId" = r."Id" + AND (EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfqLine" rl + INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" + WHERE rl."MaterialRequestItemId" = i."Id" AND COALESCE(q."TenderGroupId", q."Id") = v_group) + OR EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" ol + WHERE ol."MaterialRequestItemId" = i."Id" AND ol."PurchaseOrderId" = p_doc_id))))) s + WHERE m."Id" = s."Id" AND m."ApprovalStatus" <> s.stage; +END; +$$; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseImportItem.sql b/configs/seeds/postgres/object/Prc_P_PurchaseImportItem.sql index d3e83528..ce367342 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseImportItem.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseImportItem.sql @@ -1,22 +1,21 @@ --- Talep Kalemleri sekmesinde işaretlenen kalemi (p_key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. --- Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir. -CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseImportItem"(p_key varchar, p_transfer boolean DEFAULT true) +-- Talep Kalemleri sekmesinde seçilen kalemi (p_key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. +-- Kalem yalnız belgenin şubesindeki talepten gelir. Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir. +CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseImportItem"(p_key varchar) LANGUAGE plpgsql AS $$ -DECLARE v_doc uuid; v_item uuid; v_is_order boolean := false; v_tenant uuid; v_supplier uuid; v_agr uuid; v_status varchar(16); +DECLARE v_doc uuid; v_item uuid; v_is_order boolean := false; v_tenant uuid; v_branch uuid; v_supplier uuid; v_agr uuid; v_status varchar(16); v_product uuid; v_description varchar(512); v_quantity numeric(18, 4); v_uom varchar(50); v_price numeric(18, 4); v_tax numeric(18, 4); v_due timestamp; BEGIN - IF NOT COALESCE(p_transfer, false) THEN RETURN; END IF; IF p_key !~* '^[0-9a-f-]{36}\|[0-9a-f-]{36}$' THEN RAISE EXCEPTION 'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.' USING ERRCODE = 'P0001', DETAIL = '50161'; END IF; v_doc := left(p_key, 36)::uuid; v_item := right(p_key, 36)::uuid; - SELECT "TenantId", "SupplierId", "AgreementId", "Status" INTO v_tenant, v_supplier, v_agr, v_status + SELECT "TenantId", "BranchId", "SupplierId", "AgreementId", "Status" INTO v_tenant, v_branch, v_supplier, v_agr, v_status FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" IN ('Draft', 'Sent'); IF v_status IS NULL THEN - SELECT "TenantId", "SupplierId", "AgreementId", "Status", true INTO v_tenant, v_supplier, v_agr, v_status, v_is_order + SELECT "TenantId", "BranchId", "SupplierId", "AgreementId", "Status", true INTO v_tenant, v_branch, v_supplier, v_agr, v_status, v_is_order FROM "Prc_T_PurchaseOrder" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" = 'Draft'; END IF; IF v_status IS NULL THEN @@ -32,7 +31,7 @@ BEGIN INTO v_product, v_description, v_quantity, v_uom, v_due, v_tax, v_price FROM "Prc_V_MaterialRequestAvailableItem" a LEFT JOIN "Inv_T_Product" p ON p."Id" = a."ProductId" - WHERE a."Id" = v_item AND a."TenantId" IS NOT DISTINCT FROM v_tenant; + WHERE a."Id" = v_item AND a."BranchId" = v_branch AND a."TenantId" IS NOT DISTINCT FROM v_tenant; IF v_product IS NULL THEN RAISE EXCEPTION 'Talep kalemi artık aktarılamaz: başka bir teklife ya da siparişe aktarılmış veya talep değişmiş.' USING ERRCODE = 'P0001', DETAIL = '50162'; END IF; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseOrderAfterSave.sql b/configs/seeds/postgres/object/Prc_P_PurchaseOrderAfterSave.sql index 4fd48178..ffa93d9a 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseOrderAfterSave.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseOrderAfterSave.sql @@ -13,6 +13,9 @@ BEGIN CALL public."Prc_P_PurchaseOrderRecalc"(p_id); -- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. - IF v_act IS NOT NULL THEN CALL public."Prc_P_PurchaseOrderSetStatus"(p_id, v_act, p_user_id); END IF; + IF v_act IS NOT NULL THEN + CALL public."Prc_P_PurchaseOrderSetStatus"(p_id, v_act, p_user_id); + CALL public."Prc_P_MaterialRequestSyncStatus"(p_id); + END IF; END; $$; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseOrderRecalc.sql b/configs/seeds/postgres/object/Prc_P_PurchaseOrderRecalc.sql index 5b100657..f7cc0490 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseOrderRecalc.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseOrderRecalc.sql @@ -1,13 +1,13 @@ CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderRecalc"(p_id uuid) LANGUAGE plpgsql AS $$ BEGIN - UPDATE "Prc_T_PurchaseOrderLine" SET "Amount" = ROUND("Quantity" * "UnitPrice", 2) + UPDATE "Prc_T_PurchaseOrderLine" SET "Amount" = ROUND(ROUND("Quantity" * "UnitPrice", 2) * (1 + "TaxRate" / 100), 2) WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false; -- Kaynak: teklif talebinden gelen siparişte teklif no, doğrudan yazılan siparişte talep numaraları. UPDATE "Prc_T_PurchaseOrder" o SET - "UntaxedAmount" = COALESCE((SELECT SUM(l."Amount") FROM "Prc_T_PurchaseOrderLine" l WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false), 0), - "TaxAmount" = COALESCE((SELECT SUM(ROUND(l."Amount" * l."TaxRate" / 100, 2)) FROM "Prc_T_PurchaseOrderLine" l WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false), 0), + "UntaxedAmount" = COALESCE((SELECT SUM(ROUND(l."Quantity" * l."UnitPrice", 2)) FROM "Prc_T_PurchaseOrderLine" l WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false), 0), + "TaxAmount" = COALESCE((SELECT SUM(l."Amount" - ROUND(l."Quantity" * l."UnitPrice", 2)) FROM "Prc_T_PurchaseOrderLine" l WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false), 0), "SourceDocument" = COALESCE((SELECT q."RfqNo" FROM "Prc_T_PurchaseRfq" q WHERE q."Id" = o."PurchaseRfqId"), (SELECT string_agg(DISTINCT m."RequestNo", ', ') FROM "Prc_T_PurchaseOrderLine" l @@ -17,5 +17,6 @@ BEGIN WHERE o."Id" = p_id; UPDATE "Prc_T_PurchaseOrder" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id; + CALL public."Prc_P_MaterialRequestSyncStatus"(p_id); END; $$; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseRfqAfterSave.sql b/configs/seeds/postgres/object/Prc_P_PurchaseRfqAfterSave.sql index 79b391c6..a63a5de2 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseRfqAfterSave.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseRfqAfterSave.sql @@ -27,6 +27,9 @@ BEGIN CALL public."Prc_P_PurchaseRfqFromAgreement"(p_id); CALL public."Prc_P_PurchaseRfqRecalc"(p_id); -- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. - IF v_act IS NOT NULL THEN CALL public."Prc_P_PurchaseRfqSetStatus"(p_id, v_act, p_user_id); END IF; + IF v_act IS NOT NULL THEN + CALL public."Prc_P_PurchaseRfqSetStatus"(p_id, v_act, p_user_id); + CALL public."Prc_P_MaterialRequestSyncStatus"(p_id); + END IF; END; $$; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseRfqAward.sql b/configs/seeds/postgres/object/Prc_P_PurchaseRfqAward.sql index 4664e5fe..aeb3ef0e 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseRfqAward.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseRfqAward.sql @@ -28,11 +28,11 @@ BEGIN v_po := gen_random_uuid(); CALL public."Adm_P_SequenceNext"('PurchaseOrder1', v_tenant, v_no); - INSERT INTO "Prc_T_PurchaseOrder" ("Id", "TenantId", "OrderNo", "PurchaseRfqId", "SupplierId", "SupplierReference", "AgreementId", "CurrencyId", - "ExpectedArrival", "OperationTypeId", "ConfirmDate", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", + INSERT INTO "Prc_T_PurchaseOrder" ("Id", "TenantId", "OrderNo", "PurchaseRfqId", "SupplierId", "SupplierReference", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId", + "ExpectedArrival", "ConfirmDate", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", "Status", "CreationTime", "CreatorId", "IsDeleted") - SELECT v_po, "TenantId", v_no, "Id", "SupplierId", "SupplierReference", "AgreementId", "CurrencyId", - "ExpectedArrival", "OperationTypeId", NOW() AT TIME ZONE 'UTC', "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", + SELECT v_po, "TenantId", v_no, "Id", "SupplierId", "SupplierReference", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId", + "ExpectedArrival", NOW() AT TIME ZONE 'UTC', "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", 'Purchase', NOW() AT TIME ZONE 'UTC', p_user_id, false FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseRfqComparisonSave.sql b/configs/seeds/postgres/object/Prc_P_PurchaseRfqComparisonSave.sql new file mode 100644 index 00000000..d56a54e3 --- /dev/null +++ b/configs/seeds/postgres/object/Prc_P_PurchaseRfqComparisonSave.sql @@ -0,0 +1,40 @@ +-- Fiyat Girişi (App.Prc.PurchaseRfqComparison) satır kaydı. Batch kaydı her satırı ayrı ve eşzamanlı istekle gönderir; +-- satır güncellemesi ile teklifin yeniden hesabı aynı işlemde, önce ihalenin kök teklifi kilitlenerek yapılır. Grid ihalenin +-- bütün tedarikçi tekliflerinin satırlarını taşır; kilit ihale düzeyinde olduğu için bu satırlar sırayla işlenir ve satırı +-- kilitleyip diğer isteğin satırını bekleyen iki istek kilitlenmez (deadlock). +CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqComparisonSave"( + p_id uuid, + p_unit_price numeric(18, 4), + p_delivery_date timestamp, + p_is_selected boolean, + p_tenant_id uuid, + p_last_modification_time timestamp, + p_last_modifier_id uuid +) +LANGUAGE plpgsql AS $$ +DECLARE v_rfq uuid; v_group uuid; v_status varchar(16); +BEGIN + SELECT "PurchaseRfqId" INTO v_rfq FROM "Prc_T_PurchaseRfqLine" WHERE "Id" = p_id; + SELECT COALESCE("TenderGroupId", "Id") INTO v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq; + PERFORM 1 FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_group FOR UPDATE; + SELECT "Status" INTO v_status FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq; + IF v_status IN ('Purchase', 'Cancelled') THEN + RAISE EXCEPTION 'Siparişe dönüştürülmüş ya da iptal edilmiş teklifin kalemi değiştirilemez.' USING ERRCODE = 'P0001', DETAIL = '50142'; + END IF; + + UPDATE "Prc_T_PurchaseRfqLine" + SET "UnitPrice" = p_unit_price, "DeliveryDate" = p_delivery_date, "IsSelected" = p_is_selected, + "LastModificationTime" = p_last_modification_time, "LastModifierId" = p_last_modifier_id + WHERE "Id" = p_id AND "TenantId" IS NOT DISTINCT FROM p_tenant_id; + + -- Fiyatı girilen teklif yanıtlanmış sayılır; geçerlilik verilmemişse sipariş son tarihine kadar geçerlidir. + IF p_unit_price > 0 THEN + UPDATE "Prc_T_PurchaseRfq" + SET "SupplierResponse" = 'Quoted', "QuoteDate" = COALESCE("QuoteDate", NOW() AT TIME ZONE 'UTC'), + "QuoteValidUntil" = COALESCE("QuoteValidUntil", CAST("OrderDeadline" AS date)) + WHERE "Id" = v_rfq AND "SupplierResponse" = 'Waiting'; + END IF; + + CALL public."Prc_P_PurchaseRfqRecalc"(v_rfq); +END; +$$; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseRfqCreateAlternative.sql b/configs/seeds/postgres/object/Prc_P_PurchaseRfqCreateAlternative.sql index 2cec5996..0a0fbd2c 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseRfqCreateAlternative.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseRfqCreateAlternative.sql @@ -1,40 +1,46 @@ --- Teklifler sekmesinde Ekle ile seçilen tedarikçi için belgenin kopyasını aynı ihalede açar: kalemler TenderLineId ile +-- Alternatif Oluştur › Tedarikçiler'de seçilen kontak (p_key = teklif|kontak) için belgenin kopyasını aynı ihalede açar: kalemler TenderLineId ile -- birlikte kopyalanır, fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından gelir. -CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqCreateAlternative"(p_id uuid, p_supplier_id uuid, p_user_id uuid DEFAULT NULL) +CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqCreateAlternative"(p_key varchar, p_user_id uuid DEFAULT NULL) LANGUAGE plpgsql AS $$ -DECLARE v_tenant uuid; v_status varchar(16); v_group uuid; v_new uuid := gen_random_uuid(); v_no varchar(128); +DECLARE v_id uuid; v_supplier uuid; v_tenant uuid; v_status varchar(16); v_group uuid; v_new uuid := gen_random_uuid(); v_no varchar(128); BEGIN - SELECT "TenantId", "Status", "TenderGroupId" INTO v_tenant, v_status, v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_id; + IF p_key !~* '^[0-9a-f-]{36}\|[0-9a-f-]{36}$' THEN + RAISE EXCEPTION 'Siparişe dönüştürülmüş ya da iptal edilmiş teklife alternatif eklenemez.' USING ERRCODE = 'P0001', DETAIL = '50164'; + END IF; + v_id := left(p_key, 36)::uuid; + v_supplier := right(p_key, 36)::uuid; + + SELECT "TenantId", "Status", "TenderGroupId" INTO v_tenant, v_status, v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_id; IF COALESCE(v_status, '') NOT IN ('Draft', 'Sent') THEN RAISE EXCEPTION 'Siparişe dönüştürülmüş ya da iptal edilmiş teklife alternatif eklenemez.' USING ERRCODE = 'P0001', DETAIL = '50164'; END IF; - IF EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfq" WHERE "TenderGroupId" = v_group AND "SupplierId" = p_supplier_id AND "IsDeleted" = false AND "Status" <> 'Cancelled') THEN + IF EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfq" WHERE "TenderGroupId" = v_group AND "SupplierId" = v_supplier AND "IsDeleted" = false AND "Status" <> 'Cancelled') THEN RAISE EXCEPTION 'Bu tedarikçinin ihalede zaten bir teklif talebi var.' USING ERRCODE = 'P0001', DETAIL = '50167'; END IF; CALL public."Adm_P_SequenceNext"('PurchaseRfq', v_tenant, v_no); - INSERT INTO "Prc_T_PurchaseRfq" ("Id", "TenantId", "RfqNo", "TenderGroupId", "SupplierId", "AgreementId", "CurrencyId", "OrderDeadline", - "ExpectedArrival", "RequireConfirmation", "OperationTypeId", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", + INSERT INTO "Prc_T_PurchaseRfq" ("Id", "TenantId", "RfqNo", "TenderGroupId", "SupplierId", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId", "OrderDeadline", + "ExpectedArrival", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", "PriceWeight", "DeliveryWeight", "CreationTime", "CreatorId", "IsDeleted") - SELECT v_new, r."TenantId", v_no, r."TenderGroupId", c."Id", NULL, COALESCE(c."SupplierCurrency", r."CurrencyId"), r."OrderDeadline", - r."ExpectedArrival", r."RequireConfirmation", r."OperationTypeId", r."BuyerUserId", r."ProjectId", + SELECT v_new, r."TenantId", v_no, r."TenderGroupId", c."Id", NULL, r."BranchId", r."OperationTypeId", r."WarehouseId", COALESCE(c."SupplierCurrency", r."CurrencyId"), r."OrderDeadline", + r."ExpectedArrival", r."BuyerUserId", r."ProjectId", COALESCE(c."PurchaseIncotermId", r."IncotermId"), COALESCE(c."PurchaseIncotermLocation", r."IncotermLocation"), COALESCE(c."PurchasePaymentTermId", r."PaymentTermId"), r."Terms", r."PriceWeight", r."DeliveryWeight", NOW() AT TIME ZONE 'UTC', p_user_id, false FROM "Prc_T_PurchaseRfq" r - INNER JOIN "Adm_T_Contact" c ON c."Id" = p_supplier_id - WHERE r."Id" = p_id; + INNER JOIN "Adm_T_Contact" c ON c."Id" = v_supplier + WHERE r."Id" = v_id; INSERT INTO "Prc_T_PurchaseRfqLine" ("Id", "TenantId", "PurchaseRfqId", "TenderLineId", "ProductId", "Description", "Quantity", "UomId", "UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "CreatorId", "IsDeleted") SELECT gen_random_uuid(), l."TenantId", v_new, l."TenderLineId", l."ProductId", l."Description", l."Quantity", l."UomId", COALESCE((SELECT ps."Price" FROM "Inv_T_ProductSupplier" ps - WHERE ps."ProductId" = l."ProductId" AND ps."ContactId" = p_supplier_id AND ps."IsDeleted" = false + WHERE ps."ProductId" = l."ProductId" AND ps."ContactId" = v_supplier AND ps."IsDeleted" = false ORDER BY ps."MinQuantity" LIMIT 1), 0), l."TaxRate", 0, l."DeliveryDate", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false FROM "Prc_T_PurchaseRfqLine" l - WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false; + WHERE l."PurchaseRfqId" = v_id AND l."IsDeleted" = false; CALL public."Prc_P_PurchaseRfqRecalc"(v_new); END; diff --git a/configs/seeds/postgres/object/Prc_P_PurchaseRfqRecalc.sql b/configs/seeds/postgres/object/Prc_P_PurchaseRfqRecalc.sql index 5078c6dd..3c1170a0 100644 --- a/configs/seeds/postgres/object/Prc_P_PurchaseRfqRecalc.sql +++ b/configs/seeds/postgres/object/Prc_P_PurchaseRfqRecalc.sql @@ -2,12 +2,12 @@ CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqRecalc"(p_id uuid) LANGUAGE plpgsql AS $$ BEGIN -- TenderLineId alternatiflere kopyalanır; ihaledeki aynı kalemi kıyasta birleştiren anahtardır. - UPDATE "Prc_T_PurchaseRfqLine" SET "Amount" = ROUND("Quantity" * "UnitPrice", 2), "TenderLineId" = COALESCE("TenderLineId", "Id") + UPDATE "Prc_T_PurchaseRfqLine" SET "Amount" = ROUND(ROUND("Quantity" * "UnitPrice", 2) * (1 + "TaxRate" / 100), 2), "TenderLineId" = COALESCE("TenderLineId", "Id") WHERE "PurchaseRfqId" = p_id AND "IsDeleted" = false; UPDATE "Prc_T_PurchaseRfq" r SET - "UntaxedAmount" = COALESCE((SELECT SUM(l."Amount") FROM "Prc_T_PurchaseRfqLine" l WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false), 0), - "TaxAmount" = COALESCE((SELECT SUM(ROUND(l."Amount" * l."TaxRate" / 100, 2)) FROM "Prc_T_PurchaseRfqLine" l WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false), 0), + "UntaxedAmount" = COALESCE((SELECT SUM(ROUND(l."Quantity" * l."UnitPrice", 2)) FROM "Prc_T_PurchaseRfqLine" l WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false), 0), + "TaxAmount" = COALESCE((SELECT SUM(l."Amount" - ROUND(l."Quantity" * l."UnitPrice", 2)) FROM "Prc_T_PurchaseRfqLine" l WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false), 0), "SourceDocument" = (SELECT string_agg(DISTINCT m."RequestNo", ', ') FROM "Prc_T_PurchaseRfqLine" l INNER JOIN "Prc_T_MaterialRequestItem" i ON i."Id" = l."MaterialRequestItemId" @@ -16,5 +16,6 @@ BEGIN WHERE r."Id" = p_id; UPDATE "Prc_T_PurchaseRfq" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id; + CALL public."Prc_P_MaterialRequestSyncStatus"(p_id); END; $$; diff --git a/configs/seeds/postgres/object/Prc_T_MaterialRequest.sql b/configs/seeds/postgres/object/Prc_T_MaterialRequest.sql index 5d358f81..a961ec94 100644 --- a/configs/seeds/postgres/object/Prc_T_MaterialRequest.sql +++ b/configs/seeds/postgres/object/Prc_T_MaterialRequest.sql @@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_MaterialRequest" "RequestNo" varchar(32) NULL, "Priority" integer NOT NULL DEFAULT 0, "RequesterUserId" uuid NOT NULL, + "BranchId" uuid NOT NULL, "DepartmentId" uuid NOT NULL, "WarehouseId" uuid NOT NULL, "LocationId" uuid NOT NULL, diff --git a/configs/seeds/postgres/object/Prc_T_PurchaseAgreement.sql b/configs/seeds/postgres/object/Prc_T_PurchaseAgreement.sql index 91c4e6ee..ae12f57b 100644 --- a/configs/seeds/postgres/object/Prc_T_PurchaseAgreement.sql +++ b/configs/seeds/postgres/object/Prc_T_PurchaseAgreement.sql @@ -4,12 +4,13 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_PurchaseAgreement" "TenantId" uuid NULL, "AgreementNo" varchar(32) NOT NULL, "SupplierId" uuid NOT NULL, + "BranchId" uuid NOT NULL, "BuyerUserId" uuid NOT NULL, "AgreementType" varchar(16) NOT NULL DEFAULT 'Blanket', "CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY', "StartDate" date NULL, "EndDate" date NULL, - "Reference" varchar(64) NULL, + "WarehouseId" uuid NOT NULL, "OperationTypeId" uuid NULL, "Terms" text NULL, "Status" varchar(16) NOT NULL DEFAULT 'Draft', diff --git a/configs/seeds/postgres/object/Prc_T_PurchaseOrder.sql b/configs/seeds/postgres/object/Prc_T_PurchaseOrder.sql index 131c0f1d..5e4aff60 100644 --- a/configs/seeds/postgres/object/Prc_T_PurchaseOrder.sql +++ b/configs/seeds/postgres/object/Prc_T_PurchaseOrder.sql @@ -7,9 +7,11 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_PurchaseOrder" "SupplierId" uuid NOT NULL, "SupplierReference" varchar(64) NULL, "AgreementId" uuid NULL, + "BranchId" uuid NOT NULL, + "OperationTypeId" uuid NOT NULL, + "WarehouseId" uuid NOT NULL, "CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY', "ExpectedArrival" timestamp NULL, - "OperationTypeId" uuid NULL, "ConfirmDate" timestamp NULL, "ArrivalDate" timestamp NULL, "BuyerUserId" uuid NOT NULL, diff --git a/configs/seeds/postgres/object/Prc_T_PurchaseRfq.sql b/configs/seeds/postgres/object/Prc_T_PurchaseRfq.sql index 15abd369..0696856c 100644 --- a/configs/seeds/postgres/object/Prc_T_PurchaseRfq.sql +++ b/configs/seeds/postgres/object/Prc_T_PurchaseRfq.sql @@ -7,11 +7,12 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_PurchaseRfq" "SupplierId" uuid NOT NULL, "SupplierReference" varchar(64) NULL, "AgreementId" uuid NULL, + "BranchId" uuid NOT NULL, + "OperationTypeId" uuid NOT NULL, + "WarehouseId" uuid NOT NULL, "CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY', "OrderDeadline" timestamp NULL, "ExpectedArrival" timestamp NULL, - "RequireConfirmation" boolean NOT NULL DEFAULT FALSE, - "OperationTypeId" uuid NULL, "SupplierResponse" varchar(16) NOT NULL DEFAULT 'Waiting', "QuoteDate" timestamp NULL, "QuoteValidUntil" date NULL, diff --git a/configs/seeds/postgres/object/Prc_T_PurchaseRfqLine.sql b/configs/seeds/postgres/object/Prc_T_PurchaseRfqLine.sql index d0a492f4..5a248917 100644 --- a/configs/seeds/postgres/object/Prc_T_PurchaseRfqLine.sql +++ b/configs/seeds/postgres/object/Prc_T_PurchaseRfqLine.sql @@ -31,3 +31,5 @@ BEGIN END IF; END $$; + +CREATE INDEX IF NOT EXISTS "IX_Prc_T_PurchaseRfqLine_PurchaseRfqId" ON public."Prc_T_PurchaseRfqLine" ("PurchaseRfqId"); diff --git a/configs/seeds/postgres/object/Prc_V_MaterialRequestAvailableItem.sql b/configs/seeds/postgres/object/Prc_V_MaterialRequestAvailableItem.sql index b7a43027..1dd6e554 100644 --- a/configs/seeds/postgres/object/Prc_V_MaterialRequestAvailableItem.sql +++ b/configs/seeds/postgres/object/Prc_V_MaterialRequestAvailableItem.sql @@ -2,11 +2,11 @@ -- bekleyen ve iptal olmayan bir teklif/siparişte yer almayan kalemi. Aktarım ve talep seçimi buradan okur. CREATE OR REPLACE VIEW public."Prc_V_MaterialRequestAvailableItem" AS SELECT i."Id", i."TenantId", i."MaterialRequestId", r."RequestNo", r."RequesterUserId", i."ProductId", i."Quantity", i."UomId", - i."RequestReason", i."DueDate" + i."RequestReason", i."DueDate", r."BranchId" FROM "Prc_T_MaterialRequestItem" i INNER JOIN "Prc_T_MaterialRequest" r ON r."Id" = i."MaterialRequestId" WHERE i."IsDeleted" = false AND r."IsDeleted" = false - AND r."ApprovalStatus" = 'Onaylandı' + AND r."ApprovalStatus" IN ('Onaylandı', 'Teklif Talebi', 'Teklif Talebi Gönderildi', 'Satınalma Siparişi') AND i."FulfillmentMethod" = 'Purchase' AND i."LineStatus" = 'Waiting' AND NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfqLine" rl INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" diff --git a/configs/seeds/postgres/object/Prc_V_MaterialRequestLine.sql b/configs/seeds/postgres/object/Prc_V_MaterialRequestLine.sql index 8cbbec5b..481fbddc 100644 --- a/configs/seeds/postgres/object/Prc_V_MaterialRequestLine.sql +++ b/configs/seeds/postgres/object/Prc_V_MaterialRequestLine.sql @@ -6,6 +6,6 @@ SELECT COALESCE(i."Id", r."Id") AS "Id", r."Id" AS "MaterialRequestId", r."Tenan r."RequestNo", r."Priority", r."RequesterUserId", r."DepartmentId", r."WarehouseId", r."LocationId", r."RequestDate", r."Description", r."ApprovalStatus", r."ApprovalUserName", r."ApprovalDate", r."ApprovalDescription", i."ProductId", i."Quantity", i."UomId", i."FulfillmentMethod", i."DueDate", i."RequestReason", i."DeliveredQuantity", - i."PurchaseResponsibleUserId", i."LineStatus" + i."PurchaseResponsibleUserId", i."LineStatus", r."BranchId" FROM "Prc_T_MaterialRequest" r LEFT JOIN "Prc_T_MaterialRequestItem" i ON i."MaterialRequestId" = r."Id" AND i."IsDeleted" = FALSE; diff --git a/configs/seeds/postgres/object/Prc_V_PurchaseImportItem.sql b/configs/seeds/postgres/object/Prc_V_PurchaseImportItem.sql index 10495da3..fa9ef1d8 100644 --- a/configs/seeds/postgres/object/Prc_V_PurchaseImportItem.sql +++ b/configs/seeds/postgres/object/Prc_V_PurchaseImportItem.sql @@ -1,9 +1,9 @@ -- Talep Kalemleri sekmesi: aktarılabilir her talep kalemi, kalem alabilecek açık belgeyle (teklif aşamasındaki --- teklif talebi ya da taslak sipariş) eşlenir. Id = belge|kalem; satır işaretlenip kaydedilince Prc_P_PurchaseImportItem kopyalar. +-- teklif talebi ya da taslak sipariş) eşlenir; belge yalnız kendi şubesinin talebini alır. Id = belge|kalem; seçilen satırları Seçilenleri Aktar ile Prc_P_PurchaseImportItem kopyalar. CREATE OR REPLACE VIEW public."Prc_V_PurchaseImportItem" AS SELECT d."Id"::text || '|' || a."Id"::text AS "Id", d."Id" AS "BaseId", a."TenantId", a."MaterialRequestId", - a."RequestNo", a."RequesterUserId", a."ProductId", a."Quantity", a."UomId", a."RequestReason", a."DueDate", false AS "Transfer" - FROM (SELECT "Id", "TenantId" FROM "Prc_T_PurchaseRfq" WHERE "IsDeleted" = false AND "Status" IN ('Draft', 'Sent') + a."RequestNo", a."RequesterUserId", a."ProductId", a."Quantity", a."UomId", a."RequestReason", a."DueDate" + FROM (SELECT "Id", "TenantId", "BranchId" FROM "Prc_T_PurchaseRfq" WHERE "IsDeleted" = false AND "Status" IN ('Draft', 'Sent') UNION ALL - SELECT "Id", "TenantId" FROM "Prc_T_PurchaseOrder" WHERE "IsDeleted" = false AND "Status" = 'Draft') d - INNER JOIN "Prc_V_MaterialRequestAvailableItem" a ON a."TenantId" IS NOT DISTINCT FROM d."TenantId"; + SELECT "Id", "TenantId", "BranchId" FROM "Prc_T_PurchaseOrder" WHERE "IsDeleted" = false AND "Status" = 'Draft') d + INNER JOIN "Prc_V_MaterialRequestAvailableItem" a ON a."BranchId" = d."BranchId" AND a."TenantId" IS NOT DISTINCT FROM d."TenantId"; diff --git a/configs/seeds/postgres/object/Prc_V_PurchaseRfqAlternativeSupplier.sql b/configs/seeds/postgres/object/Prc_V_PurchaseRfqAlternativeSupplier.sql new file mode 100644 index 00000000..6e6131af --- /dev/null +++ b/configs/seeds/postgres/object/Prc_V_PurchaseRfqAlternativeSupplier.sql @@ -0,0 +1,11 @@ +-- Alternatif Oluştur › Tedarikçiler: açık (teklif aşamasındaki) her teklif talebi, ihalesinde henüz iptal olmayan belgesi +-- bulunmayan aktif kontaklarla eşlenir. Id = teklif|kontak; seçilen satırlar için Prc_P_PurchaseRfqCreateAlternative belge açar. +CREATE OR REPLACE VIEW public."Prc_V_PurchaseRfqAlternativeSupplier" AS +SELECT r."Id"::text || '|' || c."Id"::text AS "Id", r."Id" AS "BaseId", c."TenantId", + c."Name", c."City", c."Phone", c."Email", c."SupplierCurrency" + FROM "Prc_T_PurchaseRfq" r + INNER JOIN "Adm_T_Contact" c ON c."TenantId" IS NOT DISTINCT FROM r."TenantId" + AND c."IsDeleted" = false AND c."IsActive" = true + WHERE r."IsDeleted" = false AND r."Status" IN ('Draft', 'Sent') + AND NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfq" x + WHERE x."TenderGroupId" = r."TenderGroupId" AND x."SupplierId" = c."Id" AND x."IsDeleted" = false AND x."Status" <> 'Cancelled'); diff --git a/configs/seeds/sql/object/Adm_T_Approver.sql b/configs/seeds/sql/object/Adm_T_Approver.sql index 57189231..9c9bb47f 100644 --- a/configs/seeds/sql/object/Adm_T_Approver.sql +++ b/configs/seeds/sql/object/Adm_T_Approver.sql @@ -6,7 +6,7 @@ BEGIN [TenantId] uniqueidentifier NULL, [DepartmentId] uniqueidentifier NOT NULL, [ApprovalArea] nvarchar(32) NOT NULL DEFAULT 'Purchase', - [ApproverUserId] uniqueidentifier NOT NULL, + [ApprovalUserName] nvarchar(256) NOT NULL, [IsActive] bit NOT NULL DEFAULT 1, [CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(), [CreatorId] uniqueidentifier NULL, @@ -23,9 +23,9 @@ BEGIN END GO -IF OBJECT_ID(N'[dbo].[UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApproverUserId]', 'UQ') IS NULL +IF OBJECT_ID(N'[dbo].[UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApprovalUserName]', 'UQ') IS NULL BEGIN - ALTER TABLE [dbo].[Adm_T_Approver] ADD CONSTRAINT [UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApproverUserId] UNIQUE NONCLUSTERED ([TenantId] ASC, [DepartmentId] ASC, [ApprovalArea] ASC, [ApproverUserId] ASC); + ALTER TABLE [dbo].[Adm_T_Approver] ADD CONSTRAINT [UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApprovalUserName] UNIQUE NONCLUSTERED ([TenantId] ASC, [DepartmentId] ASC, [ApprovalArea] ASC, [ApprovalUserName] ASC); END GO diff --git a/configs/seeds/sql/object/Prc_P_MaterialRequestAfterSave.sql b/configs/seeds/sql/object/Prc_P_MaterialRequestAfterSave.sql index 250d86a5..d05938b9 100644 --- a/configs/seeds/sql/object/Prc_P_MaterialRequestAfterSave.sql +++ b/configs/seeds/sql/object/Prc_P_MaterialRequestAfterSave.sql @@ -12,7 +12,8 @@ BEGIN DeptApproverUserNames = ( SELECT STRING_AGG(u.UserName, '|') FROM Adm_T_Approver a - INNER JOIN AbpUsers u ON u.Id = a.ApproverUserId AND u.IsDeleted = 0 + INNER JOIN AbpUsers u ON u.UserName = a.ApprovalUserName AND u.IsDeleted = 0 AND u.IsActive = 1 + AND ((u.TenantId IS NULL AND a.TenantId IS NULL) OR u.TenantId = a.TenantId) WHERE a.IsDeleted = 0 AND a.IsActive = 1 AND a.ApprovalArea = 'Purchase' AND a.DepartmentId = r.DepartmentId AND ((a.TenantId IS NULL AND r.TenantId IS NULL) OR a.TenantId = r.TenantId)), diff --git a/configs/seeds/sql/object/Prc_P_MaterialRequestSyncStatus.sql b/configs/seeds/sql/object/Prc_P_MaterialRequestSyncStatus.sql new file mode 100644 index 00000000..71d40af7 --- /dev/null +++ b/configs/seeds/sql/object/Prc_P_MaterialRequestSyncStatus.sql @@ -0,0 +1,46 @@ +-- Onaylanan talebin durumu satınalmada ilerledikçe iş akışının durum alanında devam eder: kalemlerinden biri +-- iptal olmayan bir siparişteyse Satınalma Siparişi, gönderilmiş teklif talebindeyse Teklif Talebi Gönderildi, +-- taslak teklif talebindeyse Teklif Talebi; hiçbirinde değilse Onaylandı'ya döner. Akış "Onaylandı"da bittiği +-- için bu değerler hiçbir onay düğümüyle eşleşmez ve akış butonları kapalı kalır. @DocId verilirse yalnız o +-- belgenin (teklifte bütün ihalenin) kalemlerine bağlı talepler; boşsa onaylanmış bütün talepler yeniden hesaplanır. +CREATE OR ALTER PROCEDURE [dbo].[Prc_P_MaterialRequestSyncStatus] + @DocId uniqueidentifier = NULL +AS +BEGIN + SET NOCOUNT ON; + DECLARE @Group uniqueidentifier = (SELECT ISNULL(TenderGroupId, Id) FROM Prc_T_PurchaseRfq WHERE Id = @DocId); + IF @Group IS NULL + SELECT @Group = ISNULL(q.TenderGroupId, q.Id) + FROM Prc_T_PurchaseOrder o + INNER JOIN Prc_T_PurchaseRfq q ON q.Id = o.PurchaseRfqId + WHERE o.Id = @DocId; + + UPDATE m SET ApprovalStatus = s.Stage + FROM Prc_T_MaterialRequest m + CROSS APPLY (SELECT CASE + WHEN EXISTS (SELECT 1 FROM Prc_T_MaterialRequestItem i + INNER JOIN Prc_T_PurchaseOrderLine ol ON ol.MaterialRequestItemId = i.Id AND ol.IsDeleted = 0 + INNER JOIN Prc_T_PurchaseOrder o ON o.Id = ol.PurchaseOrderId AND o.IsDeleted = 0 AND o.Status <> 'Cancelled' + WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0) THEN N'Satınalma Siparişi' + WHEN EXISTS (SELECT 1 FROM Prc_T_MaterialRequestItem i + INNER JOIN Prc_T_PurchaseRfqLine rl ON rl.MaterialRequestItemId = i.Id AND rl.IsDeleted = 0 + INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId AND q.IsDeleted = 0 AND q.Status IN ('Sent', 'Purchase') + WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0) THEN N'Teklif Talebi Gönderildi' + WHEN EXISTS (SELECT 1 FROM Prc_T_MaterialRequestItem i + INNER JOIN Prc_T_PurchaseRfqLine rl ON rl.MaterialRequestItemId = i.Id AND rl.IsDeleted = 0 + INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId AND q.IsDeleted = 0 AND q.Status = 'Draft' + WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0) THEN N'Teklif Talebi' + ELSE N'Onaylandı' END AS Stage) s + WHERE m.IsDeleted = 0 + AND m.ApprovalStatus IN (N'Onaylandı', N'Teklif Talebi', N'Teklif Talebi Gönderildi', N'Satınalma Siparişi') + AND m.ApprovalStatus <> s.Stage + -- Silinen satır da kapsamda kalır: kalemi belgeden çıkarılan talep geri dönmelidir. + AND (@DocId IS NULL OR EXISTS ( + SELECT 1 FROM Prc_T_MaterialRequestItem i + WHERE i.MaterialRequestId = m.Id + AND (EXISTS (SELECT 1 FROM Prc_T_PurchaseRfqLine rl + INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId + WHERE rl.MaterialRequestItemId = i.Id AND ISNULL(q.TenderGroupId, q.Id) = @Group) + OR EXISTS (SELECT 1 FROM Prc_T_PurchaseOrderLine ol + WHERE ol.MaterialRequestItemId = i.Id AND ol.PurchaseOrderId = @DocId)))); +END diff --git a/configs/seeds/sql/object/Prc_P_PurchaseImportItem.sql b/configs/seeds/sql/object/Prc_P_PurchaseImportItem.sql index 51ae1148..0bfe5ccd 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseImportItem.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseImportItem.sql @@ -1,23 +1,21 @@ --- Talep Kalemleri sekmesinde işaretlenen kalemi (@Key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. --- Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir. +-- Talep Kalemleri sekmesinde seçilen kalemi (@Key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. +-- Kalem yalnız belgenin şubesindeki talepten gelir. Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir. CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseImportItem] - @Key nvarchar(80), - @Transfer bit = 1 + @Key nvarchar(80) AS BEGIN SET NOCOUNT ON; - IF ISNULL(@Transfer, 0) = 0 RETURN; DECLARE @DocId uniqueidentifier = TRY_CAST(LEFT(@Key, 36) AS uniqueidentifier), @ItemId uniqueidentifier = TRY_CAST(RIGHT(@Key, 36) AS uniqueidentifier), - @IsOrder bit = 0, @Tenant uniqueidentifier, @Supplier uniqueidentifier, @Agr uniqueidentifier, @Status nvarchar(16), + @IsOrder bit = 0, @Tenant uniqueidentifier, @Branch uniqueidentifier, @Supplier uniqueidentifier, @Agr uniqueidentifier, @Status nvarchar(16), @ProductId uniqueidentifier, @Description nvarchar(512), @Quantity decimal(18, 4), @UomId nvarchar(50), @UnitPrice decimal(18, 4), @TaxRate decimal(18, 4), @DueDate datetime; - SELECT @Tenant = TenantId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status + SELECT @Tenant = TenantId, @Branch = BranchId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status FROM Prc_T_PurchaseRfq WHERE Id = @DocId AND IsDeleted = 0 AND Status IN ('Draft', 'Sent'); IF @Status IS NULL - SELECT @Tenant = TenantId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status, @IsOrder = 1 + SELECT @Tenant = TenantId, @Branch = BranchId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status, @IsOrder = 1 FROM Prc_T_PurchaseOrder WHERE Id = @DocId AND IsDeleted = 0 AND Status = 'Draft'; IF @Status IS NULL THROW 50161, N'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.', 1; @@ -31,7 +29,7 @@ BEGIN ORDER BY ps.MinQuantity), 0) FROM Prc_V_MaterialRequestAvailableItem a LEFT JOIN Inv_T_Product p ON p.Id = a.ProductId - WHERE a.Id = @ItemId AND (a.TenantId = @Tenant OR (a.TenantId IS NULL AND @Tenant IS NULL)); + WHERE a.Id = @ItemId AND a.BranchId = @Branch AND (a.TenantId = @Tenant OR (a.TenantId IS NULL AND @Tenant IS NULL)); IF @ProductId IS NULL THROW 50162, N'Talep kalemi artık aktarılamaz: başka bir teklife ya da siparişe aktarılmış veya talep değişmiş.', 1; diff --git a/configs/seeds/sql/object/Prc_P_PurchaseOrderAfterSave.sql b/configs/seeds/sql/object/Prc_P_PurchaseOrderAfterSave.sql index 1c862bd1..7a7141fc 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseOrderAfterSave.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseOrderAfterSave.sql @@ -16,5 +16,9 @@ BEGIN EXEC Prc_P_PurchaseOrderRecalc @Id; -- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. - IF @Act IS NOT NULL EXEC Prc_P_PurchaseOrderSetStatus @Id, @Act, @UserId; + IF @Act IS NOT NULL + BEGIN + EXEC Prc_P_PurchaseOrderSetStatus @Id, @Act, @UserId; + EXEC Prc_P_MaterialRequestSyncStatus @Id; + END END diff --git a/configs/seeds/sql/object/Prc_P_PurchaseOrderRecalc.sql b/configs/seeds/sql/object/Prc_P_PurchaseOrderRecalc.sql index a5ee243a..ce07e4a2 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseOrderRecalc.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseOrderRecalc.sql @@ -4,13 +4,13 @@ AS BEGIN SET NOCOUNT ON; - UPDATE Prc_T_PurchaseOrderLine SET Amount = ROUND(Quantity * UnitPrice, 2) + UPDATE Prc_T_PurchaseOrderLine SET Amount = ROUND(ROUND(Quantity * UnitPrice, 2) * (1 + TaxRate / 100), 2) WHERE PurchaseOrderId = @Id AND IsDeleted = 0; -- Kaynak: teklif talebinden gelen siparişte teklif no, doğrudan yazılan siparişte talep numaraları. UPDATE o SET - UntaxedAmount = ISNULL((SELECT SUM(l.Amount) FROM Prc_T_PurchaseOrderLine l WHERE l.PurchaseOrderId = @Id AND l.IsDeleted = 0), 0), - TaxAmount = ISNULL((SELECT SUM(ROUND(l.Amount * l.TaxRate / 100, 2)) FROM Prc_T_PurchaseOrderLine l WHERE l.PurchaseOrderId = @Id AND l.IsDeleted = 0), 0), + UntaxedAmount = ISNULL((SELECT SUM(ROUND(l.Quantity * l.UnitPrice, 2)) FROM Prc_T_PurchaseOrderLine l WHERE l.PurchaseOrderId = @Id AND l.IsDeleted = 0), 0), + TaxAmount = ISNULL((SELECT SUM(l.Amount - ROUND(l.Quantity * l.UnitPrice, 2)) FROM Prc_T_PurchaseOrderLine l WHERE l.PurchaseOrderId = @Id AND l.IsDeleted = 0), 0), SourceDocument = COALESCE(q.RfqNo, STUFF((SELECT DISTINCT N', ' + m.RequestNo FROM Prc_T_PurchaseOrderLine l @@ -23,4 +23,5 @@ BEGIN WHERE o.Id = @Id; UPDATE Prc_T_PurchaseOrder SET TotalAmount = UntaxedAmount + TaxAmount WHERE Id = @Id; + EXEC Prc_P_MaterialRequestSyncStatus @Id; END diff --git a/configs/seeds/sql/object/Prc_P_PurchaseRfqAfterSave.sql b/configs/seeds/sql/object/Prc_P_PurchaseRfqAfterSave.sql index 929ecd1f..66419896 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseRfqAfterSave.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseRfqAfterSave.sql @@ -30,5 +30,9 @@ BEGIN EXEC Prc_P_PurchaseRfqFromAgreement @Id; EXEC Prc_P_PurchaseRfqRecalc @Id; -- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. - IF @Act IS NOT NULL EXEC Prc_P_PurchaseRfqSetStatus @Id, @Act, @UserId; + IF @Act IS NOT NULL + BEGIN + EXEC Prc_P_PurchaseRfqSetStatus @Id, @Act, @UserId; + EXEC Prc_P_MaterialRequestSyncStatus @Id; + END END diff --git a/configs/seeds/sql/object/Prc_P_PurchaseRfqAward.sql b/configs/seeds/sql/object/Prc_P_PurchaseRfqAward.sql index 2247e010..dc9b6098 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseRfqAward.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseRfqAward.sql @@ -33,11 +33,11 @@ BEGIN SET @Po = NEWID(); EXEC Adm_P_SequenceNext N'PurchaseOrder1', @Tenant, @No OUTPUT; - INSERT INTO Prc_T_PurchaseOrder (Id, TenantId, OrderNo, PurchaseRfqId, SupplierId, SupplierReference, AgreementId, CurrencyId, - ExpectedArrival, OperationTypeId, ConfirmDate, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, + INSERT INTO Prc_T_PurchaseOrder (Id, TenantId, OrderNo, PurchaseRfqId, SupplierId, SupplierReference, AgreementId, BranchId, OperationTypeId, WarehouseId, CurrencyId, + ExpectedArrival, ConfirmDate, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, Status, CreationTime, CreatorId, IsDeleted) - SELECT @Po, TenantId, @No, Id, SupplierId, SupplierReference, AgreementId, CurrencyId, - ExpectedArrival, OperationTypeId, GETUTCDATE(), BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, + SELECT @Po, TenantId, @No, Id, SupplierId, SupplierReference, AgreementId, BranchId, OperationTypeId, WarehouseId, CurrencyId, + ExpectedArrival, GETUTCDATE(), BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, 'Purchase', GETUTCDATE(), @UserId, 0 FROM Prc_T_PurchaseRfq WHERE Id = @Rfq; diff --git a/configs/seeds/sql/object/Prc_P_PurchaseRfqComparisonSave.sql b/configs/seeds/sql/object/Prc_P_PurchaseRfqComparisonSave.sql new file mode 100644 index 00000000..ec71c53a --- /dev/null +++ b/configs/seeds/sql/object/Prc_P_PurchaseRfqComparisonSave.sql @@ -0,0 +1,41 @@ +-- Fiyat Girişi (App.Prc.PurchaseRfqComparison) satır kaydı. Batch kaydı her satırı ayrı ve eşzamanlı istekle gönderir; +-- satır güncellemesi ile teklifin yeniden hesabı aynı işlemde, önce ihalenin kök teklifi kilitlenerek yapılır. Grid ihalenin +-- bütün tedarikçi tekliflerinin satırlarını taşır; kilit ihale düzeyinde olduğu için bu satırlar sırayla işlenir ve satırı +-- kilitleyip diğer isteğin satırını bekleyen iki istek kilitlenmez (deadlock). +CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseRfqComparisonSave] + @Id uniqueidentifier, + @UnitPrice decimal(18, 4), + @DeliveryDate datetime, + @IsSelected bit, + @TenantId uniqueidentifier, + @LastModificationTime datetime2, + @LastModifierId uniqueidentifier +AS +BEGIN + SET NOCOUNT ON; + SET XACT_ABORT ON; + + DECLARE @RfqId uniqueidentifier = (SELECT PurchaseRfqId FROM Prc_T_PurchaseRfqLine WHERE Id = @Id), @Group uniqueidentifier, @Status nvarchar(16); + SELECT @Group = ISNULL(TenderGroupId, Id) FROM Prc_T_PurchaseRfq WHERE Id = @RfqId; + + BEGIN TRAN; + SELECT @Group = Id FROM Prc_T_PurchaseRfq WITH (UPDLOCK, HOLDLOCK) WHERE Id = @Group; + SELECT @Status = Status FROM Prc_T_PurchaseRfq WHERE Id = @RfqId; + IF @Status IN ('Purchase', 'Cancelled') + THROW 50142, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklifin kalemi değiştirilemez.', 1; + + UPDATE Prc_T_PurchaseRfqLine + SET UnitPrice = @UnitPrice, DeliveryDate = @DeliveryDate, IsSelected = @IsSelected, + LastModificationTime = @LastModificationTime, LastModifierId = @LastModifierId + WHERE Id = @Id AND (TenantId = @TenantId OR (TenantId IS NULL AND @TenantId IS NULL)); + + -- Fiyatı girilen teklif yanıtlanmış sayılır; geçerlilik verilmemişse sipariş son tarihine kadar geçerlidir. + IF @UnitPrice > 0 + UPDATE Prc_T_PurchaseRfq + SET SupplierResponse = 'Quoted', QuoteDate = ISNULL(QuoteDate, GETUTCDATE()), + QuoteValidUntil = ISNULL(QuoteValidUntil, CAST(OrderDeadline AS date)) + WHERE Id = @RfqId AND SupplierResponse = 'Waiting'; + + EXEC Prc_P_PurchaseRfqRecalc @RfqId; + COMMIT; +END diff --git a/configs/seeds/sql/object/Prc_P_PurchaseRfqCreateAlternative.sql b/configs/seeds/sql/object/Prc_P_PurchaseRfqCreateAlternative.sql index 774ef7bf..c6eda037 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseRfqCreateAlternative.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseRfqCreateAlternative.sql @@ -1,13 +1,14 @@ --- Teklifler sekmesinde Ekle ile seçilen tedarikçi için belgenin kopyasını aynı ihalede açar: kalemler TenderLineId ile +-- Alternatif Oluştur › Tedarikçiler'de seçilen kontak (@Key = teklif|kontak) için belgenin kopyasını aynı ihalede açar: kalemler TenderLineId ile -- birlikte kopyalanır, fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından gelir. CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseRfqCreateAlternative] - @Id uniqueidentifier, - @SupplierId uniqueidentifier, + @Key nvarchar(80), @UserId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; - DECLARE @Tenant uniqueidentifier, @Status nvarchar(16), @Group uniqueidentifier, @New uniqueidentifier = NEWID(), @No nvarchar(128); + DECLARE @Id uniqueidentifier = TRY_CAST(LEFT(@Key, 36) AS uniqueidentifier), + @SupplierId uniqueidentifier = TRY_CAST(RIGHT(@Key, 36) AS uniqueidentifier), + @Tenant uniqueidentifier, @Status nvarchar(16), @Group uniqueidentifier, @New uniqueidentifier = NEWID(), @No nvarchar(128); SELECT @Tenant = TenantId, @Status = Status, @Group = TenderGroupId FROM Prc_T_PurchaseRfq WHERE Id = @Id; IF ISNULL(@Status, '') NOT IN ('Draft', 'Sent') @@ -17,11 +18,11 @@ BEGIN EXEC Adm_P_SequenceNext N'PurchaseRfq', @Tenant, @No OUTPUT; - INSERT INTO Prc_T_PurchaseRfq (Id, TenantId, RfqNo, TenderGroupId, SupplierId, AgreementId, CurrencyId, OrderDeadline, - ExpectedArrival, RequireConfirmation, OperationTypeId, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, + INSERT INTO Prc_T_PurchaseRfq (Id, TenantId, RfqNo, TenderGroupId, SupplierId, AgreementId, BranchId, OperationTypeId, WarehouseId, CurrencyId, OrderDeadline, + ExpectedArrival, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, PriceWeight, DeliveryWeight, CreationTime, CreatorId, IsDeleted) - SELECT @New, r.TenantId, @No, r.TenderGroupId, c.Id, NULL, COALESCE(c.SupplierCurrency, r.CurrencyId), r.OrderDeadline, - r.ExpectedArrival, r.RequireConfirmation, r.OperationTypeId, r.BuyerUserId, r.ProjectId, + SELECT @New, r.TenantId, @No, r.TenderGroupId, c.Id, NULL, r.BranchId, r.OperationTypeId, r.WarehouseId, COALESCE(c.SupplierCurrency, r.CurrencyId), r.OrderDeadline, + r.ExpectedArrival, r.BuyerUserId, r.ProjectId, COALESCE(c.PurchaseIncotermId, r.IncotermId), COALESCE(c.PurchaseIncotermLocation, r.IncotermLocation), COALESCE(c.PurchasePaymentTermId, r.PaymentTermId), r.Terms, r.PriceWeight, r.DeliveryWeight, GETUTCDATE(), @UserId, 0 FROM Prc_T_PurchaseRfq r diff --git a/configs/seeds/sql/object/Prc_P_PurchaseRfqRecalc.sql b/configs/seeds/sql/object/Prc_P_PurchaseRfqRecalc.sql index 6098078f..803e4a43 100644 --- a/configs/seeds/sql/object/Prc_P_PurchaseRfqRecalc.sql +++ b/configs/seeds/sql/object/Prc_P_PurchaseRfqRecalc.sql @@ -5,12 +5,12 @@ BEGIN SET NOCOUNT ON; -- TenderLineId alternatiflere kopyalanır; ihaledeki aynı kalemi kıyasta birleştiren anahtardır. - UPDATE Prc_T_PurchaseRfqLine SET Amount = ROUND(Quantity * UnitPrice, 2), TenderLineId = ISNULL(TenderLineId, Id) + UPDATE Prc_T_PurchaseRfqLine SET Amount = ROUND(ROUND(Quantity * UnitPrice, 2) * (1 + TaxRate / 100), 2), TenderLineId = ISNULL(TenderLineId, Id) WHERE PurchaseRfqId = @Id AND IsDeleted = 0; UPDATE r SET - UntaxedAmount = ISNULL((SELECT SUM(l.Amount) FROM Prc_T_PurchaseRfqLine l WHERE l.PurchaseRfqId = @Id AND l.IsDeleted = 0), 0), - TaxAmount = ISNULL((SELECT SUM(ROUND(l.Amount * l.TaxRate / 100, 2)) FROM Prc_T_PurchaseRfqLine l WHERE l.PurchaseRfqId = @Id AND l.IsDeleted = 0), 0), + UntaxedAmount = ISNULL((SELECT SUM(ROUND(l.Quantity * l.UnitPrice, 2)) FROM Prc_T_PurchaseRfqLine l WHERE l.PurchaseRfqId = @Id AND l.IsDeleted = 0), 0), + TaxAmount = ISNULL((SELECT SUM(l.Amount - ROUND(l.Quantity * l.UnitPrice, 2)) FROM Prc_T_PurchaseRfqLine l WHERE l.PurchaseRfqId = @Id AND l.IsDeleted = 0), 0), SourceDocument = STUFF((SELECT DISTINCT N', ' + m.RequestNo FROM Prc_T_PurchaseRfqLine l INNER JOIN Prc_T_MaterialRequestItem i ON i.Id = l.MaterialRequestItemId @@ -21,4 +21,5 @@ BEGIN WHERE r.Id = @Id; UPDATE Prc_T_PurchaseRfq SET TotalAmount = UntaxedAmount + TaxAmount WHERE Id = @Id; + EXEC Prc_P_MaterialRequestSyncStatus @Id; END diff --git a/configs/seeds/sql/object/Prc_T_MaterialRequest.sql b/configs/seeds/sql/object/Prc_T_MaterialRequest.sql index a4726c8d..98347d83 100644 --- a/configs/seeds/sql/object/Prc_T_MaterialRequest.sql +++ b/configs/seeds/sql/object/Prc_T_MaterialRequest.sql @@ -7,6 +7,7 @@ BEGIN [RequestNo] nvarchar(32) NULL, [Priority] int NOT NULL DEFAULT 0, [RequesterUserId] uniqueidentifier NOT NULL, + [BranchId] uniqueidentifier NOT NULL, [DepartmentId] uniqueidentifier NOT NULL, [WarehouseId] uniqueidentifier NOT NULL, [LocationId] uniqueidentifier NOT NULL, diff --git a/configs/seeds/sql/object/Prc_T_PurchaseAgreement.sql b/configs/seeds/sql/object/Prc_T_PurchaseAgreement.sql index d525e664..82635f4f 100644 --- a/configs/seeds/sql/object/Prc_T_PurchaseAgreement.sql +++ b/configs/seeds/sql/object/Prc_T_PurchaseAgreement.sql @@ -6,12 +6,13 @@ BEGIN [TenantId] uniqueidentifier NULL, [AgreementNo] nvarchar(32) NOT NULL, [SupplierId] uniqueidentifier NOT NULL, + [BranchId] uniqueidentifier NOT NULL, [BuyerUserId] uniqueidentifier NOT NULL, [AgreementType] nvarchar(16) NOT NULL DEFAULT 'Blanket', [CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY', [StartDate] date NULL, [EndDate] date NULL, - [Reference] nvarchar(64) NULL, + [WarehouseId] uniqueidentifier NOT NULL, [OperationTypeId] uniqueidentifier NULL, [Terms] nvarchar(MAX) NULL, [Status] nvarchar(16) NOT NULL DEFAULT 'Draft', diff --git a/configs/seeds/sql/object/Prc_T_PurchaseOrder.sql b/configs/seeds/sql/object/Prc_T_PurchaseOrder.sql index 34ab3148..e4bc24e1 100644 --- a/configs/seeds/sql/object/Prc_T_PurchaseOrder.sql +++ b/configs/seeds/sql/object/Prc_T_PurchaseOrder.sql @@ -9,9 +9,11 @@ BEGIN [SupplierId] uniqueidentifier NOT NULL, [SupplierReference] nvarchar(64) NULL, [AgreementId] uniqueidentifier NULL, + [BranchId] uniqueidentifier NOT NULL, + [OperationTypeId] uniqueidentifier NOT NULL, + [WarehouseId] uniqueidentifier NOT NULL, [CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY', [ExpectedArrival] datetime NULL, - [OperationTypeId] uniqueidentifier NULL, [ConfirmDate] datetime NULL, [ArrivalDate] datetime NULL, [BuyerUserId] uniqueidentifier NOT NULL, diff --git a/configs/seeds/sql/object/Prc_T_PurchaseRfq.sql b/configs/seeds/sql/object/Prc_T_PurchaseRfq.sql index ad698282..7a77c746 100644 --- a/configs/seeds/sql/object/Prc_T_PurchaseRfq.sql +++ b/configs/seeds/sql/object/Prc_T_PurchaseRfq.sql @@ -9,11 +9,12 @@ BEGIN [SupplierId] uniqueidentifier NOT NULL, [SupplierReference] nvarchar(64) NULL, [AgreementId] uniqueidentifier NULL, + [BranchId] uniqueidentifier NOT NULL, + [OperationTypeId] uniqueidentifier NOT NULL, + [WarehouseId] uniqueidentifier NOT NULL, [CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY', [OrderDeadline] datetime NULL, [ExpectedArrival] datetime NULL, - [RequireConfirmation] bit NOT NULL DEFAULT 0, - [OperationTypeId] uniqueidentifier NULL, [SupplierResponse] nvarchar(16) NOT NULL DEFAULT 'Waiting', [QuoteDate] datetime NULL, [QuoteValidUntil] date NULL, diff --git a/configs/seeds/sql/object/Prc_T_PurchaseRfqLine.sql b/configs/seeds/sql/object/Prc_T_PurchaseRfqLine.sql index 282f9a8f..8a8e9dec 100644 --- a/configs/seeds/sql/object/Prc_T_PurchaseRfqLine.sql +++ b/configs/seeds/sql/object/Prc_T_PurchaseRfqLine.sql @@ -36,3 +36,9 @@ BEGIN ALTER TABLE [dbo].[Prc_T_PurchaseRfqLine] ADD CONSTRAINT [FK_Prc_T_PurchaseRfqLine_PurchaseRfqId] FOREIGN KEY ([PurchaseRfqId]) REFERENCES [dbo].[Prc_T_PurchaseRfq] ([Id]) ON DELETE CASCADE ON UPDATE NO ACTION; END GO + +IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Prc_T_PurchaseRfqLine_PurchaseRfqId' AND object_id = OBJECT_ID(N'[dbo].[Prc_T_PurchaseRfqLine]')) +BEGIN + CREATE INDEX [IX_Prc_T_PurchaseRfqLine_PurchaseRfqId] ON [dbo].[Prc_T_PurchaseRfqLine] ([PurchaseRfqId]); +END +GO diff --git a/configs/seeds/sql/object/Prc_V_MaterialRequestAvailableItem.sql b/configs/seeds/sql/object/Prc_V_MaterialRequestAvailableItem.sql index 3fb95285..e70d065f 100644 --- a/configs/seeds/sql/object/Prc_V_MaterialRequestAvailableItem.sql +++ b/configs/seeds/sql/object/Prc_V_MaterialRequestAvailableItem.sql @@ -2,11 +2,11 @@ -- bekleyen ve iptal olmayan bir teklif/siparişte yer almayan kalemi. Aktarım ve talep seçimi buradan okur. CREATE OR ALTER VIEW [dbo].[Prc_V_MaterialRequestAvailableItem] AS SELECT i.Id, i.TenantId, i.MaterialRequestId, r.RequestNo, r.RequesterUserId, i.ProductId, i.Quantity, i.UomId, - i.RequestReason, i.DueDate + i.RequestReason, i.DueDate, r.BranchId FROM Prc_T_MaterialRequestItem i INNER JOIN Prc_T_MaterialRequest r ON r.Id = i.MaterialRequestId WHERE i.IsDeleted = 0 AND r.IsDeleted = 0 - AND r.ApprovalStatus = N'Onaylandı' + AND r.ApprovalStatus IN (N'Onaylandı', N'Teklif Talebi', N'Teklif Talebi Gönderildi', N'Satınalma Siparişi') AND i.FulfillmentMethod = 'Purchase' AND i.LineStatus = 'Waiting' AND NOT EXISTS (SELECT 1 FROM Prc_T_PurchaseRfqLine rl INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId diff --git a/configs/seeds/sql/object/Prc_V_MaterialRequestLine.sql b/configs/seeds/sql/object/Prc_V_MaterialRequestLine.sql index 3cb4398b..af43ea55 100644 --- a/configs/seeds/sql/object/Prc_V_MaterialRequestLine.sql +++ b/configs/seeds/sql/object/Prc_V_MaterialRequestLine.sql @@ -6,7 +6,7 @@ SELECT COALESCE(i.Id, r.Id) AS Id, r.Id AS MaterialRequestId, r.TenantId, r.IsDe r.RequestNo, r.Priority, r.RequesterUserId, r.DepartmentId, r.WarehouseId, r.LocationId, r.RequestDate, r.Description, r.ApprovalStatus, r.ApprovalUserName, r.ApprovalDate, r.ApprovalDescription, i.ProductId, i.Quantity, i.UomId, i.FulfillmentMethod, i.DueDate, i.RequestReason, i.DeliveredQuantity, - i.PurchaseResponsibleUserId, i.LineStatus + i.PurchaseResponsibleUserId, i.LineStatus, r.BranchId FROM Prc_T_MaterialRequest r LEFT JOIN Prc_T_MaterialRequestItem i ON i.MaterialRequestId = r.Id AND i.IsDeleted = 0; GO diff --git a/configs/seeds/sql/object/Prc_V_PurchaseImportItem.sql b/configs/seeds/sql/object/Prc_V_PurchaseImportItem.sql index 508b853d..cba94c05 100644 --- a/configs/seeds/sql/object/Prc_V_PurchaseImportItem.sql +++ b/configs/seeds/sql/object/Prc_V_PurchaseImportItem.sql @@ -1,9 +1,10 @@ -- Talep Kalemleri sekmesi: aktarılabilir her talep kalemi, kalem alabilecek açık belgeyle (teklif aşamasındaki --- teklif talebi ya da taslak sipariş) eşlenir. Id = belge|kalem; satır işaretlenip kaydedilince Prc_P_PurchaseImportItem kopyalar. +-- teklif talebi ya da taslak sipariş) eşlenir; belge yalnız kendi şubesinin talebini alır. Id = belge|kalem; seçilen satırları Seçilenleri Aktar ile Prc_P_PurchaseImportItem kopyalar. CREATE OR ALTER VIEW [dbo].[Prc_V_PurchaseImportItem] AS SELECT CONCAT(CAST(d.Id AS nvarchar(36)), '|', CAST(a.Id AS nvarchar(36))) AS Id, d.Id AS BaseId, a.TenantId, a.MaterialRequestId, - a.RequestNo, a.RequesterUserId, a.ProductId, a.Quantity, a.UomId, a.RequestReason, a.DueDate, CAST(0 AS bit) AS Transfer - FROM (SELECT Id, TenantId FROM Prc_T_PurchaseRfq WHERE IsDeleted = 0 AND Status IN ('Draft', 'Sent') + a.RequestNo, a.RequesterUserId, a.ProductId, a.Quantity, a.UomId, a.RequestReason, a.DueDate + FROM (SELECT Id, TenantId, BranchId FROM Prc_T_PurchaseRfq WHERE IsDeleted = 0 AND Status IN ('Draft', 'Sent') UNION ALL - SELECT Id, TenantId FROM Prc_T_PurchaseOrder WHERE IsDeleted = 0 AND Status = 'Draft') d - INNER JOIN Prc_V_MaterialRequestAvailableItem a ON a.TenantId = d.TenantId OR (a.TenantId IS NULL AND d.TenantId IS NULL) + SELECT Id, TenantId, BranchId FROM Prc_T_PurchaseOrder WHERE IsDeleted = 0 AND Status = 'Draft') d + INNER JOIN Prc_V_MaterialRequestAvailableItem a ON a.BranchId = d.BranchId + AND (a.TenantId = d.TenantId OR (a.TenantId IS NULL AND d.TenantId IS NULL)) diff --git a/configs/seeds/sql/object/Prc_V_PurchaseRfqAlternativeSupplier.sql b/configs/seeds/sql/object/Prc_V_PurchaseRfqAlternativeSupplier.sql new file mode 100644 index 00000000..a7f58a67 --- /dev/null +++ b/configs/seeds/sql/object/Prc_V_PurchaseRfqAlternativeSupplier.sql @@ -0,0 +1,11 @@ +-- Alternatif Oluştur › Tedarikçiler: açık (teklif aşamasındaki) her teklif talebi, ihalesinde henüz iptal olmayan belgesi +-- bulunmayan aktif kontaklarla eşlenir. Id = teklif|kontak; seçilen satırlar için Prc_P_PurchaseRfqCreateAlternative belge açar. +CREATE OR ALTER VIEW [dbo].[Prc_V_PurchaseRfqAlternativeSupplier] AS +SELECT CONCAT(CAST(r.Id AS nvarchar(36)), '|', CAST(c.Id AS nvarchar(36))) AS Id, r.Id AS BaseId, c.TenantId, + c.Name, c.City, c.Phone, c.Email, c.SupplierCurrency + FROM Prc_T_PurchaseRfq r + INNER JOIN Adm_T_Contact c ON (c.TenantId = r.TenantId OR (c.TenantId IS NULL AND r.TenantId IS NULL)) + AND c.IsDeleted = 0 AND c.IsActive = 1 + WHERE r.IsDeleted = 0 AND r.Status IN ('Draft', 'Sent') + AND NOT EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq x + WHERE x.TenderGroupId = r.TenderGroupId AND x.SupplierId = c.Id AND x.IsDeleted = 0 AND x.Status <> 'Cancelled') diff --git a/configs/seeds/wizard/Adm_Approver.json b/configs/seeds/wizard/Adm_Approver.json index ef58e38d..77925a0f 100644 --- a/configs/seeds/wizard/Adm_Approver.json +++ b/configs/seeds/wizard/Adm_Approver.json @@ -33,7 +33,7 @@ "TitleEn": "Approvers", "TitleTr": "Onaycılar", "DescEn": "Approvers — the single list of who approves what for each department across the application.\nWhere: Administration › Definitions › Approvers.\nFields: department (shown as Branch - Department), approval area (Purchasing / Warehouse / Human Resources / Finance), approver user, active.\nUsed by: approval workflows read the approvers of the record's department and area. Purchasing › Material Requests: the department approval uses area Purchasing for the requester's department; the purchasing approval is not defined here: it goes to users with update permission on Awaiting Purchasing Approval (directly or through their role). Several approvers may be defined for the same department and area; any one of them can approve. Passive rows are ignored by workflows.", - "DescTr": "Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste.\nNerede: Yönetim › Tanımlamalar › Onaycılar.\nAlanlar: departman (Şube - Departman olarak gösterilir), onay yeri (Satınalma / Depo / İnsan Kaynakları / Finans), onaylayacak kişi, aktif.\nKullanıldığı yer: onay akışları kaydın departmanı ve onay yerine göre onaycıları buradan okur. Satınalma › Malzeme Talepleri: departman onayı talep edenin departmanındaki Satınalma satırlarını, satınalma onayı burada tanımlanmaz: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle) onaylar. Aynı departman ve onay yerine birden çok onaycı girilebilir; herhangi birinin onayı yeterlidir. Pasif satırlar akışlarda kullanılmaz.", + "DescTr": "Onaycılar — uygulamadaki tüm onay adımlarında her departman için kimin onaylayacağını tutan tek liste.\nNerede: Yönetim › Tanımlamalar › Onaycılar.\nAlanlar: departman (Şube - Departman olarak gösterilir), onay yeri (Satınalma / Depo / İnsan Kaynakları / Finans), onaylayacak kişi, aktif.\nKullanıldığı yer: onay akışları kaydın departmanı ve onay yerine göre onaycıları buradan okur. Satınalma › Talepler: departman onayı talep edenin departmanındaki Satınalma satırlarını, satınalma onayı burada tanımlanmaz: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle) onaylar. Aynı departman ve onay yerine birden çok onaycı girilebilir; herhangi birinin onayı yeterlidir. Pasif satırlar akışlarda kullanılmaz.", "Texts": [ { "Key": "App.StaticLookup.Purchase", @@ -79,7 +79,7 @@ "Tr": "Onay Yeri" }, { - "FieldName": "ApproverUserId", + "FieldName": "ApprovalUserName", "CaptionName": "App.Listform.ListformField.ApproverUser", "En": "Approver", "Tr": "Onaylayacak Kişi" @@ -1129,7 +1129,7 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "ApproverUserId", + "FieldName": "ApprovalUserName", "CaptionName": "App.Listform.ListformField.ApproverUser", "PlaceHolder": null, "ReadOnly": false, @@ -1137,7 +1137,7 @@ "IsActive": true, "Width": 0, "ListOrderNo": 4, - "SourceDbType": 9, + "SourceDbType": 16, "CultureName": "en", "DataType": "string", "SortIndex": 0, @@ -1194,7 +1194,7 @@ "CascadeFilterOperator": "=", "CascadeParentFields": null, "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], CONCAT(Name, ' ', Surname) AS [Name] FROM AbpUsers WHERE IsDeleted = 'false' AND IsActive = 1 ORDER BY Name, Surname" + "LookupQuery": "SELECT UserName AS [Key], CONCAT(Name, ' ', Surname) AS [Name] FROM AbpUsers WHERE IsDeleted = 'false' AND IsActive = 1 ORDER BY Name, Surname" }, "ValidationRuleDto": [ { @@ -1422,6 +1422,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_MaterialRequest.json b/configs/seeds/wizard/Prc_MaterialRequest.json index e4f157c8..d203808f 100644 --- a/configs/seeds/wizard/Prc_MaterialRequest.json +++ b/configs/seeds/wizard/Prc_MaterialRequest.json @@ -25,15 +25,15 @@ }, "Language": { "MenuParentEn": "Material Requests", - "MenuParentTr": "Malzeme Talepleri", + "MenuParentTr": "Talepler", "PermissionGroupEn": "Purchasing", "PermissionGroupTr": "Satınalma", "MenuEn": "All Requests", "MenuTr": "Tüm Talepler", "TitleEn": "All Material Requests", "TitleTr": "Tüm Talepler", - "DescEn": "All Requests — every material request of the company in every status, listed per request line; list of purchasing management.\nWhere: Purchasing › Material Requests › All Requests.\nFields: each row is one request line — request header (request no, priority, requester, department, warehouse and location, request date, general description, approval status / approver / date / description) next to the line (product, quantity, unit, fulfillment method, due date, reason, delivered quantity, purchasing responsible, line status). A request without lines is shown as a single row with empty line columns.\nFlow: requests are created in My Requests and approved in Awaiting Department Approval › Awaiting Purchasing Approval; this list does not add or delete; header fields and the approval status written by that workflow are read-only, editing a row only sets the line's purchasing responsible and line status. Cards count requests, not lines.\nRelated: My Requests, Awaiting Department Approval, Awaiting Purchasing Approval, Purchasing › Definitions › Rejection Reasons.", - "DescTr": "Tüm Talepler — kurumun bütün malzeme talepleri, tüm durumlarıyla, kalem kalem; satınalma yönetiminin listesi.\nNerede: Satınalma › Malzeme Talepleri › Tüm Talepler.\nAlanlar: her satır bir talep kalemidir — talep başlığı (talep no, öncelik, talep eden, departman, depo ve konum, talep tarihi, genel açıklama, onay durumu / onaylayan / tarih / açıklama) ile kalemin bilgileri (ürün, miktar, birim, karşılama yöntemi, termin, talep nedeni, teslim edilen miktar, satınalma sorumlusu, satır durumu) yan yanadır. Kalemi olmayan talep, kalem kolonları boş tek satır olarak görünür.\nAkış: talep Taleplerim ekranında açılır, Departman Onayı Bekleyenler › Satınalma Onayı Bekleyenler ekranlarında onaylanır; bu liste ekleme ve silme yapmaz; başlık alanları ve o iş akışının yazdığı onay durumu salt okunurdur, satırı düzenlemek yalnız kalemin satınalma sorumlusunu ve satır durumunu değiştirir. Kartlar kalemi değil talebi sayar.\nİlişkili: Taleplerim, Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Satınalma › Tanımlamalar › Red Nedenleri.", + "DescEn": "All Requests — every material request of the company in every status, listed per request line; list of purchasing management.\nWhere: Purchasing › Material Requests › All Requests.\nFields: each row is one request line — request header (request no, priority, requester, branch, department, warehouse and location, request date, general description, approval status / approver / date / description) next to the line (product, quantity, unit, fulfillment method, due date, reason, delivered quantity, purchasing responsible, line status). A request without lines is shown as a single row with empty line columns.\nFlow: requests are created in My Requests and approved in Awaiting Department Approval › Awaiting Purchasing Approval; this list does not add or delete; header fields and the approval status written by that workflow are read-only, editing a row only sets the line's purchasing responsible and line status. Cards count requests, not lines.\nRelated: My Requests, Awaiting Department Approval, Awaiting Purchasing Approval, Purchasing › Definitions › Rejection Reasons.", + "DescTr": "Tüm Talepler — kurumun bütün malzeme talepleri, tüm durumlarıyla, kalem kalem; satınalma yönetiminin listesi.\nNerede: Satınalma › Talepler › Tüm Talepler.\nAlanlar: her satır bir talep kalemidir — talep başlığı (talep no, öncelik, talep eden, şube, departman, depo ve konum, talep tarihi, genel açıklama, onay durumu / onaylayan / tarih / açıklama) ile kalemin bilgileri (ürün, miktar, birim, karşılama yöntemi, termin, talep nedeni, teslim edilen miktar, satınalma sorumlusu, satır durumu) yan yanadır. Kalemi olmayan talep, kalem kolonları boş tek satır olarak görünür.\nAkış: talep Taleplerim ekranında açılır, Departman Onayı Bekleyenler › Satınalma Onayı Bekleyenler ekranlarında onaylanır; bu liste ekleme ve silme yapmaz; başlık alanları ve o iş akışının yazdığı onay durumu salt okunurdur, satırı düzenlemek yalnız kalemin satınalma sorumlusunu ve satır durumunu değiştirir. Kartlar kalemi değil talebi sayar.\nİlişkili: Taleplerim, Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Satınalma › Tanımlamalar › Red Nedenleri.", "Texts": [ { "Key": "App.Prc.MaterialRequest.Group.Request", @@ -94,6 +94,12 @@ "En": "Requester", "Tr": "Talep Eden" }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, { "FieldName": "DepartmentId", "CaptionName": "App.Listform.ListformField.Department", @@ -264,7 +270,7 @@ { "ColGap": 3, "ColSpan": 3, - "SqlQuery": "SELECT 'App.Prc.MaterialRequest.Status.DeptApproval' AS \"Title\", CAST(COUNT(*) AS VARCHAR(32)) AS \"Value\", 'orange' AS \"Color\", 'App.Prc.MaterialRequest' AS \"SubTitle\", 'FaUserTie' AS \"Icon\" FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Departman Onayı' UNION ALL SELECT 'App.Prc.MaterialRequest.Status.PurchaseApproval', CAST(COUNT(*) AS VARCHAR(32)), 'purple', 'App.Prc.MaterialRequest', 'FaHourglassHalf' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Satınalma Onayı' UNION ALL SELECT 'App.Prc.MaterialRequest.Status.Approved', CAST(COUNT(*) AS VARCHAR(32)), 'green', 'App.Prc.MaterialRequest', 'FaCheckCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Onaylandı' UNION ALL SELECT 'App.Prc.MaterialRequest.Status.Rejected', CAST(COUNT(*) AS VARCHAR(32)), 'red', 'App.Prc.MaterialRequest', 'FaTimesCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Reddedildi'", + "SqlQuery": "SELECT 'App.Prc.MaterialRequest.Status.DeptApproval' AS \"Title\", CAST(COUNT(*) AS VARCHAR(32)) AS \"Value\", 'orange' AS \"Color\", 'App.Prc.MaterialRequest' AS \"SubTitle\", 'FaUserTie' AS \"Icon\" FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Departman Onayı' UNION ALL SELECT 'App.Prc.MaterialRequest.Status.PurchaseApproval', CAST(COUNT(*) AS VARCHAR(32)), 'purple', 'App.Prc.MaterialRequest', 'FaHourglassHalf' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Satınalma Onayı' UNION ALL SELECT 'App.Prc.MaterialRequest.Status.Approved', CAST(COUNT(*) AS VARCHAR(32)), 'green', 'App.Prc.MaterialRequest', 'FaCheckCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" IN (N'Onaylandı', N'Teklif Talebi', N'Teklif Talebi Gönderildi', N'Satınalma Siparişi') UNION ALL SELECT 'App.Prc.MaterialRequest.Status.Rejected', CAST(COUNT(*) AS VARCHAR(32)), 'red', 'App.Prc.MaterialRequest', 'FaTimesCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"ApprovalStatus\" = N'Reddedildi'", "Title": "Title", "Value": "Value", "ValueClassName": "text-3xl", @@ -1136,6 +1142,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1274,6 +1282,148 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.MaterialRequest.Create", + "R": "App.Prc.MaterialRequest", + "U": "App.Prc.MaterialRequest.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.MaterialRequest", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 5, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": false, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1345,7 +1495,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 5, + "ListOrderNo": 6, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1403,7 +1553,7 @@ "CascadeFilterOperator": "=", "CascadeParentFields": null, "CascadeEmptyFields": null, - "LookupQuery": "SELECT d.Id AS [Key], CONCAT(b.Name, ' - ', d.Name) AS [Name] FROM Hr_T_Department d INNER JOIN Sas_T_Branch b ON b.Id = d.BranchId AND b.IsDeleted = 'false' WHERE d.IsDeleted = 'false' AND d.TenantId = '@TENANTID' ORDER BY b.Name, d.Name" + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Hr_T_Department WHERE IsDeleted = 'false' AND TenantId = '@TENANTID' ORDER BY Name" }, "ValidationRuleDto": [ { @@ -1412,6 +1562,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1483,7 +1635,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 6, + "ListOrderNo": 7, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1550,6 +1702,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1621,7 +1775,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 7, + "ListOrderNo": 8, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1688,6 +1842,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1759,7 +1915,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 8, + "ListOrderNo": 9, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -1826,6 +1982,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1897,7 +2055,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 9, + "ListOrderNo": 10, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1987,9 +2145,9 @@ "Format": null, "EditOrderNo": null, "EditGroupOrderNo": null, - "EditorType2": "dxTextBox", + "EditorType2": "dxHtmlEditor", "ColSpan": 2, - "EditorOptions": "{\"autoResizeEnabled\":true,\"minHeight\":60}", + "EditorOptions": null, "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -2023,7 +2181,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 10, + "ListOrderNo": 11, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2149,7 +2307,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 11, + "ListOrderNo": 12, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2275,7 +2433,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 13, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -2401,7 +2559,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 13, + "ListOrderNo": 14, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2527,7 +2685,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 14, + "ListOrderNo": 15, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -2653,7 +2811,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 15, + "ListOrderNo": 16, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -2779,7 +2937,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 16, + "ListOrderNo": 17, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -2905,7 +3063,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 17, + "ListOrderNo": 18, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3031,7 +3189,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 18, + "ListOrderNo": 19, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3157,7 +3315,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 19, + "ListOrderNo": 20, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -3283,7 +3441,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 20, + "ListOrderNo": 21, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3409,7 +3567,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 21, + "ListOrderNo": 22, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -3535,7 +3693,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 22, + "ListOrderNo": 23, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -3661,7 +3819,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 23, + "ListOrderNo": 24, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3728,6 +3886,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -3805,6 +3965,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_MaterialRequestDeptApproval.json b/configs/seeds/wizard/Prc_MaterialRequestDeptApproval.json index 6aa8fabe..dc0d3465 100644 --- a/configs/seeds/wizard/Prc_MaterialRequestDeptApproval.json +++ b/configs/seeds/wizard/Prc_MaterialRequestDeptApproval.json @@ -25,7 +25,7 @@ }, "Language": { "MenuParentEn": "Material Requests", - "MenuParentTr": "Malzeme Talepleri", + "MenuParentTr": "Talepler", "PermissionGroupEn": "Purchasing", "PermissionGroupTr": "Satınalma", "MenuEn": "Awaiting Department Approval", @@ -33,7 +33,7 @@ "TitleEn": "Awaiting Department Approval", "TitleTr": "Departman Onayı Bekleyenler", "DescEn": "Awaiting Department Approval — material requests waiting for the department approver's decision.\nWhere: Purchasing › Material Requests › Awaiting Department Approval.\nWho: approvers defined in Administration › Definitions › Approvers with area Purchasing for the requester's department; each approver sees only the requests assigned to them.\nWhat to do: open the request, review the Request Lines tab, then Approve (the request moves to purchasing approval) or Reject by choosing a rejection reason (Purchasing › Definitions › Rejection Reasons) and an optional note; the reason and note are written to the approval description. Lines cannot be added or removed here.\nRelated: My Requests, Awaiting Purchasing Approval, All Requests.", - "DescTr": "Departman Onayı Bekleyenler — departman onaycısının kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Malzeme Talepleri › Departman Onayı Bekleyenler.\nKim: Yönetim › Tanımlamalar › Onaycılar'da talep edenin departmanı için Satınalma onay yerinde tanımlı onaycılar; her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi açıp Talep Satırları sekmesini inceleyin, ardından Onayla (talep satınalma onayına geçer) ya da red nedeni (Satınalma › Tanımlamalar › Red Nedenleri) seçip isteğe bağlı notla Reddet; neden ve not onay açıklamasına yazılır. Burada satır eklenip silinemez.\nİlişkili: Taleplerim, Satınalma Onayı Bekleyenler, Tüm Talepler.", + "DescTr": "Departman Onayı Bekleyenler — departman onaycısının kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Talepler › Departman Onayı Bekleyenler.\nKim: Yönetim › Tanımlamalar › Onaycılar'da talep edenin departmanı için Satınalma onay yerinde tanımlı onaycılar; her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi açıp Talep Satırları sekmesini inceleyin, ardından Onayla (talep satınalma onayına geçer) ya da red nedeni (Satınalma › Tanımlamalar › Red Nedenleri) seçip isteğe bağlı notla Reddet; neden ve not onay açıklamasına yazılır. Burada satır eklenip silinemez.\nİlişkili: Taleplerim, Satınalma Onayı Bekleyenler, Tüm Talepler.", "Texts": [ { "Key": "App.Prc.MaterialRequest.Group.Request", @@ -94,6 +94,12 @@ "En": "Requester", "Tr": "Talep Eden" }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, { "FieldName": "DepartmentId", "CaptionName": "App.Listform.ListformField.Department", @@ -448,6 +454,7 @@ "AllowAllDeleting": false, "AllowAdding": false, "AllowDuplicate": false, + "OpenDetailAfterInsert": false, "UseIcons": false, "ConfirmDelete": true, "NewRowPosition": "viewportTop", @@ -1251,6 +1258,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1389,6 +1398,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1453,8 +1464,8 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "DepartmentId", - "CaptionName": "App.Listform.ListformField.Department", + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", "PlaceHolder": null, "ReadOnly": false, "Visible": true, @@ -1518,7 +1529,7 @@ "CascadeFilterOperator": "=", "CascadeParentFields": null, "CascadeEmptyFields": null, - "LookupQuery": "SELECT d.Id AS [Key], CONCAT(b.Name, ' - ', d.Name) AS [Name] FROM Hr_T_Department d INNER JOIN Sas_T_Branch b ON b.Id = d.BranchId WHERE d.IsDeleted = 'false' AND d.TenantId = '@TENANTID' ORDER BY b.Name, d.Name" + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" }, "ValidationRuleDto": [ { @@ -1527,6 +1538,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1560,7 +1573,147 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 4, + "EditOrderNo": 5, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"readOnly\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.MaterialRequestDeptApproval", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "DepartmentId", + "CaptionName": "App.Listform.ListformField.Department", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 6, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Hr_T_Department WHERE IsDeleted = 'false' AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.MaterialRequestDeptApproval.Create", + "R": "App.Prc.MaterialRequestDeptApproval", + "U": "App.Prc.MaterialRequestDeptApproval.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 6, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1598,7 +1751,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 6, + "ListOrderNo": 7, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1665,6 +1818,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1698,7 +1853,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 5, + "EditOrderNo": 7, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1736,7 +1891,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 7, + "ListOrderNo": 8, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1803,6 +1958,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1836,7 +1993,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 6, + "EditOrderNo": 8, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1874,7 +2031,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 8, + "ListOrderNo": 9, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -1941,6 +2098,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1974,7 +2133,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 7, + "EditOrderNo": 4, "EditGroupOrderNo": 1, "EditorType2": "dxDateBox", "ColSpan": 1, @@ -2012,7 +2171,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 9, + "ListOrderNo": 10, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2100,11 +2259,11 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 8, + "EditOrderNo": 9, "EditGroupOrderNo": 1, - "EditorType2": "dxTextArea", + "EditorType2": "dxHtmlEditor", "ColSpan": 4, - "EditorOptions": "{\"readOnly\":true}", + "EditorOptions": "{\"readOnly\":true,\"height\":150}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -2138,7 +2297,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 10, + "ListOrderNo": 11, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2264,7 +2423,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 11, + "ListOrderNo": 12, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2390,7 +2549,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 13, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2516,7 +2675,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 13, + "ListOrderNo": 14, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2642,7 +2801,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 14, + "ListOrderNo": 15, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -2768,7 +2927,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 15, + "ListOrderNo": 16, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2900,6 +3059,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_MaterialRequestLine.json b/configs/seeds/wizard/Prc_MaterialRequestLine.json index 69a84dc9..66223199 100644 --- a/configs/seeds/wizard/Prc_MaterialRequestLine.json +++ b/configs/seeds/wizard/Prc_MaterialRequestLine.json @@ -26,7 +26,7 @@ }, "Language": { "MenuParentEn": "Material Requests", - "MenuParentTr": "Malzeme Talepleri", + "MenuParentTr": "Talepler", "PermissionGroupEn": "Purchasing", "PermissionGroupTr": "Satınalma", "MenuEn": "Request Lines", @@ -34,7 +34,7 @@ "TitleEn": "Request Lines", "TitleTr": "Talep Satırları", "DescEn": "Request Lines — the products requested in a material request.\nWhere: Purchasing › Material Requests › My Requests, Awaiting Department Approval and Awaiting Purchasing Approval › Request Lines tab; All Requests shows the lines as columns (no menu of its own).\nFields: product (active, purchasable products), quantity, unit (copied from the product's purchase unit, read-only), fulfilment (Purchasing / Warehouse Transfer), due date, request reason, delivered quantity (read-only), purchasing responsible, line status (Waiting / Done / Cancelled).\nRules: lines can be added or deleted only while the request has not been sent for approval. Changing line statuses recalculates the request status (Partially Done / Done).", - "DescTr": "Talep Satırları — malzeme talebinde istenen ürünler.\nNerede: Satınalma › Malzeme Talepleri › Taleplerim, Departman Onayı Bekleyenler ve Satınalma Onayı Bekleyenler › Talep Satırları sekmesi; Tüm Talepler satırları kolon olarak gösterir (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), miktar, birim (ürünün satınalma biriminden gelir, salt okunur), karşılama şekli (Satınalma / Depodan Transfer), termin tarihi, talep nedeni, teslim edilen miktar (salt okunur), satınalma sorumlusu, satır durumu (Bekliyor / Tamamlandı / İptal).\nKurallar: satır yalnız talep onaya gönderilmeden eklenip silinebilir. Satır durumları değişince talebin durumu yeniden hesaplanır (Kısmi Tamamlandı / Tamamlandı).", + "DescTr": "Talep Satırları — malzeme talebinde istenen ürünler.\nNerede: Satınalma › Talepler › Taleplerim, Departman Onayı Bekleyenler ve Satınalma Onayı Bekleyenler › Talep Satırları sekmesi; Tüm Talepler satırları kolon olarak gösterir (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), miktar, birim (ürünün satınalma biriminden gelir, salt okunur), karşılama şekli (Satınalma / Depodan Transfer), termin tarihi, talep nedeni, teslim edilen miktar (salt okunur), satınalma sorumlusu, satır durumu (Bekliyor / Tamamlandı / İptal).\nKurallar: satır yalnız talep onaya gönderilmeden eklenip silinebilir. Satır durumları değişince talebin durumu yeniden hesaplanır (Kısmi Tamamlandı / Tamamlandı).", "Texts": [ { "Key": "App.StaticLookup.Purchase", @@ -2281,6 +2281,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_MaterialRequestPurchaseApproval.json b/configs/seeds/wizard/Prc_MaterialRequestPurchaseApproval.json index c7bee3c2..5a15bd6d 100644 --- a/configs/seeds/wizard/Prc_MaterialRequestPurchaseApproval.json +++ b/configs/seeds/wizard/Prc_MaterialRequestPurchaseApproval.json @@ -25,7 +25,7 @@ }, "Language": { "MenuParentEn": "Material Requests", - "MenuParentTr": "Malzeme Talepleri", + "MenuParentTr": "Talepler", "PermissionGroupEn": "Purchasing", "PermissionGroupTr": "Satınalma", "MenuEn": "Awaiting Purchasing Approval", @@ -33,7 +33,7 @@ "TitleEn": "Awaiting Purchasing Approval", "TitleTr": "Satınalma Onayı Bekleyenler", "DescEn": "Awaiting Purchasing Approval — material requests approved by the department and waiting for purchasing.\nWhere: Purchasing › Material Requests › Awaiting Purchasing Approval.\nWho: users with update permission on Awaiting Purchasing Approval (directly or through their role); the approver list of each request is refreshed when the request is saved, and each approver sees only the requests assigned to them.\nWhat to do: review the request and its lines, then Approve (the request becomes Approved, the requester is notified) or Reject by choosing a rejection reason and an optional note; both are written to the approval description.\nRelated: Awaiting Department Approval, All Requests.", - "DescTr": "Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Malzeme Talepleri › Satınalma Onayı Bekleyenler.\nKim: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle); talebin onaycı listesi talep kaydedilince yenilenir, her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi ve satırlarını inceleyip Onayla (talep Onaylandı olur, talep edene bilgi gider) ya da red nedeni seçip isteğe bağlı notla Reddet; ikisi de onay açıklamasına yazılır.\nİlişkili: Departman Onayı Bekleyenler, Tüm Talepler.", + "DescTr": "Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Talepler › Satınalma Onayı Bekleyenler.\nKim: Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle); talebin onaycı listesi talep kaydedilince yenilenir, her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi ve satırlarını inceleyip Onayla (talep Onaylandı olur, talep edene bilgi gider) ya da red nedeni seçip isteğe bağlı notla Reddet; ikisi de onay açıklamasına yazılır.\nİlişkili: Departman Onayı Bekleyenler, Tüm Talepler.", "Texts": [ { "Key": "App.Prc.MaterialRequest.Group.Request", @@ -94,6 +94,12 @@ "En": "Requester", "Tr": "Talep Eden" }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, { "FieldName": "DepartmentId", "CaptionName": "App.Listform.ListformField.Department", @@ -448,6 +454,7 @@ "AllowAllDeleting": false, "AllowAdding": false, "AllowDuplicate": false, + "OpenDetailAfterInsert": false, "UseIcons": false, "ConfirmDelete": true, "NewRowPosition": "viewportTop", @@ -1251,6 +1258,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1389,6 +1398,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1453,8 +1464,8 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "DepartmentId", - "CaptionName": "App.Listform.ListformField.Department", + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", "PlaceHolder": null, "ReadOnly": false, "Visible": true, @@ -1518,7 +1529,7 @@ "CascadeFilterOperator": "=", "CascadeParentFields": null, "CascadeEmptyFields": null, - "LookupQuery": "SELECT d.Id AS [Key], CONCAT(b.Name, ' - ', d.Name) AS [Name] FROM Hr_T_Department d INNER JOIN Sas_T_Branch b ON b.Id = d.BranchId WHERE d.IsDeleted = 'false' AND d.TenantId = '@TENANTID' ORDER BY b.Name, d.Name" + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" }, "ValidationRuleDto": [ { @@ -1527,6 +1538,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1560,7 +1573,147 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 4, + "EditOrderNo": 5, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"readOnly\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.MaterialRequestPurchaseApproval", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "DepartmentId", + "CaptionName": "App.Listform.ListformField.Department", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 6, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Hr_T_Department WHERE IsDeleted = 'false' AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.MaterialRequestPurchaseApproval.Create", + "R": "App.Prc.MaterialRequestPurchaseApproval", + "U": "App.Prc.MaterialRequestPurchaseApproval.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 6, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1598,7 +1751,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 6, + "ListOrderNo": 7, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1665,6 +1818,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1698,7 +1853,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 5, + "EditOrderNo": 7, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1736,7 +1891,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 7, + "ListOrderNo": 8, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1803,6 +1958,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1836,7 +1993,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 6, + "EditOrderNo": 8, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1874,7 +2031,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 8, + "ListOrderNo": 9, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -1941,6 +2098,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1974,7 +2133,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 7, + "EditOrderNo": 4, "EditGroupOrderNo": 1, "EditorType2": "dxDateBox", "ColSpan": 1, @@ -2012,7 +2171,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 9, + "ListOrderNo": 10, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2100,11 +2259,11 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 8, + "EditOrderNo": 9, "EditGroupOrderNo": 1, - "EditorType2": "dxTextArea", + "EditorType2": "dxHtmlEditor", "ColSpan": 2, - "EditorOptions": "{\"readOnly\":true}", + "EditorOptions": "{\"readOnly\":true,\"height\":150}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -2138,7 +2297,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 10, + "ListOrderNo": 11, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2264,7 +2423,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 11, + "ListOrderNo": 12, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2390,7 +2549,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 13, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2516,7 +2675,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 13, + "ListOrderNo": 14, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2642,7 +2801,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 14, + "ListOrderNo": 15, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -2768,7 +2927,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 15, + "ListOrderNo": 16, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2900,6 +3059,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_MyMaterialRequest.json b/configs/seeds/wizard/Prc_MyMaterialRequest.json index aef3429c..8f6a653e 100644 --- a/configs/seeds/wizard/Prc_MyMaterialRequest.json +++ b/configs/seeds/wizard/Prc_MyMaterialRequest.json @@ -25,15 +25,15 @@ }, "Language": { "MenuParentEn": "Material Requests", - "MenuParentTr": "Malzeme Talepleri", + "MenuParentTr": "Talepler", "PermissionGroupEn": "Purchasing", "PermissionGroupTr": "Satınalma", "MenuEn": "My Requests", "MenuTr": "Taleplerim", "TitleEn": "My Material Requests", "TitleTr": "Taleplerim", - "DescEn": "My Requests — the material requests you opened, in every status.\nWhere: Purchasing › Material Requests › My Requests.\nFields: request no (MT-YYYY-00001, automatic), priority, requester (you), department (your department by default), warehouse and location where the goods will be put, request date, general description; Request Lines tab: product, quantity, unit, fulfilment, due date, request reason.\nFlow: add lines, then send for approval — the department approver (Approvers › area Purchasing for your department) and then purchasing (users with update permission on Awaiting Purchasing Approval (directly or through their role)) approve or reject. Lines can only be added or removed before sending. Approval status, approver, date and description (with the rejection reason) are filled by the workflow and shown in the list, not in the edit form.\nRelated: Awaiting Department Approval, Awaiting Purchasing Approval, All Requests.", - "DescTr": "Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla.\nNerede: Satınalma › Malzeme Talepleri › Taleplerim.\nAlanlar: talep no (MT-YYYY-00001, otomatik), öncelik, talep eden (siz), departman (varsayılan olarak sizin departmanınız), malın konulacağı depo ve konum, talep tarihi, genel açıklama; Talep Satırları sekmesi: ürün, miktar, birim, karşılama şekli, termin tarihi, talep nedeni.\nAkış: satırları girip onaya gönderin — önce departman onaycısı (Onaycılar › departmanınız için Satınalma onay yeri), ardından satınalma (Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle)) onaylar ya da reddeder. Satırlar yalnız onaya göndermeden önce eklenip silinebilir. Onay durumu, onaylayan, tarih ve açıklama (red nedeniyle birlikte) iş akışınca doldurulur; düzenleme formunda değil listede görünür.\nİlişkili: Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Tüm Talepler.", + "DescEn": "My Requests — the material requests you opened, in every status.\nWhere: Purchasing › Material Requests › My Requests.\nFields: request no (MT-YYYY-00001, automatic), priority, requester (you), branch and department (yours by default; departments are filtered by branch), warehouse (filtered by branch) and location (filtered by warehouse) where the goods will be put, request date, general description (rich text); Request Lines tab: product, quantity, unit, fulfilment, due date, request reason.\nFlow: add lines, then send for approval — the department approver (Approvers › area Purchasing for your department) and then purchasing (users with update permission on Awaiting Purchasing Approval (directly or through their role)) approve or reject. Lines can only be added or removed before sending. Approval status, approver, date and description (with the rejection reason) are filled by the workflow and shown in the list, not in the edit form.\nRelated: Awaiting Department Approval, Awaiting Purchasing Approval, All Requests.", + "DescTr": "Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla.\nNerede: Satınalma › Talepler › Taleplerim.\nAlanlar: talep no (MT-YYYY-00001, otomatik), öncelik, talep eden (siz), şube ve departman (varsayılan olarak sizinkiler; departman şubeye göre süzülür), malın konulacağı depo (şubeye göre) ve konum (depoya göre), talep tarihi, genel açıklama (biçimli metin); Talep Satırları sekmesi: ürün, miktar, birim, karşılama şekli, termin tarihi, talep nedeni.\nAkış: satırları girip onaya gönderin — önce departman onaycısı (Onaycılar › departmanınız için Satınalma onay yeri), ardından satınalma (Satınalma Onayı Bekleyenler ekranında güncelleme yetkisi olan kullanıcılar (doğrudan ya da rolüyle)) onaylar ya da reddeder. Satırlar yalnız onaya göndermeden önce eklenip silinebilir. Onay durumu, onaylayan, tarih ve açıklama (red nedeniyle birlikte) iş akışınca doldurulur; düzenleme formunda değil listede görünür.\nİlişkili: Departman Onayı Bekleyenler, Satınalma Onayı Bekleyenler, Tüm Talepler.", "Texts": [ { "Key": "App.Prc.MaterialRequest.Group.Request", @@ -114,6 +114,12 @@ "En": "Requester", "Tr": "Talep Eden" }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, { "FieldName": "DepartmentId", "CaptionName": "App.Listform.ListformField.Department", @@ -283,6 +289,13 @@ "CustomValueType": 2, "SqlQuery": "" }, + { + "FieldName": "BranchId", + "FieldDbType": 9, + "Value": "", + "CustomValueType": 3, + "SqlQuery": "SELECT BranchId FROM Hr_T_Department WHERE Id = (SELECT DepartmentId FROM AbpUsers WHERE Id = '@USERID')" + }, { "FieldName": "DepartmentId", "FieldDbType": 9, @@ -309,7 +322,7 @@ { "ColGap": 3, "ColSpan": 3, - "SqlQuery": "SELECT 'App.Prc.MaterialRequest.Widget.Mine' AS \"Title\", CAST(COUNT(*) AS VARCHAR(32)) AS \"Value\", 'blue' AS \"Color\", 'App.Prc.MyMaterialRequest' AS \"SubTitle\", 'FaClipboardList' AS \"Icon\" FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' UNION ALL SELECT 'App.Prc.MaterialRequest.Widget.Pending', CAST(COUNT(*) AS VARCHAR(32)), 'orange', 'App.Prc.MyMaterialRequest', 'FaHourglassHalf' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' AND \"ApprovalStatus\" IN (N'Departman Onayı', N'Satınalma Onayı') UNION ALL SELECT 'App.Prc.MaterialRequest.Widget.Approved', CAST(COUNT(*) AS VARCHAR(32)), 'green', 'App.Prc.MyMaterialRequest', 'FaCheckCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' AND \"ApprovalStatus\" = N'Onaylandı' UNION ALL SELECT 'App.Prc.MaterialRequest.Widget.Rejected', CAST(COUNT(*) AS VARCHAR(32)), 'red', 'App.Prc.MyMaterialRequest', 'FaTimesCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' AND \"ApprovalStatus\" = N'Reddedildi'", + "SqlQuery": "SELECT 'App.Prc.MaterialRequest.Widget.Mine' AS \"Title\", CAST(COUNT(*) AS VARCHAR(32)) AS \"Value\", 'blue' AS \"Color\", 'App.Prc.MyMaterialRequest' AS \"SubTitle\", 'FaClipboardList' AS \"Icon\" FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' UNION ALL SELECT 'App.Prc.MaterialRequest.Widget.Pending', CAST(COUNT(*) AS VARCHAR(32)), 'orange', 'App.Prc.MyMaterialRequest', 'FaHourglassHalf' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' AND \"ApprovalStatus\" IN (N'Departman Onayı', N'Satınalma Onayı') UNION ALL SELECT 'App.Prc.MaterialRequest.Widget.Approved', CAST(COUNT(*) AS VARCHAR(32)), 'green', 'App.Prc.MyMaterialRequest', 'FaCheckCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' AND \"ApprovalStatus\" IN (N'Onaylandı', N'Teklif Talebi', N'Teklif Talebi Gönderildi', N'Satınalma Siparişi') UNION ALL SELECT 'App.Prc.MaterialRequest.Widget.Rejected', CAST(COUNT(*) AS VARCHAR(32)), 'red', 'App.Prc.MyMaterialRequest', 'FaTimesCircle' FROM \"Prc_T_MaterialRequest\" WHERE \"TenantId\" = '@TENANTID' AND \"RequesterUserId\" = '@USERID' AND \"ApprovalStatus\" = N'Reddedildi'", "Title": "Title", "Value": "Value", "ValueClassName": "text-3xl", @@ -1286,6 +1299,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1415,7 +1430,7 @@ "CascadeFilterOperator": "=", "CascadeParentFields": null, "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], CONCAT(Name, ' ', Surname) AS [Name], DepartmentId FROM AbpUsers WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name, Surname" + "LookupQuery": "SELECT u.Id AS [Key], CONCAT(u.Name, ' ', u.Surname) AS [Name], u.DepartmentId, d.BranchId FROM AbpUsers u LEFT JOIN Hr_T_Department d ON d.Id = u.DepartmentId WHERE u.IsDeleted = 'false' AND u.IsActive = 1 AND u.TenantId = '@TENANTID' ORDER BY u.Name, u.Surname" }, "ValidationRuleDto": [ { @@ -1424,6 +1439,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1465,7 +1482,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"copy_1\",\"recipe\":\"copy\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"source\":\"DepartmentId\",\"target\":\"DepartmentId\"},\"fields\":[],\"trigger\":\"change\"}]}\ncopy(\"DepartmentId\", \"DepartmentId\")", + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"copy_1\",\"recipe\":\"copy\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"source\":\"BranchId\",\"target\":\"BranchId\"},\"fields\":[],\"trigger\":\"change\"},{\"id\":\"copy_2\",\"recipe\":\"copy\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"source\":\"DepartmentId\",\"target\":\"DepartmentId\"},\"fields\":[],\"trigger\":\"change\"}]}\ncopy(\"BranchId\", \"BranchId\")\ncopy(\"DepartmentId\", \"DepartmentId\")", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1488,8 +1505,8 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "DepartmentId", - "CaptionName": "App.Listform.ListformField.Department", + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", "PlaceHolder": null, "ReadOnly": false, "Visible": true, @@ -1552,8 +1569,8 @@ "CascadeRelationField": null, "CascadeFilterOperator": "=", "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": "SELECT d.Id AS [Key], CONCAT(b.Name, ' - ', d.Name) AS [Name] FROM Hr_T_Department d INNER JOIN Sas_T_Branch b ON b.Id = d.BranchId AND b.IsDeleted = 'false' WHERE d.IsDeleted = 'false' AND d.TenantId = '@TENANTID' ORDER BY b.Name, d.Name" + "CascadeEmptyFields": "DepartmentId,WarehouseId,LocationId", + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" }, "ValidationRuleDto": [ { @@ -1562,6 +1579,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1595,7 +1614,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 4, + "EditOrderNo": 5, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1626,8 +1645,8 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "WarehouseId", - "CaptionName": "App.Listform.ListformField.WarehouseId", + "FieldName": "DepartmentId", + "CaptionName": "App.Listform.ListformField.Department", "PlaceHolder": null, "ReadOnly": false, "Visible": true, @@ -1689,147 +1708,9 @@ "DisplayExpr": "Name", "CascadeRelationField": null, "CascadeFilterOperator": "=", - "CascadeParentFields": null, + "CascadeParentFields": "BranchId", "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name] FROM Inv_T_Warehouse WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Code" - }, - "ValidationRuleDto": [ - { - "Type": "required", - "Message": null, - "IgnoreEmptyValue": false, - "Reevaluate": true, - "ComparisonType": "", - "Pattern": "", - "Max": null, - "Min": null, - "Trim": true - } - ], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.MyMaterialRequest.Create", - "R": "App.Prc.MyMaterialRequest", - "U": "App.Prc.MyMaterialRequest.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 5, - "EditGroupOrderNo": 1, - "EditorType2": "dxSelectBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"clear_1\",\"recipe\":\"clear\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{},\"fields\":[\"LocationId\"],\"trigger\":\"change\"}]}\nclear(\"LocationId\")", - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.MyMaterialRequest", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "LocationId", - "CaptionName": "App.Listform.ListformField.LocationId", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 7, - "SourceDbType": 9, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 2, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": "WarehouseId", - "CascadeFilterOperator": "=", - "CascadeParentFields": "WarehouseId", - "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name], WarehouseId FROM Inv_T_Location WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Code" + "LookupQuery": "SELECT Id AS [Key], Name AS [Name], BranchId FROM Hr_T_Department WHERE IsDeleted = 'false' AND TenantId = '@TENANTID' AND (@param0 IS NULL OR BranchId = @param0) ORDER BY Name" }, "ValidationRuleDto": [ { @@ -1838,6 +1719,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1886,6 +1769,286 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, + { + "EditType": null, + "ListFormCode": "App.Prc.MyMaterialRequest", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 7, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "BranchId", + "CascadeEmptyFields": "LocationId", + "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name], BranchId FROM Inv_T_Warehouse WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR BranchId = @param0) ORDER BY Code" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.MyMaterialRequest.Create", + "R": "App.Prc.MyMaterialRequest", + "U": "App.Prc.MyMaterialRequest.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 7, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.MyMaterialRequest", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "LocationId", + "CaptionName": "App.Listform.ListformField.LocationId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 8, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "WarehouseId", + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name], WarehouseId FROM Inv_T_Location WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR WarehouseId = @param0) ORDER BY Code" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.MyMaterialRequest.Create", + "R": "App.Prc.MyMaterialRequest", + "U": "App.Prc.MyMaterialRequest.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 8, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, { "EditType": null, "ListFormCode": "App.Prc.MyMaterialRequest", @@ -1909,7 +2072,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 8, + "ListOrderNo": 9, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -1976,6 +2139,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -2009,7 +2174,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 7, + "EditOrderNo": 4, "EditGroupOrderNo": 1, "EditorType2": "dxDateBox", "ColSpan": 1, @@ -2047,7 +2212,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 9, + "ListOrderNo": 10, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2135,11 +2300,11 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 8, + "EditOrderNo": 9, "EditGroupOrderNo": 1, - "EditorType2": "dxTextBox", + "EditorType2": "dxHtmlEditor", "ColSpan": 4, - "EditorOptions": "{\"autoResizeEnabled\":true,\"minHeight\":60}", + "EditorOptions": "{\"height\":150}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -2173,7 +2338,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 10, + "ListOrderNo": 11, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2299,7 +2464,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 11, + "ListOrderNo": 12, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2425,7 +2590,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 13, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -2551,7 +2716,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 13, + "ListOrderNo": 14, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2677,7 +2842,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 14, + "ListOrderNo": 15, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2803,7 +2968,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 15, + "ListOrderNo": 16, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2953,6 +3118,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_PurchaseAgreement.json b/configs/seeds/wizard/Prc_PurchaseAgreement.json index ab61d4fb..3f29f149 100644 --- a/configs/seeds/wizard/Prc_PurchaseAgreement.json +++ b/configs/seeds/wizard/Prc_PurchaseAgreement.json @@ -8,32 +8,24 @@ "PermissionGroupName": "App.Prc", "ModuleId": "Prc", "Menu": { - "MenuParentPath": [ - { - "Code": "App.Prc", - "Icon": "FcShop", - "En": "Purchasing", - "Tr": "Satınalma" - } - ], - "MenuParentCode": "App.Prc.Orders", + "MenuParentCode": "App.Prc", "MenuParentIcon": "FcShop", "MenuCode": "App.Prc.PurchaseAgreement", - "MenuOrder": 1, + "MenuOrder": 3, "MenuUrl": "/admin/list/App.Prc.PurchaseAgreement", "MenuIcon": "FcRules" }, "Language": { - "MenuParentEn": "Orders", - "MenuParentTr": "Siparişler", + "MenuParentEn": null, + "MenuParentTr": null, "PermissionGroupEn": "Purchasing", "PermissionGroupTr": "Satınalma", "MenuEn": "Purchase Agreements", "MenuTr": "Sözleşmeler", "TitleEn": "Purchase Agreements", "TitleTr": "Sözleşmeler", - "DescEn": "Purchase Agreements — blanket orders and tenders agreed with suppliers, with agreed quantities and unit prices.\nWhere: Purchasing › Orders › Purchase Agreements; the Products tab holds the agreement lines.\nFields: agreement no (automatic, BO00001), supplier, buyer, agreement type (Blanket Order / Tender), currency, validity start and end dates, reference, operation type, terms and conditions, status (Draft / Confirmed / Closed / Cancelled).\nUsage: select a confirmed agreement on an RFQ or purchase order; prices come from the agreement lines and an empty RFQ is filled with the remaining quantities. The New RFQ button opens Requests for Quotation.", - "DescTr": "Sözleşmeler — tedarikçilerle yapılan kapsamlı sipariş ve ihale sözleşmeleri; anlaşılan miktar ve birim fiyatlarıyla.\nNerede: Satınalma › Siparişler › Sözleşmeler; Ürünler sekmesi sözleşme kalemlerini taşır.\nAlanlar: sözleşme no (otomatik, BO00001), tedarikçi, alıcı, sözleşme türü (Kapsamlı Sipariş / İhale), para birimi, geçerlilik başlangıç ve bitiş tarihleri, referans, operasyon türü, şartlar ve koşullar, durum (Taslak / Doğrulanmış / Kapanmış / İptal).\nKullanım: doğrulanmış sözleşme teklif talebinde ya da siparişte seçilir; fiyatlar sözleşme kalemlerinden gelir, boş teklif talebi kalan miktarlarla dolar. Yeni Teklif butonu Teklif Talepleri'ni açar.", + "DescEn": "Purchase Agreements — blanket orders and tenders agreed with suppliers, with agreed quantities and unit prices.\nWhere: Purchasing › Purchase Agreements; the Products tab holds the agreement lines.\nFields: agreement no (automatic, BO00001), supplier, branch, buyer, agreement type (Blanket Order / Tender), currency, validity start and end dates, warehouse (filtered by branch), operation type (filtered by warehouse), terms and conditions, status (Draft / Confirmed / Closed / Cancelled).\nUsage: select a confirmed agreement on an RFQ or purchase order; prices come from the agreement lines and an empty RFQ is filled with the remaining quantities. The New RFQ button opens Requests for Quotation.", + "DescTr": "Sözleşmeler — tedarikçilerle yapılan kapsamlı sipariş ve ihale sözleşmeleri; anlaşılan miktar ve birim fiyatlarıyla.\nNerede: Satınalma › Sözleşmeler; Ürünler sekmesi sözleşme kalemlerini taşır.\nAlanlar: sözleşme no (otomatik, BO00001), tedarikçi, şube, alıcı, sözleşme türü (Kapsamlı Sipariş / İhale), para birimi, geçerlilik başlangıç ve bitiş tarihleri, depo (şubeye göre), operasyon türü (depoya göre), şartlar ve koşullar, durum (Taslak / Doğrulanmış / Kapanmış / İptal).\nKullanım: doğrulanmış sözleşme teklif talebinde ya da siparişte seçilir; fiyatlar sözleşme kalemlerinden gelir, boş teklif talebi kalan miktarlarla dolar. Yeni Teklif butonu Teklif Talepleri'ni açar.", "Texts": [ { "Key": "App.Prc.AgreementType.Blanket", @@ -91,18 +83,24 @@ "En": "Id", "Tr": "Kimlik" }, - { - "FieldName": "AgreementNo", - "CaptionName": "App.Listform.ListformField.AgreementNo", - "En": "Agreement", - "Tr": "Sözleşme" - }, { "FieldName": "SupplierId", "CaptionName": "App.Listform.ListformField.SupplierId", "En": "Supplier", "Tr": "Tedarikçi" }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, + { + "FieldName": "AgreementNo", + "CaptionName": "App.Listform.ListformField.AgreementNo", + "En": "Agreement", + "Tr": "Sözleşme" + }, { "FieldName": "BuyerUserId", "CaptionName": "App.Listform.ListformField.BuyerUserId", @@ -134,10 +132,10 @@ "Tr": "Bitiş Tarihi" }, { - "FieldName": "Reference", - "CaptionName": "App.Listform.ListformField.Reference", - "En": "Reference", - "Tr": "Referans" + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", + "En": "Warehouse", + "Tr": "Depo" }, { "FieldName": "OperationTypeId", @@ -280,6 +278,13 @@ "Value": "Draft", "CustomValueType": 1, "SqlQuery": "" + }, + { + "FieldName": "BranchId", + "FieldDbType": 9, + "Value": "", + "CustomValueType": 3, + "SqlQuery": "SELECT BranchId FROM Hr_T_Department WHERE Id = (SELECT DepartmentId FROM AbpUsers WHERE Id = '@USERID')" } ], "WidgetsDto": [ @@ -956,144 +961,6 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseAgreement", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "AgreementNo", - "CaptionName": "App.Listform.ListformField.AgreementNo", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 2, - "SourceDbType": 16, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [ - { - "Type": "required", - "Message": null, - "IgnoreEmptyValue": false, - "Reevaluate": true, - "ComparisonType": "", - "Pattern": "", - "Max": null, - "Min": null, - "Trim": true - } - ], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseAgreement.Create", - "R": "App.Prc.PurchaseAgreement", - "U": "App.Prc.PurchaseAgreement.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 1, - "EditGroupOrderNo": 1, - "EditorType2": "dxTextBox", - "ColSpan": 1, - "EditorOptions": "{\"readOnly\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseAgreement", @@ -1117,7 +984,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 3, + "ListOrderNo": 2, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1184,6 +1051,148 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseAgreement.Create", + "R": "App.Prc.PurchaseAgreement", + "U": "App.Prc.PurchaseAgreement.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 1, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseAgreement", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 3, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": "WarehouseId,OperationTypeId", + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1220,7 +1229,7 @@ "EditOrderNo": 2, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", - "ColSpan": 3, + "ColSpan": 1, "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", "GridBoxOptions": null, "TagBoxOptions": null, @@ -1232,6 +1241,146 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseAgreement", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "AgreementNo", + "CaptionName": "App.Listform.ListformField.AgreementNo", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 4, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseAgreement.Create", + "R": "App.Prc.PurchaseAgreement", + "U": "App.Prc.PurchaseAgreement.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 3, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": "{\"readOnly\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseAgreement", @@ -1255,7 +1404,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 4, + "ListOrderNo": 5, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -1322,6 +1471,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1355,7 +1506,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 3, + "EditOrderNo": 4, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1393,7 +1544,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 5, + "ListOrderNo": 6, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1460,6 +1611,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1493,7 +1646,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 4, + "EditOrderNo": 5, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1531,7 +1684,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 6, + "ListOrderNo": 7, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1598,6 +1751,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1631,7 +1786,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 5, + "EditOrderNo": 6, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1669,132 +1824,6 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 7, - "SourceDbType": 6, - "CultureName": "en", - "DataType": "datetime", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseAgreement.Create", - "R": "App.Prc.PurchaseAgreement", - "U": "App.Prc.PurchaseAgreement.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 6, - "EditGroupOrderNo": 1, - "EditorType2": "dxDateBox", - "ColSpan": 1, - "EditorOptions": "{\"type\":\"date\",\"displayFormat\":\"dd.MM.yyyy\",\"useMaskBehavior\":true,\"showClearButton\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseAgreement", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "EndDate", - "CaptionName": "App.Listform.ListformField.EndDate", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, "ListOrderNo": 8, "SourceDbType": 6, "CultureName": "en", @@ -1914,17 +1943,17 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "Reference", - "CaptionName": "App.Listform.ListformField.Reference", + "FieldName": "EndDate", + "CaptionName": "App.Listform.ListformField.EndDate", "PlaceHolder": null, "ReadOnly": false, "Visible": true, "IsActive": true, "Width": 0, "ListOrderNo": 9, - "SourceDbType": 16, + "SourceDbType": 6, "CultureName": "en", - "DataType": "string", + "DataType": "datetime", "SortIndex": 0, "SortDirection": null, "AllowSearch": true, @@ -2011,9 +2040,9 @@ "Format": null, "EditOrderNo": 8, "EditGroupOrderNo": 1, - "EditorType2": "dxTextBox", + "EditorType2": "dxDateBox", "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"maxLength\":64,\"placeholder\":\"örn. PO0025\"}", + "EditorOptions": "{\"type\":\"date\",\"displayFormat\":\"dd.MM.yyyy\",\"useMaskBehavior\":true,\"showClearButton\":true}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -2040,8 +2069,8 @@ "JoinFieldName2": null, "BaseTableJoinFieldName2_OrValue": null }, - "FieldName": "OperationTypeId", - "CaptionName": "App.Listform.ListformField.OperationTypeId", + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", "PlaceHolder": null, "ReadOnly": false, "Visible": true, @@ -2103,11 +2132,25 @@ "DisplayExpr": "Name", "CascadeRelationField": null, "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + "CascadeParentFields": "BranchId", + "CascadeEmptyFields": "OperationTypeId", + "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name], BranchId FROM Inv_T_Warehouse WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR BranchId = @param0) ORDER BY Code" }, - "ValidationRuleDto": [], + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], "ColumnStylingDto": [], "PermissionDto": { "Deny": false, @@ -2150,6 +2193,132 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseAgreement", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "OperationTypeId", + "CaptionName": "App.Listform.ListformField.OperationTypeId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 11, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "WarehouseId", + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name], WarehouseId FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR WarehouseId = @param0) ORDER BY Name" + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseAgreement.Create", + "R": "App.Prc.PurchaseAgreement", + "U": "App.Prc.PurchaseAgreement.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 10, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseAgreement", @@ -2173,7 +2342,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 11, + "ListOrderNo": 12, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2240,6 +2409,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -2273,7 +2444,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 10, + "EditOrderNo": 11, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -2311,7 +2482,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 13, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2399,7 +2570,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 11, + "EditOrderNo": 12, "EditGroupOrderNo": 1, "EditorType2": "dxHtmlEditor", "ColSpan": 4, diff --git a/configs/seeds/wizard/Prc_PurchaseAgreementLine.json b/configs/seeds/wizard/Prc_PurchaseAgreementLine.json index 76e6db0c..df0d54a8 100644 --- a/configs/seeds/wizard/Prc_PurchaseAgreementLine.json +++ b/configs/seeds/wizard/Prc_PurchaseAgreementLine.json @@ -33,8 +33,8 @@ "MenuTr": "Sözleşme Kalemleri", "TitleEn": "Agreement Lines", "TitleTr": "Sözleşme Kalemleri", - "DescEn": "Agreement Lines — the products, quantities and agreed unit prices of a purchase agreement.\nWhere: Purchasing › Orders › Purchase Agreements › Products tab (no menu of its own).\nFields: product (active, purchasable products), description, agreed quantity, unit (copied from the product's purchase unit), agreed unit price.\nUsage: when an RFQ or purchase order is linked to this agreement, product prices are taken from these lines and an empty RFQ is filled with the remaining quantities.", - "DescTr": "Sözleşme Kalemleri — satınalma sözleşmesinin ürünleri, miktarları ve anlaşılan birim fiyatları.\nNerede: Satınalma › Siparişler › Sözleşmeler › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), açıklama, sözleşme miktarı, birim (ürünün satınalma biriminden gelir), anlaşılan birim fiyat.\nKullanım: bir teklif talebi ya da sipariş bu sözleşmeye bağlandığında ürün fiyatları bu kalemlerden alınır; boş teklif talebi kalan miktarlarla doldurulur." + "DescEn": "Agreement Lines — the products, quantities and agreed unit prices of a purchase agreement.\nWhere: Purchasing › Purchase Agreements › Products tab (no menu of its own).\nFields: product (active, purchasable products), description, agreed quantity, unit (copied from the product's purchase unit), agreed unit price.\nUsage: when an RFQ or purchase order is linked to this agreement, product prices are taken from these lines and an empty RFQ is filled with the remaining quantities.", + "DescTr": "Sözleşme Kalemleri — satınalma sözleşmesinin ürünleri, miktarları ve anlaşılan birim fiyatları.\nNerede: Satınalma › Sözleşmeler › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), açıklama, sözleşme miktarı, birim (ürünün satınalma biriminden gelir), anlaşılan birim fiyat.\nKullanım: bir teklif talebi ya da sipariş bu sözleşmeye bağlandığında ürün fiyatları bu kalemlerden alınır; boş teklif talebi kalan miktarlarla doldurulur." }, "Groups": [ { diff --git a/configs/seeds/wizard/Prc_PurchaseOrder.json b/configs/seeds/wizard/Prc_PurchaseOrder.json index 547bbd29..178195eb 100644 --- a/configs/seeds/wizard/Prc_PurchaseOrder.json +++ b/configs/seeds/wizard/Prc_PurchaseOrder.json @@ -19,7 +19,7 @@ "MenuParentCode": "App.Prc.Orders", "MenuParentIcon": "FcShop", "MenuCode": "App.Prc.PurchaseOrder", - "MenuOrder": 3, + "MenuOrder": 2, "MenuUrl": "/admin/list/App.Prc.PurchaseOrder", "MenuIcon": "FcPaid" }, @@ -32,8 +32,8 @@ "MenuTr": "Satınalma Siparişleri", "TitleEn": "Purchase Orders", "TitleTr": "Satınalma Siparişleri", - "DescEn": "Purchase Orders — orders given to suppliers, either converted from a tender of requests for quotation or written directly without collecting quotes.\nWhere: Purchasing › Orders › Purchase Orders; tabs Products, Request Lines (draft orders), Other Information and Quotes (the RFQs of the source tender).\nStatuses: Draft › Confirmed / Cancelled; orders converted from an RFQ open confirmed.\nFields: order no (automatic, P00001), supplier, supplier reference, agreement, currency, confirmation date, expected arrival, arrival (entered when the goods arrive), deliver to, terms; the list also shows untaxed / tax / total (calculated from the lines); Source shows the RFQ no when converted from a quote, otherwise the material request numbers.\nToolbar (select an order): Import from Requests (draft orders), and the status buttons Confirm Order, Send by E-mail (queues the order with prices to the supplier's contact e-mail), Cancel, Set to Draft (a cancelled order); status buttons ask for confirmation. Only a draft order written without an RFQ can be deleted; a cancelled order cannot be edited.", - "DescTr": "Satınalma Siparişleri — tedarikçilere verilen siparişler; teklif talebi ihalesinden dönüştürülür ya da teklif toplamadan doğrudan yazılır.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri; sekmeler Ürünler, Talep Kalemleri (taslak siparişte), Diğer Bilgiler ve Teklifler (kaynak ihalenin teklif talepleri).\nDurumlar: Taslak › Onaylandı / İptal; teklif talebinden dönüştürülen sipariş onaylı açılır.\nAlanlar: sipariş no (otomatik, P00001), tedarikçi, tedarikçi referansı, sözleşme, para birimi, onaylama tarihi, beklenen geliş, varış (mal gelince girilir), teslim alacak, şartlar; listede ayrıca vergi hariç / KDV / toplam (kalemlerden hesaplanır) görünür; Kaynak teklif talebinden gelen siparişte teklif talep no, doğrudan yazılanda malzeme talebi numaralarıdır.\nAraç çubuğu (bir sipariş seçilir): Talepten Aktar (taslak siparişte) ve durum butonları Siparişi Onayla, E-posta ile Gönder (sipariş fiyatlarıyla tedarikçinin kontak e-postasına kuyruğa alınır), İptal, Taslak olarak ayarla (iptal edilmiş sipariş); durum butonları onay ister. Yalnız teklifsiz yazılmış taslak sipariş silinebilir; iptal edilmiş sipariş düzenlenemez.", + "DescEn": "Purchase Orders — orders given to suppliers, either converted from a tender of requests for quotation or written directly without collecting quotes.\nWhere: Purchasing › Orders › Purchase Orders; tabs Products, Request Lines (draft orders), Other Information and Quotes (the RFQs of the source tender).\nStatuses: Draft › Confirmed / Cancelled; orders converted from an RFQ open confirmed.\nFields: order no (automatic, P00001), supplier, supplier reference, branch, agreement (filtered by supplier and branch), receiving warehouse (filtered by branch) and operation type (filtered by warehouse; all three required; taken from the RFQ when converted from a quote), currency, confirmation date, expected arrival, arrival (entered when the goods arrive), deliver to, terms; the list also shows untaxed / tax / total (calculated from the lines); Source shows the RFQ no when converted from a quote, otherwise the material request numbers.\nToolbar (select an order): Import from Requests (draft orders), and the status buttons Confirm Order, Send by E-mail (queues the order with prices to the supplier's contact e-mail), Cancel, Set to Draft (a cancelled order); status buttons ask for confirmation. Only a draft order written without an RFQ can be deleted; a cancelled order cannot be edited.", + "DescTr": "Satınalma Siparişleri — tedarikçilere verilen siparişler; teklif talebi ihalesinden dönüştürülür ya da teklif toplamadan doğrudan yazılır.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri; sekmeler Ürünler, Talep Kalemleri (taslak siparişte), Diğer Bilgiler ve Teklifler (kaynak ihalenin teklif talepleri).\nDurumlar: Taslak › Onaylandı / İptal; teklif talebinden dönüştürülen sipariş onaylı açılır.\nAlanlar: sipariş no (otomatik, P00001), tedarikçi, tedarikçi referansı, şube, sözleşme (tedarikçi ve şubeye göre), teslim alınacak depo (şubeye göre) ve operasyon türü (depoya göre; üçü de zorunlu; teklif talebinden dönüştürülen siparişte talepten gelir), para birimi, onaylama tarihi, beklenen geliş, varış (mal gelince girilir), teslim alacak, şartlar; listede ayrıca vergi hariç / KDV / toplam (kalemlerden hesaplanır) görünür; Kaynak teklif talebinden gelen siparişte teklif talep no, doğrudan yazılanda malzeme talebi numaralarıdır.\nAraç çubuğu (bir sipariş seçilir): Talepten Aktar (taslak siparişte) ve durum butonları Siparişi Onayla, E-posta ile Gönder (sipariş fiyatlarıyla tedarikçinin kontak e-postasına kuyruğa alınır), İptal, Taslak olarak ayarla (iptal edilmiş sipariş); durum butonları onay ister. Yalnız teklifsiz yazılmış taslak sipariş silinebilir; iptal edilmiş sipariş düzenlenemez.", "Texts": [ { "Key": "App.StaticLookup.Confirmed", @@ -63,6 +63,30 @@ "En": "Reference", "Tr": "Referans" }, + { + "FieldName": "AgreementId", + "CaptionName": "App.Listform.ListformField.AgreementId", + "En": "Agreement", + "Tr": "Sözleşme" + }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, + { + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", + "En": "Warehouse", + "Tr": "Depo" + }, + { + "FieldName": "OperationTypeId", + "CaptionName": "App.Listform.ListformField.OperationTypeId", + "En": "Operation Type", + "Tr": "Operasyon Türü" + }, { "FieldName": "Status", "CaptionName": "App.Listform.ListformField.Status", @@ -87,12 +111,6 @@ "En": "Expected Arrival", "Tr": "Beklenen Geliş" }, - { - "FieldName": "AgreementId", - "CaptionName": "App.Listform.ListformField.AgreementId", - "En": "Agreement", - "Tr": "Sözleşme" - }, { "FieldName": "ArrivalDate", "CaptionName": "App.Listform.ListformField.ArrivalDate", @@ -105,12 +123,6 @@ "En": "Currency", "Tr": "Para Birimi" }, - { - "FieldName": "OperationTypeId", - "CaptionName": "App.Listform.ListformField.OperationTypeId", - "En": "Operation Type", - "Tr": "Operasyon Türü" - }, { "FieldName": "PendingAction", "CaptionName": "App.Listform.ListformField.PendingAction", @@ -178,7 +190,7 @@ "SeedSyncDelete": false, "DeleteCommand": "UPDATE \"Prc_T_PurchaseOrder\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\" IN @Id", "DeleteBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseOrder WHERE Id IN @Id AND (Status <> 'Draft' OR PurchaseRfqId IS NOT NULL)) THROW 50155, N'Yalnız teklifsiz yazılmış taslak sipariş silinebilir; diğerlerini iptal edin.', 1;", - "DeleteAfterCommand": null, + "DeleteAfterCommand": "EXEC Prc_P_MaterialRequestSyncStatus", "DeleteFieldsDefaultValueDto": [ { "FieldName": "DeleterId", @@ -229,8 +241,8 @@ } ], "UpdateCommand": null, - "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseOrder WHERE Id = @Id AND Status = 'Cancelled') AND ISNULL(@PendingAction, '') <> 'Draft' THROW 50154, N'İptal edilmiş sipariş değiştirilemez; önce Taslak olarak ayarla butonunu kullanın.', 1;", - "UpdateAfterCommand": "EXEC Prc_P_PurchaseOrderAfterSave @Id, @LastModifierId", + "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseOrder WHERE Id IN @Id AND Status = 'Cancelled') AND ISNULL(@PendingAction, '') <> 'Draft' THROW 50154, N'İptal edilmiş sipariş değiştirilemez; önce Taslak olarak ayarla butonunu kullanın.', 1;", + "UpdateAfterCommand": "DECLARE @_id uniqueidentifier = (SELECT TOP 1 Id FROM Prc_T_PurchaseOrder WHERE Id IN @Id); EXEC Prc_P_PurchaseOrderAfterSave @_id, @LastModifierId", "UpdateFieldsDefaultValueDto": [ { "FieldName": "LastModificationTime", @@ -275,6 +287,13 @@ "Value": "Draft", "CustomValueType": 1, "SqlQuery": "" + }, + { + "FieldName": "BranchId", + "FieldDbType": 9, + "Value": "", + "CustomValueType": 3, + "SqlQuery": "SELECT BranchId FROM Hr_T_Department WHERE Id = (SELECT DepartmentId FROM AbpUsers WHERE Id = '@USERID')" } ], "WidgetsDto": [ @@ -521,8 +540,7 @@ "UrlTarget": "_blank", "DialogName": null, "DialogParameters": null, - "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseRequestImport', props: { docId: r.Id, listFormCode: 'App.Prc.PurchaseOrderImportItem' }, onClose: () => refreshData() }); })()", - "Command": null, + "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseDocGrid', props: { docId: r.Id, listFormCode: 'App.Prc.PurchaseOrderImportItem', title: 'App.Prc.PurchaseRfq.ImportRequests', info: 'App.Prc.PurchaseRfq.ImportRequestsInfo' }, onClose: () => refreshData() }); })()", "IsVisible": true, "VisibleExpression": null }, @@ -537,7 +555,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Confirm' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -552,7 +569,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Send' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -567,7 +583,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Cancel' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -582,7 +597,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Draft' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null } @@ -1156,6 +1170,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1294,6 +1310,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1342,6 +1360,552 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "AgreementId", + "CaptionName": "App.Listform.ListformField.AgreementId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 4, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": "SupplierId", + "CascadeFilterOperator": "=", + "CascadeParentFields": "SupplierId,BranchId", + "CascadeEmptyFields": "", + "LookupQuery": "SELECT Id AS [Key], AgreementNo AS [Name], SupplierId, BranchId FROM Prc_T_PurchaseAgreement WHERE (SupplierId = @param0 OR @param0 IS NULL) AND (BranchId = @param1 OR @param1 IS NULL) AND IsDeleted = 'false' AND Status = 'Confirmed' AND TenantId = '@TENANTID' ORDER BY AgreementNo" + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 3, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 5, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": "WarehouseId,OperationTypeId,AgreementId", + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 4, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 6, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "BranchId", + "CascadeEmptyFields": "OperationTypeId", + "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name], BranchId FROM Inv_T_Warehouse WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR BranchId = @param0) ORDER BY Code" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 5, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "OperationTypeId", + "CaptionName": "App.Listform.ListformField.OperationTypeId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 7, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "WarehouseId", + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name], WarehouseId FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR WarehouseId = @param0) ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 6, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseOrder", @@ -1365,7 +1929,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 4, + "ListOrderNo": 8, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1432,6 +1996,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1465,7 +2031,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 3, + "EditOrderNo": 7, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1503,510 +2069,6 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 5, - "SourceDbType": 6, - "CultureName": "en", - "DataType": "datetime", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseOrder.Create", - "R": "App.Prc.PurchaseOrder", - "U": "App.Prc.PurchaseOrder.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 4, - "EditGroupOrderNo": 1, - "EditorType2": "dxDateBox", - "ColSpan": 1, - "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"readOnly\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseOrder", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "SupplierReference", - "CaptionName": "App.Listform.ListformField.SupplierReference", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 6, - "SourceDbType": 16, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseOrder.Create", - "R": "App.Prc.PurchaseOrder", - "U": "App.Prc.PurchaseOrder.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 5, - "EditGroupOrderNo": 1, - "EditorType2": "dxTextBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"maxLength\":64}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseOrder", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "ExpectedArrival", - "CaptionName": "App.Listform.ListformField.ExpectedArrival", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 7, - "SourceDbType": 6, - "CultureName": "en", - "DataType": "datetime", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseOrder.Create", - "R": "App.Prc.PurchaseOrder", - "U": "App.Prc.PurchaseOrder.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 6, - "EditGroupOrderNo": 1, - "EditorType2": "dxDateBox", - "ColSpan": 1, - "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"useMaskBehavior\":true,\"showClearButton\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseOrder", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "AgreementId", - "CaptionName": "App.Listform.ListformField.AgreementId", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 8, - "SourceDbType": 9, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 2, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": "SupplierId", - "CascadeFilterOperator": "=", - "CascadeParentFields": "SupplierId", - "CascadeEmptyFields": "", - "LookupQuery": "SELECT Id AS [Key], AgreementNo AS [Name], SupplierId FROM Prc_T_PurchaseAgreement WHERE (SupplierId = @param0 OR @param0 IS NULL) AND IsDeleted = 'false' AND Status = 'Confirmed' AND TenantId = '@TENANTID' ORDER BY AgreementNo" - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseOrder.Create", - "R": "App.Prc.PurchaseOrder", - "U": "App.Prc.PurchaseOrder.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 7, - "EditGroupOrderNo": 1, - "EditorType2": "dxSelectBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseOrder", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "ArrivalDate", - "CaptionName": "App.Listform.ListformField.ArrivalDate", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, "ListOrderNo": 9, "SourceDbType": 6, "CultureName": "en", @@ -2099,6 +2161,384 @@ "EditGroupOrderNo": 1, "EditorType2": "dxDateBox", "ColSpan": 1, + "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"readOnly\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "SupplierReference", + "CaptionName": "App.Listform.ListformField.SupplierReference", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 10, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 9, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":64}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "ExpectedArrival", + "CaptionName": "App.Listform.ListformField.ExpectedArrival", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 11, + "SourceDbType": 6, + "CultureName": "en", + "DataType": "datetime", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 10, + "EditGroupOrderNo": 1, + "EditorType2": "dxDateBox", + "ColSpan": 1, + "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"useMaskBehavior\":true,\"showClearButton\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseOrder", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "ArrivalDate", + "CaptionName": "App.Listform.ListformField.ArrivalDate", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 12, + "SourceDbType": 6, + "CultureName": "en", + "DataType": "datetime", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseOrder.Create", + "R": "App.Prc.PurchaseOrder", + "U": "App.Prc.PurchaseOrder.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 11, + "EditGroupOrderNo": 1, + "EditorType2": "dxDateBox", + "ColSpan": 1, "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"useMaskBehavior\":true,\"showClearButton\":true}", "GridBoxOptions": null, "TagBoxOptions": null, @@ -2133,7 +2573,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 10, + "ListOrderNo": 13, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2200,6 +2640,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -2233,7 +2675,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 9, + "EditOrderNo": 12, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -2248,132 +2690,6 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseOrder", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "OperationTypeId", - "CaptionName": "App.Listform.ListformField.OperationTypeId", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 11, - "SourceDbType": 9, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 2, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseOrder.Create", - "R": "App.Prc.PurchaseOrder", - "U": "App.Prc.PurchaseOrder.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 10, - "EditGroupOrderNo": 1, - "EditorType2": "dxSelectBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseOrder", @@ -2397,7 +2713,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 14, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2523,7 +2839,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 13, + "ListOrderNo": 15, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2649,7 +2965,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 14, + "ListOrderNo": 16, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -2775,7 +3091,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 15, + "ListOrderNo": 17, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -2901,7 +3217,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 16, + "ListOrderNo": 18, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -3027,7 +3343,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 17, + "ListOrderNo": 19, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -3153,7 +3469,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 18, + "ListOrderNo": 20, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -3279,7 +3595,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 19, + "ListOrderNo": 21, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3367,11 +3683,11 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 11, + "EditOrderNo": 13, "EditGroupOrderNo": 1, "EditorType2": "dxHtmlEditor", "ColSpan": 3, - "EditorOptions": "{\"height\":200}", + "EditorOptions": "{\"height\":150}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, diff --git a/configs/seeds/wizard/Prc_PurchaseOrderImportItem.json b/configs/seeds/wizard/Prc_PurchaseOrderImportItem.json index f07504b7..6a9c26a6 100644 --- a/configs/seeds/wizard/Prc_PurchaseOrderImportItem.json +++ b/configs/seeds/wizard/Prc_PurchaseOrderImportItem.json @@ -33,8 +33,8 @@ "MenuTr": "Sipariş Talep Kalemleri", "TitleEn": "Order Request Lines", "TitleTr": "Sipariş Talep Kalemleri", - "DescEn": "Order Request Lines — the lines of approved material requests that are not on any RFQ or order yet, listed for a draft purchase order written without quotes.\nWhere: Purchasing › Orders › Purchase Orders › Request Lines tab (no menu of its own); grouped by request; only a draft order takes lines.\nFields: request no, requester, product, quantity, unit, requested date, reason, transfer.\nUsage: tick Transfer on the lines to order (several requests at once) and press Save; the lines are copied with the agreement or supplier price and the requested date, and the order's Source shows the request numbers.", - "DescTr": "Sipariş Talep Kalemleri — onaylı malzeme taleplerinin henüz hiçbir teklifte ya da siparişte olmayan kalemleri, teklifsiz yazılan taslak sipariş için listelenir.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır; yalnız taslak sipariş kalem alır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden, aktar.\nKullanım: sipariş edilecek satırlarda (birden fazla talep birlikte) Aktar işaretlenip Kaydet'e basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile kopyalanır, siparişin Kaynak'ında talep numaraları görünür." + "DescEn": "Order Request Lines — the lines of approved material requests that are not on any RFQ or order yet, listed for a draft purchase order written without quotes.\nWhere: Purchasing › Orders › Purchase Orders › Request Lines tab (no menu of its own); grouped by request; only a draft order takes lines.\nFields: request no, requester, product, quantity, unit, requested date, reason.\nUsage: select the lines to order with the row checkboxes (several requests at once) and press Transfer Selected; the lines are copied with the agreement or supplier price and the requested date, and the order's Source shows the request numbers.", + "DescTr": "Sipariş Talep Kalemleri — onaylı malzeme taleplerinin henüz hiçbir teklifte ya da siparişte olmayan kalemleri, teklifsiz yazılan taslak sipariş için listelenir.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır; yalnız taslak sipariş kalem alır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden.\nKullanım: sipariş edilecek satırlar, satır başındaki kutuyla seçilir (birden fazla talep birlikte) ve Seçilenleri Aktar'a basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile kopyalanır, siparişin Kaynak'ında talep numaraları görünür." }, "Groups": [ { @@ -92,12 +92,6 @@ "CaptionName": "App.Listform.ListformField.RequestReason", "En": "Request Reason", "Tr": "Talep Nedeni" - }, - { - "FieldName": "Transfer", - "CaptionName": "App.Listform.ListformField.Transfer", - "En": "Transfer", - "Tr": "Aktar" } ] } @@ -140,7 +134,7 @@ "SqlQuery": null } ], - "UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id, @Transfer", + "UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id", "UpdateBeforeCommand": null, "UpdateAfterCommand": null, "UpdateFieldsDefaultValueDto": [ @@ -198,9 +192,9 @@ "AutoExpandAll": false }, "SelectionDto": { - "Mode": "none", - "AllowSelectAll": false, - "SelectAllMode": "allPages", + "Mode": "multiple", + "AllowSelectAll": true, + "SelectAllMode": "page", "ShowCheckBoxesMode": "always" }, "ColumnOptionDto": { @@ -323,7 +317,7 @@ "EditingOptionDto": { "Mode": "batch", "RefreshMode": "full", - "AllowUpdating": true, + "AllowUpdating": false, "AllowDetail": false, "AllowDeleting": false, "AllowAllDeleting": false, @@ -363,7 +357,23 @@ "I": "App.Prc.PurchaseOrderImportItem.Import", "N": "App.Prc.PurchaseOrderImportItem.Note" }, - "CommandColumnDto": [], + "CommandColumnDto": [ + { + "ButtonPosition": 1, + "AuthName": "App.Prc.PurchaseOrderImportItem.Update", + "Text": "App.Prc.PurchaseImportItem.TransferSelected", + "Hint": "App.Prc.PurchaseImportItem.TransferSelected", + "Icon": "download", + "Url": null, + "UrlTarget": "_blank", + "DialogName": null, + "DialogParameters": null, + "OnClick": "(async () => { const rows = getSelectedRowsData(); if (!rows.length) return; for (const r of rows) { await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: {} }); } const c = dialog.config; if (c && c.component) { dialog.setConfig({}); if (c.onClose) c.onClose(); } else refreshData(); })().catch(() => refreshData())", + "Command": null, + "IsVisible": true, + "VisibleExpression": null + } + ], "StateStoringDto": { "Enabled": true, "Type": "custom", @@ -1797,132 +1807,6 @@ "CreationTime": "0001-01-01T00:00:00", "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseOrderImportItem", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "Transfer", - "CaptionName": "App.Listform.ListformField.Transfer", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 10, - "SourceDbType": 3, - "CultureName": "en", - "DataType": "boolean", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseOrderImportItem.Create", - "R": "App.Prc.PurchaseOrderImportItem", - "U": "App.Prc.PurchaseOrderImportItem.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 1, - "EditGroupOrderNo": 1, - "EditorType2": "dxCheckBox", - "ColSpan": 1, - "EditorOptions": null, - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" } ], "IsDeletedField": false, @@ -1932,8 +1816,7 @@ "App.Prc.PurchaseOrderImportItem", "App.Prc.PurchaseOrderImportItem.Title", "App.Prc.PurchaseOrderImportItem.Desc", - "App.Listform.ListformField.BaseId", - "App.Listform.ListformField.Transfer" + "App.Listform.ListformField.BaseId" ], "PermissionGroupNames": [], "PermissionNames": [ diff --git a/configs/seeds/wizard/Prc_PurchaseOrderLine.json b/configs/seeds/wizard/Prc_PurchaseOrderLine.json index 6fa7d245..74290491 100644 --- a/configs/seeds/wizard/Prc_PurchaseOrderLine.json +++ b/configs/seeds/wizard/Prc_PurchaseOrderLine.json @@ -33,8 +33,8 @@ "MenuTr": "Sipariş Kalemleri", "TitleEn": "Order Lines", "TitleTr": "Sipariş Kalemleri", - "DescEn": "Order Lines — the products of a purchase order.\nWhere: Purchasing › Orders › Purchase Orders › Products tab (no menu of its own).\nFields: product, description, quantity, unit, unit price, tax rate, amount (quantity × unit price, calculated), delivery date, material request line (read-only).\nRules: lines of a cancelled order cannot be changed; after every change the order totals are recalculated. Lines of an order converted from an RFQ come from the winning RFQ lines.", - "DescTr": "Sipariş Kalemleri — satınalma siparişinin ürünleri.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün, açıklama, miktar, birim, birim fiyat, vergi oranı, tutar (miktar × birim fiyat, hesaplanır), teslim tarihi, talep kalemi (salt okunur).\nKurallar: iptal edilmiş siparişin kalemi değiştirilemez; her değişiklikte sipariş toplamları yeniden hesaplanır. Teklif talebinden dönüştürülen siparişin kalemleri kazanan teklif kalemlerinden gelir." + "DescEn": "Order Lines — the products of a purchase order.\nWhere: Purchasing › Orders › Purchase Orders › Products tab (no menu of its own).\nFields: product, description, quantity, unit, unit price, tax rate, amount (tax included: quantity × unit price × (1 + tax rate), calculated), delivery date, material request line (read-only).\nRules: lines of a cancelled order cannot be changed; after every change the order totals are recalculated. Lines of an order converted from an RFQ come from the winning RFQ lines.", + "DescTr": "Sipariş Kalemleri — satınalma siparişinin ürünleri.\nNerede: Satınalma › Siparişler › Satınalma Siparişleri › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün, açıklama, miktar, birim, birim fiyat, vergi oranı, tutar (KDV dahil: miktar × birim fiyat × (1 + vergi oranı), hesaplanır), teslim tarihi, talep kalemi (salt okunur).\nKurallar: iptal edilmiş siparişin kalemi değiştirilemez; her değişiklikte sipariş toplamları yeniden hesaplanır. Teklif talebinden dönüştürülen siparişin kalemleri kazanan teklif kalemlerinden gelir." }, "Groups": [ { @@ -407,8 +407,8 @@ "Order": 1, "ItemType": "group", "Caption": "", - "ColCount": 2, - "ColSpan": 2 + "ColCount": 3, + "ColSpan": 3 } ], "PermissionDto": { @@ -1063,6 +1063,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1099,7 +1101,7 @@ "EditOrderNo": 1, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", - "ColSpan": 2, + "ColSpan": 3, "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", "GridBoxOptions": null, "TagBoxOptions": null, @@ -1225,7 +1227,7 @@ "EditOrderNo": 2, "EditGroupOrderNo": 1, "EditorType2": "dxTextBox", - "ColSpan": 2, + "ColSpan": 3, "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", "GridBoxOptions": null, "TagBoxOptions": null, @@ -1327,6 +1329,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1368,7 +1372,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": null, + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[],\"trigger\":\"change\"}]}\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1465,6 +1469,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1603,6 +1609,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1644,7 +1652,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": null, + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[],\"trigger\":\"change\"}]}\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1741,6 +1749,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1782,7 +1792,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": null, + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[],\"trigger\":\"change\"}]}\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1908,7 +1918,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"multiply\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"left\":\"Quantity\",\"right\":\"UnitPrice\",\"target\":\"Amount\",\"digits\":\"2\"},\"fields\":[]}]}\n// @runOnOpen\nset(\"Amount\", round(num(\"Quantity\") * num(\"UnitPrice\"), 2))", + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[]}]}\n// @runOnOpen\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -2155,7 +2165,7 @@ "EditOrderNo": 9, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", - "ColSpan": 1, + "ColSpan": 3, "EditorOptions": "{\"readOnly\":true}", "GridBoxOptions": null, "TagBoxOptions": null, diff --git a/configs/seeds/wizard/Prc_PurchaseRfq.json b/configs/seeds/wizard/Prc_PurchaseRfq.json index a590a173..3f893d38 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfq.json +++ b/configs/seeds/wizard/Prc_PurchaseRfq.json @@ -19,7 +19,7 @@ "MenuParentCode": "App.Prc.Orders", "MenuParentIcon": "FcShop", "MenuCode": "App.Prc.PurchaseRfq", - "MenuOrder": 2, + "MenuOrder": 1, "MenuUrl": "/admin/list/App.Prc.PurchaseRfq", "MenuIcon": "FcDocument" }, @@ -32,8 +32,8 @@ "MenuTr": "Teklif Talepleri", "TitleEn": "Requests for Quotation", "TitleTr": "Teklif Talepleri", - "DescEn": "Requests for Quotation — one purchasing document per supplier; documents opened for the same need form a tender and are compared before ordering.\nWhere: Purchasing › Orders › Requests for Quotation; tabs Products, Request Lines, Supplier Quote, Other Information, Quotes (other documents of the tender) and Price Comparison.\nStatuses: RFQ (draft) › RFQ Sent (e-mail queued to the supplier) › Purchase Order (converted) / Cancelled.\nFields: RFQ no (automatic, RFQ00001), supplier, supplier reference, agreement, currency, order deadline, expected arrival, ask confirmation, deliver to, terms; the list also shows tender, source (material request numbers of the lines), buyer and untaxed / tax / total (calculated from the lines).\nToolbar (select an RFQ): Import from Requests opens the approved request lines (several requests at once) to tick and save; Create Alternative adds suppliers to the tender (each gets a copy of the document with prices from its price list) and has a price entry table for all suppliers. The same work can be done in the Request Lines, Quotes and Price Comparison tabs. Choosing an agreement fills an empty RFQ with its remaining lines.\nStatus buttons (toolbar, confirmed before running): Send by E-mail, Send Whole Tender (all draft documents of the tender), Convert to Purchase Order (line by line: the Selected line, otherwise the Recommended line of the Price Comparison wins; one purchase order per winning supplier, documents that win nothing are cancelled), Cancel, Set to Draft (a cancelled RFQ). An RFQ converted or cancelled cannot be edited.", - "DescTr": "Teklif Talepleri — her tedarikçi için ayrı satınalma belgesi; aynı ihtiyaç için açılan belgeler bir ihale oluşturur ve siparişten önce kıyaslanır.\nNerede: Satınalma › Siparişler › Teklif Talepleri; sekmeler Ürünler, Talep Kalemleri, Tedarikçi Teklifi, Diğer Bilgiler, Teklifler (ihalenin diğer belgeleri) ve Fiyat Karşılaştırması.\nDurumlar: Teklif Talebi (taslak) › Teklif Talebi Gönderildi (tedarikçiye e-posta kuyruğa alındı) › Satınalma Siparişi (dönüştürüldü) / İptal Edildi.\nAlanlar: teklif talep no (otomatik, RFQ00001), tedarikçi, tedarikçi referansı, sözleşme, para birimi, sipariş zaman sınırı, beklenen geliş, onay isteyin, teslim alacak, şartlar; listede ayrıca ihale, kaynak (kalemlerin malzeme talebi numaraları), alıcı ve vergi hariç / KDV / toplam (kalemlerden hesaplanır) görünür.\nAraç çubuğu (bir teklif seçilir): Talepten Aktar onaylı talep kalemlerini (birden fazla talep birlikte) işaretleyip kaydetmek için açar; Alternatif Oluştur ihaleye tedarikçi ekler (her biri belgenin kopyasını tedarikçinin fiyat listesiyle alır) ve bütün tedarikçiler için fiyat giriş tablosu sunar. Aynı işler Talep Kalemleri, Teklifler ve Fiyat Karşılaştırması sekmelerinden de yapılır. Sözleşme seçilince boş teklif kalan sözleşme kalemleriyle dolar.\nDurum butonları (araç çubuğu, çalışmadan önce onay ister): E-posta ile Gönder, İhaleyi Gönder (ihalenin bütün taslak belgeleri), Siparişe Dönüştür (kalem bazında: Fiyat Karşılaştırması'nda Seçili satır, yoksa Önerilen satır kazanır; kazanan her tedarikçiye bir satınalma siparişi açılır, hiç kalem kazanamayan belge iptal olur), İptal, Taslak olarak ayarla (iptal edilmiş teklif). Siparişe dönüşmüş ya da iptal edilmiş teklif düzenlenemez.", + "DescEn": "Requests for Quotation — one purchasing document per supplier; documents opened for the same need form a tender and are compared before ordering.\nWhere: Purchasing › Orders › Requests for Quotation; tabs Products, Request Lines, Supplier Quote, Other Information, Quotes (other documents of the tender) and Price Comparison.\nStatuses: RFQ (draft) › RFQ Sent (e-mail queued to the supplier) › Purchase Order (converted) / Cancelled.\nFields: RFQ no (automatic, RFQ00001), supplier, supplier reference, branch, agreement (filtered by supplier and branch), receiving warehouse (filtered by branch) and operation type (filtered by warehouse; all three required; copied to the order by Convert to Order and to alternative quotes; Request Lines shows only requests of the same branch), currency, order deadline, expected arrival, ask confirmation, deliver to, terms; the list also shows tender, source (material request numbers of the lines), buyer and untaxed / tax / total (calculated from the lines).\nToolbar (select an RFQ): Import from Requests opens the approved request lines (several requests at once) to tick and save; Create Alternative adds suppliers to the tender (each gets a copy of the document with prices from its price list) and has a price entry table for all suppliers. The same work can be done in the Request Lines, Quotes and Price Comparison tabs. Choosing an agreement fills an empty RFQ with its remaining lines.\nStatus buttons (toolbar, confirmed before running): Send by E-mail, Send Whole Tender (all draft documents of the tender), Convert to Purchase Order (line by line: the Selected line, otherwise the Recommended line of the Price Comparison wins; one purchase order per winning supplier, documents that win nothing are cancelled), Cancel, Set to Draft (a cancelled RFQ). An RFQ converted or cancelled cannot be edited.", + "DescTr": "Teklif Talepleri — her tedarikçi için ayrı satınalma belgesi; aynı ihtiyaç için açılan belgeler bir ihale oluşturur ve siparişten önce kıyaslanır.\nNerede: Satınalma › Siparişler › Teklif Talepleri; sekmeler Ürünler, Talep Kalemleri, Tedarikçi Teklifi, Diğer Bilgiler, Teklifler (ihalenin diğer belgeleri) ve Fiyat Karşılaştırması.\nDurumlar: Teklif Talebi (taslak) › Teklif Talebi Gönderildi (tedarikçiye e-posta kuyruğa alındı) › Satınalma Siparişi (dönüştürüldü) / İptal Edildi.\nAlanlar: teklif talep no (otomatik, RFQ00001), tedarikçi, tedarikçi referansı, şube, sözleşme (tedarikçi ve şubeye göre), teslim alınacak depo (şubeye göre) ve operasyon türü (depoya göre; üçü de zorunlu; Siparişe Dönüştür ile siparişe, alternatif teklife kopyalanır; Talep Kalemleri yalnız aynı şubenin taleplerini gösterir), para birimi, sipariş zaman sınırı, beklenen geliş, onay isteyin, teslim alacak, şartlar; listede ayrıca ihale, kaynak (kalemlerin malzeme talebi numaraları), alıcı ve vergi hariç / KDV / toplam (kalemlerden hesaplanır) görünür.\nAraç çubuğu (bir teklif seçilir): Talepten Aktar onaylı talep kalemlerini (birden fazla talep birlikte) işaretleyip kaydetmek için açar; Alternatif Oluştur ihaleye tedarikçi ekler (her biri belgenin kopyasını tedarikçinin fiyat listesiyle alır) ve bütün tedarikçiler için fiyat giriş tablosu sunar. Aynı işler Talep Kalemleri, Teklifler ve Fiyat Karşılaştırması sekmelerinden de yapılır. Sözleşme seçilince boş teklif kalan sözleşme kalemleriyle dolar.\nDurum butonları (araç çubuğu, çalışmadan önce onay ister): E-posta ile Gönder, İhaleyi Gönder (ihalenin bütün taslak belgeleri), Siparişe Dönüştür (kalem bazında: Fiyat Karşılaştırması'nda Seçili satır, yoksa Önerilen satır kazanır; kazanan her tedarikçiye bir satınalma siparişi açılır, hiç kalem kazanamayan belge iptal olur), İptal, Taslak olarak ayarla (iptal edilmiş teklif). Siparişe dönüşmüş ya da iptal edilmiş teklif düzenlenemez.", "Texts": [ { "Key": "App.Prc.PurchaseRfq.Action.SendTender", @@ -52,8 +52,13 @@ }, { "Key": "App.Prc.PurchaseRfq.ImportRequestsInfo", - "En": "Tick Transfer on the lines to bring in (several requests at once) and press Save in the table toolbar.", - "Tr": "Aktarılacak satırlarda Aktar'ı işaretleyin (birden fazla talep birlikte) ve tablonun araç çubuğundaki Kaydet'e basın." + "En": "Select the lines to bring in with the row checkboxes (several requests at once) and press Transfer Selected in the table toolbar.", + "Tr": "Aktarılacak satırları satır başındaki kutuyla seçin (birden fazla talep birlikte) ve tablonun araç çubuğundaki Seçilenleri Aktar'a basın." + }, + { + "Key": "App.Prc.PurchaseImportItem.TransferSelected", + "En": "Transfer Selected", + "Tr": "Seçilenleri Aktar" }, { "Key": "App.Prc.PurchaseRfq.CreateAlternative", @@ -61,15 +66,20 @@ "Tr": "Alternatif Oluştur" }, { - "Key": "App.Prc.PurchaseRfq.AlternativeSuppliers", - "En": "Suppliers", - "Tr": "Tedarikçiler" + "Key": "App.Prc.PurchaseRfq.CreateAlternativeInfo", + "En": "Select the suppliers to ask for a quote with the row checkboxes and press Create for Selected; an RFQ is opened in the same tender for each.", + "Tr": "Teklif istenecek tedarikçileri satır başındaki kutuyla seçin ve Seçilenler İçin Oluştur'a basın; her biri için aynı ihalede teklif talebi açılır." }, { "Key": "App.Prc.PurchaseRfq.PriceEntry", "En": "Price Entry", "Tr": "Fiyat Girişi" }, + { + "Key": "App.Prc.PurchaseRfq.PriceEntryInfo", + "En": "Enter the unit price and delivery date of every supplier in the tender in the table and press Save in the table toolbar.", + "Tr": "İhaledeki bütün tedarikçilerin birim fiyat ve teslim tarihlerini tabloya yazın ve tablonun araç çubuğundaki Kaydet'e basın." + }, { "Key": "App.Prc.PurchaseOrder.ConfirmAction", "En": "Apply this action to the selected document?", @@ -102,6 +112,24 @@ "En": "Supplier", "Tr": "Tedarikçi" }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch Name", + "Tr": "Şube Adı" + }, + { + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", + "En": "Warehouse", + "Tr": "Depo" + }, + { + "FieldName": "OperationTypeId", + "CaptionName": "App.Listform.ListformField.OperationTypeId", + "En": "Operation Type", + "Tr": "Operasyon Türü" + }, { "FieldName": "RfqNo", "CaptionName": "App.Listform.ListformField.RfqNo", @@ -138,24 +166,12 @@ "En": "Agreement", "Tr": "Sözleşme" }, - { - "FieldName": "RequireConfirmation", - "CaptionName": "App.Listform.ListformField.RequireConfirmation", - "En": "Ask Confirmation", - "Tr": "Onay İsteyin" - }, { "FieldName": "CurrencyId", "CaptionName": "App.Listform.ListformField.CurrencyId", "En": "Currency", "Tr": "Para Birimi" }, - { - "FieldName": "OperationTypeId", - "CaptionName": "App.Listform.ListformField.OperationTypeId", - "En": "Operation Type", - "Tr": "Operasyon Türü" - }, { "FieldName": "PendingAction", "CaptionName": "App.Listform.ListformField.PendingAction", @@ -286,8 +302,8 @@ } ], "UpdateCommand": null, - "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE Id = @Id AND (Status = 'Purchase' OR (Status = 'Cancelled' AND ISNULL(@PendingAction, '') <> 'Draft'))) THROW 50151, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklif değiştirilemez; iptal edilen teklif için önce Taslak olarak ayarla butonunu kullanın.', 1;", - "UpdateAfterCommand": "EXEC Prc_P_PurchaseRfqAfterSave @Id, @LastModifierId", + "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE Id IN @Id AND (Status = 'Purchase' OR (Status = 'Cancelled' AND ISNULL(@PendingAction, '') <> 'Draft'))) THROW 50151, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklif değiştirilemez; iptal edilen teklif için önce Taslak olarak ayarla butonunu kullanın.', 1;", + "UpdateAfterCommand": "DECLARE @_id uniqueidentifier = (SELECT TOP 1 Id FROM Prc_T_PurchaseRfq WHERE Id IN @Id); EXEC Prc_P_PurchaseRfqAfterSave @_id, @LastModifierId", "UpdateFieldsDefaultValueDto": [ { "FieldName": "LastModificationTime", @@ -326,19 +342,19 @@ "CustomValueType": 1, "SqlQuery": "" }, - { - "FieldName": "RequireConfirmation", - "FieldDbType": 3, - "Value": "false", - "CustomValueType": 1, - "SqlQuery": "" - }, { "FieldName": "Status", "FieldDbType": 16, "Value": "Draft", "CustomValueType": 1, "SqlQuery": "" + }, + { + "FieldName": "BranchId", + "FieldDbType": 9, + "Value": "", + "CustomValueType": 3, + "SqlQuery": "SELECT BranchId FROM Hr_T_Department WHERE Id = (SELECT DepartmentId FROM AbpUsers WHERE Id = '@USERID')" } ], "WidgetsDto": [ @@ -585,8 +601,7 @@ "UrlTarget": "_blank", "DialogName": null, "DialogParameters": null, - "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseRequestImport', props: { docId: r.Id, listFormCode: 'App.Prc.PurchaseRfqImportItem' }, onClose: () => refreshData() }); })()", - "Command": null, + "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseDocGrid', props: { docId: r.Id, listFormCode: 'App.Prc.PurchaseRfqImportItem', title: 'App.Prc.PurchaseRfq.ImportRequests', info: 'App.Prc.PurchaseRfq.ImportRequestsInfo' }, onClose: () => refreshData() }); })()", "IsVisible": true, "VisibleExpression": null }, @@ -600,8 +615,21 @@ "UrlTarget": "_blank", "DialogName": null, "DialogParameters": null, - "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseRfqAlternative', props: { rfqId: r.Id }, onClose: () => refreshData() }); })()", - "Command": null, + "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseDocGrid', props: { docId: r.Id, listFormCode: 'App.Prc.PurchaseRfqAlternativeSupplier', title: 'App.Prc.PurchaseRfq.CreateAlternative', info: 'App.Prc.PurchaseRfq.CreateAlternativeInfo' }, onClose: () => refreshData() }); })()", + "IsVisible": true, + "VisibleExpression": null + }, + { + "ButtonPosition": 1, + "AuthName": "App.Prc.PurchaseRfqComparison.Update", + "Text": "App.Prc.PurchaseRfq.PriceEntry", + "Hint": "App.Prc.PurchaseRfq.PriceEntry", + "Icon": "money", + "Url": null, + "UrlTarget": "_blank", + "DialogName": null, + "DialogParameters": null, + "OnClick": "(() => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; dialog.setConfig({ component: 'PurchaseDocGrid', props: { docId: r.Id, listFormCode: 'App.Prc.PurchaseRfqComparison', title: 'App.Prc.PurchaseRfq.PriceEntry', info: 'App.Prc.PurchaseRfq.PriceEntryInfo' }, onClose: () => refreshData() }); })()", "IsVisible": true, "VisibleExpression": null }, @@ -616,7 +644,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Send' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -631,7 +658,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'SendTender' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -646,7 +672,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Award' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -661,7 +686,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Cancel' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null }, @@ -676,7 +700,6 @@ "DialogName": null, "DialogParameters": null, "OnClick": "(async () => { const r = (e && e.row && e.row.data) || getSelectedRowsData()[0]; if (!r) return; if (!window.confirm(translate('::App.Prc.PurchaseOrder.ConfirmAction'))) return; await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: { PendingAction: 'Draft' } }); refreshData(); })().catch(() => {})", - "Command": null, "IsVisible": true, "VisibleExpression": null } @@ -1276,6 +1299,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1312,7 +1337,7 @@ "EditOrderNo": 1, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", - "ColSpan": 3, + "ColSpan": 2, "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", "GridBoxOptions": null, "TagBoxOptions": null, @@ -1324,6 +1349,426 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfq", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 3, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": "WarehouseId,OperationTypeId,AgreementId", + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfq.Create", + "R": "App.Prc.PurchaseRfq", + "U": "App.Prc.PurchaseRfq.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 2, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfq", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "WarehouseId", + "CaptionName": "App.Listform.ListformField.WarehouseId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 4, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "BranchId", + "CascadeEmptyFields": "OperationTypeId", + "LookupQuery": "SELECT Id AS [Key], CONCAT(Code, ' - ', Name) AS [Name], BranchId FROM Inv_T_Warehouse WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR BranchId = @param0) ORDER BY Code" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfq.Create", + "R": "App.Prc.PurchaseRfq", + "U": "App.Prc.PurchaseRfq.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 3, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfq", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "OperationTypeId", + "CaptionName": "App.Listform.ListformField.OperationTypeId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 5, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": "WarehouseId", + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name], WarehouseId FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' AND (@param0 IS NULL OR WarehouseId = @param0) ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfq.Create", + "R": "App.Prc.PurchaseRfq", + "U": "App.Prc.PurchaseRfq.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 4, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseRfq", @@ -1347,7 +1792,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 3, + "ListOrderNo": 6, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1414,6 +1859,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1447,7 +1894,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 2, + "EditOrderNo": 5, "EditGroupOrderNo": 1, "EditorType2": "dxTextBox", "ColSpan": 1, @@ -1485,7 +1932,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 4, + "ListOrderNo": 7, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1552,6 +1999,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1585,7 +2034,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 3, + "EditOrderNo": 6, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -1623,7 +2072,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 5, + "ListOrderNo": 8, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -1711,7 +2160,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 4, + "EditOrderNo": 7, "EditGroupOrderNo": 1, "EditorType2": "dxDateBox", "ColSpan": 1, @@ -1749,7 +2198,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 6, + "ListOrderNo": 9, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -1837,389 +2286,263 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 5, - "EditGroupOrderNo": 1, - "EditorType2": "dxTextBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"maxLength\":64}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseRfq", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "ExpectedArrival", - "CaptionName": "App.Listform.ListformField.ExpectedArrival", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 7, - "SourceDbType": 6, - "CultureName": "en", - "DataType": "datetime", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseRfq.Create", - "R": "App.Prc.PurchaseRfq", - "U": "App.Prc.PurchaseRfq.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 6, - "EditGroupOrderNo": 1, - "EditorType2": "dxDateBox", - "ColSpan": 1, - "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"useMaskBehavior\":true,\"showClearButton\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseRfq", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "AgreementId", - "CaptionName": "App.Listform.ListformField.AgreementId", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 8, - "SourceDbType": 9, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 2, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": "SupplierId", - "CascadeFilterOperator": "=", - "CascadeParentFields": "SupplierId", - "CascadeEmptyFields": "", - "LookupQuery": "SELECT Id AS [Key], AgreementNo AS [Name], SupplierId FROM Prc_T_PurchaseAgreement WHERE (SupplierId = @param0 OR @param0 IS NULL) AND IsDeleted = 'false' AND Status = 'Confirmed' AND TenantId = '@TENANTID' ORDER BY AgreementNo" - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseRfq.Create", - "R": "App.Prc.PurchaseRfq", - "U": "App.Prc.PurchaseRfq.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 7, - "EditGroupOrderNo": 1, - "EditorType2": "dxSelectBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseRfq", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "RequireConfirmation", - "CaptionName": "App.Listform.ListformField.RequireConfirmation", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 9, - "SourceDbType": 3, - "CultureName": "en", - "DataType": "boolean", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseRfq.Create", - "R": "App.Prc.PurchaseRfq", - "U": "App.Prc.PurchaseRfq.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, "EditOrderNo": 8, "EditGroupOrderNo": 1, - "EditorType2": "dxCheckBox", + "EditorType2": "dxTextBox", "ColSpan": 1, - "EditorOptions": null, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":64}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfq", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "ExpectedArrival", + "CaptionName": "App.Listform.ListformField.ExpectedArrival", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 10, + "SourceDbType": 6, + "CultureName": "en", + "DataType": "datetime", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfq.Create", + "R": "App.Prc.PurchaseRfq", + "U": "App.Prc.PurchaseRfq.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 9, + "EditGroupOrderNo": 1, + "EditorType2": "dxDateBox", + "ColSpan": 1, + "EditorOptions": "{\"type\":\"datetime\",\"displayFormat\":\"dd.MM.yyyy HH:mm\",\"useMaskBehavior\":true,\"showClearButton\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfq", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "AgreementId", + "CaptionName": "App.Listform.ListformField.AgreementId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 11, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": "SupplierId", + "CascadeFilterOperator": "=", + "CascadeParentFields": "SupplierId,BranchId", + "CascadeEmptyFields": "", + "LookupQuery": "SELECT Id AS [Key], AgreementNo AS [Name], SupplierId, BranchId FROM Prc_T_PurchaseAgreement WHERE (SupplierId = @param0 OR @param0 IS NULL) AND (BranchId = @param1 OR @param1 IS NULL) AND IsDeleted = 'false' AND Status = 'Confirmed' AND TenantId = '@TENANTID' ORDER BY AgreementNo" + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfq.Create", + "R": "App.Prc.PurchaseRfq", + "U": "App.Prc.PurchaseRfq.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 10, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -2253,7 +2576,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 10, + "ListOrderNo": 12, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2320,6 +2643,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -2353,7 +2678,7 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 9, + "EditOrderNo": 11, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", "ColSpan": 1, @@ -2368,132 +2693,6 @@ "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseRfq", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "OperationTypeId", - "CaptionName": "App.Listform.ListformField.OperationTypeId", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 11, - "SourceDbType": 9, - "CultureName": "en", - "DataType": "string", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 2, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseRfq.Create", - "R": "App.Prc.PurchaseRfq", - "U": "App.Prc.PurchaseRfq.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 10, - "EditGroupOrderNo": 1, - "EditorType2": "dxSelectBox", - "ColSpan": 1, - "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" - }, { "EditType": null, "ListFormCode": "App.Prc.PurchaseRfq", @@ -2517,7 +2716,7 @@ "Visible": false, "IsActive": true, "Width": 0, - "ListOrderNo": 12, + "ListOrderNo": 13, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2643,7 +2842,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 13, + "ListOrderNo": 14, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -2769,7 +2968,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 14, + "ListOrderNo": 15, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -2895,7 +3094,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 15, + "ListOrderNo": 16, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3021,7 +3220,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 16, + "ListOrderNo": 17, "SourceDbType": 9, "CultureName": "en", "DataType": "string", @@ -3147,7 +3346,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 17, + "ListOrderNo": 18, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -3273,7 +3472,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 18, + "ListOrderNo": 19, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -3399,7 +3598,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 19, + "ListOrderNo": 20, "SourceDbType": 7, "CultureName": "en", "DataType": "number", @@ -3525,7 +3724,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 20, + "ListOrderNo": 21, "SourceDbType": 6, "CultureName": "en", "DataType": "datetime", @@ -3651,7 +3850,7 @@ "Visible": true, "IsActive": true, "Width": 0, - "ListOrderNo": 21, + "ListOrderNo": 22, "SourceDbType": 16, "CultureName": "en", "DataType": "string", @@ -3739,11 +3938,11 @@ }, "Alignment": "left", "Format": null, - "EditOrderNo": 11, + "EditOrderNo": 12, "EditGroupOrderNo": 1, "EditorType2": "dxHtmlEditor", "ColSpan": 3, - "EditorOptions": "{\"height\":200}", + "EditorOptions": "{\"height\":150}", "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, @@ -3767,8 +3966,9 @@ "App.Prc.PurchaseRfq.ImportRequests", "App.Prc.PurchaseRfq.ImportRequestsInfo", "App.Prc.PurchaseRfq.CreateAlternative", - "App.Prc.PurchaseRfq.AlternativeSuppliers", + "App.Prc.PurchaseRfq.CreateAlternativeInfo", "App.Prc.PurchaseRfq.PriceEntry", + "App.Prc.PurchaseRfq.PriceEntryInfo", "App.Prc.PurchaseOrder.ConfirmAction", "App.Prc.PurchaseRfq.PriceComparison", "App.Prc.PurchaseRfq.RequestItems", diff --git a/configs/seeds/wizard/Prc_PurchaseRfqAlternative.json b/configs/seeds/wizard/Prc_PurchaseRfqAlternative.json index 0d1d7aa0..06eaaa29 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfqAlternative.json +++ b/configs/seeds/wizard/Prc_PurchaseRfqAlternative.json @@ -33,8 +33,8 @@ "MenuTr": "İhale Teklifleri", "TitleEn": "Tender Quotes", "TitleTr": "İhale Teklifleri", - "DescEn": "Tender Quotes — the other requests for quotation of the same tender; alternatives are created here.\nWhere: Purchasing › Orders › Requests for Quotation › Quotes tab (no menu of its own).\nFields: RFQ no, supplier, status, supplier response, order deadline, expected arrival, untaxed amount, total, currency.\nUsage: Add + supplier creates an alternative RFQ in the same tender with a copy of the current lines (price from the supplier's price list, currency and terms from the contact card); a supplier can be in a tender once. Prices of all alternatives are entered together in the Price Comparison tab.", - "DescTr": "İhale Teklifleri — aynı ihalenin diğer teklif talepleri; alternatifler burada oluşturulur.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Teklifler sekmesi (kendi menüsü yoktur).\nAlanlar: teklif talep no, tedarikçi, durum, tedarikçi yanıtı, sipariş zaman sınırı, beklenen geliş, vergi hariç tutar, toplam, para birimi.\nKullanım: Ekle + tedarikçi seçimi aynı ihalede, o anki kalemlerin kopyasıyla alternatif teklif talebi açar (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından); bir tedarikçi ihalede bir kez bulunur. Bütün alternatiflerin fiyatları Fiyat Karşılaştırması sekmesinde birlikte girilir." + "DescEn": "Tender Quotes — the other requests for quotation of the same tender.\nWhere: Purchasing › Orders › Requests for Quotation › Quotes tab (no menu of its own).\nFields: RFQ no, supplier, status, supplier response, order deadline, expected arrival, untaxed amount, total, currency.\nUsage: alternatives are created with the Create Alternative button: the suppliers are multi-selected in its modal (Alternative Suppliers screen); a supplier can be in a tender once. Prices of all alternatives are entered together in the Price Comparison tab.", + "DescTr": "İhale Teklifleri — aynı ihalenin diğer teklif talepleri.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Teklifler sekmesi (kendi menüsü yoktur).\nAlanlar: teklif talep no, tedarikçi, durum, tedarikçi yanıtı, sipariş zaman sınırı, beklenen geliş, vergi hariç tutar, toplam, para birimi.\nKullanım: alternatifler Alternatif Oluştur butonuyla açılır: modalında (Alternatif Tedarikçiler ekranı) tedarikçiler çoklu seçilir; bir tedarikçi ihalede bir kez bulunur. Bütün alternatiflerin fiyatları Fiyat Karşılaştırması sekmesinde birlikte girilir." }, "Groups": [ { @@ -134,25 +134,10 @@ "SqlQuery": null } ], - "InsertCommand": "EXEC Prc_P_PurchaseRfqCreateAlternative @BaseId, @SupplierId, @CreatorId", + "InsertCommand": null, "InsertBeforeCommand": null, "InsertAfterCommand": null, - "InsertFieldsDefaultValueDto": [ - { - "FieldName": "Id", - "FieldDbType": 9, - "Value": "@NEWID", - "CustomValueType": 2, - "SqlQuery": null - }, - { - "FieldName": "CreatorId", - "FieldDbType": 9, - "Value": "@USERID", - "CustomValueType": 2, - "SqlQuery": null - } - ], + "InsertFieldsDefaultValueDto": [], "UpdateCommand": null, "UpdateBeforeCommand": null, "UpdateAfterCommand": null, @@ -332,7 +317,7 @@ "AllowDetail": false, "AllowDeleting": false, "AllowAllDeleting": false, - "AllowAdding": true, + "AllowAdding": false, "AllowDuplicate": false, "OpenDetailAfterInsert": false, "UseIcons": false, diff --git a/configs/seeds/wizard/Prc_PurchaseRfqAlternativeSupplier.json b/configs/seeds/wizard/Prc_PurchaseRfqAlternativeSupplier.json new file mode 100644 index 00000000..2efe1684 --- /dev/null +++ b/configs/seeds/wizard/Prc_PurchaseRfqAlternativeSupplier.json @@ -0,0 +1,1581 @@ +{ + "Wizard": { + "ComponentKind": 0, + "WizardName": "Prc_PurchaseRfqAlternativeSupplier", + "WizardCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "SeededAt": "2026-10-11T23:30:00+03:00", + "CustomComponentName": null, + "PermissionGroupName": "App.Prc", + "ModuleId": "Prc", + "Menu": { + "MenuParentPath": [ + { + "Code": "App.Prc", + "Icon": "FcShop", + "En": "Purchasing", + "Tr": "Satınalma" + } + ], + "MenuParentCode": "App.Prc.Orders", + "MenuParentIcon": "FcShop", + "CreateMenu": false, + "MenuCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "MenuOrder": 0, + "MenuUrl": "/admin/list/App.Prc.PurchaseRfqAlternativeSupplier", + "MenuIcon": "FcBusinessman" + }, + "Language": { + "MenuParentEn": "Orders", + "MenuParentTr": "Siparişler", + "PermissionGroupEn": "Purchasing", + "PermissionGroupTr": "Satınalma", + "MenuEn": "Alternative Suppliers", + "MenuTr": "Alternatif Tedarikçiler", + "TitleEn": "Alternative Suppliers", + "TitleTr": "Alternatif Tedarikçiler", + "DescEn": "Alternative Suppliers — the active contacts that do not yet have a request for quotation in the tender, listed to add alternatives to an open RFQ.\nWhere: Purchasing › Orders › Requests for Quotation › Create Alternative button (modal; no menu of its own).\nFields: name, city, phone, e-mail, supplier currency.\nUsage: select the suppliers with the row checkboxes and press Create for Selected; for each one an RFQ is opened in the same tender with a copy of the current lines (price from the supplier's price list, currency and terms from the contact card) and the supplier leaves this list. Only an RFQ in RFQ or RFQ Sent status takes alternatives; prices are entered with the Price Entry button.", + "DescTr": "Alternatif Tedarikçiler — ihalede henüz teklif talebi olmayan aktif kontaklar, açık teklif talebine alternatif eklemek için listelenir.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Alternatif Oluştur butonu (modal; kendi menüsü yoktur).\nAlanlar: ad, şehir, telefon, e-posta, tedarikçi para birimi.\nKullanım: tedarikçiler satır başındaki kutuyla seçilir ve Seçilenler İçin Oluştur'a basılır; her biri için aynı ihalede o anki kalemlerin kopyasıyla teklif talebi açılır (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından) ve tedarikçi bu listeden düşer. Yalnız Teklif Talebi ya da Gönderildi durumundaki teklife alternatif eklenir; fiyatlar Fiyat Girişi butonuyla girilir." + }, + "Groups": [ + { + "Items": [ + { + "FieldName": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "En": "Id", + "Tr": "Kimlik" + }, + { + "FieldName": "BaseId", + "CaptionName": "App.Listform.ListformField.BaseId", + "En": "Base Document", + "Tr": "Ana Belge" + }, + { + "FieldName": "Name", + "CaptionName": "App.Listform.ListformField.Name", + "En": "Name", + "Tr": "Adı" + }, + { + "FieldName": "City", + "CaptionName": "App.Listform.ListformField.City", + "En": "City", + "Tr": "Şehir" + }, + { + "FieldName": "Phone", + "CaptionName": "App.Listform.ListformField.Phone", + "En": "Phone", + "Tr": "Telefon" + }, + { + "FieldName": "Email", + "CaptionName": "App.Listform.ListformField.Email", + "En": "Email", + "Tr": "E-posta" + }, + { + "FieldName": "SupplierCurrency", + "CaptionName": "App.Listform.ListformField.SupplierCurrency", + "En": "Supplier Currency", + "Tr": "Tedarikçi Para Birimi" + } + ] + } + ] + }, + "ListForm": { + "EditType": null, + "DataSourceCode": "Default", + "KeyFieldDbSourceType": 16, + "TableName": null, + "DefaultFilter": null, + "SelectCommand": "Prc_V_PurchaseRfqAlternativeSupplier", + "SelectCommandType": 2, + "SelectFieldsDefaultValueDto": [], + "SeedFilePath": null, + "SeedSyncInsert": false, + "SeedSyncUpdate": false, + "SeedSyncDelete": false, + "DeleteCommand": null, + "DeleteBeforeCommand": null, + "DeleteAfterCommand": null, + "DeleteFieldsDefaultValueDto": [ + { + "FieldName": "Id", + "FieldDbType": 16, + "Value": "@ID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "InsertCommand": null, + "InsertBeforeCommand": null, + "InsertAfterCommand": null, + "InsertFieldsDefaultValueDto": [ + { + "FieldName": "Id", + "FieldDbType": 9, + "Value": "@NEWID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "UpdateCommand": "EXEC Prc_P_PurchaseRfqCreateAlternative @Id, @LastModifierId", + "UpdateBeforeCommand": null, + "UpdateAfterCommand": null, + "UpdateFieldsDefaultValueDto": [ + { + "FieldName": "Id", + "FieldDbType": 16, + "Value": "@ID", + "CustomValueType": 2, + "SqlQuery": "" + }, + { + "FieldName": "LastModifierId", + "FieldDbType": 9, + "Value": "@USERID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "FormFieldsDefaultValueDto": [], + "WidgetsDto": [], + "ExtraFilterEditDto": [], + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "CultureName": "en", + "Name": "App.Prc.PurchaseRfqAlternativeSupplier", + "KeyFieldName": "Id", + "Title": "App.Prc.PurchaseRfqAlternativeSupplier.Title", + "SortMode": "single", + "PageSize": 10, + "Width": 0, + "Height": 0, + "FullHeight": false, + "Description": "App.Prc.PurchaseRfqAlternativeSupplier.Desc", + "FilterRowDto": { + "Visible": true, + "ApplyFilter": "auto", + "AllowUserUiFilterSave": true + }, + "RowDto": { + "RowHeight": "auto", + "WhiteSpace": "normal", + "OverflowWrap": "break-word" + }, + "HeaderFilterDto": { + "Visible": true, + "AllowSearch": false, + "Height": 325, + "SearchTimeout": 500, + "Width": 252 + }, + "FilterPanelDto": { + "Visible": false, + "Texts": null, + "FilterEnabled": false, + "CustomizeText": null + }, + "SearchPanelDto": { + "Visible": true, + "Width": 160 + }, + "GroupPanelDto": { + "Visible": true, + "AutoExpandAll": false + }, + "SelectionDto": { + "Mode": "multiple", + "AllowSelectAll": true, + "SelectAllMode": "page", + "ShowCheckBoxesMode": "always" + }, + "ColumnOptionDto": { + "ShowBorders": true, + "ShowRowLines": true, + "ShowColumnLines": false, + "RowAlternationEnabled": true, + "AllowColumnReordering": true, + "AllowColumnResizing": true, + "ColumnResizingMode": "widget", + "ColumnAutoWidth": true, + "RtlEnabled": false, + "ColumnFixingEnabled": true, + "ColumnChooserEnabled": true, + "ColumnChooserMode": "dragAndDrop", + "HoverStateEnabled": false, + "ColumnHidingEnabled": true, + "FocusedRowEnabled": true, + "ShowColumnHeaders": true + }, + "PivotOptionDto": { + "ColumnChooserEnabled": false, + "AllowFieldDragging": true, + "ShowFieldPanel": true, + "ShowDataFields": true, + "ShowColumnFields": true, + "ShowRowFields": true, + "ShowFilterFields": true, + "ShowChart": false, + "ChartHeight": 320, + "ChartCommonSeriesType": "bar" + }, + "TreeOptionDto": { + "KeyExpr": null, + "ParentIdExpr": null, + "HasItemsExpr": null, + "RootValue": null, + "ExpandedRowKeys": [], + "AutoExpandAll": false, + "RecursiveSelection": false, + "TitleExpr": null, + "StartExpr": null, + "EndExpr": null, + "ProgressExpr": null + }, + "GanttOptionDto": { + "KeyExpr": null, + "ParentIdExpr": null, + "HasItemsExpr": null, + "RootValue": null, + "ExpandedRowKeys": [], + "AutoExpandAll": false, + "RecursiveSelection": false, + "TitleExpr": null, + "ScaleType": "weeks", + "StartExpr": null, + "EndExpr": null, + "ProgressExpr": null, + "EditingEnabled": false, + "AllowTaskAdding": false, + "AllowTaskUpdating": false, + "AllowTaskResourceUpdating": false, + "AllowTaskDeleting": false, + "AllowDependencyAdding": false, + "AllowDependencyDeleting": false, + "AllowResourceAdding": false, + "AllowResourceUpdating": false, + "AllowResourceDeleting": false + }, + "SchedulerOptionDto": { + "TextExpr": null, + "UserNameExpr": null, + "DescriptionExpr": null, + "StartDateExpr": null, + "EndDateExpr": null, + "AllDayExpr": null, + "RecurrenceRuleExpr": null, + "RecurrenceExceptionExpr": null, + "StartDayHour": 8, + "EndDayHour": 20, + "DefaultView": "week", + "ShowAllDayPanel": true, + "CellDuration": 30, + "FirstDayOfWeek": 1, + "CrossScrollingEnabled": false, + "AllowResizing": false, + "AllowDragging": false, + "AllowDeleting": false, + "AllowEditing": false, + "AllowAdding": false + }, + "TodoOptionDto": { + "TitleExpr": null, + "StatusExpr": null, + "DescriptionExpr": null, + "AnalysisExpr": null, + "DueDateExpr": null, + "TagExpr": null, + "AssigneeExpr": null, + "PriorityExpr": null, + "CompletedExpr": null, + "OrderExpr": null, + "TimesheetExpr": null, + "SubTaskExpr": null, + "StatusOrder": null, + "AllowDragging": true + }, + "PagerOptionDto": { + "Visible": true, + "ShowPageSizeSelector": true, + "ShowInfo": false, + "ShowNavigationButtons": true, + "AllowedPageSizes": "10,20,50,100", + "InfoText": "Page {0} of {1} ({2} items)", + "DisplayMode": "adaptive", + "ScrollingMode": "standard", + "LoadPanelEnabled": "auto", + "LoadPanelText": "Loading..." + }, + "EditingOptionDto": { + "Mode": "batch", + "RefreshMode": "full", + "AllowUpdating": false, + "AllowDetail": false, + "AllowDeleting": false, + "AllowAllDeleting": false, + "AllowAdding": false, + "AllowDuplicate": false, + "OpenDetailAfterInsert": false, + "UseIcons": false, + "ConfirmDelete": true, + "NewRowPosition": "viewportTop", + "SelectTextOnEditStart": false, + "StartEditAction": "click", + "EditColumnName": null, + "Popup": { + "Title": "App.Prc.PurchaseRfqAlternativeSupplier.Title", + "ShowTitle": true, + "Width": 800, + "Height": 125, + "FullScreen": false, + "HideOnOutsideClick": true, + "ResizeEnabled": true, + "DragEnabled": true, + "RestorePosition": true, + "Position": "center" + }, + "SendOnlyChangedFormValuesUpdate": false, + "AddPageUrl": null, + "AddDialogName": null, + "AddDialogParameters": null + }, + "EditingFormDto": [], + "PermissionDto": { + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "D": "App.Prc.PurchaseRfqAlternativeSupplier.Delete", + "E": "App.Prc.PurchaseRfqAlternativeSupplier.Export", + "I": "App.Prc.PurchaseRfqAlternativeSupplier.Import", + "N": "App.Prc.PurchaseRfqAlternativeSupplier.Note" + }, + "CommandColumnDto": [ + { + "ButtonPosition": 1, + "AuthName": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "Text": "App.Prc.PurchaseRfqAlternativeSupplier.CreateSelected", + "Hint": "App.Prc.PurchaseRfqAlternativeSupplier.CreateSelected", + "Icon": "add", + "Url": null, + "UrlTarget": "_blank", + "DialogName": null, + "DialogParameters": null, + "OnClick": "(async () => { const rows = getSelectedRowsData(); if (!rows.length) return; for (const r of rows) { await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: {} }); } const c = dialog.config; if (c && c.component) { dialog.setConfig({}); if (c.onClose) c.onClose(); } else refreshData(); })().catch(() => refreshData())", + "Command": null, + "IsVisible": true, + "VisibleExpression": null + } + ], + "StateStoringDto": { + "Enabled": true, + "Type": "custom", + "StorageKey": "listFormGridStorage-App.Prc.PurchaseRfqAlternativeSupplier", + "SavingTimeout": 5000 + }, + "CustomJsSources": [], + "CustomStyleSources": [], + "UpdateServiceAddress": "list-form-data/update", + "InsertServiceAddress": "list-form-data/insert", + "DeleteServiceAddress": "list-form-data/delete", + "IsTenant": true, + "IsBranch": false, + "IsOrganizationUnit": false, + "ListFormType": "List", + "IsSubForm": false, + "ShowNote": false, + "SubFormsListFormType": "Form", + "SubFormsDto": [], + "ExtraFilterDto": [], + "LayoutDto": { + "Grid": true, + "Card": true, + "Pivot": true, + "Chart": true, + "Tree": false, + "Gantt": false, + "Scheduler": false, + "Todo": false, + "DefaultLayout": "grid" + }, + "WorkflowDto": { + "ApprovalUserFieldName": null, + "ApprovalDateFieldName": null, + "ApprovalStatusFieldName": null, + "ApprovalDescriptionFieldName": null, + "ApprovalIsFilterUserName": false, + "ApprovalIsResetWorkflow": false, + "ApprovalIsManualStart": false, + "Criteria": [] + }, + "UserId": null, + "RoleId": null, + "CommonDto": { + "AdjustOnZoom": true, + "ContainerBackgroundColor": "#FFFFFF", + "Palette": "Material", + "PaletteExtensionMode": "blend", + "DefaultPane": null, + "Disabled": false, + "Theme": "generic.light" + }, + "AdaptivelayoutDto": { + "Height": 80, + "Width": 80, + "KeepLabels": true + }, + "AnimationDto": { + "Duration": 1000, + "Easing": "easeOutCubic", + "Enabled": true, + "MaxPointCountSupported": 300 + }, + "AnnotationsDto": [], + "ArgumentAxisDto": { + "ArgumentType": null, + "AggregationInterval": null, + "Grid": { + "Color": "#d3d3d3", + "Visible": false, + "Width": 1 + }, + "HoverMode": "none", + "Label": { + "DisplayMode": "standard", + "RotationAngle": 90, + "OverlappingBehavior": "hide" + }, + "Position": "bottom", + "Title": null, + "Visible": true, + "Width": 1, + "WorkdaysOnly": false + }, + "CommonAnnotationSettingsDto": { + "Argument": null, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "Color": "#ffffff", + "Description": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Height": -1, + "Image": null, + "OffsetX": -1, + "OffsetY": -1, + "PaddingLeftRight": 10, + "PaddingTopBottom": 10, + "Series": null, + "Text": null, + "TooltipEnabled": true, + "Type": null, + "Value": null, + "Width": 0, + "WordWrap": "normal", + "X": 0, + "Y": 0 + }, + "CommonAxisSettingsDto": { + "Grid": { + "Color": "#d3d3d3", + "Visible": false, + "Width": 1 + }, + "Title": null, + "Visible": true, + "Width": 1 + }, + "CommonPaneSettingsDto": { + "BackgroundColor": null + }, + "CommonSeriesSettingsDto": { + "ArgumentField": "arg", + "Axis": null, + "BarOverlapGroup": null, + "BarPadding": 0, + "BarWidth": 0, + "Color": null, + "CornerRadius": 0, + "DashStyle": "solid", + "IgnoreEmptyPoints": false, + "Pane": null, + "RangeValue1Field": "val1", + "RangeValue2Field": "val2", + "SelectionMode": "none", + "ShowInLegend": true, + "Type": null, + "ValueField": null, + "Visible": true, + "Width": 2, + "Label": null + }, + "CrosshairDto": { + "Color": "#f05b41", + "DashStyle": "dot", + "Enabled": false, + "Width": 1, + "HorizontalLine": { + "Color": "#f05b41", + "DashStyle": "dot", + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "Visible": true, + "Width": 1 + }, + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "VerticalLine": { + "Color": "#f05b41", + "DashStyle": "dot", + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "Visible": true, + "Width": 1 + } + }, + "ExportDto": { + "BackgroundColor": "#FFFFFF", + "Enabled": true, + "AllowExportSelectedData": false, + "Margin": 10, + "PrintingEnabled": true + }, + "LegendDto": { + "BackgroundColor": null, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "ColumnCount": 0, + "Orientation": "vertical", + "Position": "outside", + "RowCount": 0, + "Title": null, + "Visible": true + }, + "MarginDto": { + "Bottom": 0, + "Left": 0, + "Right": 0, + "Top": 0 + }, + "PanesDto": [], + "ScrollBarDto": { + "Color": "gray", + "Offset": 5, + "Position": "top", + "Visible": false, + "Width": 10 + }, + "SeriesDto": [], + "SizeDto": { + "UseSize": false, + "Width": 400, + "Height": 200 + }, + "TitleDto": { + "Text": null, + "VerticalAlignment": "top", + "HorizontalAlignment": "center", + "Subtitle": null, + "TextOverflow": "ellipsis", + "WordWrap": null + }, + "TooltipDto": { + "ArgumentFormat": null, + "ArrowLength": 10, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "Color": "#ffffff", + "Enabled": false, + "Font": { + "Color": "#000000", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Format": null, + "Location": "center", + "PaddingLeftRight": 18, + "PaddingTopBottom": 15, + "Shared": false + }, + "ValueAxisDto": [], + "ZoomAndPanDto": { + "AllowMouseWheel": true, + "AllowTouchGestures": true, + "ArgumentAxis": "none", + "DragToZoom": false, + "PanKey": "shift", + "ValueAxis": "none", + "DragBoxStyle": { + "Color": null, + "Opacity": 0 + } + }, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + "Fields": [ + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": false, + "IsActive": true, + "Width": 0, + "ListOrderNo": 1, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": false, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": "{\"readOnly\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "BaseId", + "CaptionName": "App.Listform.ListformField.BaseId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": false, + "IsActive": true, + "Width": 0, + "ListOrderNo": 2, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": null, + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Name", + "CaptionName": "App.Listform.ListformField.Name", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 3, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": "asc", + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "City", + "CaptionName": "App.Listform.ListformField.City", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 4, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Phone", + "CaptionName": "App.Listform.ListformField.Phone", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 5, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Email", + "CaptionName": "App.Listform.ListformField.Email", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 6, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Prc.PurchaseRfqAlternativeSupplier", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "SupplierCurrency", + "CaptionName": "App.Listform.ListformField.SupplierCurrency", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 7, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": false, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "R": "App.Prc.PurchaseRfqAlternativeSupplier", + "U": "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + } + ], + "IsDeletedField": false, + "IsCreatedField": true, + "InsertedRecords": { + "LanguageKeys": [ + "App.Prc.PurchaseRfqAlternativeSupplier", + "App.Prc.PurchaseRfqAlternativeSupplier.Title", + "App.Prc.PurchaseRfqAlternativeSupplier.Desc" + ], + "PermissionGroupNames": [], + "PermissionNames": [ + "App.Prc.PurchaseRfqAlternativeSupplier", + "App.Prc.PurchaseRfqAlternativeSupplier.Create", + "App.Prc.PurchaseRfqAlternativeSupplier.Update", + "App.Prc.PurchaseRfqAlternativeSupplier.Delete", + "App.Prc.PurchaseRfqAlternativeSupplier.Export", + "App.Prc.PurchaseRfqAlternativeSupplier.Import", + "App.Prc.PurchaseRfqAlternativeSupplier.Note" + ], + "MenuCodes": [], + "DataSourceCodes": [], + "ModuleIds": [] + }, + "DevRequest": { + "Id": "4784f377-808b-424b-a7e5-13afd94034a3", + "Title": "Satınalma -> Siparişler" + } +} \ No newline at end of file diff --git a/configs/seeds/wizard/Prc_PurchaseRfqComparison.json b/configs/seeds/wizard/Prc_PurchaseRfqComparison.json index a29f983a..a6f29723 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfqComparison.json +++ b/configs/seeds/wizard/Prc_PurchaseRfqComparison.json @@ -176,9 +176,9 @@ "SqlQuery": null } ], - "UpdateCommand": "UPDATE \"Prc_T_PurchaseRfqLine\" SET \"UnitPrice\" = @UnitPrice, \"DeliveryDate\" = @DeliveryDate, \"IsSelected\" = @IsSelected, \"LastModificationTime\" = @LastModificationTime, \"LastModifierId\" = @LastModifierId WHERE \"Id\" = @Id AND \"TenantId\" IS NOT DISTINCT FROM @TenantId", - "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfqLine l INNER JOIN Prc_T_PurchaseRfq d ON d.Id = l.PurchaseRfqId WHERE l.Id = @Id AND d.Status IN ('Purchase', 'Cancelled')) THROW 50142, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklifin kalemi değiştirilemez.', 1;", - "UpdateAfterCommand": "DECLARE @RfqId uniqueidentifier = (SELECT PurchaseRfqId FROM Prc_T_PurchaseRfqLine WHERE Id = @Id); EXEC Prc_P_PurchaseRfqRecalc @RfqId;", + "UpdateCommand": "EXEC Prc_P_PurchaseRfqComparisonSave @Id, @UnitPrice, @DeliveryDate, @IsSelected, @TenantId, @LastModificationTime, @LastModifierId", + "UpdateBeforeCommand": null, + "UpdateAfterCommand": null, "UpdateFieldsDefaultValueDto": [ { "FieldName": "LastModificationTime", diff --git a/configs/seeds/wizard/Prc_PurchaseRfqImportItem.json b/configs/seeds/wizard/Prc_PurchaseRfqImportItem.json index b95498d2..ff2124ec 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfqImportItem.json +++ b/configs/seeds/wizard/Prc_PurchaseRfqImportItem.json @@ -33,8 +33,8 @@ "MenuTr": "Teklif Talep Kalemleri", "TitleEn": "RFQ Request Lines", "TitleTr": "Teklif Talep Kalemleri", - "DescEn": "RFQ Request Lines — the lines of approved material requests that can still be quoted, listed for the open request for quotation.\nWhere: Purchasing › Orders › Requests for Quotation › Request Lines tab (no menu of its own); grouped by request.\nFields: request no, requester, product, quantity, unit, requested date, reason, transfer.\nUsage: tick Transfer on as many lines as needed (several requests at once) and press Save; the lines are copied to the RFQ with the agreement or supplier price and the requested date, and disappear from this list. Only an RFQ in RFQ or RFQ Sent status takes lines; a line already on another active RFQ or order is not listed.", - "DescTr": "Teklif Talep Kalemleri — onaylı malzeme taleplerinin henüz teklif istenmemiş kalemleri, açık teklif talebi için listelenir.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden, aktar.\nKullanım: istenen kadar satırda (birden fazla talep birlikte) Aktar işaretlenip Kaydet'e basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile teklife kopyalanır ve bu listeden düşer. Yalnız Teklif Talebi ya da Gönderildi durumundaki teklife kalem aktarılır; başka bir açık teklifte ya da siparişte olan kalem listelenmez." + "DescEn": "RFQ Request Lines — the lines of approved material requests that can still be quoted, listed for the open request for quotation.\nWhere: Purchasing › Orders › Requests for Quotation › Request Lines tab (no menu of its own); grouped by request.\nFields: request no, requester, product, quantity, unit, requested date, reason.\nUsage: select as many lines as needed with the row checkboxes (several requests at once) and press Transfer Selected; the lines are copied to the RFQ with the agreement or supplier price and the requested date, and disappear from this list. Only an RFQ in RFQ or RFQ Sent status takes lines; a line already on another active RFQ or order is not listed.", + "DescTr": "Teklif Talep Kalemleri — onaylı malzeme taleplerinin henüz teklif istenmemiş kalemleri, açık teklif talebi için listelenir.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Talep Kalemleri sekmesi (kendi menüsü yoktur); talebe göre gruplanır.\nAlanlar: talep no, talep eden, ürün, miktar, birim, istenen tarih, neden.\nKullanım: istenen kadar satır, satır başındaki kutuyla seçilir (birden fazla talep birlikte) ve Seçilenleri Aktar'a basılır; kalemler sözleşme ya da tedarikçi fiyatı ve istenen termin ile teklife kopyalanır ve bu listeden düşer. Yalnız Teklif Talebi ya da Gönderildi durumundaki teklife kalem aktarılır; başka bir açık teklifte ya da siparişte olan kalem listelenmez." }, "Groups": [ { @@ -92,12 +92,6 @@ "CaptionName": "App.Listform.ListformField.RequestReason", "En": "Request Reason", "Tr": "Talep Nedeni" - }, - { - "FieldName": "Transfer", - "CaptionName": "App.Listform.ListformField.Transfer", - "En": "Transfer", - "Tr": "Aktar" } ] } @@ -140,7 +134,7 @@ "SqlQuery": null } ], - "UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id, @Transfer", + "UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id", "UpdateBeforeCommand": null, "UpdateAfterCommand": null, "UpdateFieldsDefaultValueDto": [ @@ -198,9 +192,9 @@ "AutoExpandAll": false }, "SelectionDto": { - "Mode": "none", - "AllowSelectAll": false, - "SelectAllMode": "allPages", + "Mode": "multiple", + "AllowSelectAll": true, + "SelectAllMode": "page", "ShowCheckBoxesMode": "always" }, "ColumnOptionDto": { @@ -323,7 +317,7 @@ "EditingOptionDto": { "Mode": "batch", "RefreshMode": "full", - "AllowUpdating": true, + "AllowUpdating": false, "AllowDetail": false, "AllowDeleting": false, "AllowAllDeleting": false, @@ -363,7 +357,23 @@ "I": "App.Prc.PurchaseRfqImportItem.Import", "N": "App.Prc.PurchaseRfqImportItem.Note" }, - "CommandColumnDto": [], + "CommandColumnDto": [ + { + "ButtonPosition": 1, + "AuthName": "App.Prc.PurchaseRfqImportItem.Update", + "Text": "App.Prc.PurchaseImportItem.TransferSelected", + "Hint": "App.Prc.PurchaseImportItem.TransferSelected", + "Icon": "download", + "Url": null, + "UrlTarget": "_blank", + "DialogName": null, + "DialogParameters": null, + "OnClick": "(async () => { const rows = getSelectedRowsData(); if (!rows.length) return; for (const r of rows) { await dynamicFetch('list-form-data/update', 'POST', null, { listFormCode, keys: [r.Id], data: {} }); } const c = dialog.config; if (c && c.component) { dialog.setConfig({}); if (c.onClose) c.onClose(); } else refreshData(); })().catch(() => refreshData())", + "Command": null, + "IsVisible": true, + "VisibleExpression": null + } + ], "StateStoringDto": { "Enabled": true, "Type": "custom", @@ -1797,132 +1807,6 @@ "CreationTime": "0001-01-01T00:00:00", "CreatorId": null, "Id": "00000000-0000-0000-0000-000000000000" - }, - { - "EditType": null, - "ListFormCode": "App.Prc.PurchaseRfqImportItem", - "RoleId": null, - "UserId": null, - "ColumnJoinTableDto": { - "JoinType": null, - "TableName": null, - "JoinFieldName": null, - "BaseTableJoinFieldName": null, - "SelectFieldName": null, - "FieldNameAlias": null, - "JoinCondition2": "AND", - "JoinFieldName2": null, - "BaseTableJoinFieldName2_OrValue": null - }, - "FieldName": "Transfer", - "CaptionName": "App.Listform.ListformField.Transfer", - "PlaceHolder": null, - "ReadOnly": false, - "Visible": true, - "IsActive": true, - "Width": 0, - "ListOrderNo": 10, - "SourceDbType": 3, - "CultureName": "en", - "DataType": "boolean", - "SortIndex": 0, - "SortDirection": null, - "AllowSearch": true, - "AllowEditing": true, - "AllowAdding": true, - "ColumnCssClass": null, - "ColumnCssValue": null, - "BandName": null, - "ColumnFilterDto": { - "AllowFiltering": true, - "FilterOperations": null, - "SelectedFilterOperation": null, - "FilterValue": null - }, - "ColumnHeaderDto": { - "AllowHeaderFiltering": true, - "AllowSearch": false, - "DataSource": null, - "DataSourceString": "" - }, - "ColumnGroupingDto": { - "AllowGrouping": true, - "GroupIndex": null, - "AutoExpandGroup": false - }, - "ColumnCustomizationDto": { - "Fixed": false, - "FixedPosition": "left", - "AllowReordering": true - }, - "ColumnTotalSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "ColumnGroupSummaryDto": { - "SummaryType": null, - "ValueFormat": null, - "ShowInGroupFooter": false, - "AlignByColumn": false, - "DisplayFormat": null, - "ShowInColumn": null - }, - "LookupDto": { - "DataSourceType": 0, - "ValueExpr": "Key", - "DisplayExpr": "Name", - "CascadeRelationField": null, - "CascadeFilterOperator": "=", - "CascadeParentFields": null, - "CascadeEmptyFields": null, - "LookupQuery": null - }, - "ValidationRuleDto": [], - "ColumnStylingDto": [], - "PermissionDto": { - "Deny": false, - "C": "App.Prc.PurchaseRfqImportItem.Create", - "R": "App.Prc.PurchaseRfqImportItem", - "U": "App.Prc.PurchaseRfqImportItem.Update", - "E": true, - "I": true - }, - "CanRead": false, - "CanCreate": false, - "CanUpdate": false, - "CanExport": false, - "DefaultValue": null, - "DefaultValueType": 0, - "PivotSettingsDto": { - "IsPivot": true, - "Expanded": false, - "SortOrder": "asc", - "Area": "filter", - "Format": null, - "SummaryType": null, - "GroupInterval": "", - "WordWrapEnabled": false - }, - "Alignment": "left", - "Format": null, - "EditOrderNo": 1, - "EditGroupOrderNo": 1, - "EditorType2": "dxCheckBox", - "ColSpan": 1, - "EditorOptions": null, - "GridBoxOptions": null, - "TagBoxOptions": null, - "ImageUploadOptions": null, - "EditorScript": null, - "LastModificationTime": null, - "LastModifierId": null, - "CreationTime": "0001-01-01T00:00:00", - "CreatorId": null, - "Id": "00000000-0000-0000-0000-000000000000" } ], "IsDeletedField": false, @@ -1932,8 +1816,7 @@ "App.Prc.PurchaseRfqImportItem", "App.Prc.PurchaseRfqImportItem.Title", "App.Prc.PurchaseRfqImportItem.Desc", - "App.Listform.ListformField.BaseId", - "App.Listform.ListformField.Transfer" + "App.Listform.ListformField.BaseId" ], "PermissionGroupNames": [], "PermissionNames": [ diff --git a/configs/seeds/wizard/Prc_PurchaseRfqLine.json b/configs/seeds/wizard/Prc_PurchaseRfqLine.json index d08ee9b3..fa829b25 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfqLine.json +++ b/configs/seeds/wizard/Prc_PurchaseRfqLine.json @@ -33,8 +33,8 @@ "MenuTr": "Teklif Kalemleri", "TitleEn": "RFQ Lines", "TitleTr": "Teklif Kalemleri", - "DescEn": "RFQ Lines — the products of a request for quotation and the supplier's price and delivery date for each.\nWhere: Purchasing › Orders › Requests for Quotation › Products tab (no menu of its own).\nFields: product, description, quantity, unit, unit price, tax rate, amount (quantity × unit price, calculated), delivery date (requested date from the material request, replaced by the supplier's date), material request line (read-only).\nRules: lines cannot be changed on an RFQ converted to a purchase order or cancelled; after every change the RFQ totals are recalculated. Lines added after alternatives were created stay on this document only.", - "DescTr": "Teklif Kalemleri — teklif talebinin ürünleri ve tedarikçinin her biri için verdiği fiyat ile termin.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün, açıklama, miktar, birim, birim fiyat, vergi oranı, tutar (miktar × birim fiyat, hesaplanır), teslim tarihi (malzeme talebindeki istenen termin; tedarikçinin terminiyle değiştirilir), talep kalemi (salt okunur).\nKurallar: siparişe dönüştürülmüş ya da iptal edilmiş teklifin kalemi değiştirilemez; her değişiklikte teklif toplamları yeniden hesaplanır. Alternatifler açıldıktan sonra eklenen kalem yalnız bu belgede kalır." + "DescEn": "RFQ Lines — the products of a request for quotation and the supplier's price and delivery date for each.\nWhere: Purchasing › Orders › Requests for Quotation › Products tab (no menu of its own).\nFields: product, description, quantity, unit, unit price, tax rate, amount (tax included: quantity × unit price × (1 + tax rate), calculated), delivery date (requested date from the material request, replaced by the supplier's date), material request line (read-only).\nRules: lines cannot be changed on an RFQ converted to a purchase order or cancelled; after every change the RFQ totals are recalculated. Lines added after alternatives were created stay on this document only.", + "DescTr": "Teklif Kalemleri — teklif talebinin ürünleri ve tedarikçinin her biri için verdiği fiyat ile termin.\nNerede: Satınalma › Siparişler › Teklif Talepleri › Ürünler sekmesi (kendi menüsü yoktur).\nAlanlar: ürün, açıklama, miktar, birim, birim fiyat, vergi oranı, tutar (KDV dahil: miktar × birim fiyat × (1 + vergi oranı), hesaplanır), teslim tarihi (malzeme talebindeki istenen termin; tedarikçinin terminiyle değiştirilir), talep kalemi (salt okunur).\nKurallar: siparişe dönüştürülmüş ya da iptal edilmiş teklifin kalemi değiştirilemez; her değişiklikte teklif toplamları yeniden hesaplanır. Alternatifler açıldıktan sonra eklenen kalem yalnız bu belgede kalır." }, "Groups": [ { @@ -1063,6 +1063,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1327,6 +1329,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1368,7 +1372,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": null, + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[],\"trigger\":\"change\"}]}\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1465,6 +1469,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1603,6 +1609,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1644,7 +1652,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": null, + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[],\"trigger\":\"change\"}]}\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1741,6 +1749,8 @@ "IgnoreEmptyValue": false, "Reevaluate": true, "ComparisonType": "", + "ComparisonTarget": null, + "ValidationCallback": null, "Pattern": "", "Max": null, "Min": null, @@ -1782,7 +1792,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": null, + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[],\"trigger\":\"change\"}]}\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -1908,7 +1918,7 @@ "GridBoxOptions": null, "TagBoxOptions": null, "ImageUploadOptions": null, - "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"multiply\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"left\":\"Quantity\",\"right\":\"UnitPrice\",\"target\":\"Amount\",\"digits\":\"2\"},\"fields\":[]}]}\n// @runOnOpen\nset(\"Amount\", round(num(\"Quantity\") * num(\"UnitPrice\"), 2))", + "EditorScript": "// @builder {\"v\":1,\"rules\":[{\"id\":\"r1\",\"recipe\":\"formula\",\"condition\":{\"operator\":\"always\",\"source\":\"\",\"value\":\"\"},\"params\":{\"target\":\"Amount\",\"expression\":\"round(round(num(\\\"Quantity\\\") * num(\\\"UnitPrice\\\"), 2) * (1 + num(\\\"TaxRate\\\") / 100), 2)\"},\"fields\":[]}]}\n// @runOnOpen\nset(\"Amount\", round(round(num(\"Quantity\") * num(\"UnitPrice\"), 2) * (1 + num(\"TaxRate\") / 100), 2))", "LastModificationTime": null, "LastModifierId": null, "CreationTime": "0001-01-01T00:00:00", @@ -2155,7 +2165,7 @@ "EditOrderNo": 9, "EditGroupOrderNo": 1, "EditorType2": "dxSelectBox", - "ColSpan": 1, + "ColSpan": 2, "EditorOptions": "{\"readOnly\":true}", "GridBoxOptions": null, "TagBoxOptions": null, diff --git a/configs/seeds/wizard/Prc_PurchaseRfqOther.json b/configs/seeds/wizard/Prc_PurchaseRfqOther.json index a6a011dd..604f8272 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfqOther.json +++ b/configs/seeds/wizard/Prc_PurchaseRfqOther.json @@ -157,8 +157,8 @@ } ], "UpdateCommand": null, - "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE Id = @Id AND Status IN ('Purchase', 'Cancelled')) THROW 50151, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklif değiştirilemez.', 1;", - "UpdateAfterCommand": "EXEC Prc_P_PurchaseRfqAfterSave @Id, @LastModifierId", + "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE Id IN @Id AND Status IN ('Purchase', 'Cancelled')) THROW 50151, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklif değiştirilemez.', 1;", + "UpdateAfterCommand": "DECLARE @_id uniqueidentifier = (SELECT TOP 1 Id FROM Prc_T_PurchaseRfq WHERE Id IN @Id); EXEC Prc_P_PurchaseRfqAfterSave @_id, @LastModifierId", "UpdateFieldsDefaultValueDto": [ { "FieldName": "LastModificationTime", diff --git a/configs/seeds/wizard/Prc_PurchaseRfqQuote.json b/configs/seeds/wizard/Prc_PurchaseRfqQuote.json index 901cf760..b706dec9 100644 --- a/configs/seeds/wizard/Prc_PurchaseRfqQuote.json +++ b/configs/seeds/wizard/Prc_PurchaseRfqQuote.json @@ -133,8 +133,8 @@ } ], "UpdateCommand": null, - "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE Id = @Id AND Status IN ('Purchase', 'Cancelled')) THROW 50151, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklif değiştirilemez.', 1;", - "UpdateAfterCommand": "EXEC Prc_P_PurchaseRfqAfterSave @Id, @LastModifierId", + "UpdateBeforeCommand": "IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE Id IN @Id AND Status IN ('Purchase', 'Cancelled')) THROW 50151, N'Siparişe dönüştürülmüş ya da iptal edilmiş teklif değiştirilemez.', 1;", + "UpdateAfterCommand": "DECLARE @_id uniqueidentifier = (SELECT TOP 1 Id FROM Prc_T_PurchaseRfq WHERE Id IN @Id); EXEC Prc_P_PurchaseRfqAfterSave @_id, @LastModifierId", "UpdateFieldsDefaultValueDto": [ { "FieldName": "LastModificationTime", diff --git a/configs/seeds/wizard/Prc_RejectReason.json b/configs/seeds/wizard/Prc_RejectReason.json index c98104af..c5cd7021 100644 --- a/configs/seeds/wizard/Prc_RejectReason.json +++ b/configs/seeds/wizard/Prc_RejectReason.json @@ -33,7 +33,7 @@ "TitleEn": "Rejection Reasons", "TitleTr": "Red Nedenleri", "DescEn": "Rejection Reasons — reasons a purchasing request can be rejected for (no need, quantity not suitable, wrong product, budget not suitable, other).\nWhere: Purchasing › Definitions › Rejection Reasons.\nFields: reason, sort order (order in the selection list), active.\nUsed by: Purchasing › Material Requests — the department approver or purchasing selects a reason when rejecting a request. Only active reasons are offered; deactivate a used reason instead of deleting it.", - "DescTr": "Red Nedenleri — satınalma taleplerinin reddedilme sebepleri (ihtiyaç yok, miktar uygun değil, yanlış ürün, bütçe uygun değil, diğer).\nNerede: Satınalma › Tanımlamalar › Red Nedenleri.\nAlanlar: red nedeni, sıra (seçim listesindeki sırası), aktif.\nKullanıldığı yer: Satınalma › Malzeme Talepleri — departman onaycısı ya da satınalma talebi reddederken neden seçer. Yalnız aktif nedenler listelenir; kullanılmış neden silinmez, pasife alınır." + "DescTr": "Red Nedenleri — satınalma taleplerinin reddedilme sebepleri (ihtiyaç yok, miktar uygun değil, yanlış ürün, bütçe uygun değil, diğer).\nNerede: Satınalma › Tanımlamalar › Red Nedenleri.\nAlanlar: red nedeni, sıra (seçim listesindeki sırası), aktif.\nKullanıldığı yer: Satınalma › Talepler — departman onaycısı ya da satınalma talebi reddederken neden seçer. Yalnız aktif nedenler listelenir; kullanılmış neden silinmez, pasife alınır." }, "Groups": [ { @@ -1251,6 +1251,6 @@ }, "DevRequest": { "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", - "Title": "Satınalma -> Malzeme Talepleri" + "Title": "Satınalma -> Talepler" } } \ No newline at end of file diff --git a/ui/src/views/list/useToolbar.tsx b/ui/src/views/list/useToolbar.tsx index e38fa3d0..fafb44a7 100644 --- a/ui/src/views/list/useToolbar.tsx +++ b/ui/src/views/list/useToolbar.tsx @@ -787,16 +787,22 @@ const useToolbar = ({ ) { items.push({ locateInMenu: 'auto', - showText: 'inMenu', + showText: 'always', name: 'saveButton', - options: { hint: translate('::App.Platform.SaveChanges') }, + options: { + text: translateToolbar('::App.Platform.SaveChanges'), + hint: translate('::App.Platform.SaveChanges'), + }, }) items.push({ locateInMenu: 'auto', - showText: 'inMenu', + showText: 'always', name: 'revertButton', - options: { hint: translate('::App.Platform.UndoChanges') }, + options: { + text: translateToolbar('::App.Platform.UndoChanges'), + hint: translate('::App.Platform.UndoChanges'), + }, }) } // #endregion diff --git a/ui/src/views/purchasing/PurchaseDocGridDialog.tsx b/ui/src/views/purchasing/PurchaseDocGridDialog.tsx new file mode 100644 index 00000000..3210ebd2 --- /dev/null +++ b/ui/src/views/purchasing/PurchaseDocGridDialog.tsx @@ -0,0 +1,85 @@ +import { useEffect, useMemo, useRef, useState } from 'react' +import classNames from 'classnames' +import { Button, Dialog } from '@/components/ui' +import { useDialogContext } from '@/components/ui/Dialog/Dialog' +import { useLocalization } from '@/utils/hooks/useLocalization' +import Grid from '../list/Grid' +import { useListFormGridDto } from '../list/shared/hooks' + +type PurchaseDocGridDialogProps = { + open: boolean + onDialogClose: () => void + /** Ekranın BaseId'si: teklif talebi ya da taslak sipariş. */ + docId: string + /** Belgeye süzülen ekran (App.Prc.*ImportItem, App.Prc.PurchaseRfqAlternativeSupplier, App.Prc.PurchaseRfqComparison). */ + listFormCode: string + /** Başlık ve açıklamanın dil anahtarları (:: öneki olmadan). */ + title: string + info?: string +} + +// Grid'in p-1 sarmalayıcısının dikey boşluğu. +const GRID_WRAPPER_PADDING = 8 + +const DocGridBody = ({ docId, listFormCode, info }: Pick) => { + const { translate } = useLocalization() + const { isMaximized } = useDialogContext() + const gridDto = useListFormGridDto(listFormCode) + const gridAreaRef = useRef(null) + const [gridAreaHeight, setGridAreaHeight] = useState(0) + const searchParams = useMemo( + () => new URLSearchParams({ filter: JSON.stringify(['BaseId', '=', docId]) }), + [docId], + ) + + // Grid yüksekliği yalnız ekran tanımından okunur; büyütülmüş modalda kalan alan ekran tanımının yüksekliği olarak verilir. + useEffect(() => { + const element = gridAreaRef.current + if (!isMaximized || !element) return + + const observer = new ResizeObserver(([entry]) => setGridAreaHeight(Math.floor(entry.contentRect.height))) + observer.observe(element) + return () => observer.disconnect() + }, [isMaximized]) + + const sizedGridDto = useMemo(() => { + if (!gridDto || !isMaximized || gridAreaHeight <= GRID_WRAPPER_PADDING) return gridDto + return { ...gridDto, gridOptions: { ...gridDto.gridOptions, height: gridAreaHeight - GRID_WRAPPER_PADDING } } + }, [gridDto, isMaximized, gridAreaHeight]) + + return ( + + {info &&

{translate(`::${info}`)}

} +
+ {sizedGridDto && ( + + )} +
+
+ ) +} + +/** + * Satınalma belgesinin toolbar butonlarından (Talepten Aktar, Alternatif Oluştur, Fiyat Girişi) açılan modal: + * belgeye süzülmüş tek bir ListForm ekranını platformun Grid bileşeniyle gösterir; iş ekranın kendi butonu ya da + * batch kaydıyla yapılır, bu bileşen yalnız çerçevedir. + */ +const PurchaseDocGridDialog = ({ open, onDialogClose, docId, listFormCode, title, info }: PurchaseDocGridDialogProps) => { + const { translate } = useLocalization() + + return ( + + {translate(`::${title}`)} + + + + + + ) +} + +export default PurchaseDocGridDialog diff --git a/ui/src/views/purchasing/PurchaseRequestImportDialog.tsx b/ui/src/views/purchasing/PurchaseRequestImportDialog.tsx deleted file mode 100644 index 387a9066..00000000 --- a/ui/src/views/purchasing/PurchaseRequestImportDialog.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useMemo } from 'react' -import { Button, Dialog } from '@/components/ui' -import { useLocalization } from '@/utils/hooks/useLocalization' -import Grid from '../list/Grid' - -type PurchaseRequestImportDialogProps = { - open: boolean - onDialogClose: () => void - /** Kalem alacak belge: teklif talebi ya da taslak sipariş. */ - docId: string - /** Belgenin Talep Kalemleri ekranı (App.Prc.PurchaseRfqImportItem / App.Prc.PurchaseOrderImportItem). */ - listFormCode: string -} - -/** - * Talepten Aktar: onaylı taleplerin aktarılabilir kalemleri belgenin Talep Kalemleri ekranıyla listelenir; - * Aktar işaretlenen satırlar Kaydet ile kopyalanır (ekranın UpdateCommand'ı Prc_P_PurchaseImportItem'dır). - */ -const PurchaseRequestImportDialog = ({ open, onDialogClose, docId, listFormCode }: PurchaseRequestImportDialogProps) => { - const { translate } = useLocalization() - const searchParams = useMemo( - () => new URLSearchParams({ filter: JSON.stringify(['BaseId', '=', docId]) }), - [docId], - ) - - return ( - - {translate('::App.Prc.PurchaseRfq.ImportRequests')} - -

{translate('::App.Prc.PurchaseRfq.ImportRequestsInfo')}

- -
- - - -
- ) -} - -export default PurchaseRequestImportDialog diff --git a/ui/src/views/purchasing/PurchaseRfqAlternativeDialog.tsx b/ui/src/views/purchasing/PurchaseRfqAlternativeDialog.tsx deleted file mode 100644 index d01b231e..00000000 --- a/ui/src/views/purchasing/PurchaseRfqAlternativeDialog.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { useMemo } from 'react' -import { Button, Dialog, Tabs } from '@/components/ui' -import TabContent from '@/components/ui/Tabs/TabContent' -import TabList from '@/components/ui/Tabs/TabList' -import TabNav from '@/components/ui/Tabs/TabNav' -import { useLocalization } from '@/utils/hooks/useLocalization' -import Grid from '../list/Grid' - -type PurchaseRfqAlternativeDialogProps = { - open: boolean - onDialogClose: () => void - rfqId: string -} - -/** - * Alternatif Oluştur: Tedarikçiler sekmesinde Ekle ile ihaleye tedarikçi eklenir (ekranın InsertCommand'ı - * belgeyi kalemleriyle kopyalar); Fiyat Girişi sekmesinde ihalenin bütün tedarikçi fiyatları tek tabloda girilir. - */ -const PurchaseRfqAlternativeDialog = ({ open, onDialogClose, rfqId }: PurchaseRfqAlternativeDialogProps) => { - const { translate } = useLocalization() - const searchParams = useMemo( - () => new URLSearchParams({ filter: JSON.stringify(['BaseId', '=', rfqId]) }), - [rfqId], - ) - - return ( - - {translate('::App.Prc.PurchaseRfq.CreateAlternative')} - - - - {translate('::App.Prc.PurchaseRfq.AlternativeSuppliers')} - {translate('::App.Prc.PurchaseRfq.PriceEntry')} - - -
- -
-
- -
- -
-
-
-
- - - -
- ) -} - -export default PurchaseRfqAlternativeDialog diff --git a/ui/src/views/shared/DialogContext/DialogShowComponent.tsx b/ui/src/views/shared/DialogContext/DialogShowComponent.tsx index 0edf3847..84793b6d 100644 --- a/ui/src/views/shared/DialogContext/DialogShowComponent.tsx +++ b/ui/src/views/shared/DialogContext/DialogShowComponent.tsx @@ -18,8 +18,7 @@ const dialogs: Record> = { DynamicServiceEditor: lazy(() => import('@/views/developerKit/DynamicServiceEditor')), BranchSeed: lazy(() => import('@/views/branch/BranchSeed')), DiaryEntry: lazy(() => import('@/views/intranet/DiaryModal')), - PurchaseRequestImport: lazy(() => import('@/views/purchasing/PurchaseRequestImportDialog')), - PurchaseRfqAlternative: lazy(() => import('@/views/purchasing/PurchaseRfqAlternativeDialog')), + PurchaseDocGrid: lazy(() => import('@/views/purchasing/PurchaseDocGridDialog')), } const DialogShowComponent = (): ReactElement => {