2026-10-12 21:43:05 +00:00
|
|
|
|
-- 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.
|
2026-10-19 14:35:08 +00:00
|
|
|
|
CREATE OR REPLACE PROCEDURE public."Stk_P_TransferFromPurchaseOrder"(p_order_id uuid, p_user_id uuid DEFAULT NULL)
|
2026-10-12 21:43:05 +00:00
|
|
|
|
LANGUAGE plpgsql AS $$
|
|
|
|
|
|
DECLARE v_new uuid := gen_random_uuid(); v_count int;
|
|
|
|
|
|
BEGIN
|
2026-10-19 14:35:08 +00:00
|
|
|
|
IF EXISTS (SELECT 1 FROM "Stk_T_Transfer" WHERE "PurchaseOrderId" = p_order_id AND "IsDeleted" = false AND "Status" <> 'Cancelled') THEN
|
2026-10-12 21:43:05 +00:00
|
|
|
|
RETURN;
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
2026-10-19 14:35:08 +00:00
|
|
|
|
INSERT INTO "Stk_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "PartnerId", "SourceLocationId", "DestinationLocationId",
|
2026-10-12 21:43:05 +00:00
|
|
|
|
"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
|
2026-10-19 14:35:08 +00:00
|
|
|
|
INNER JOIN "Stk_T_OperationType" ot ON ot."Id" = o."OperationTypeId"
|
2026-10-12 21:43:05 +00:00
|
|
|
|
WHERE o."Id" = p_order_id
|
|
|
|
|
|
AND EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" l
|
2026-10-19 14:35:08 +00:00
|
|
|
|
INNER JOIN "Stk_T_Product" p ON p."Id" = l."ProductId"
|
2026-10-12 21:43:05 +00:00
|
|
|
|
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;
|
|
|
|
|
|
|
2026-10-19 14:35:08 +00:00
|
|
|
|
INSERT INTO "Stk_T_TransferLine" ("Id", "TenantId", "TransferId", "ProductId", "Description", "DemandQuantity", "Quantity", "UomId", "PurchaseOrderLineId", "MaterialRequestItemId", "CreationTime", "CreatorId", "IsDeleted")
|
2026-10-14 19:26:03 +00:00
|
|
|
|
SELECT gen_random_uuid(), l."TenantId", v_new, l."ProductId", l."Description", l."Quantity" - l."ReceivedQuantity", 0, l."UomId", l."Id", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false
|
2026-10-12 21:43:05 +00:00
|
|
|
|
FROM "Prc_T_PurchaseOrderLine" l
|
2026-10-19 14:35:08 +00:00
|
|
|
|
INNER JOIN "Stk_T_Product" p ON p."Id" = l."ProductId"
|
2026-10-12 21:43:05 +00:00
|
|
|
|
WHERE l."PurchaseOrderId" = p_order_id AND l."IsDeleted" = false AND p."TrackInventory" = true AND l."Quantity" > l."ReceivedQuantity";
|
|
|
|
|
|
|
2026-10-19 14:35:08 +00:00
|
|
|
|
CALL public."Stk_P_TransferNumber"(v_new);
|
|
|
|
|
|
CALL public."Stk_P_TransferRecalc"(v_new);
|
2026-10-12 21:43:05 +00:00
|
|
|
|
END;
|
|
|
|
|
|
$$;
|