sozsoft-platform/configs/seeds/postgres/object/Inv_P_TransferFromPurchaseOrder.sql
2026-10-13 00:43:05 +03:00

35 lines
2.5 KiB
PL/PgSQL
Raw 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.

-- Onaylanan satınalma siparişinden siparişin operasyon türünde Taslak alım açar: konumlar operasyon türünden, satırlar
-- siparişin envanter takipli kalemlerinin henüz alınmamış miktarıdır. Siparişin iptal olmayan alımı varsa yeni alım açılmaz.
CREATE OR REPLACE PROCEDURE public."Inv_P_TransferFromPurchaseOrder"(p_order_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_new uuid := gen_random_uuid(); v_count int;
BEGIN
IF EXISTS (SELECT 1 FROM "Inv_T_Transfer" WHERE "PurchaseOrderId" = p_order_id AND "IsDeleted" = false AND "Status" <> 'Cancelled') THEN
RETURN;
END IF;
INSERT INTO "Inv_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "PartnerId", "SourceLocationId", "DestinationLocationId",
"ScheduledDate", "SourceDocument", "PurchaseOrderId", "ResponsibleUserId", "ProjectId", "Status", "CreationTime", "CreatorId", "IsDeleted")
SELECT v_new, o."TenantId", ot."BranchId", ot."WarehouseId", o."OperationTypeId", ot."OperationKind", o."SupplierId", ot."SourceLocationId", ot."DestinationLocationId",
COALESCE(o."ExpectedArrival", NOW() AT TIME ZONE 'UTC'), o."OrderNo", o."Id", o."BuyerUserId", o."ProjectId", 'Draft', NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseOrder" o
INNER JOIN "Inv_T_OperationType" ot ON ot."Id" = o."OperationTypeId"
WHERE o."Id" = p_order_id
AND EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" l
INNER JOIN "Inv_T_Product" p ON p."Id" = l."ProductId"
WHERE l."PurchaseOrderId" = o."Id" AND l."IsDeleted" = false AND p."TrackInventory" = true AND l."Quantity" > l."ReceivedQuantity");
GET DIAGNOSTICS v_count = ROW_COUNT;
IF v_count = 0 THEN
RETURN;
END IF;
INSERT INTO "Inv_T_TransferLine" ("Id", "TenantId", "TransferId", "ProductId", "Description", "DemandQuantity", "Quantity", "UomId", "PurchaseOrderLineId", "CreationTime", "CreatorId", "IsDeleted")
SELECT gen_random_uuid(), l."TenantId", v_new, l."ProductId", l."Description", l."Quantity" - l."ReceivedQuantity", 0, l."UomId", l."Id", NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseOrderLine" l
INNER JOIN "Inv_T_Product" p ON p."Id" = l."ProductId"
WHERE l."PurchaseOrderId" = p_order_id AND l."IsDeleted" = false AND p."TrackInventory" = true AND l."Quantity" > l."ReceivedQuantity";
CALL public."Inv_P_TransferNumber"(v_new);
CALL public."Inv_P_TransferRecalc"(v_new);
END;
$$;