sozsoft-platform/configs/seeds/sql/object/Prc_V_MaterialRequestPlanVendor.sql

35 lines
3.1 KiB
MySQL
Raw Normal View History

2026-10-19 14:35:08 +00:00
-- Planla diyaloğunun Satınalma ızgarası (Prc.MaterialRequestPlanVendor): kiracının bütün aktif kontakları; ürünün fiyat listesindekiler
2026-10-14 09:07:11 +00:00
-- 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
2026-10-19 14:35:08 +00:00
FROM Stk_T_ProductSupplier x
2026-10-14 09:07:11 +00:00
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