53 lines
3.3 KiB
MySQL
53 lines
3.3 KiB
MySQL
|
|
-- Talep Kalemleri sekmesinde işaretlenen kalemi (@Key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar.
|
|||
|
|
-- Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir.
|
|||
|
|
CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseImportItem]
|
|||
|
|
@Key nvarchar(80),
|
|||
|
|
@Transfer bit = 1
|
|||
|
|
AS
|
|||
|
|
BEGIN
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
IF ISNULL(@Transfer, 0) = 0 RETURN;
|
|||
|
|
|
|||
|
|
DECLARE @DocId uniqueidentifier = TRY_CAST(LEFT(@Key, 36) AS uniqueidentifier),
|
|||
|
|
@ItemId uniqueidentifier = TRY_CAST(RIGHT(@Key, 36) AS uniqueidentifier),
|
|||
|
|
@IsOrder bit = 0, @Tenant uniqueidentifier, @Supplier uniqueidentifier, @Agr uniqueidentifier, @Status nvarchar(16),
|
|||
|
|
@ProductId uniqueidentifier, @Description nvarchar(512), @Quantity decimal(18, 4), @UomId nvarchar(50),
|
|||
|
|
@UnitPrice decimal(18, 4), @TaxRate decimal(18, 4), @DueDate datetime;
|
|||
|
|
|
|||
|
|
SELECT @Tenant = TenantId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status
|
|||
|
|
FROM Prc_T_PurchaseRfq WHERE Id = @DocId AND IsDeleted = 0 AND Status IN ('Draft', 'Sent');
|
|||
|
|
IF @Status IS NULL
|
|||
|
|
SELECT @Tenant = TenantId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status, @IsOrder = 1
|
|||
|
|
FROM Prc_T_PurchaseOrder WHERE Id = @DocId AND IsDeleted = 0 AND Status = 'Draft';
|
|||
|
|
IF @Status IS NULL
|
|||
|
|
THROW 50161, N'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.', 1;
|
|||
|
|
|
|||
|
|
SELECT @ProductId = a.ProductId, @Description = a.RequestReason, @Quantity = a.Quantity, @UomId = a.UomId, @DueDate = a.DueDate,
|
|||
|
|
@TaxRate = ISNULL(p.PurchaseTaxRate, 0),
|
|||
|
|
@UnitPrice = COALESCE((SELECT TOP 1 al.UnitPrice FROM Prc_T_PurchaseAgreementLine al
|
|||
|
|
WHERE al.AgreementId = @Agr AND al.ProductId = a.ProductId AND al.IsDeleted = 0),
|
|||
|
|
(SELECT TOP 1 ps.Price FROM Inv_T_ProductSupplier ps
|
|||
|
|
WHERE ps.ProductId = a.ProductId AND ps.ContactId = @Supplier AND ps.IsDeleted = 0
|
|||
|
|
ORDER BY ps.MinQuantity), 0)
|
|||
|
|
FROM Prc_V_MaterialRequestAvailableItem a
|
|||
|
|
LEFT JOIN Inv_T_Product p ON p.Id = a.ProductId
|
|||
|
|
WHERE a.Id = @ItemId AND (a.TenantId = @Tenant OR (a.TenantId IS NULL AND @Tenant IS NULL));
|
|||
|
|
IF @ProductId IS NULL
|
|||
|
|
THROW 50162, N'Talep kalemi artık aktarılamaz: başka bir teklife ya da siparişe aktarılmış veya talep değişmiş.', 1;
|
|||
|
|
|
|||
|
|
IF @IsOrder = 1
|
|||
|
|
BEGIN
|
|||
|
|
INSERT INTO Prc_T_PurchaseOrderLine (Id, TenantId, PurchaseOrderId, ProductId, Description, Quantity, UomId,
|
|||
|
|
UnitPrice, TaxRate, Amount, DeliveryDate, MaterialRequestItemId, CreationTime, IsDeleted)
|
|||
|
|
VALUES (NEWID(), @Tenant, @DocId, @ProductId, @Description, @Quantity, @UomId, @UnitPrice, @TaxRate, 0, @DueDate, @ItemId, GETUTCDATE(), 0);
|
|||
|
|
EXEC Prc_P_PurchaseOrderRecalc @DocId;
|
|||
|
|
END
|
|||
|
|
ELSE
|
|||
|
|
BEGIN
|
|||
|
|
INSERT INTO Prc_T_PurchaseRfqLine (Id, TenantId, PurchaseRfqId, ProductId, Description, Quantity, UomId,
|
|||
|
|
UnitPrice, TaxRate, Amount, DeliveryDate, MaterialRequestItemId, CreationTime, IsDeleted)
|
|||
|
|
VALUES (NEWID(), @Tenant, @DocId, @ProductId, @Description, @Quantity, @UomId, @UnitPrice, @TaxRate, 0, @DueDate, @ItemId, GETUTCDATE(), 0);
|
|||
|
|
EXEC Prc_P_PurchaseRfqRecalc @DocId;
|
|||
|
|
END
|
|||
|
|
END
|