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

42 lines
2.1 KiB
MySQL
Raw Permalink Normal View History

2026-10-19 14:35:08 +00:00
-- Fiyat Girişi (Prc.PurchaseRfqComparison) satır kaydı. Batch kaydı her satırı ayrı ve eşzamanlı istekle gönderir;
2026-10-12 10:27:54 +00:00
-- 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