Satınalma Siparişleri düzenlemeleri

This commit is contained in:
Sedat ÖZTÜRK 2026-10-12 13:27:54 +03:00
parent 6db67e121d
commit 55bd2626b4
77 changed files with 5701 additions and 2581 deletions

View file

@ -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.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.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.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) | | [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 (`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. 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ı `<br>` yapılarak gider.
### 13.6. Göndericiler (`Sozsoft.Sender`) ### 13.6. Göndericiler (`Sozsoft.Sender`)
| Kanal | Sağlayıcı | | Kanal | Sağlayıcı |

View file

@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -23,7 +25,7 @@ namespace Sozsoft.Platform.BackgroundWorkers;
/// yalnizca basarili gonderimde <c>IsSent</c> isaretler. Okundu bilgisi kullanicinin aksiyonudur, /// yalnizca basarili gonderimde <c>IsSent</c> isaretler. Okundu bilgisi kullanicinin aksiyonudur,
/// gonderim onu belirlemez. Tetikleme zamanlanmis istir (Recurring Jobs, <c>WorkerType = NotificationWorker</c>). /// gonderim onu belirlemez. Tetikleme zamanlanmis istir (Recurring Jobs, <c>WorkerType = NotificationWorker</c>).
/// </summary> /// </summary>
public class NotificationWorker : BackgroundWorkerBase public partial class NotificationWorker : BackgroundWorkerBase
{ {
protected IRepository<Notification> Repository { get; } protected IRepository<Notification> Repository { get; }
protected ISozsoftRocketSender ErpRocketSender { get; } protected ISozsoftRocketSender ErpRocketSender { get; }
@ -124,11 +126,22 @@ public class NotificationWorker : BackgroundWorkerBase
notification.Identifier, notification.Identifier,
new KeyValuePair<string, string>(senderName ?? senderEmail!, senderEmail!), new KeyValuePair<string, string>(senderName ?? senderEmail!, senderEmail!),
new { }, new { },
notification.Message, ToMailHtml(notification.Message),
notification.Subject.IsNullOrWhiteSpace() notification.Subject.IsNullOrWhiteSpace()
? $"Platform Bildirim: {notification.NotificationType?.Name}" ? $"Platform Bildirim: {notification.NotificationType?.Name}"
: notification.Subject)).Success, : notification.Subject,
IsBodyHtml: true)).Success,
cancellationToken, cancellationToken,
includeDetails: true); includeDetails: true);
} }
/// <summary>
/// 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.
/// </summary>
private static string ToMailHtml(string message) =>
HtmlTagPattern().IsMatch(message) ? message : WebUtility.HtmlEncode(message).ReplaceLineEndings("<br>");
[GeneratedRegex(@"</?[a-z][a-z0-9]*(\s[^<>]*)?/?>", RegexOptions.IgnoreCase)]
private static partial Regex HtmlTagPattern();
} }

View file

@ -16977,9 +16977,9 @@
{ {
"GroupName": "App.Prc", "GroupName": "App.Prc",
"Name": "App.Prc.PurchaseAgreement", "Name": "App.Prc.PurchaseAgreement",
"ParentName": "App.Prc.Orders", "ParentName": null,
"DisplayName": "App.Prc.PurchaseAgreement", "DisplayName": "App.Prc.PurchaseAgreement",
"Order": 1, "Order": 4,
"IsEnabled": true, "IsEnabled": true,
"MultiTenancySide": 3, "MultiTenancySide": 3,
"Modules": "Prc" "Modules": "Prc"
@ -17049,7 +17049,7 @@
"Name": "App.Prc.PurchaseRfq", "Name": "App.Prc.PurchaseRfq",
"ParentName": "App.Prc.Orders", "ParentName": "App.Prc.Orders",
"DisplayName": "App.Prc.PurchaseRfq", "DisplayName": "App.Prc.PurchaseRfq",
"Order": 2, "Order": 1,
"IsEnabled": true, "IsEnabled": true,
"MultiTenancySide": 3, "MultiTenancySide": 3,
"Modules": "Prc" "Modules": "Prc"
@ -17534,12 +17534,82 @@
"MultiTenancySide": 3, "MultiTenancySide": 3,
"Modules": "Prc" "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", "GroupName": "App.Prc",
"Name": "App.Prc.PurchaseOrder", "Name": "App.Prc.PurchaseOrder",
"ParentName": "App.Prc.Orders", "ParentName": "App.Prc.Orders",
"DisplayName": "App.Prc.PurchaseOrder", "DisplayName": "App.Prc.PurchaseOrder",
"Order": 3, "Order": 2,
"IsEnabled": true, "IsEnabled": true,
"MultiTenancySide": 3, "MultiTenancySide": 3,
"Modules": "Prc" "Modules": "Prc"

View file

@ -8,7 +8,7 @@
"Id": "db014b58-ec8b-4a65-b406-078f66323b7c", "Id": "db014b58-ec8b-4a65-b406-078f66323b7c",
"DepartmentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f", "DepartmentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f",
"ApprovalArea": "Purchase", "ApprovalArea": "Purchase",
"ApproverUserId": "9e2ef88f-7f14-8397-7963-3a243e534333", "ApprovalUserName": "system@sozsoft.com",
"IsActive": true "IsActive": true
} }
] ]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -93004,7 +93004,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Definitions.Approver.Desc", "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", "Id": "cd7ff644-eefa-516e-8c8c-8b4fa0ec76f8",
@ -93130,7 +93130,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.RejectReason.Desc", "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", "Id": "31115331-7e79-54e9-ae55-a2e682571c43",
@ -93186,7 +93186,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestLine.Desc", "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", "Id": "d6911bd6-3f4a-582d-8328-e01403808802",
@ -93368,7 +93368,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.MyMaterialRequest.Desc", "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", "Id": "ce3d734c-f508-5647-8f8d-2bf6b056c79a",
@ -93522,7 +93522,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.MaterialRequests", "Key": "App.Prc.MaterialRequests",
"Value": "Malzeme Talepleri" "Value": "Talepler"
}, },
{ {
"Id": "cf76b42b-82ed-5838-9fb2-30b0c8caf3e5", "Id": "cf76b42b-82ed-5838-9fb2-30b0c8caf3e5",
@ -93634,7 +93634,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestDeptApproval.Desc", "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", "Id": "1c9a636f-fdfa-50bf-b3a4-874deed5dad1",
@ -93676,7 +93676,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPurchaseApproval.Desc", "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", "Id": "04e8c193-a841-520d-b338-0d4a73ca066b",
@ -93718,7 +93718,7 @@
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.MaterialRequest.Desc", "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", "Id": "3d2aa673-6148-5445-9fb8-c260913a910f",
@ -93991,14 +93991,14 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseAgreementLine.Desc", "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", "Id": "811582a9-71a3-50a8-8d81-c5d3da9bc2ad",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseAgreementLine.Desc", "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", "Id": "6dd9b354-4ad2-5ca9-9dea-e90c6bf59a7e",
@ -94047,14 +94047,14 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseAgreement.Desc", "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", "Id": "5a050995-ce09-5ff3-9ff3-b1171bf9ceee",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseAgreement.Desc", "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", "Id": "868827b4-e369-5dde-af21-c886d0dfed9a",
@ -94770,20 +94770,6 @@
"Key": "App.Listform.ListformField.SupplierReference", "Key": "App.Listform.ListformField.SupplierReference",
"Value": "Tedarikçi Referansı" "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", "Id": "30212a0e-adb0-5c34-8dbd-9b2bd8925923",
"CultureName": "en", "CultureName": "en",
@ -94999,14 +94985,70 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfqImportItem.Desc", "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", "Id": "377297ab-417d-5583-89eb-f6c7ee0a0f66",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfqImportItem.Desc", "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", "Id": "d9cc2ab9-013b-570a-8d78-7af6e62ec4c3",
@ -95022,20 +95064,6 @@
"Key": "App.Listform.ListformField.BaseId", "Key": "App.Listform.ListformField.BaseId",
"Value": "Ana Belge" "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", "Id": "e55b855c-35b4-5a79-be40-684965c8c3ca",
"CultureName": "en", "CultureName": "en",
@ -95181,14 +95209,14 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfqAlternative.Desc", "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", "Id": "18b7fd92-8a1b-56bb-9b1f-587605c955cd",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfqAlternative.Desc", "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", "Id": "21d2f612-dde9-517c-8441-f554f131689a",
@ -95335,14 +95363,14 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseOrderImportItem.Desc", "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", "Id": "a6c01942-c13c-5ff4-9367-ac1ab75975f5",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseOrderImportItem.Desc", "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", "Id": "c5599c91-6f69-5811-bf9e-659fd95ce8a9",
@ -95391,14 +95419,28 @@
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfq.ImportRequestsInfo", "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", "Id": "2bf8cbca-a022-53fa-9c86-61d478c6cba0",
"CultureName": "tr", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfq.ImportRequestsInfo", "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", "Id": "e6f0c745-a48c-520e-b3cd-d1bce35ba78d",
@ -95415,18 +95457,32 @@
"Value": "Alternatif Oluştur" "Value": "Alternatif Oluştur"
}, },
{ {
"Id": "461bfd03-19c2-510a-a228-c8c277004e39", "Id": "e1611382-be41-5a60-b2e5-210433eb2e04",
"CultureName": "en", "CultureName": "en",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfq.AlternativeSuppliers", "Key": "App.Prc.PurchaseRfq.CreateAlternativeInfo",
"Value": "Suppliers" "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", "CultureName": "tr",
"ResourceName": "Platform", "ResourceName": "Platform",
"Key": "App.Prc.PurchaseRfq.AlternativeSuppliers", "Key": "App.Prc.PurchaseRfq.CreateAlternativeInfo",
"Value": "Tedarikçiler" "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", "Id": "a367fc99-7842-5092-ae10-5e8130c67c4e",

View file

@ -2858,7 +2858,7 @@
"Id": "b9c609a2-b30d-4b63-835c-58e9d4cdda5f", "Id": "b9c609a2-b30d-4b63-835c-58e9d4cdda5f",
"Code": "App.Prc.MaterialRequests", "Code": "App.Prc.MaterialRequests",
"DisplayName": "App.Prc.MaterialRequests", "DisplayName": "App.Prc.MaterialRequests",
"Order": 2, "Order": 3,
"Url": null, "Url": null,
"Icon": "FcList", "Icon": "FcList",
"ParentCode": "App.Prc", "ParentCode": "App.Prc",
@ -2918,7 +2918,7 @@
"Id": "99ab4ed0-b594-4492-817e-a091fb7c3080", "Id": "99ab4ed0-b594-4492-817e-a091fb7c3080",
"Code": "App.Prc.MaterialRequest", "Code": "App.Prc.MaterialRequest",
"DisplayName": "App.Prc.MaterialRequest", "DisplayName": "App.Prc.MaterialRequest",
"Order": 5, "Order": 4,
"Url": "/admin/list/App.Prc.MaterialRequest", "Url": "/admin/list/App.Prc.MaterialRequest",
"Icon": "FcDocument", "Icon": "FcDocument",
"ParentCode": "App.Prc.MaterialRequests", "ParentCode": "App.Prc.MaterialRequests",
@ -2930,47 +2930,63 @@
"ModuleId": "Prc" "ModuleId": "Prc"
}, },
{ {
"ParentCode": "App.Prc", "Id": "5d54d835-263f-4ae6-ac7a-3b79577f5706",
"Code": "App.Prc.Orders", "Code": "App.Prc.Orders",
"DisplayName": "App.Prc.Orders", "DisplayName": "App.Prc.Orders",
"Order": 3, "Order": 4,
"Url": null, "Url": null,
"Icon": "FcShop", "Icon": "FcShop",
"ParentCode": "App.Prc",
"RequiredPermissionName": null, "RequiredPermissionName": null,
"CssClass": null,
"Target": null,
"IsDisabled": false, "IsDisabled": false,
"ElementId": null,
"ModuleId": "Prc" "ModuleId": "Prc"
}, },
{ {
"ParentCode": "App.Prc.Orders", "Id": "0a2f1086-2530-4e88-a8c0-f39c3106796e",
"Code": "App.Prc.PurchaseAgreement", "Code": "App.Prc.PurchaseAgreement",
"DisplayName": "App.Prc.PurchaseAgreement", "DisplayName": "App.Prc.PurchaseAgreement",
"Order": 1, "Order": 2,
"Url": "/admin/list/App.Prc.PurchaseAgreement", "Url": "/admin/list/App.Prc.PurchaseAgreement",
"Icon": "FcRules", "Icon": "FcRules",
"ParentCode": "App.Prc",
"RequiredPermissionName": "App.Prc.PurchaseAgreement", "RequiredPermissionName": "App.Prc.PurchaseAgreement",
"CssClass": null,
"Target": null,
"IsDisabled": false, "IsDisabled": false,
"ElementId": null,
"ModuleId": "Prc" "ModuleId": "Prc"
}, },
{ {
"ParentCode": "App.Prc.Orders", "Id": "ce4a1289-75c5-4b6e-8782-ca3ce2e5995f",
"Code": "App.Prc.PurchaseRfq", "Code": "App.Prc.PurchaseRfq",
"DisplayName": "App.Prc.PurchaseRfq", "DisplayName": "App.Prc.PurchaseRfq",
"Order": 2, "Order": 1,
"Url": "/admin/list/App.Prc.PurchaseRfq", "Url": "/admin/list/App.Prc.PurchaseRfq",
"Icon": "FcDocument", "Icon": "FcDocument",
"ParentCode": "App.Prc.Orders",
"RequiredPermissionName": "App.Prc.PurchaseRfq", "RequiredPermissionName": "App.Prc.PurchaseRfq",
"CssClass": null,
"Target": null,
"IsDisabled": false, "IsDisabled": false,
"ElementId": null,
"ModuleId": "Prc" "ModuleId": "Prc"
}, },
{ {
"ParentCode": "App.Prc.Orders", "Id": "199bdd52-0d5c-40a5-8ae8-2d9c6aeaab17",
"Code": "App.Prc.PurchaseOrder", "Code": "App.Prc.PurchaseOrder",
"DisplayName": "App.Prc.PurchaseOrder", "DisplayName": "App.Prc.PurchaseOrder",
"Order": 3, "Order": 2,
"Url": "/admin/list/App.Prc.PurchaseOrder", "Url": "/admin/list/App.Prc.PurchaseOrder",
"Icon": "FcPaid", "Icon": "FcPaid",
"ParentCode": "App.Prc.Orders",
"RequiredPermissionName": "App.Prc.PurchaseOrder", "RequiredPermissionName": "App.Prc.PurchaseOrder",
"CssClass": null,
"Target": null,
"IsDisabled": false, "IsDisabled": false,
"ElementId": null,
"ModuleId": "Prc" "ModuleId": "Prc"
} }
] ]

View file

@ -4,36 +4,6 @@
"GeneratedAt": "2026-09-18T06:12:57.546144Z", "GeneratedAt": "2026-09-18T06:12:57.546144Z",
"Order": 2, "Order": 2,
"Rows": [ "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", "Id": "940fb243-3d79-59cd-8cda-26c59a143306",
"NotificationTypeId": "8eaa322e-76bb-592a-8200-666442c03e23", "NotificationTypeId": "8eaa322e-76bb-592a-8200-666442c03e23",

View file

@ -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_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_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_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 ### 5. İş kuralları ve hesaplar
@ -72,7 +72,7 @@ Yetki ağacı: `App.Administration` grubu › `App.Administration.Definitions`
### 7. Entegrasyonlar ### 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 ### 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) | | Menü | `App.Administration.Definitions` › `App.Definitions.Approver` (sıra 6) |
| Yetki | `App.Definitions.Approver` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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. | | 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'` | | Kaynak | `Adm_T_Approver` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -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 | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department |
| `ApprovalArea` | Onay Yeri | dxSelectBox | ✓ | ✓ | liste: Purchase, Warehouse, HumanResources, Finance | | `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 | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
#### İlgili Kişiler — `App.Definitions.ContactPerson` #### İlgili Kişiler — `App.Definitions.ContactPerson`

View file

@ -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. - 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.
<!-- module-doc:section App.Prc.MaterialRequests --> <!-- module-doc:section App.Prc.MaterialRequests -->
## Malzeme Talepleri (`App.Prc.MaterialRequests`) ## Talepler (`App.Prc.MaterialRequests`)
### 1. Amaç ve kapsam ### 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. - 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. - 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. - 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). - Planlama aşaması kaldırıldı (Planlama Bekleyenler listesi, satırdaki Planlandı durumu ve Planlanacak Miktar).
### 3. Menü ve ekranlar ### 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 | | 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. 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_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. - `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. - 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 ### 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`). - `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. - 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. - Ü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). - 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. - 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`. - 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. - 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.
<!-- module-doc:section App.Prc.PurchaseAgreement -->
## Sözleşmeler (`App.Prc.PurchaseAgreement`)
### 1. Amaç ve kapsam
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 2. Analiz ve kararlar
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 3. Menü ve ekranlar
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 4. Veri modeli
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 5. İş kuralları ve hesaplar
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 6. Yetki ve görünürlük
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 7. Entegrasyonlar
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 8. Akış örneği
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 9. Sık sorulanlar
_Henüz yazılmadı._ <!-- module-doc:todo -->
### 10. Dosyalar ve geri alma
_Henüz yazılmadı._ <!-- module-doc:todo -->
<!-- module-doc:section App.Prc.Orders --> <!-- module-doc:section App.Prc.Orders -->
## Siparişler (`App.Prc.Orders`) ## Siparişler (`App.Prc.Orders`)
@ -162,14 +205,15 @@ Satınalma ekibinin onaylanmış malzeme taleplerinden tedarikçilere teklif tal
### 2. Analiz ve kararlar ### 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). - 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. - **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; 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`). - 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. - 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. - 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.
- 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. - 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. - 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. - **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ı. - **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. - 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. - 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 ### 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`): Satınalma (`App.Prc`) › Siparişler (`App.Prc.Orders`):
| Ekran | Kod | Not | | 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) | | 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 | | 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 ### 4. Veri modeli
Tüm tablolar kiracı + tam audit + soft delete. 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_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. - `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ı). - 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,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`. - 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 ### 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`). - 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. - 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`): belge teklif aşamasında olmalı; tedarikçinin ihalede iptal olmayan belgesi varsa 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.
- Tutar = Miktar × Birim Fiyat; KDV = Σ(Tutar × Oran/100); Toplam = Vergi Hariç + KDV. Kalem her eklenip/değişip/silindiğinde yeniden hesaplanır. - 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). - 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ş 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. - 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 ### 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 ### 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 ### 8. Akış örneği
@ -231,8 +276,8 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
### 9. Sık sorulanlar ### 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. - **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ı. - **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 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. - **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. - **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. - **Ö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ı. - **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 ### 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). - 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`. - 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`. - 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. - 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) | | Menü | `App.Prc.Definitions` › `App.Prc.RejectReason` (sıra 5) |
| Yetki | `App.Prc.RejectReason` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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). | | 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'` | | Kaynak | `Prc_T_RejectReason` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -370,7 +415,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
### Malzeme Talepleri (`App.Prc.MaterialRequests`) ### Talepler (`App.Prc.MaterialRequests`)
#### Taleplerim — `App.Prc.MyMaterialRequest` #### 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) | | Menü | `App.Prc.MaterialRequests` › `App.Prc.MyMaterialRequest` (sıra 1) |
| Yetki | `App.Prc.MyMaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Yetki | `App.Prc.MyMaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla. | | 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'` | | Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "RequesterUserId" = '@USERID'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -389,7 +434,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| Alt formlar | `App.Prc.MaterialRequestLine` (Id → MaterialRequestId) | | 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` | | 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 | | 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' | | 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 | | 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 | | ✓ | | | `RequestNo` | Talep No | dxTextBox | | ✓ | |
| `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | |
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | | `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse · script | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department (← BranchId) |
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) |
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location (← WarehouseId) | | `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location (← WarehouseId) |
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
| `Description` | Genel Açıklama | dxTextBox | | ✓ | | | `Description` | Genel Açıklama | dxHtmlEditor | | ✓ | |
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | | | `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | | | `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) | | Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestDeptApproval` (sıra 2) |
| Yetki | `App.Prc.MaterialRequestDeptApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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. | | 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ı'` | | Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Departman Onayı'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -434,11 +480,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `RequestNo` | Talep No | dxTextBox | | ✓ | | | `RequestNo` | Talep No | dxTextBox | | ✓ | |
| `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | |
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department |
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse | | `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse |
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location | | `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location |
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
| `Description` | Genel Açıklama | dxTextArea | | ✓ | | | `Description` | Genel Açıklama | dxHtmlEditor | | ✓ | |
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
| `PurchaseApproverUserNames` | Satınalma 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) | | Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestPurchaseApproval` (sıra 3) |
| Yetki | `App.Prc.MaterialRequestPurchaseApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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. | | 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ı'` | | Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Satınalma Onayı'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -471,11 +518,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `RequestNo` | Talep No | dxTextBox | | ✓ | | | `RequestNo` | Talep No | dxTextBox | | ✓ | |
| `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | |
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department | | `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department |
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse | | `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse |
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location | | `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location |
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
| `Description` | Genel Açıklama | dxTextArea | | ✓ | | | `Description` | Genel Açıklama | dxHtmlEditor | | ✓ | |
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
| `PurchaseApproverUserNames` | Satınalma 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) | | Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequest` (sıra 5) |
| Yetki | `App.Prc.MaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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. | | 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'` | | Kaynak | `Prc_V_MaterialRequestLine` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -504,11 +552,12 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `RequestNo` | Talep No | dxTextBox | | | | | `RequestNo` | Talep No | dxTextBox | | | |
| `Priority` | Öncelik (0-3) | dxRating | ✓ | | | | `Priority` | Öncelik (0-3) | dxRating | ✓ | | |
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | | sorgu: AbpUsers | | `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | | sorgu: AbpUsers |
| `BranchId` | Şube Adı | dxSelectBox | ✓ | | sorgu: Sas_T_Branch |
| `DepartmentId` | Departman | dxSelectBox | ✓ | | sorgu: Hr_T_Department | | `DepartmentId` | Departman | dxSelectBox | ✓ | | sorgu: Hr_T_Department |
| `WarehouseId` | Depo | dxSelectBox | ✓ | | sorgu: Inv_T_Warehouse | | `WarehouseId` | Depo | dxSelectBox | ✓ | | sorgu: Inv_T_Warehouse |
| `LocationId` | Konum | dxSelectBox | ✓ | | sorgu: Inv_T_Location (← WarehouseId) | | `LocationId` | Konum | dxSelectBox | ✓ | | sorgu: Inv_T_Location (← WarehouseId) |
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | | | | `RequestDate` | Talep Tarihi | dxDateBox | ✓ | | |
| `Description` | Genel Açıklama | dxTextBox | | | | | `Description` | Genel Açıklama | dxHtmlEditor | | | |
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | | | `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | | | `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) | | Menü | Menüsüz (alt form) |
| Yetki | `App.Prc.MaterialRequestLine` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Yetki | `App.Prc.MaterialRequestLine` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Talep Satırları — malzeme talebinde istenen ürünler. | | 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'` | | Kaynak | `Prc_T_MaterialRequestItem` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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 |
@ -554,7 +603,7 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `PurchaseResponsibleUserId` | Satınalma Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers | | `PurchaseResponsibleUserId` | Satınalma Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `LineStatus` | Satır Durumu | dxSelectBox | ✓ | ✓ | liste: Waiting, Done, Cancelled | | `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` #### 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` | | Wizard | `wizard/Prc_PurchaseAgreement.json` |
| Yol | Liste (Wizard) | | 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` | | 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. | | 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 | | 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) | | 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` | | Widget'lar | `App.Prc.AgreementStatus.Draft`, `App.Prc.AgreementStatus.Confirmed`, `App.Prc.AgreementStatus.Closed`, `App.Prc.AgreementStatus.Cancelled` |
| Komutlar | UpdateBefore: SQL | | 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 | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- |
| `AgreementNo` | Sözleşme | dxTextBox | ✓ | ✓ | |
| `SupplierId` | Tedarikçi | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Contact | | `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 | | `BuyerUserId` | Alıcı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
| `AgreementType` | Sözleşme Türü | dxSelectBox | ✓ | ✓ | liste: Blanket, Tender | | `AgreementType` | Sözleşme Türü | dxSelectBox | ✓ | ✓ | liste: Blanket, Tender |
| `CurrencyId` | Kur | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency | | `CurrencyId` | Kur | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency |
| `StartDate` | Başlama Tarihi | dxDateBox | | ✓ | | | `StartDate` | Başlama Tarihi | dxDateBox | | ✓ | |
| `EndDate` | Bitiş Tarihi | dxDateBox | | ✓ | | | `EndDate` | Bitiş Tarihi | dxDateBox | | ✓ | |
| `Reference` | Referans | dxTextBox | | ✓ | | | `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse (← BranchId) |
| `OperationTypeId` | Operasyon Türü | dxSelectBox | | ✓ | sorgu: Inv_T_OperationType | | `OperationTypeId` | Operasyon Türü | dxSelectBox | | ✓ | sorgu: Inv_T_OperationType (← WarehouseId) |
| `Status` | Durumu | dxSelectBox | ✓ | ✓ | liste: Draft, Confirmed, Closed, Cancelled | | `Status` | Durumu | dxSelectBox | ✓ | ✓ | liste: Draft, Confirmed, Closed, Cancelled |
| `Terms` | Şartlar ve Koşullar | dxHtmlEditor | | ✓ | | | `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` #### Sözleşme Kalemleri — `App.Prc.PurchaseAgreementLine`
| Özellik | Değer | | Özellik | Değer |
@ -698,6 +664,95 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | | | `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | |
| `Description` | Açıklama | dxTextArea | | ✓ | | | `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` #### Teklif Kalemleri — `App.Prc.PurchaseRfqLine`
| Özellik | Değer | | Özellik | Değer |
@ -720,10 +775,10 @@ Yönetim › Tanımlamalar › Kontaklar (tedarikçi, e-posta, Satınalma sekmes
| `PurchaseRfqId` | Teklif Talebi | dxTextBox | | | | | `PurchaseRfqId` | Teklif Talebi | dxTextBox | | | |
| `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script | | `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script |
| `Description` | Açıklama | dxTextBox | | ✓ | | | `Description` | Açıklama | dxTextBox | | ✓ | |
| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | | | `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | script |
| `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom | | `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom |
| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | | | `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | script |
| `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | | | `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | script |
| `Amount` | Tutar | dxNumberBox | | ✓ | script | | `Amount` | Tutar | dxNumberBox | | ✓ | script |
| `DeliveryDate` | Teslim Tarihi | dxDateBox | | ✓ | | | `DeliveryDate` | Teslim Tarihi | dxDateBox | | ✓ | |
| `MaterialRequestItemId` | Talep | dxSelectBox | | ✓ | sorgu: Prc_T_MaterialRequestItem | | `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 | | Geliştirme talebi | Satınalma -> Siparişler |
| Kaynak | `Prc_V_PurchaseImportItem` | | Kaynak | `Prc_V_PurchaseImportItem` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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ı | | Kapsam | Kiracı |
| Butonlar | `App.Prc.PurchaseImportItem.TransferSelected` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | 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 | | `UomId` | Birim | dxSelectBox | | | sorgu: Adm_T_Uom |
| `DueDate` | Bitiş Tarihi | dxDateBox | | | | | `DueDate` | Bitiş Tarihi | dxDateBox | | | |
| `RequestReason` | Talep Nedeni | dxTextBox | | | | | `RequestReason` | Talep Nedeni | dxTextBox | | | |
| `Transfer` | Aktar | dxCheckBox | | ✓ | |
#### Tedarikçi Teklifi — `App.Prc.PurchaseRfqQuote` #### 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) | | Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) | | Menü | Menüsüz (alt form) |
| Yetki | `App.Prc.PurchaseRfqAlternative` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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 | | Geliştirme talebi | Satınalma -> Siparişler |
| Kaynak | `Prc_V_PurchaseRfqAlternative` · filtre `"IsDeleted" = 'false'` | | Kaynak | `Prc_V_PurchaseRfqAlternative` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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ı | | Kapsam | Kiracı |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | 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) | | 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ı | | Kapsam | Kiracı |
| Komutlar | UpdateBefore: SQL · UpdateAfter: `Prc_P_PurchaseRfqRecalc` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | 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 | | | | | `PurchaseOrderId` | Satınalma Siparişi | dxTextBox | | | |
| `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script | | `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script |
| `Description` | Açıklama | dxTextBox | | ✓ | | | `Description` | Açıklama | dxTextBox | | ✓ | |
| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | | | `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | script |
| `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom | | `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom |
| `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | | | `UnitPrice` | Birim Fiyat | dxNumberBox | ✓ | ✓ | script |
| `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | | | `TaxRate` | Vergi Oran | dxNumberBox | ✓ | ✓ | script |
| `Amount` | Tutar | dxNumberBox | | ✓ | script | | `Amount` | Tutar | dxNumberBox | | ✓ | script |
| `DeliveryDate` | Teslim Tarihi | dxDateBox | | ✓ | | | `DeliveryDate` | Teslim Tarihi | dxDateBox | | ✓ | |
| `MaterialRequestItemId` | Talep | dxSelectBox | | ✓ | sorgu: Prc_T_MaterialRequestItem | | `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 | | Geliştirme talebi | Satınalma -> Siparişler |
| Kaynak | `Prc_V_PurchaseImportItem` | | Kaynak | `Prc_V_PurchaseImportItem` |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | 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ı | | Kapsam | Kiracı |
| Butonlar | `App.Prc.PurchaseImportItem.TransferSelected` |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | 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 | | `UomId` | Birim | dxSelectBox | | | sorgu: Adm_T_Uom |
| `DueDate` | Bitiş Tarihi | dxDateBox | | | | | `DueDate` | Bitiş Tarihi | dxDateBox | | | |
| `RequestReason` | Talep Nedeni | dxTextBox | | | | | `RequestReason` | Talep Nedeni | dxTextBox | | | |
| `Transfer` | Aktar | dxCheckBox | | ✓ | |
#### Diğer Bilgiler — `App.Prc.PurchaseOrderOther` #### 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 | | | | | `TotalAmount` | Toplam Tutar | dxNumberBox | | | |
| `CurrencyId` | Para Birimi | dxTextBox | | | | | `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 | | | |
<!-- module-doc:auto:end --> <!-- module-doc:auto:end -->

View file

@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS public."Adm_T_Approver"
"TenantId" uuid NULL, "TenantId" uuid NULL,
"DepartmentId" uuid NOT NULL, "DepartmentId" uuid NOT NULL,
"ApprovalArea" varchar(32) NOT NULL DEFAULT 'Purchase', "ApprovalArea" varchar(32) NOT NULL DEFAULT 'Purchase',
"ApproverUserId" uuid NOT NULL, "ApprovalUserName" varchar(256) NOT NULL,
"IsActive" boolean NOT NULL DEFAULT TRUE, "IsActive" boolean NOT NULL DEFAULT TRUE,
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'), "CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),
"CreatorId" uuid NULL, "CreatorId" uuid NULL,
@ -18,8 +18,8 @@ CREATE TABLE IF NOT EXISTS public."Adm_T_Approver"
DO $$ DO $$
BEGIN BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApproverUserId') THEN 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_ApproverUserId" UNIQUE ("TenantId", "DepartmentId", "ApprovalArea", "ApproverUserId"); ALTER TABLE public."Adm_T_Approver" ADD CONSTRAINT "UQ_Adm_T_Approver_TenantId_DepartmentId_ApprovalArea_ApprovalUserName" UNIQUE ("TenantId", "DepartmentId", "ApprovalArea", "ApprovalUserName");
END IF; END IF;
END END
$$; $$;

View file

@ -10,7 +10,8 @@ BEGIN
"DeptApproverUserNames" = ( "DeptApproverUserNames" = (
SELECT string_agg(u."UserName", '|') SELECT string_agg(u."UserName", '|')
FROM "Adm_T_Approver" a 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' WHERE a."IsDeleted" = false AND a."IsActive" = true AND a."ApprovalArea" = 'Purchase'
AND a."DepartmentId" = r."DepartmentId" AND a."DepartmentId" = r."DepartmentId"
AND a."TenantId" IS NOT DISTINCT FROM r."TenantId"), AND a."TenantId" IS NOT DISTINCT FROM r."TenantId"),

View file

@ -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;
$$;

View file

@ -1,22 +1,21 @@
-- Talep Kalemleri sekmesinde işaretlenen kalemi (p_key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. -- Talep Kalemleri sekmesinde seçilen 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. -- 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, p_transfer boolean DEFAULT true) CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseImportItem"(p_key varchar)
LANGUAGE plpgsql AS $$ 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_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; v_tax numeric(18, 4); v_due timestamp;
BEGIN BEGIN
IF NOT COALESCE(p_transfer, false) THEN RETURN; END IF;
IF p_key !~* '^[0-9a-f-]{36}\|[0-9a-f-]{36}$' THEN 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'; 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; END IF;
v_doc := left(p_key, 36)::uuid; v_doc := left(p_key, 36)::uuid;
v_item := right(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'); FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" IN ('Draft', 'Sent');
IF v_status IS NULL THEN 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'; FROM "Prc_T_PurchaseOrder" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" = 'Draft';
END IF; END IF;
IF v_status IS NULL THEN 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 INTO v_product, v_description, v_quantity, v_uom, v_due, v_tax, v_price
FROM "Prc_V_MaterialRequestAvailableItem" a FROM "Prc_V_MaterialRequestAvailableItem" a
LEFT JOIN "Inv_T_Product" p ON p."Id" = a."ProductId" 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 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'; 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; END IF;

View file

@ -13,6 +13,9 @@ BEGIN
CALL public."Prc_P_PurchaseOrderRecalc"(p_id); CALL public."Prc_P_PurchaseOrderRecalc"(p_id);
-- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. -- 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; END;
$$; $$;

View file

@ -1,13 +1,13 @@
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderRecalc"(p_id uuid) CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderRecalc"(p_id uuid)
LANGUAGE plpgsql AS $$ LANGUAGE plpgsql AS $$
BEGIN 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; WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false;
-- Kaynak: teklif talebinden gelen siparişte teklif no, doğrudan yazılan siparişte talep numaraları. -- Kaynak: teklif talebinden gelen siparişte teklif no, doğrudan yazılan siparişte talep numaraları.
UPDATE "Prc_T_PurchaseOrder" o SET 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), "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(ROUND(l."Amount" * l."TaxRate" / 100, 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"), "SourceDocument" = COALESCE((SELECT q."RfqNo" FROM "Prc_T_PurchaseRfq" q WHERE q."Id" = o."PurchaseRfqId"),
(SELECT string_agg(DISTINCT m."RequestNo", ', ') (SELECT string_agg(DISTINCT m."RequestNo", ', ')
FROM "Prc_T_PurchaseOrderLine" l FROM "Prc_T_PurchaseOrderLine" l
@ -17,5 +17,6 @@ BEGIN
WHERE o."Id" = p_id; WHERE o."Id" = p_id;
UPDATE "Prc_T_PurchaseOrder" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id; UPDATE "Prc_T_PurchaseOrder" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id;
CALL public."Prc_P_MaterialRequestSyncStatus"(p_id);
END; END;
$$; $$;

View file

@ -27,6 +27,9 @@ BEGIN
CALL public."Prc_P_PurchaseRfqFromAgreement"(p_id); CALL public."Prc_P_PurchaseRfqFromAgreement"(p_id);
CALL public."Prc_P_PurchaseRfqRecalc"(p_id); CALL public."Prc_P_PurchaseRfqRecalc"(p_id);
-- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. -- 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; END;
$$; $$;

View file

@ -28,11 +28,11 @@ BEGIN
v_po := gen_random_uuid(); v_po := gen_random_uuid();
CALL public."Adm_P_SequenceNext"('PurchaseOrder1', v_tenant, v_no); CALL public."Adm_P_SequenceNext"('PurchaseOrder1', v_tenant, v_no);
INSERT INTO "Prc_T_PurchaseOrder" ("Id", "TenantId", "OrderNo", "PurchaseRfqId", "SupplierId", "SupplierReference", "AgreementId", "CurrencyId", INSERT INTO "Prc_T_PurchaseOrder" ("Id", "TenantId", "OrderNo", "PurchaseRfqId", "SupplierId", "SupplierReference", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId",
"ExpectedArrival", "OperationTypeId", "ConfirmDate", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", "ExpectedArrival", "ConfirmDate", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms",
"Status", "CreationTime", "CreatorId", "IsDeleted") "Status", "CreationTime", "CreatorId", "IsDeleted")
SELECT v_po, "TenantId", v_no, "Id", "SupplierId", "SupplierReference", "AgreementId", "CurrencyId", SELECT v_po, "TenantId", v_no, "Id", "SupplierId", "SupplierReference", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId",
"ExpectedArrival", "OperationTypeId", NOW() AT TIME ZONE 'UTC', "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms", "ExpectedArrival", NOW() AT TIME ZONE 'UTC', "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms",
'Purchase', NOW() AT TIME ZONE 'UTC', p_user_id, false 'Purchase', NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq; FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq;

View file

@ -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;
$$;

View file

@ -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. -- 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 $$ 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 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 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'; RAISE EXCEPTION 'Siparişe dönüştürülmüş ya da iptal edilmiş teklife alternatif eklenemez.' USING ERRCODE = 'P0001', DETAIL = '50164';
END IF; 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'; RAISE EXCEPTION 'Bu tedarikçinin ihalede zaten bir teklif talebi var.' USING ERRCODE = 'P0001', DETAIL = '50167';
END IF; END IF;
CALL public."Adm_P_SequenceNext"('PurchaseRfq', v_tenant, v_no); CALL public."Adm_P_SequenceNext"('PurchaseRfq', v_tenant, v_no);
INSERT INTO "Prc_T_PurchaseRfq" ("Id", "TenantId", "RfqNo", "TenderGroupId", "SupplierId", "AgreementId", "CurrencyId", "OrderDeadline", INSERT INTO "Prc_T_PurchaseRfq" ("Id", "TenantId", "RfqNo", "TenderGroupId", "SupplierId", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId", "OrderDeadline",
"ExpectedArrival", "RequireConfirmation", "OperationTypeId", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "ExpectedArrival", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId",
"Terms", "PriceWeight", "DeliveryWeight", "CreationTime", "CreatorId", "IsDeleted") "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", 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."RequireConfirmation", r."OperationTypeId", r."BuyerUserId", r."ProjectId", r."ExpectedArrival", r."BuyerUserId", r."ProjectId",
COALESCE(c."PurchaseIncotermId", r."IncotermId"), COALESCE(c."PurchaseIncotermLocation", r."IncotermLocation"), COALESCE(c."PurchaseIncotermId", r."IncotermId"), COALESCE(c."PurchaseIncotermLocation", r."IncotermLocation"),
COALESCE(c."PurchasePaymentTermId", r."PaymentTermId"), r."Terms", r."PriceWeight", r."DeliveryWeight", COALESCE(c."PurchasePaymentTermId", r."PaymentTermId"), r."Terms", r."PriceWeight", r."DeliveryWeight",
NOW() AT TIME ZONE 'UTC', p_user_id, false NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseRfq" r FROM "Prc_T_PurchaseRfq" r
INNER JOIN "Adm_T_Contact" c ON c."Id" = p_supplier_id INNER JOIN "Adm_T_Contact" c ON c."Id" = v_supplier
WHERE r."Id" = p_id; WHERE r."Id" = v_id;
INSERT INTO "Prc_T_PurchaseRfqLine" ("Id", "TenantId", "PurchaseRfqId", "TenderLineId", "ProductId", "Description", "Quantity", "UomId", INSERT INTO "Prc_T_PurchaseRfqLine" ("Id", "TenantId", "PurchaseRfqId", "TenderLineId", "ProductId", "Description", "Quantity", "UomId",
"UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "CreatorId", "IsDeleted") "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", 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 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), ORDER BY ps."MinQuantity" LIMIT 1), 0),
l."TaxRate", 0, l."DeliveryDate", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false l."TaxRate", 0, l."DeliveryDate", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseRfqLine" l 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); CALL public."Prc_P_PurchaseRfqRecalc"(v_new);
END; END;

View file

@ -2,12 +2,12 @@ CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqRecalc"(p_id uuid)
LANGUAGE plpgsql AS $$ LANGUAGE plpgsql AS $$
BEGIN BEGIN
-- TenderLineId alternatiflere kopyalanır; ihaledeki aynı kalemi kıyasta birleştiren anahtardır. -- 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; WHERE "PurchaseRfqId" = p_id AND "IsDeleted" = false;
UPDATE "Prc_T_PurchaseRfq" r SET 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), "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(ROUND(l."Amount" * l."TaxRate" / 100, 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", ', ') "SourceDocument" = (SELECT string_agg(DISTINCT m."RequestNo", ', ')
FROM "Prc_T_PurchaseRfqLine" l FROM "Prc_T_PurchaseRfqLine" l
INNER JOIN "Prc_T_MaterialRequestItem" i ON i."Id" = l."MaterialRequestItemId" INNER JOIN "Prc_T_MaterialRequestItem" i ON i."Id" = l."MaterialRequestItemId"
@ -16,5 +16,6 @@ BEGIN
WHERE r."Id" = p_id; WHERE r."Id" = p_id;
UPDATE "Prc_T_PurchaseRfq" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id; UPDATE "Prc_T_PurchaseRfq" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id;
CALL public."Prc_P_MaterialRequestSyncStatus"(p_id);
END; END;
$$; $$;

View file

@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_MaterialRequest"
"RequestNo" varchar(32) NULL, "RequestNo" varchar(32) NULL,
"Priority" integer NOT NULL DEFAULT 0, "Priority" integer NOT NULL DEFAULT 0,
"RequesterUserId" uuid NOT NULL, "RequesterUserId" uuid NOT NULL,
"BranchId" uuid NOT NULL,
"DepartmentId" uuid NOT NULL, "DepartmentId" uuid NOT NULL,
"WarehouseId" uuid NOT NULL, "WarehouseId" uuid NOT NULL,
"LocationId" uuid NOT NULL, "LocationId" uuid NOT NULL,

View file

@ -4,12 +4,13 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_PurchaseAgreement"
"TenantId" uuid NULL, "TenantId" uuid NULL,
"AgreementNo" varchar(32) NOT NULL, "AgreementNo" varchar(32) NOT NULL,
"SupplierId" uuid NOT NULL, "SupplierId" uuid NOT NULL,
"BranchId" uuid NOT NULL,
"BuyerUserId" uuid NOT NULL, "BuyerUserId" uuid NOT NULL,
"AgreementType" varchar(16) NOT NULL DEFAULT 'Blanket', "AgreementType" varchar(16) NOT NULL DEFAULT 'Blanket',
"CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY', "CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY',
"StartDate" date NULL, "StartDate" date NULL,
"EndDate" date NULL, "EndDate" date NULL,
"Reference" varchar(64) NULL, "WarehouseId" uuid NOT NULL,
"OperationTypeId" uuid NULL, "OperationTypeId" uuid NULL,
"Terms" text NULL, "Terms" text NULL,
"Status" varchar(16) NOT NULL DEFAULT 'Draft', "Status" varchar(16) NOT NULL DEFAULT 'Draft',

View file

@ -7,9 +7,11 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_PurchaseOrder"
"SupplierId" uuid NOT NULL, "SupplierId" uuid NOT NULL,
"SupplierReference" varchar(64) NULL, "SupplierReference" varchar(64) NULL,
"AgreementId" uuid NULL, "AgreementId" uuid NULL,
"BranchId" uuid NOT NULL,
"OperationTypeId" uuid NOT NULL,
"WarehouseId" uuid NOT NULL,
"CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY', "CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY',
"ExpectedArrival" timestamp NULL, "ExpectedArrival" timestamp NULL,
"OperationTypeId" uuid NULL,
"ConfirmDate" timestamp NULL, "ConfirmDate" timestamp NULL,
"ArrivalDate" timestamp NULL, "ArrivalDate" timestamp NULL,
"BuyerUserId" uuid NOT NULL, "BuyerUserId" uuid NOT NULL,

View file

@ -7,11 +7,12 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_PurchaseRfq"
"SupplierId" uuid NOT NULL, "SupplierId" uuid NOT NULL,
"SupplierReference" varchar(64) NULL, "SupplierReference" varchar(64) NULL,
"AgreementId" uuid NULL, "AgreementId" uuid NULL,
"BranchId" uuid NOT NULL,
"OperationTypeId" uuid NOT NULL,
"WarehouseId" uuid NOT NULL,
"CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY', "CurrencyId" varchar(8) NOT NULL DEFAULT 'TRY',
"OrderDeadline" timestamp NULL, "OrderDeadline" timestamp NULL,
"ExpectedArrival" timestamp NULL, "ExpectedArrival" timestamp NULL,
"RequireConfirmation" boolean NOT NULL DEFAULT FALSE,
"OperationTypeId" uuid NULL,
"SupplierResponse" varchar(16) NOT NULL DEFAULT 'Waiting', "SupplierResponse" varchar(16) NOT NULL DEFAULT 'Waiting',
"QuoteDate" timestamp NULL, "QuoteDate" timestamp NULL,
"QuoteValidUntil" date NULL, "QuoteValidUntil" date NULL,

View file

@ -31,3 +31,5 @@ BEGIN
END IF; END IF;
END END
$$; $$;
CREATE INDEX IF NOT EXISTS "IX_Prc_T_PurchaseRfqLine_PurchaseRfqId" ON public."Prc_T_PurchaseRfqLine" ("PurchaseRfqId");

View file

@ -2,11 +2,11 @@
-- bekleyen ve iptal olmayan bir teklif/siparişte yer almayan kalemi. Aktarım ve talep seçimi buradan okur. -- 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 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", 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 FROM "Prc_T_MaterialRequestItem" i
INNER JOIN "Prc_T_MaterialRequest" r ON r."Id" = i."MaterialRequestId" INNER JOIN "Prc_T_MaterialRequest" r ON r."Id" = i."MaterialRequestId"
WHERE i."IsDeleted" = false AND r."IsDeleted" = false 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 i."FulfillmentMethod" = 'Purchase' AND i."LineStatus" = 'Waiting'
AND NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfqLine" rl AND NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfqLine" rl
INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId"

View file

@ -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."RequestNo", r."Priority", r."RequesterUserId", r."DepartmentId", r."WarehouseId", r."LocationId", r."RequestDate",
r."Description", r."ApprovalStatus", r."ApprovalUserName", r."ApprovalDate", r."ApprovalDescription", 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."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 FROM "Prc_T_MaterialRequest" r
LEFT JOIN "Prc_T_MaterialRequestItem" i ON i."MaterialRequestId" = r."Id" AND i."IsDeleted" = FALSE; LEFT JOIN "Prc_T_MaterialRequestItem" i ON i."MaterialRequestId" = r."Id" AND i."IsDeleted" = FALSE;

View file

@ -1,9 +1,9 @@
-- Talep Kalemleri sekmesi: aktarılabilir her talep kalemi, kalem alabilecek açık belgeyle (teklif aşamasındaki -- 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 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", 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" a."RequestNo", a."RequesterUserId", a."ProductId", a."Quantity", a."UomId", a."RequestReason", a."DueDate"
FROM (SELECT "Id", "TenantId" FROM "Prc_T_PurchaseRfq" WHERE "IsDeleted" = false AND "Status" IN ('Draft', 'Sent') FROM (SELECT "Id", "TenantId", "BranchId" FROM "Prc_T_PurchaseRfq" WHERE "IsDeleted" = false AND "Status" IN ('Draft', 'Sent')
UNION ALL UNION ALL
SELECT "Id", "TenantId" FROM "Prc_T_PurchaseOrder" WHERE "IsDeleted" = false AND "Status" = 'Draft') d SELECT "Id", "TenantId", "BranchId" 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"; INNER JOIN "Prc_V_MaterialRequestAvailableItem" a ON a."BranchId" = d."BranchId" AND a."TenantId" IS NOT DISTINCT FROM d."TenantId";

View file

@ -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');

View file

@ -6,7 +6,7 @@ BEGIN
[TenantId] uniqueidentifier NULL, [TenantId] uniqueidentifier NULL,
[DepartmentId] uniqueidentifier NOT NULL, [DepartmentId] uniqueidentifier NOT NULL,
[ApprovalArea] nvarchar(32) NOT NULL DEFAULT 'Purchase', [ApprovalArea] nvarchar(32) NOT NULL DEFAULT 'Purchase',
[ApproverUserId] uniqueidentifier NOT NULL, [ApprovalUserName] nvarchar(256) NOT NULL,
[IsActive] bit NOT NULL DEFAULT 1, [IsActive] bit NOT NULL DEFAULT 1,
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(), [CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),
[CreatorId] uniqueidentifier NULL, [CreatorId] uniqueidentifier NULL,
@ -23,9 +23,9 @@ BEGIN
END END
GO 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 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 END
GO GO

View file

@ -12,7 +12,8 @@ BEGIN
DeptApproverUserNames = ( DeptApproverUserNames = (
SELECT STRING_AGG(u.UserName, '|') SELECT STRING_AGG(u.UserName, '|')
FROM Adm_T_Approver a 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' WHERE a.IsDeleted = 0 AND a.IsActive = 1 AND a.ApprovalArea = 'Purchase'
AND a.DepartmentId = r.DepartmentId AND a.DepartmentId = r.DepartmentId
AND ((a.TenantId IS NULL AND r.TenantId IS NULL) OR a.TenantId = r.TenantId)), AND ((a.TenantId IS NULL AND r.TenantId IS NULL) OR a.TenantId = r.TenantId)),

View file

@ -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

View file

@ -1,23 +1,21 @@
-- Talep Kalemleri sekmesinde işaretlenen kalemi (@Key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. -- Talep Kalemleri sekmesinde seçilen 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. -- 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] CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseImportItem]
@Key nvarchar(80), @Key nvarchar(80)
@Transfer bit = 1
AS AS
BEGIN BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
IF ISNULL(@Transfer, 0) = 0 RETURN;
DECLARE @DocId uniqueidentifier = TRY_CAST(LEFT(@Key, 36) AS uniqueidentifier), DECLARE @DocId uniqueidentifier = TRY_CAST(LEFT(@Key, 36) AS uniqueidentifier),
@ItemId uniqueidentifier = TRY_CAST(RIGHT(@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), @ProductId uniqueidentifier, @Description nvarchar(512), @Quantity decimal(18, 4), @UomId nvarchar(50),
@UnitPrice decimal(18, 4), @TaxRate decimal(18, 4), @DueDate datetime; @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'); FROM Prc_T_PurchaseRfq WHERE Id = @DocId AND IsDeleted = 0 AND Status IN ('Draft', 'Sent');
IF @Status IS NULL 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'; FROM Prc_T_PurchaseOrder WHERE Id = @DocId AND IsDeleted = 0 AND Status = 'Draft';
IF @Status IS NULL 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; 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) ORDER BY ps.MinQuantity), 0)
FROM Prc_V_MaterialRequestAvailableItem a FROM Prc_V_MaterialRequestAvailableItem a
LEFT JOIN Inv_T_Product p ON p.Id = a.ProductId 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 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; 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;

View file

@ -16,5 +16,9 @@ BEGIN
EXEC Prc_P_PurchaseOrderRecalc @Id; EXEC Prc_P_PurchaseOrderRecalc @Id;
-- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. -- 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 END

View file

@ -4,13 +4,13 @@ AS
BEGIN BEGIN
SET NOCOUNT ON; 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; WHERE PurchaseOrderId = @Id AND IsDeleted = 0;
-- Kaynak: teklif talebinden gelen siparişte teklif no, doğrudan yazılan siparişte talep numaraları. -- Kaynak: teklif talebinden gelen siparişte teklif no, doğrudan yazılan siparişte talep numaraları.
UPDATE o SET UPDATE o SET
UntaxedAmount = ISNULL((SELECT SUM(l.Amount) 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(ROUND(l.Amount * l.TaxRate / 100, 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, SourceDocument = COALESCE(q.RfqNo,
STUFF((SELECT DISTINCT N', ' + m.RequestNo STUFF((SELECT DISTINCT N', ' + m.RequestNo
FROM Prc_T_PurchaseOrderLine l FROM Prc_T_PurchaseOrderLine l
@ -23,4 +23,5 @@ BEGIN
WHERE o.Id = @Id; WHERE o.Id = @Id;
UPDATE Prc_T_PurchaseOrder SET TotalAmount = UntaxedAmount + TaxAmount WHERE Id = @Id; UPDATE Prc_T_PurchaseOrder SET TotalAmount = UntaxedAmount + TaxAmount WHERE Id = @Id;
EXEC Prc_P_MaterialRequestSyncStatus @Id;
END END

View file

@ -30,5 +30,9 @@ BEGIN
EXEC Prc_P_PurchaseRfqFromAgreement @Id; EXEC Prc_P_PurchaseRfqFromAgreement @Id;
EXEC Prc_P_PurchaseRfqRecalc @Id; EXEC Prc_P_PurchaseRfqRecalc @Id;
-- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder. -- 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 END

View file

@ -33,11 +33,11 @@ BEGIN
SET @Po = NEWID(); SET @Po = NEWID();
EXEC Adm_P_SequenceNext N'PurchaseOrder1', @Tenant, @No OUTPUT; EXEC Adm_P_SequenceNext N'PurchaseOrder1', @Tenant, @No OUTPUT;
INSERT INTO Prc_T_PurchaseOrder (Id, TenantId, OrderNo, PurchaseRfqId, SupplierId, SupplierReference, AgreementId, CurrencyId, INSERT INTO Prc_T_PurchaseOrder (Id, TenantId, OrderNo, PurchaseRfqId, SupplierId, SupplierReference, AgreementId, BranchId, OperationTypeId, WarehouseId, CurrencyId,
ExpectedArrival, OperationTypeId, ConfirmDate, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, ExpectedArrival, ConfirmDate, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms,
Status, CreationTime, CreatorId, IsDeleted) Status, CreationTime, CreatorId, IsDeleted)
SELECT @Po, TenantId, @No, Id, SupplierId, SupplierReference, AgreementId, CurrencyId, SELECT @Po, TenantId, @No, Id, SupplierId, SupplierReference, AgreementId, BranchId, OperationTypeId, WarehouseId, CurrencyId,
ExpectedArrival, OperationTypeId, GETUTCDATE(), BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms, ExpectedArrival, GETUTCDATE(), BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms,
'Purchase', GETUTCDATE(), @UserId, 0 'Purchase', GETUTCDATE(), @UserId, 0
FROM Prc_T_PurchaseRfq WHERE Id = @Rfq; FROM Prc_T_PurchaseRfq WHERE Id = @Rfq;

View file

@ -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

View file

@ -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. -- 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] CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseRfqCreateAlternative]
@Id uniqueidentifier, @Key nvarchar(80),
@SupplierId uniqueidentifier,
@UserId uniqueidentifier = NULL @UserId uniqueidentifier = NULL
AS AS
BEGIN BEGIN
SET NOCOUNT ON; 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; SELECT @Tenant = TenantId, @Status = Status, @Group = TenderGroupId FROM Prc_T_PurchaseRfq WHERE Id = @Id;
IF ISNULL(@Status, '') NOT IN ('Draft', 'Sent') IF ISNULL(@Status, '') NOT IN ('Draft', 'Sent')
@ -17,11 +18,11 @@ BEGIN
EXEC Adm_P_SequenceNext N'PurchaseRfq', @Tenant, @No OUTPUT; EXEC Adm_P_SequenceNext N'PurchaseRfq', @Tenant, @No OUTPUT;
INSERT INTO Prc_T_PurchaseRfq (Id, TenantId, RfqNo, TenderGroupId, SupplierId, AgreementId, CurrencyId, OrderDeadline, INSERT INTO Prc_T_PurchaseRfq (Id, TenantId, RfqNo, TenderGroupId, SupplierId, AgreementId, BranchId, OperationTypeId, WarehouseId, CurrencyId, OrderDeadline,
ExpectedArrival, RequireConfirmation, OperationTypeId, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, ExpectedArrival, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId,
Terms, PriceWeight, DeliveryWeight, CreationTime, CreatorId, IsDeleted) Terms, PriceWeight, DeliveryWeight, CreationTime, CreatorId, IsDeleted)
SELECT @New, r.TenantId, @No, r.TenderGroupId, c.Id, NULL, COALESCE(c.SupplierCurrency, r.CurrencyId), r.OrderDeadline, 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.RequireConfirmation, r.OperationTypeId, r.BuyerUserId, r.ProjectId, r.ExpectedArrival, r.BuyerUserId, r.ProjectId,
COALESCE(c.PurchaseIncotermId, r.IncotermId), COALESCE(c.PurchaseIncotermLocation, r.IncotermLocation), COALESCE(c.PurchaseIncotermId, r.IncotermId), COALESCE(c.PurchaseIncotermLocation, r.IncotermLocation),
COALESCE(c.PurchasePaymentTermId, r.PaymentTermId), r.Terms, r.PriceWeight, r.DeliveryWeight, GETUTCDATE(), @UserId, 0 COALESCE(c.PurchasePaymentTermId, r.PaymentTermId), r.Terms, r.PriceWeight, r.DeliveryWeight, GETUTCDATE(), @UserId, 0
FROM Prc_T_PurchaseRfq r FROM Prc_T_PurchaseRfq r

View file

@ -5,12 +5,12 @@ BEGIN
SET NOCOUNT ON; SET NOCOUNT ON;
-- TenderLineId alternatiflere kopyalanır; ihaledeki aynı kalemi kıyasta birleştiren anahtardır. -- 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; WHERE PurchaseRfqId = @Id AND IsDeleted = 0;
UPDATE r SET UPDATE r SET
UntaxedAmount = ISNULL((SELECT SUM(l.Amount) 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(ROUND(l.Amount * l.TaxRate / 100, 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 SourceDocument = STUFF((SELECT DISTINCT N', ' + m.RequestNo
FROM Prc_T_PurchaseRfqLine l FROM Prc_T_PurchaseRfqLine l
INNER JOIN Prc_T_MaterialRequestItem i ON i.Id = l.MaterialRequestItemId INNER JOIN Prc_T_MaterialRequestItem i ON i.Id = l.MaterialRequestItemId
@ -21,4 +21,5 @@ BEGIN
WHERE r.Id = @Id; WHERE r.Id = @Id;
UPDATE Prc_T_PurchaseRfq SET TotalAmount = UntaxedAmount + TaxAmount WHERE Id = @Id; UPDATE Prc_T_PurchaseRfq SET TotalAmount = UntaxedAmount + TaxAmount WHERE Id = @Id;
EXEC Prc_P_MaterialRequestSyncStatus @Id;
END END

View file

@ -7,6 +7,7 @@ BEGIN
[RequestNo] nvarchar(32) NULL, [RequestNo] nvarchar(32) NULL,
[Priority] int NOT NULL DEFAULT 0, [Priority] int NOT NULL DEFAULT 0,
[RequesterUserId] uniqueidentifier NOT NULL, [RequesterUserId] uniqueidentifier NOT NULL,
[BranchId] uniqueidentifier NOT NULL,
[DepartmentId] uniqueidentifier NOT NULL, [DepartmentId] uniqueidentifier NOT NULL,
[WarehouseId] uniqueidentifier NOT NULL, [WarehouseId] uniqueidentifier NOT NULL,
[LocationId] uniqueidentifier NOT NULL, [LocationId] uniqueidentifier NOT NULL,

View file

@ -6,12 +6,13 @@ BEGIN
[TenantId] uniqueidentifier NULL, [TenantId] uniqueidentifier NULL,
[AgreementNo] nvarchar(32) NOT NULL, [AgreementNo] nvarchar(32) NOT NULL,
[SupplierId] uniqueidentifier NOT NULL, [SupplierId] uniqueidentifier NOT NULL,
[BranchId] uniqueidentifier NOT NULL,
[BuyerUserId] uniqueidentifier NOT NULL, [BuyerUserId] uniqueidentifier NOT NULL,
[AgreementType] nvarchar(16) NOT NULL DEFAULT 'Blanket', [AgreementType] nvarchar(16) NOT NULL DEFAULT 'Blanket',
[CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY', [CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY',
[StartDate] date NULL, [StartDate] date NULL,
[EndDate] date NULL, [EndDate] date NULL,
[Reference] nvarchar(64) NULL, [WarehouseId] uniqueidentifier NOT NULL,
[OperationTypeId] uniqueidentifier NULL, [OperationTypeId] uniqueidentifier NULL,
[Terms] nvarchar(MAX) NULL, [Terms] nvarchar(MAX) NULL,
[Status] nvarchar(16) NOT NULL DEFAULT 'Draft', [Status] nvarchar(16) NOT NULL DEFAULT 'Draft',

View file

@ -9,9 +9,11 @@ BEGIN
[SupplierId] uniqueidentifier NOT NULL, [SupplierId] uniqueidentifier NOT NULL,
[SupplierReference] nvarchar(64) NULL, [SupplierReference] nvarchar(64) NULL,
[AgreementId] uniqueidentifier NULL, [AgreementId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[OperationTypeId] uniqueidentifier NOT NULL,
[WarehouseId] uniqueidentifier NOT NULL,
[CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY', [CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY',
[ExpectedArrival] datetime NULL, [ExpectedArrival] datetime NULL,
[OperationTypeId] uniqueidentifier NULL,
[ConfirmDate] datetime NULL, [ConfirmDate] datetime NULL,
[ArrivalDate] datetime NULL, [ArrivalDate] datetime NULL,
[BuyerUserId] uniqueidentifier NOT NULL, [BuyerUserId] uniqueidentifier NOT NULL,

View file

@ -9,11 +9,12 @@ BEGIN
[SupplierId] uniqueidentifier NOT NULL, [SupplierId] uniqueidentifier NOT NULL,
[SupplierReference] nvarchar(64) NULL, [SupplierReference] nvarchar(64) NULL,
[AgreementId] uniqueidentifier NULL, [AgreementId] uniqueidentifier NULL,
[BranchId] uniqueidentifier NOT NULL,
[OperationTypeId] uniqueidentifier NOT NULL,
[WarehouseId] uniqueidentifier NOT NULL,
[CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY', [CurrencyId] nvarchar(8) NOT NULL DEFAULT 'TRY',
[OrderDeadline] datetime NULL, [OrderDeadline] datetime NULL,
[ExpectedArrival] datetime NULL, [ExpectedArrival] datetime NULL,
[RequireConfirmation] bit NOT NULL DEFAULT 0,
[OperationTypeId] uniqueidentifier NULL,
[SupplierResponse] nvarchar(16) NOT NULL DEFAULT 'Waiting', [SupplierResponse] nvarchar(16) NOT NULL DEFAULT 'Waiting',
[QuoteDate] datetime NULL, [QuoteDate] datetime NULL,
[QuoteValidUntil] date NULL, [QuoteValidUntil] date NULL,

View file

@ -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; 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 END
GO 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

View file

@ -2,11 +2,11 @@
-- bekleyen ve iptal olmayan bir teklif/siparişte yer almayan kalemi. Aktarım ve talep seçimi buradan okur. -- 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 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, 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 FROM Prc_T_MaterialRequestItem i
INNER JOIN Prc_T_MaterialRequest r ON r.Id = i.MaterialRequestId INNER JOIN Prc_T_MaterialRequest r ON r.Id = i.MaterialRequestId
WHERE i.IsDeleted = 0 AND r.IsDeleted = 0 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 i.FulfillmentMethod = 'Purchase' AND i.LineStatus = 'Waiting'
AND NOT EXISTS (SELECT 1 FROM Prc_T_PurchaseRfqLine rl AND NOT EXISTS (SELECT 1 FROM Prc_T_PurchaseRfqLine rl
INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId

View file

@ -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.RequestNo, r.Priority, r.RequesterUserId, r.DepartmentId, r.WarehouseId, r.LocationId, r.RequestDate,
r.Description, r.ApprovalStatus, r.ApprovalUserName, r.ApprovalDate, r.ApprovalDescription, 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.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 FROM Prc_T_MaterialRequest r
LEFT JOIN Prc_T_MaterialRequestItem i ON i.MaterialRequestId = r.Id AND i.IsDeleted = 0; LEFT JOIN Prc_T_MaterialRequestItem i ON i.MaterialRequestId = r.Id AND i.IsDeleted = 0;
GO GO

View file

@ -1,9 +1,10 @@
-- Talep Kalemleri sekmesi: aktarılabilir her talep kalemi, kalem alabilecek açık belgeyle (teklif aşamasındaki -- 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 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, 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 a.RequestNo, a.RequesterUserId, a.ProductId, a.Quantity, a.UomId, a.RequestReason, a.DueDate
FROM (SELECT Id, TenantId FROM Prc_T_PurchaseRfq WHERE IsDeleted = 0 AND Status IN ('Draft', 'Sent') FROM (SELECT Id, TenantId, BranchId FROM Prc_T_PurchaseRfq WHERE IsDeleted = 0 AND Status IN ('Draft', 'Sent')
UNION ALL UNION ALL
SELECT Id, TenantId FROM Prc_T_PurchaseOrder WHERE IsDeleted = 0 AND Status = 'Draft') d SELECT Id, TenantId, BranchId 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) 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))

View file

@ -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')

View file

@ -33,7 +33,7 @@
"TitleEn": "Approvers", "TitleEn": "Approvers",
"TitleTr": "Onaycılar", "TitleTr": "Onaycılar",
"DescEn": "Approvers — the single list of who approves what for each department across the application.\nWhere: Administration › Definitions › Approvers.\nFields: department (shown as Branch - Department), approval area (Purchasing / Warehouse / Human Resources / Finance), 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.", "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": [ "Texts": [
{ {
"Key": "App.StaticLookup.Purchase", "Key": "App.StaticLookup.Purchase",
@ -79,7 +79,7 @@
"Tr": "Onay Yeri" "Tr": "Onay Yeri"
}, },
{ {
"FieldName": "ApproverUserId", "FieldName": "ApprovalUserName",
"CaptionName": "App.Listform.ListformField.ApproverUser", "CaptionName": "App.Listform.ListformField.ApproverUser",
"En": "Approver", "En": "Approver",
"Tr": "Onaylayacak Kişi" "Tr": "Onaylayacak Kişi"
@ -1129,7 +1129,7 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "ApproverUserId", "FieldName": "ApprovalUserName",
"CaptionName": "App.Listform.ListformField.ApproverUser", "CaptionName": "App.Listform.ListformField.ApproverUser",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
@ -1137,7 +1137,7 @@
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 4, "ListOrderNo": 4,
"SourceDbType": 9, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
"SortIndex": 0, "SortIndex": 0,
@ -1194,7 +1194,7 @@
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": null,
"CascadeEmptyFields": 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": [ "ValidationRuleDto": [
{ {
@ -1422,6 +1422,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -25,15 +25,15 @@
}, },
"Language": { "Language": {
"MenuParentEn": "Material Requests", "MenuParentEn": "Material Requests",
"MenuParentTr": "Malzeme Talepleri", "MenuParentTr": "Talepler",
"PermissionGroupEn": "Purchasing", "PermissionGroupEn": "Purchasing",
"PermissionGroupTr": "Satınalma", "PermissionGroupTr": "Satınalma",
"MenuEn": "All Requests", "MenuEn": "All Requests",
"MenuTr": "Tüm Talepler", "MenuTr": "Tüm Talepler",
"TitleEn": "All Material Requests", "TitleEn": "All Material Requests",
"TitleTr": "Tüm Talepler", "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.", "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 › 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.", "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": [ "Texts": [
{ {
"Key": "App.Prc.MaterialRequest.Group.Request", "Key": "App.Prc.MaterialRequest.Group.Request",
@ -94,6 +94,12 @@
"En": "Requester", "En": "Requester",
"Tr": "Talep Eden" "Tr": "Talep Eden"
}, },
{
"FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.BranchId",
"En": "Branch Name",
"Tr": "Şube Adı"
},
{ {
"FieldName": "DepartmentId", "FieldName": "DepartmentId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.Department",
@ -264,7 +270,7 @@
{ {
"ColGap": 3, "ColGap": 3,
"ColSpan": 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", "Title": "Title",
"Value": "Value", "Value": "Value",
"ValueClassName": "text-3xl", "ValueClassName": "text-3xl",
@ -1136,6 +1142,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1274,6 +1282,148 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "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": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1345,7 +1495,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 5, "ListOrderNo": 6,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1403,7 +1553,7 @@
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": null,
"CascadeEmptyFields": 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": [ "ValidationRuleDto": [
{ {
@ -1412,6 +1562,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1483,7 +1635,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 6, "ListOrderNo": 7,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1550,6 +1702,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1621,7 +1775,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 7, "ListOrderNo": 8,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1688,6 +1842,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1759,7 +1915,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 8, "ListOrderNo": 9,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -1826,6 +1982,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1897,7 +2055,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 9, "ListOrderNo": 10,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1987,9 +2145,9 @@
"Format": null, "Format": null,
"EditOrderNo": null, "EditOrderNo": null,
"EditGroupOrderNo": null, "EditGroupOrderNo": null,
"EditorType2": "dxTextBox", "EditorType2": "dxHtmlEditor",
"ColSpan": 2, "ColSpan": 2,
"EditorOptions": "{\"autoResizeEnabled\":true,\"minHeight\":60}", "EditorOptions": null,
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": null, "ImageUploadOptions": null,
@ -2023,7 +2181,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 10, "ListOrderNo": 11,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2149,7 +2307,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 11, "ListOrderNo": 12,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2275,7 +2433,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 12, "ListOrderNo": 13,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -2401,7 +2559,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 13, "ListOrderNo": 14,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2527,7 +2685,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 14, "ListOrderNo": 15,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2653,7 +2811,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 15, "ListOrderNo": 16,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2779,7 +2937,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 16, "ListOrderNo": 17,
"SourceDbType": 7, "SourceDbType": 7,
"CultureName": "en", "CultureName": "en",
"DataType": "number", "DataType": "number",
@ -2905,7 +3063,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 17, "ListOrderNo": 18,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -3031,7 +3189,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 18, "ListOrderNo": 19,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -3157,7 +3315,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 19, "ListOrderNo": 20,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -3283,7 +3441,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 20, "ListOrderNo": 21,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -3409,7 +3567,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 21, "ListOrderNo": 22,
"SourceDbType": 7, "SourceDbType": 7,
"CultureName": "en", "CultureName": "en",
"DataType": "number", "DataType": "number",
@ -3535,7 +3693,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 22, "ListOrderNo": 23,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -3661,7 +3819,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 23, "ListOrderNo": 24,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -3728,6 +3886,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -3805,6 +3965,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -25,7 +25,7 @@
}, },
"Language": { "Language": {
"MenuParentEn": "Material Requests", "MenuParentEn": "Material Requests",
"MenuParentTr": "Malzeme Talepleri", "MenuParentTr": "Talepler",
"PermissionGroupEn": "Purchasing", "PermissionGroupEn": "Purchasing",
"PermissionGroupTr": "Satınalma", "PermissionGroupTr": "Satınalma",
"MenuEn": "Awaiting Department Approval", "MenuEn": "Awaiting Department Approval",
@ -33,7 +33,7 @@
"TitleEn": "Awaiting Department Approval", "TitleEn": "Awaiting Department Approval",
"TitleTr": "Departman Onayı Bekleyenler", "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.", "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": [ "Texts": [
{ {
"Key": "App.Prc.MaterialRequest.Group.Request", "Key": "App.Prc.MaterialRequest.Group.Request",
@ -94,6 +94,12 @@
"En": "Requester", "En": "Requester",
"Tr": "Talep Eden" "Tr": "Talep Eden"
}, },
{
"FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.BranchId",
"En": "Branch Name",
"Tr": "Şube Adı"
},
{ {
"FieldName": "DepartmentId", "FieldName": "DepartmentId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.Department",
@ -448,6 +454,7 @@
"AllowAllDeleting": false, "AllowAllDeleting": false,
"AllowAdding": false, "AllowAdding": false,
"AllowDuplicate": false, "AllowDuplicate": false,
"OpenDetailAfterInsert": false,
"UseIcons": false, "UseIcons": false,
"ConfirmDelete": true, "ConfirmDelete": true,
"NewRowPosition": "viewportTop", "NewRowPosition": "viewportTop",
@ -1251,6 +1258,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1389,6 +1398,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1453,8 +1464,8 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "DepartmentId", "FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.BranchId",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
"Visible": true, "Visible": true,
@ -1518,7 +1529,7 @@
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": null,
"CascadeEmptyFields": 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": [ "ValidationRuleDto": [
{ {
@ -1527,6 +1538,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1560,7 +1573,147 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "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, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1598,7 +1751,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 6, "ListOrderNo": 7,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1665,6 +1818,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1698,7 +1853,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 5, "EditOrderNo": 7,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1736,7 +1891,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 7, "ListOrderNo": 8,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1803,6 +1958,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1836,7 +1993,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 6, "EditOrderNo": 8,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1874,7 +2031,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 8, "ListOrderNo": 9,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -1941,6 +2098,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1974,7 +2133,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 7, "EditOrderNo": 4,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxDateBox", "EditorType2": "dxDateBox",
"ColSpan": 1, "ColSpan": 1,
@ -2012,7 +2171,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 9, "ListOrderNo": 10,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2100,11 +2259,11 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 8, "EditOrderNo": 9,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextArea", "EditorType2": "dxHtmlEditor",
"ColSpan": 4, "ColSpan": 4,
"EditorOptions": "{\"readOnly\":true}", "EditorOptions": "{\"readOnly\":true,\"height\":150}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": null, "ImageUploadOptions": null,
@ -2138,7 +2297,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 10, "ListOrderNo": 11,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2264,7 +2423,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 11, "ListOrderNo": 12,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2390,7 +2549,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 12, "ListOrderNo": 13,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2516,7 +2675,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 13, "ListOrderNo": 14,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2642,7 +2801,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 14, "ListOrderNo": 15,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -2768,7 +2927,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 15, "ListOrderNo": 16,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2900,6 +3059,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -26,7 +26,7 @@
}, },
"Language": { "Language": {
"MenuParentEn": "Material Requests", "MenuParentEn": "Material Requests",
"MenuParentTr": "Malzeme Talepleri", "MenuParentTr": "Talepler",
"PermissionGroupEn": "Purchasing", "PermissionGroupEn": "Purchasing",
"PermissionGroupTr": "Satınalma", "PermissionGroupTr": "Satınalma",
"MenuEn": "Request Lines", "MenuEn": "Request Lines",
@ -34,7 +34,7 @@
"TitleEn": "Request Lines", "TitleEn": "Request Lines",
"TitleTr": "Talep Satırları", "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).", "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": [ "Texts": [
{ {
"Key": "App.StaticLookup.Purchase", "Key": "App.StaticLookup.Purchase",
@ -2281,6 +2281,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -25,7 +25,7 @@
}, },
"Language": { "Language": {
"MenuParentEn": "Material Requests", "MenuParentEn": "Material Requests",
"MenuParentTr": "Malzeme Talepleri", "MenuParentTr": "Talepler",
"PermissionGroupEn": "Purchasing", "PermissionGroupEn": "Purchasing",
"PermissionGroupTr": "Satınalma", "PermissionGroupTr": "Satınalma",
"MenuEn": "Awaiting Purchasing Approval", "MenuEn": "Awaiting Purchasing Approval",
@ -33,7 +33,7 @@
"TitleEn": "Awaiting Purchasing Approval", "TitleEn": "Awaiting Purchasing Approval",
"TitleTr": "Satınalma Onayı Bekleyenler", "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.", "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": [ "Texts": [
{ {
"Key": "App.Prc.MaterialRequest.Group.Request", "Key": "App.Prc.MaterialRequest.Group.Request",
@ -94,6 +94,12 @@
"En": "Requester", "En": "Requester",
"Tr": "Talep Eden" "Tr": "Talep Eden"
}, },
{
"FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.BranchId",
"En": "Branch Name",
"Tr": "Şube Adı"
},
{ {
"FieldName": "DepartmentId", "FieldName": "DepartmentId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.Department",
@ -448,6 +454,7 @@
"AllowAllDeleting": false, "AllowAllDeleting": false,
"AllowAdding": false, "AllowAdding": false,
"AllowDuplicate": false, "AllowDuplicate": false,
"OpenDetailAfterInsert": false,
"UseIcons": false, "UseIcons": false,
"ConfirmDelete": true, "ConfirmDelete": true,
"NewRowPosition": "viewportTop", "NewRowPosition": "viewportTop",
@ -1251,6 +1258,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1389,6 +1398,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1453,8 +1464,8 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "DepartmentId", "FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.BranchId",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
"Visible": true, "Visible": true,
@ -1518,7 +1529,7 @@
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": null,
"CascadeEmptyFields": 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": [ "ValidationRuleDto": [
{ {
@ -1527,6 +1538,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1560,7 +1573,147 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "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, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1598,7 +1751,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 6, "ListOrderNo": 7,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1665,6 +1818,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1698,7 +1853,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 5, "EditOrderNo": 7,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1736,7 +1891,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 7, "ListOrderNo": 8,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1803,6 +1958,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1836,7 +1993,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 6, "EditOrderNo": 8,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1874,7 +2031,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 8, "ListOrderNo": 9,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -1941,6 +2098,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1974,7 +2133,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 7, "EditOrderNo": 4,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxDateBox", "EditorType2": "dxDateBox",
"ColSpan": 1, "ColSpan": 1,
@ -2012,7 +2171,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 9, "ListOrderNo": 10,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2100,11 +2259,11 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 8, "EditOrderNo": 9,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextArea", "EditorType2": "dxHtmlEditor",
"ColSpan": 2, "ColSpan": 2,
"EditorOptions": "{\"readOnly\":true}", "EditorOptions": "{\"readOnly\":true,\"height\":150}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": null, "ImageUploadOptions": null,
@ -2138,7 +2297,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 10, "ListOrderNo": 11,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2264,7 +2423,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 11, "ListOrderNo": 12,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2390,7 +2549,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 12, "ListOrderNo": 13,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2516,7 +2675,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 13, "ListOrderNo": 14,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2642,7 +2801,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 14, "ListOrderNo": 15,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -2768,7 +2927,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 15, "ListOrderNo": 16,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2900,6 +3059,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -25,15 +25,15 @@
}, },
"Language": { "Language": {
"MenuParentEn": "Material Requests", "MenuParentEn": "Material Requests",
"MenuParentTr": "Malzeme Talepleri", "MenuParentTr": "Talepler",
"PermissionGroupEn": "Purchasing", "PermissionGroupEn": "Purchasing",
"PermissionGroupTr": "Satınalma", "PermissionGroupTr": "Satınalma",
"MenuEn": "My Requests", "MenuEn": "My Requests",
"MenuTr": "Taleplerim", "MenuTr": "Taleplerim",
"TitleEn": "My Material Requests", "TitleEn": "My Material Requests",
"TitleTr": "Taleplerim", "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.", "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 › 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.", "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": [ "Texts": [
{ {
"Key": "App.Prc.MaterialRequest.Group.Request", "Key": "App.Prc.MaterialRequest.Group.Request",
@ -114,6 +114,12 @@
"En": "Requester", "En": "Requester",
"Tr": "Talep Eden" "Tr": "Talep Eden"
}, },
{
"FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.BranchId",
"En": "Branch Name",
"Tr": "Şube Adı"
},
{ {
"FieldName": "DepartmentId", "FieldName": "DepartmentId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.Department",
@ -283,6 +289,13 @@
"CustomValueType": 2, "CustomValueType": 2,
"SqlQuery": "" "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", "FieldName": "DepartmentId",
"FieldDbType": 9, "FieldDbType": 9,
@ -309,7 +322,7 @@
{ {
"ColGap": 3, "ColGap": 3,
"ColSpan": 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", "Title": "Title",
"Value": "Value", "Value": "Value",
"ValueClassName": "text-3xl", "ValueClassName": "text-3xl",
@ -1286,6 +1299,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1415,7 +1430,7 @@
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": null,
"CascadeEmptyFields": 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": [ "ValidationRuleDto": [
{ {
@ -1424,6 +1439,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1465,7 +1482,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1488,8 +1505,8 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "DepartmentId", "FieldName": "BranchId",
"CaptionName": "App.Listform.ListformField.Department", "CaptionName": "App.Listform.ListformField.BranchId",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
"Visible": true, "Visible": true,
@ -1552,8 +1569,8 @@
"CascadeRelationField": null, "CascadeRelationField": null,
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": null,
"CascadeEmptyFields": null, "CascadeEmptyFields": "DepartmentId,WarehouseId,LocationId",
"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 Sas_T_Branch WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name"
}, },
"ValidationRuleDto": [ "ValidationRuleDto": [
{ {
@ -1562,6 +1579,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1595,7 +1614,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 4, "EditOrderNo": 5,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1626,8 +1645,8 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "WarehouseId", "FieldName": "DepartmentId",
"CaptionName": "App.Listform.ListformField.WarehouseId", "CaptionName": "App.Listform.ListformField.Department",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
"Visible": true, "Visible": true,
@ -1689,147 +1708,9 @@
"DisplayExpr": "Name", "DisplayExpr": "Name",
"CascadeRelationField": null, "CascadeRelationField": null,
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": "BranchId",
"CascadeEmptyFields": null, "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" "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": [
{
"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"
}, },
"ValidationRuleDto": [ "ValidationRuleDto": [
{ {
@ -1838,6 +1719,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1886,6 +1769,286 @@
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "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, "EditType": null,
"ListFormCode": "App.Prc.MyMaterialRequest", "ListFormCode": "App.Prc.MyMaterialRequest",
@ -1909,7 +2072,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 8, "ListOrderNo": 9,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -1976,6 +2139,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -2009,7 +2174,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 7, "EditOrderNo": 4,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxDateBox", "EditorType2": "dxDateBox",
"ColSpan": 1, "ColSpan": 1,
@ -2047,7 +2212,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 9, "ListOrderNo": 10,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2135,11 +2300,11 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 8, "EditOrderNo": 9,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextBox", "EditorType2": "dxHtmlEditor",
"ColSpan": 4, "ColSpan": 4,
"EditorOptions": "{\"autoResizeEnabled\":true,\"minHeight\":60}", "EditorOptions": "{\"height\":150}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": null, "ImageUploadOptions": null,
@ -2173,7 +2338,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 10, "ListOrderNo": 11,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2299,7 +2464,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 11, "ListOrderNo": 12,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2425,7 +2590,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 12, "ListOrderNo": 13,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "datetime", "DataType": "datetime",
@ -2551,7 +2716,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 13, "ListOrderNo": 14,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2677,7 +2842,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 14, "ListOrderNo": 15,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2803,7 +2968,7 @@
"Visible": false, "Visible": false,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 15, "ListOrderNo": 16,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2953,6 +3118,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -8,32 +8,24 @@
"PermissionGroupName": "App.Prc", "PermissionGroupName": "App.Prc",
"ModuleId": "Prc", "ModuleId": "Prc",
"Menu": { "Menu": {
"MenuParentPath": [ "MenuParentCode": "App.Prc",
{
"Code": "App.Prc",
"Icon": "FcShop",
"En": "Purchasing",
"Tr": "Satınalma"
}
],
"MenuParentCode": "App.Prc.Orders",
"MenuParentIcon": "FcShop", "MenuParentIcon": "FcShop",
"MenuCode": "App.Prc.PurchaseAgreement", "MenuCode": "App.Prc.PurchaseAgreement",
"MenuOrder": 1, "MenuOrder": 3,
"MenuUrl": "/admin/list/App.Prc.PurchaseAgreement", "MenuUrl": "/admin/list/App.Prc.PurchaseAgreement",
"MenuIcon": "FcRules" "MenuIcon": "FcRules"
}, },
"Language": { "Language": {
"MenuParentEn": "Orders", "MenuParentEn": null,
"MenuParentTr": "Siparişler", "MenuParentTr": null,
"PermissionGroupEn": "Purchasing", "PermissionGroupEn": "Purchasing",
"PermissionGroupTr": "Satınalma", "PermissionGroupTr": "Satınalma",
"MenuEn": "Purchase Agreements", "MenuEn": "Purchase Agreements",
"MenuTr": "Sözleşmeler", "MenuTr": "Sözleşmeler",
"TitleEn": "Purchase Agreements", "TitleEn": "Purchase Agreements",
"TitleTr": "Sözleşmeler", "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.", "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 › 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.", "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": [ "Texts": [
{ {
"Key": "App.Prc.AgreementType.Blanket", "Key": "App.Prc.AgreementType.Blanket",
@ -91,18 +83,24 @@
"En": "Id", "En": "Id",
"Tr": "Kimlik" "Tr": "Kimlik"
}, },
{
"FieldName": "AgreementNo",
"CaptionName": "App.Listform.ListformField.AgreementNo",
"En": "Agreement",
"Tr": "Sözleşme"
},
{ {
"FieldName": "SupplierId", "FieldName": "SupplierId",
"CaptionName": "App.Listform.ListformField.SupplierId", "CaptionName": "App.Listform.ListformField.SupplierId",
"En": "Supplier", "En": "Supplier",
"Tr": "Tedarikçi" "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", "FieldName": "BuyerUserId",
"CaptionName": "App.Listform.ListformField.BuyerUserId", "CaptionName": "App.Listform.ListformField.BuyerUserId",
@ -134,10 +132,10 @@
"Tr": "Bitiş Tarihi" "Tr": "Bitiş Tarihi"
}, },
{ {
"FieldName": "Reference", "FieldName": "WarehouseId",
"CaptionName": "App.Listform.ListformField.Reference", "CaptionName": "App.Listform.ListformField.WarehouseId",
"En": "Reference", "En": "Warehouse",
"Tr": "Referans" "Tr": "Depo"
}, },
{ {
"FieldName": "OperationTypeId", "FieldName": "OperationTypeId",
@ -280,6 +278,13 @@
"Value": "Draft", "Value": "Draft",
"CustomValueType": 1, "CustomValueType": 1,
"SqlQuery": "" "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": [ "WidgetsDto": [
@ -956,144 +961,6 @@
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "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, "EditType": null,
"ListFormCode": "App.Prc.PurchaseAgreement", "ListFormCode": "App.Prc.PurchaseAgreement",
@ -1117,7 +984,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 3, "ListOrderNo": 2,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1184,6 +1051,148 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "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": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1220,7 +1229,7 @@
"EditOrderNo": 2, "EditOrderNo": 2,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 3, "ColSpan": 1,
"EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
@ -1232,6 +1241,146 @@
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "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, "EditType": null,
"ListFormCode": "App.Prc.PurchaseAgreement", "ListFormCode": "App.Prc.PurchaseAgreement",
@ -1255,7 +1404,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 4, "ListOrderNo": 5,
"SourceDbType": 9, "SourceDbType": 9,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1322,6 +1471,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1355,7 +1506,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 3, "EditOrderNo": 4,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1393,7 +1544,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 5, "ListOrderNo": 6,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1460,6 +1611,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1493,7 +1646,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 4, "EditOrderNo": 5,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1531,7 +1684,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 6, "ListOrderNo": 7,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -1598,6 +1751,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1631,7 +1786,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 5, "EditOrderNo": 6,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -1669,132 +1824,6 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "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, "ListOrderNo": 8,
"SourceDbType": 6, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
@ -1914,17 +1943,17 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "Reference", "FieldName": "EndDate",
"CaptionName": "App.Listform.ListformField.Reference", "CaptionName": "App.Listform.ListformField.EndDate",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 9, "ListOrderNo": 9,
"SourceDbType": 16, "SourceDbType": 6,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "datetime",
"SortIndex": 0, "SortIndex": 0,
"SortDirection": null, "SortDirection": null,
"AllowSearch": true, "AllowSearch": true,
@ -2011,9 +2040,9 @@
"Format": null, "Format": null,
"EditOrderNo": 8, "EditOrderNo": 8,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextBox", "EditorType2": "dxDateBox",
"ColSpan": 1, "ColSpan": 1,
"EditorOptions": "{\"showClearButton\":true,\"maxLength\":64,\"placeholder\":\"örn. PO0025\"}", "EditorOptions": "{\"type\":\"date\",\"displayFormat\":\"dd.MM.yyyy\",\"useMaskBehavior\":true,\"showClearButton\":true}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": null, "ImageUploadOptions": null,
@ -2040,8 +2069,8 @@
"JoinFieldName2": null, "JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null "BaseTableJoinFieldName2_OrValue": null
}, },
"FieldName": "OperationTypeId", "FieldName": "WarehouseId",
"CaptionName": "App.Listform.ListformField.OperationTypeId", "CaptionName": "App.Listform.ListformField.WarehouseId",
"PlaceHolder": null, "PlaceHolder": null,
"ReadOnly": false, "ReadOnly": false,
"Visible": true, "Visible": true,
@ -2103,11 +2132,25 @@
"DisplayExpr": "Name", "DisplayExpr": "Name",
"CascadeRelationField": null, "CascadeRelationField": null,
"CascadeFilterOperator": "=", "CascadeFilterOperator": "=",
"CascadeParentFields": null, "CascadeParentFields": "BranchId",
"CascadeEmptyFields": null, "CascadeEmptyFields": "OperationTypeId",
"LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Inv_T_OperationType WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" "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": [], "ColumnStylingDto": [],
"PermissionDto": { "PermissionDto": {
"Deny": false, "Deny": false,
@ -2150,6 +2193,132 @@
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "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, "EditType": null,
"ListFormCode": "App.Prc.PurchaseAgreement", "ListFormCode": "App.Prc.PurchaseAgreement",
@ -2173,7 +2342,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 11, "ListOrderNo": 12,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2240,6 +2409,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -2273,7 +2444,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 10, "EditOrderNo": 11,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 1,
@ -2311,7 +2482,7 @@
"Visible": true, "Visible": true,
"IsActive": true, "IsActive": true,
"Width": 0, "Width": 0,
"ListOrderNo": 12, "ListOrderNo": 13,
"SourceDbType": 16, "SourceDbType": 16,
"CultureName": "en", "CultureName": "en",
"DataType": "string", "DataType": "string",
@ -2399,7 +2570,7 @@
}, },
"Alignment": "left", "Alignment": "left",
"Format": null, "Format": null,
"EditOrderNo": 11, "EditOrderNo": 12,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxHtmlEditor", "EditorType2": "dxHtmlEditor",
"ColSpan": 4, "ColSpan": 4,

View file

@ -33,8 +33,8 @@
"MenuTr": "Sözleşme Kalemleri", "MenuTr": "Sözleşme Kalemleri",
"TitleEn": "Agreement Lines", "TitleEn": "Agreement Lines",
"TitleTr": "Sözleşme Kalemleri", "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.", "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 › 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." "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": [ "Groups": [
{ {

File diff suppressed because it is too large Load diff

View file

@ -33,8 +33,8 @@
"MenuTr": "Sipariş Talep Kalemleri", "MenuTr": "Sipariş Talep Kalemleri",
"TitleEn": "Order Request Lines", "TitleEn": "Order Request Lines",
"TitleTr": "Sipariş Talep Kalemleri", "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.", "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, 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." "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": [ "Groups": [
{ {
@ -92,12 +92,6 @@
"CaptionName": "App.Listform.ListformField.RequestReason", "CaptionName": "App.Listform.ListformField.RequestReason",
"En": "Request Reason", "En": "Request Reason",
"Tr": "Talep Nedeni" "Tr": "Talep Nedeni"
},
{
"FieldName": "Transfer",
"CaptionName": "App.Listform.ListformField.Transfer",
"En": "Transfer",
"Tr": "Aktar"
} }
] ]
} }
@ -140,7 +134,7 @@
"SqlQuery": null "SqlQuery": null
} }
], ],
"UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id, @Transfer", "UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id",
"UpdateBeforeCommand": null, "UpdateBeforeCommand": null,
"UpdateAfterCommand": null, "UpdateAfterCommand": null,
"UpdateFieldsDefaultValueDto": [ "UpdateFieldsDefaultValueDto": [
@ -198,9 +192,9 @@
"AutoExpandAll": false "AutoExpandAll": false
}, },
"SelectionDto": { "SelectionDto": {
"Mode": "none", "Mode": "multiple",
"AllowSelectAll": false, "AllowSelectAll": true,
"SelectAllMode": "allPages", "SelectAllMode": "page",
"ShowCheckBoxesMode": "always" "ShowCheckBoxesMode": "always"
}, },
"ColumnOptionDto": { "ColumnOptionDto": {
@ -323,7 +317,7 @@
"EditingOptionDto": { "EditingOptionDto": {
"Mode": "batch", "Mode": "batch",
"RefreshMode": "full", "RefreshMode": "full",
"AllowUpdating": true, "AllowUpdating": false,
"AllowDetail": false, "AllowDetail": false,
"AllowDeleting": false, "AllowDeleting": false,
"AllowAllDeleting": false, "AllowAllDeleting": false,
@ -363,7 +357,23 @@
"I": "App.Prc.PurchaseOrderImportItem.Import", "I": "App.Prc.PurchaseOrderImportItem.Import",
"N": "App.Prc.PurchaseOrderImportItem.Note" "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": { "StateStoringDto": {
"Enabled": true, "Enabled": true,
"Type": "custom", "Type": "custom",
@ -1797,132 +1807,6 @@
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "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, "IsDeletedField": false,
@ -1932,8 +1816,7 @@
"App.Prc.PurchaseOrderImportItem", "App.Prc.PurchaseOrderImportItem",
"App.Prc.PurchaseOrderImportItem.Title", "App.Prc.PurchaseOrderImportItem.Title",
"App.Prc.PurchaseOrderImportItem.Desc", "App.Prc.PurchaseOrderImportItem.Desc",
"App.Listform.ListformField.BaseId", "App.Listform.ListformField.BaseId"
"App.Listform.ListformField.Transfer"
], ],
"PermissionGroupNames": [], "PermissionGroupNames": [],
"PermissionNames": [ "PermissionNames": [

View file

@ -33,8 +33,8 @@
"MenuTr": "Sipariş Kalemleri", "MenuTr": "Sipariş Kalemleri",
"TitleEn": "Order Lines", "TitleEn": "Order Lines",
"TitleTr": "Sipariş Kalemleri", "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.", "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 (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." "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": [ "Groups": [
{ {
@ -407,8 +407,8 @@
"Order": 1, "Order": 1,
"ItemType": "group", "ItemType": "group",
"Caption": "", "Caption": "",
"ColCount": 2, "ColCount": 3,
"ColSpan": 2 "ColSpan": 3
} }
], ],
"PermissionDto": { "PermissionDto": {
@ -1063,6 +1063,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1099,7 +1101,7 @@
"EditOrderNo": 1, "EditOrderNo": 1,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 2, "ColSpan": 3,
"EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}", "EditorOptions": "{\"showClearButton\":true,\"searchEnabled\":true}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
@ -1225,7 +1227,7 @@
"EditOrderNo": 2, "EditOrderNo": 2,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxTextBox", "EditorType2": "dxTextBox",
"ColSpan": 2, "ColSpan": 3,
"EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}", "EditorOptions": "{\"showClearButton\":true,\"maxLength\":512}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
@ -1327,6 +1329,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1368,7 +1372,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1465,6 +1469,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1603,6 +1609,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1644,7 +1652,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1741,6 +1749,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1782,7 +1792,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1908,7 +1918,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -2155,7 +2165,7 @@
"EditOrderNo": 9, "EditOrderNo": 9,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 3,
"EditorOptions": "{\"readOnly\":true}", "EditorOptions": "{\"readOnly\":true}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,

File diff suppressed because it is too large Load diff

View file

@ -33,8 +33,8 @@
"MenuTr": "İhale Teklifleri", "MenuTr": "İhale Teklifleri",
"TitleEn": "Tender Quotes", "TitleEn": "Tender Quotes",
"TitleTr": "İhale Teklifleri", "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.", "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; 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." "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": [ "Groups": [
{ {
@ -134,25 +134,10 @@
"SqlQuery": null "SqlQuery": null
} }
], ],
"InsertCommand": "EXEC Prc_P_PurchaseRfqCreateAlternative @BaseId, @SupplierId, @CreatorId", "InsertCommand": null,
"InsertBeforeCommand": null, "InsertBeforeCommand": null,
"InsertAfterCommand": null, "InsertAfterCommand": null,
"InsertFieldsDefaultValueDto": [ "InsertFieldsDefaultValueDto": [],
{
"FieldName": "Id",
"FieldDbType": 9,
"Value": "@NEWID",
"CustomValueType": 2,
"SqlQuery": null
},
{
"FieldName": "CreatorId",
"FieldDbType": 9,
"Value": "@USERID",
"CustomValueType": 2,
"SqlQuery": null
}
],
"UpdateCommand": null, "UpdateCommand": null,
"UpdateBeforeCommand": null, "UpdateBeforeCommand": null,
"UpdateAfterCommand": null, "UpdateAfterCommand": null,
@ -332,7 +317,7 @@
"AllowDetail": false, "AllowDetail": false,
"AllowDeleting": false, "AllowDeleting": false,
"AllowAllDeleting": false, "AllowAllDeleting": false,
"AllowAdding": true, "AllowAdding": false,
"AllowDuplicate": false, "AllowDuplicate": false,
"OpenDetailAfterInsert": false, "OpenDetailAfterInsert": false,
"UseIcons": false, "UseIcons": false,

File diff suppressed because it is too large Load diff

View file

@ -176,9 +176,9 @@
"SqlQuery": null "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", "UpdateCommand": "EXEC Prc_P_PurchaseRfqComparisonSave @Id, @UnitPrice, @DeliveryDate, @IsSelected, @TenantId, @LastModificationTime, @LastModifierId",
"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;", "UpdateBeforeCommand": null,
"UpdateAfterCommand": "DECLARE @RfqId uniqueidentifier = (SELECT PurchaseRfqId FROM Prc_T_PurchaseRfqLine WHERE Id = @Id); EXEC Prc_P_PurchaseRfqRecalc @RfqId;", "UpdateAfterCommand": null,
"UpdateFieldsDefaultValueDto": [ "UpdateFieldsDefaultValueDto": [
{ {
"FieldName": "LastModificationTime", "FieldName": "LastModificationTime",

View file

@ -33,8 +33,8 @@
"MenuTr": "Teklif Talep Kalemleri", "MenuTr": "Teklif Talep Kalemleri",
"TitleEn": "RFQ Request Lines", "TitleEn": "RFQ Request Lines",
"TitleTr": "Teklif Talep Kalemleri", "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.", "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, 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." "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": [ "Groups": [
{ {
@ -92,12 +92,6 @@
"CaptionName": "App.Listform.ListformField.RequestReason", "CaptionName": "App.Listform.ListformField.RequestReason",
"En": "Request Reason", "En": "Request Reason",
"Tr": "Talep Nedeni" "Tr": "Talep Nedeni"
},
{
"FieldName": "Transfer",
"CaptionName": "App.Listform.ListformField.Transfer",
"En": "Transfer",
"Tr": "Aktar"
} }
] ]
} }
@ -140,7 +134,7 @@
"SqlQuery": null "SqlQuery": null
} }
], ],
"UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id, @Transfer", "UpdateCommand": "EXEC Prc_P_PurchaseImportItem @Id",
"UpdateBeforeCommand": null, "UpdateBeforeCommand": null,
"UpdateAfterCommand": null, "UpdateAfterCommand": null,
"UpdateFieldsDefaultValueDto": [ "UpdateFieldsDefaultValueDto": [
@ -198,9 +192,9 @@
"AutoExpandAll": false "AutoExpandAll": false
}, },
"SelectionDto": { "SelectionDto": {
"Mode": "none", "Mode": "multiple",
"AllowSelectAll": false, "AllowSelectAll": true,
"SelectAllMode": "allPages", "SelectAllMode": "page",
"ShowCheckBoxesMode": "always" "ShowCheckBoxesMode": "always"
}, },
"ColumnOptionDto": { "ColumnOptionDto": {
@ -323,7 +317,7 @@
"EditingOptionDto": { "EditingOptionDto": {
"Mode": "batch", "Mode": "batch",
"RefreshMode": "full", "RefreshMode": "full",
"AllowUpdating": true, "AllowUpdating": false,
"AllowDetail": false, "AllowDetail": false,
"AllowDeleting": false, "AllowDeleting": false,
"AllowAllDeleting": false, "AllowAllDeleting": false,
@ -363,7 +357,23 @@
"I": "App.Prc.PurchaseRfqImportItem.Import", "I": "App.Prc.PurchaseRfqImportItem.Import",
"N": "App.Prc.PurchaseRfqImportItem.Note" "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": { "StateStoringDto": {
"Enabled": true, "Enabled": true,
"Type": "custom", "Type": "custom",
@ -1797,132 +1807,6 @@
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
"CreatorId": null, "CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000" "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, "IsDeletedField": false,
@ -1932,8 +1816,7 @@
"App.Prc.PurchaseRfqImportItem", "App.Prc.PurchaseRfqImportItem",
"App.Prc.PurchaseRfqImportItem.Title", "App.Prc.PurchaseRfqImportItem.Title",
"App.Prc.PurchaseRfqImportItem.Desc", "App.Prc.PurchaseRfqImportItem.Desc",
"App.Listform.ListformField.BaseId", "App.Listform.ListformField.BaseId"
"App.Listform.ListformField.Transfer"
], ],
"PermissionGroupNames": [], "PermissionGroupNames": [],
"PermissionNames": [ "PermissionNames": [

View file

@ -33,8 +33,8 @@
"MenuTr": "Teklif Kalemleri", "MenuTr": "Teklif Kalemleri",
"TitleEn": "RFQ Lines", "TitleEn": "RFQ Lines",
"TitleTr": "Teklif Kalemleri", "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.", "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 (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." "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": [ "Groups": [
{ {
@ -1063,6 +1063,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1327,6 +1329,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1368,7 +1372,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1465,6 +1469,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1603,6 +1609,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1644,7 +1652,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1741,6 +1749,8 @@
"IgnoreEmptyValue": false, "IgnoreEmptyValue": false,
"Reevaluate": true, "Reevaluate": true,
"ComparisonType": "", "ComparisonType": "",
"ComparisonTarget": null,
"ValidationCallback": null,
"Pattern": "", "Pattern": "",
"Max": null, "Max": null,
"Min": null, "Min": null,
@ -1782,7 +1792,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -1908,7 +1918,7 @@
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,
"ImageUploadOptions": 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, "LastModificationTime": null,
"LastModifierId": null, "LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00", "CreationTime": "0001-01-01T00:00:00",
@ -2155,7 +2165,7 @@
"EditOrderNo": 9, "EditOrderNo": 9,
"EditGroupOrderNo": 1, "EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox", "EditorType2": "dxSelectBox",
"ColSpan": 1, "ColSpan": 2,
"EditorOptions": "{\"readOnly\":true}", "EditorOptions": "{\"readOnly\":true}",
"GridBoxOptions": null, "GridBoxOptions": null,
"TagBoxOptions": null, "TagBoxOptions": null,

View file

@ -157,8 +157,8 @@
} }
], ],
"UpdateCommand": null, "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;", "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": "EXEC Prc_P_PurchaseRfqAfterSave @Id, @LastModifierId", "UpdateAfterCommand": "DECLARE @_id uniqueidentifier = (SELECT TOP 1 Id FROM Prc_T_PurchaseRfq WHERE Id IN @Id); EXEC Prc_P_PurchaseRfqAfterSave @_id, @LastModifierId",
"UpdateFieldsDefaultValueDto": [ "UpdateFieldsDefaultValueDto": [
{ {
"FieldName": "LastModificationTime", "FieldName": "LastModificationTime",

View file

@ -133,8 +133,8 @@
} }
], ],
"UpdateCommand": null, "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;", "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": "EXEC Prc_P_PurchaseRfqAfterSave @Id, @LastModifierId", "UpdateAfterCommand": "DECLARE @_id uniqueidentifier = (SELECT TOP 1 Id FROM Prc_T_PurchaseRfq WHERE Id IN @Id); EXEC Prc_P_PurchaseRfqAfterSave @_id, @LastModifierId",
"UpdateFieldsDefaultValueDto": [ "UpdateFieldsDefaultValueDto": [
{ {
"FieldName": "LastModificationTime", "FieldName": "LastModificationTime",

View file

@ -33,7 +33,7 @@
"TitleEn": "Rejection Reasons", "TitleEn": "Rejection Reasons",
"TitleTr": "Red Nedenleri", "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.", "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": [ "Groups": [
{ {
@ -1251,6 +1251,6 @@
}, },
"DevRequest": { "DevRequest": {
"Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be", "Id": "53294e77-a4fb-45e4-a80e-acf07b5d75be",
"Title": "Satınalma -> Malzeme Talepleri" "Title": "Satınalma -> Talepler"
} }
} }

View file

@ -787,16 +787,22 @@ const useToolbar = ({
) { ) {
items.push({ items.push({
locateInMenu: 'auto', locateInMenu: 'auto',
showText: 'inMenu', showText: 'always',
name: 'saveButton', name: 'saveButton',
options: { hint: translate('::App.Platform.SaveChanges') }, options: {
text: translateToolbar('::App.Platform.SaveChanges'),
hint: translate('::App.Platform.SaveChanges'),
},
}) })
items.push({ items.push({
locateInMenu: 'auto', locateInMenu: 'auto',
showText: 'inMenu', showText: 'always',
name: 'revertButton', name: 'revertButton',
options: { hint: translate('::App.Platform.UndoChanges') }, options: {
text: translateToolbar('::App.Platform.UndoChanges'),
hint: translate('::App.Platform.UndoChanges'),
},
}) })
} }
// #endregion // #endregion

View file

@ -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<PurchaseDocGridDialogProps, 'docId' | 'listFormCode' | 'info'>) => {
const { translate } = useLocalization()
const { isMaximized } = useDialogContext()
const gridDto = useListFormGridDto(listFormCode)
const gridAreaRef = useRef<HTMLDivElement>(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 (
<Dialog.Body
className={classNames(isMaximized ? 'flex min-h-0 flex-1 flex-col !overflow-hidden' : 'max-h-[70vh] overflow-y-auto')}
>
{info && <p className="mb-3 shrink-0 text-gray-600 dark:text-gray-400">{translate(`::${info}`)}</p>}
<div ref={gridAreaRef} className={classNames(isMaximized && 'min-h-0 flex-1')}>
{sizedGridDto && (
<Grid isSubForm listFormCode={listFormCode} gridDto={sizedGridDto} searchParams={searchParams} level={1} />
)}
</div>
</Dialog.Body>
)
}
/**
* 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 (
<Dialog isOpen={open} width={1400} onClose={onDialogClose} onRequestClose={onDialogClose}>
<Dialog.Header>{translate(`::${title}`)}</Dialog.Header>
<DocGridBody docId={docId} listFormCode={listFormCode} info={info} />
<Dialog.Footer className="flex justify-end border-t pt-3">
<Button size="sm" variant="solid" onClick={onDialogClose}>
{translate('::App.Platform.Close')}
</Button>
</Dialog.Footer>
</Dialog>
)
}
export default PurchaseDocGridDialog

View file

@ -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 (
<Dialog isOpen={open} width={1100} onClose={onDialogClose} onRequestClose={onDialogClose}>
<Dialog.Header>{translate('::App.Prc.PurchaseRfq.ImportRequests')}</Dialog.Header>
<Dialog.Body className="max-h-[70vh] overflow-y-auto">
<p className="mb-3 text-gray-600 dark:text-gray-400">{translate('::App.Prc.PurchaseRfq.ImportRequestsInfo')}</p>
<Grid isSubForm listFormCode={listFormCode} searchParams={searchParams} level={1} />
</Dialog.Body>
<Dialog.Footer className="flex justify-end border-t pt-3">
<Button size="sm" variant="solid" onClick={onDialogClose}>
{translate('::App.Platform.Close')}
</Button>
</Dialog.Footer>
</Dialog>
)
}
export default PurchaseRequestImportDialog

View file

@ -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 (
<Dialog isOpen={open} width={1100} onClose={onDialogClose} onRequestClose={onDialogClose}>
<Dialog.Header>{translate('::App.Prc.PurchaseRfq.CreateAlternative')}</Dialog.Header>
<Dialog.Body className="max-h-[70vh] overflow-y-auto">
<Tabs defaultValue="suppliers" variant="underline">
<TabList>
<TabNav value="suppliers">{translate('::App.Prc.PurchaseRfq.AlternativeSuppliers')}</TabNav>
<TabNav value="prices">{translate('::App.Prc.PurchaseRfq.PriceEntry')}</TabNav>
</TabList>
<TabContent value="suppliers">
<div className="pt-3">
<Grid isSubForm listFormCode="App.Prc.PurchaseRfqAlternative" searchParams={searchParams} level={1} />
</div>
</TabContent>
<TabContent value="prices">
<div className="pt-3">
<Grid isSubForm listFormCode="App.Prc.PurchaseRfqComparison" searchParams={searchParams} level={1} />
</div>
</TabContent>
</Tabs>
</Dialog.Body>
<Dialog.Footer className="flex justify-end border-t pt-3">
<Button size="sm" variant="solid" onClick={onDialogClose}>
{translate('::App.Platform.Close')}
</Button>
</Dialog.Footer>
</Dialog>
)
}
export default PurchaseRfqAlternativeDialog

View file

@ -18,8 +18,7 @@ const dialogs: Record<string, ComponentType<any>> = {
DynamicServiceEditor: lazy(() => import('@/views/developerKit/DynamicServiceEditor')), DynamicServiceEditor: lazy(() => import('@/views/developerKit/DynamicServiceEditor')),
BranchSeed: lazy(() => import('@/views/branch/BranchSeed')), BranchSeed: lazy(() => import('@/views/branch/BranchSeed')),
DiaryEntry: lazy(() => import('@/views/intranet/DiaryModal')), DiaryEntry: lazy(() => import('@/views/intranet/DiaryModal')),
PurchaseRequestImport: lazy(() => import('@/views/purchasing/PurchaseRequestImportDialog')), PurchaseDocGrid: lazy(() => import('@/views/purchasing/PurchaseDocGridDialog')),
PurchaseRfqAlternative: lazy(() => import('@/views/purchasing/PurchaseRfqAlternativeDialog')),
} }
const DialogShowComponent = (): ReactElement => { const DialogShowComponent = (): ReactElement => {