68 lines
3.8 KiB
MySQL
68 lines
3.8 KiB
MySQL
|
|
-- İhaleyi kalem bazında siparişe çevirir: kalemin Seçili satırı varsa o, yoksa Önerilen satır kazanır.
|
|||
|
|
-- Kazanan her teklif talebi için bir satınalma siparişi açılır (Kaynak = teklif no); kazanan teklif
|
|||
|
|
-- Satınalma Siparişi, hiç kalem kazanamayan teklif İptal Edildi olur.
|
|||
|
|
CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseRfqAward]
|
|||
|
|
@Id uniqueidentifier,
|
|||
|
|
@UserId uniqueidentifier = NULL
|
|||
|
|
AS
|
|||
|
|
BEGIN
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
DECLARE @Group uniqueidentifier, @Tenant uniqueidentifier, @Rfq uniqueidentifier, @Po uniqueidentifier, @No nvarchar(128);
|
|||
|
|
DECLARE @Win TABLE (LineId uniqueidentifier PRIMARY KEY, RfqId uniqueidentifier NOT NULL);
|
|||
|
|
|
|||
|
|
SELECT @Group = TenderGroupId, @Tenant = TenantId FROM Prc_T_PurchaseRfq WHERE Id = @Id;
|
|||
|
|
IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE TenderGroupId = @Group AND IsDeleted = 0 AND Status = 'Purchase')
|
|||
|
|
THROW 50171, N'Bu ihale zaten siparişe dönüştürüldü.', 1;
|
|||
|
|
|
|||
|
|
INSERT INTO @Win (LineId, RfqId)
|
|||
|
|
SELECT c.Id, c.PurchaseRfqId
|
|||
|
|
FROM Prc_V_PurchaseRfqComparison c
|
|||
|
|
WHERE c.BaseId = @Id AND c.Status <> 'Cancelled'
|
|||
|
|
AND (c.IsSelected = 1
|
|||
|
|
OR (c.IsRecommended = 1 AND NOT EXISTS (SELECT 1 FROM Prc_V_PurchaseRfqComparison s
|
|||
|
|
WHERE s.BaseId = @Id AND s.TenderLineId = c.TenderLineId
|
|||
|
|
AND s.IsSelected = 1 AND s.Status <> 'Cancelled')));
|
|||
|
|
IF NOT EXISTS (SELECT 1 FROM @Win)
|
|||
|
|
THROW 50172, N'Siparişe dönüştürülecek kalem yok: tedarikçi fiyat ve terminlerini girin ya da Fiyat Karşılaştırması sekmesinde kazananı seçin.', 1;
|
|||
|
|
|
|||
|
|
DECLARE winners CURSOR LOCAL FAST_FORWARD FOR SELECT DISTINCT RfqId FROM @Win;
|
|||
|
|
OPEN winners;
|
|||
|
|
FETCH NEXT FROM winners INTO @Rfq;
|
|||
|
|
WHILE @@FETCH_STATUS = 0
|
|||
|
|
BEGIN
|
|||
|
|
SET @Po = NEWID();
|
|||
|
|
EXEC Adm_P_SequenceNext N'PurchaseOrder1', @Tenant, @No OUTPUT;
|
|||
|
|
|
|||
|
|
INSERT INTO Prc_T_PurchaseOrder (Id, TenantId, OrderNo, PurchaseRfqId, SupplierId, SupplierReference, AgreementId, CurrencyId,
|
|||
|
|
ExpectedArrival, OperationTypeId, ConfirmDate, BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms,
|
|||
|
|
Status, CreationTime, CreatorId, IsDeleted)
|
|||
|
|
SELECT @Po, TenantId, @No, Id, SupplierId, SupplierReference, AgreementId, CurrencyId,
|
|||
|
|
ExpectedArrival, OperationTypeId, GETUTCDATE(), BuyerUserId, ProjectId, IncotermId, IncotermLocation, PaymentTermId, Terms,
|
|||
|
|
'Purchase', GETUTCDATE(), @UserId, 0
|
|||
|
|
FROM Prc_T_PurchaseRfq WHERE Id = @Rfq;
|
|||
|
|
|
|||
|
|
INSERT INTO Prc_T_PurchaseOrderLine (Id, TenantId, PurchaseOrderId, ProductId, Description, Quantity, UomId, UnitPrice, TaxRate,
|
|||
|
|
Amount, DeliveryDate, MaterialRequestItemId, PurchaseRfqLineId, CreationTime, CreatorId, IsDeleted)
|
|||
|
|
SELECT NEWID(), l.TenantId, @Po, l.ProductId, l.Description, l.Quantity, l.UomId, l.UnitPrice, l.TaxRate,
|
|||
|
|
0, l.DeliveryDate, l.MaterialRequestItemId, l.Id, GETUTCDATE(), @UserId, 0
|
|||
|
|
FROM Prc_T_PurchaseRfqLine l
|
|||
|
|
INNER JOIN @Win w ON w.LineId = l.Id
|
|||
|
|
WHERE w.RfqId = @Rfq;
|
|||
|
|
|
|||
|
|
EXEC Prc_P_PurchaseOrderRecalc @Po;
|
|||
|
|
FETCH NEXT FROM winners INTO @Rfq;
|
|||
|
|
END
|
|||
|
|
CLOSE winners;
|
|||
|
|
DEALLOCATE winners;
|
|||
|
|
|
|||
|
|
UPDATE l SET IsSelected = CASE WHEN w.LineId IS NULL THEN 0 ELSE 1 END
|
|||
|
|
FROM Prc_T_PurchaseRfqLine l
|
|||
|
|
INNER JOIN Prc_T_PurchaseRfq r ON r.Id = l.PurchaseRfqId
|
|||
|
|
LEFT JOIN @Win w ON w.LineId = l.Id
|
|||
|
|
WHERE r.TenderGroupId = @Group AND r.IsDeleted = 0 AND r.Status <> 'Cancelled';
|
|||
|
|
|
|||
|
|
UPDATE r SET Status = CASE WHEN EXISTS (SELECT 1 FROM @Win w WHERE w.RfqId = r.Id) THEN 'Purchase' ELSE 'Cancelled' END
|
|||
|
|
FROM Prc_T_PurchaseRfq r
|
|||
|
|
WHERE r.TenderGroupId = @Group AND r.IsDeleted = 0 AND r.Status <> 'Cancelled';
|
|||
|
|
END
|