sozsoft-platform/configs/seeds/sql/object/Prc_P_PurchaseRfqComparisonSave.sql
2026-10-19 17:35:08 +03:00

41 lines
2.1 KiB
Transact-SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Fiyat Girişi (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