-- Planla diyaloğunun Satınalma ızgarası (App.Prc.MaterialRequestPlanVendor): kiracının bütün aktif kontakları; ürünün fiyat listesindekiler -- fiyatıyla, diğerleri fiyatsız gelir. SuggestRank ızgaranın sırası ve Öner'in seçtiği tedarikçidir: fiyatlılar ucuzdan pahalıya, sonra son alım -- tarihi yeniden eskiye, sonra ad (para birimi farkı gözetilmez). Fiyat satırı teklif kalemine yazılanla aynıdır (en düşük minimum -- miktarlı satır, Prc_P_MaterialRequestPlan); son alım tarihini siparişli alım yazar. -- Plan Miktarı kalemin bu tedarikçi için taslak planıdır; Rfq* tedarikçinin talebin şubesi ve deposu için bu kalemi taşıyan taslak teklif -- talebidir (satırdaki Teklifi Aç). BaseId diyaloğun süzdüğü kalem, Id kalem + ':' + tedarikçidir (Prc_P_MaterialRequestPlanLineSave ayırır). -- MaxQuantity satıra yazılabilecek en fazla plan miktarıdır: planlanacak kalandan kalemin diğer taslak satırları düşülür. CREATE OR ALTER VIEW [dbo].[Prc_V_MaterialRequestPlanVendor] AS SELECT CONCAT(CAST(i.Id AS nvarchar(36)), ':', CAST(c.Id AS nvarchar(36))) AS Id, i.TenantId, i.Id AS BaseId, c.Id AS ContactId, ps.MinQuantity, ps.UomId, ps.Price, ps.CurrencyId, ps.LeadTimeDays, ps.LastPurchaseDate, pl.Quantity AS PlanQuantity, d.Id AS RfqId, d.RfqNo, d.Quantity AS RfqQuantity, i.IsDeleted, ROW_NUMBER() OVER (PARTITION BY i.Id ORDER BY CASE WHEN ps.Price IS NULL THEN 1 ELSE 0 END, ps.Price, ps.LastPurchaseDate DESC, c.Name) AS SuggestRank, CASE WHEN ip.RemainingQuantity - ISNULL(od.Quantity, 0) < 0 THEN 0 ELSE ip.RemainingQuantity - ISNULL(od.Quantity, 0) END AS MaxQuantity FROM Prc_T_MaterialRequestItem i INNER JOIN Prc_T_MaterialRequest r ON r.Id = i.MaterialRequestId INNER JOIN Adm_T_Contact c ON c.IsDeleted = 0 AND c.IsActive = 1 AND (c.TenantId = i.TenantId OR (c.TenantId IS NULL AND i.TenantId IS NULL)) OUTER APPLY (SELECT TOP 1 x.MinQuantity, x.UomId, x.Price, x.CurrencyId, x.LeadTimeDays, x.LastPurchaseDate FROM Inv_T_ProductSupplier x WHERE x.ProductId = i.ProductId AND x.ContactId = c.Id AND x.IsDeleted = 0 ORDER BY x.MinQuantity) ps LEFT JOIN Prc_T_MaterialRequestPlanLine pl ON pl.MaterialRequestItemId = i.Id AND pl.PlanMethod = 'Purchase' AND pl.SupplierId = c.Id AND pl.IsDeleted = 0 OUTER APPLY (SELECT TOP 1 q.Id, q.RfqNo, ql.Quantity FROM Prc_T_PurchaseRfq q INNER JOIN Prc_T_PurchaseRfqLine ql ON ql.PurchaseRfqId = q.Id AND ql.MaterialRequestItemId = i.Id AND ql.IsDeleted = 0 WHERE q.IsDeleted = 0 AND q.Status = 'Draft' AND q.SupplierId = c.Id AND q.BranchId = r.BranchId AND q.WarehouseId = r.WarehouseId ORDER BY q.CreationTime DESC) d INNER JOIN Prc_V_MaterialRequestItemPlan ip ON ip.Id = i.Id OUTER APPLY (SELECT SUM(x.Quantity) AS Quantity FROM Prc_T_MaterialRequestPlanLine x WHERE x.MaterialRequestItemId = i.Id AND x.IsDeleted = 0 AND (x.SupplierId IS NULL OR x.SupplierId <> c.Id)) od WHERE i.IsDeleted = 0; GO