-- 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; $$;