-- Transfer belgesi kaydı (ve iş akışı adımları) sonrası: tür, şube, depo ve boş konumlar operasyon türünden gelir (formda olmayan alımın -- kaynağı ve teslimatın hedefi her zaman, iade belgesi hariç); teslimat politikası -- yalnız teslimatta tutulur; iç transferin onaycısı kaynak konumun depo sorumlusudur (kullanıcı adı; iş akışı onaycıyı adla eşler), sorumlusu olmayan konumdan transfer onay beklemez. -- Numara, özet ve durum butonunun işlemi (PendingAction) buradan çalışır. CREATE OR REPLACE PROCEDURE public."Inv_P_TransferAfterSave"(p_id uuid, p_user_id uuid DEFAULT NULL) LANGUAGE plpgsql AS $$ DECLARE v_act varchar(16); BEGIN SELECT "PendingAction" INTO v_act FROM "Inv_T_Transfer" WHERE "Id" = p_id; UPDATE "Inv_T_Transfer" t SET "OperationKind" = ot."OperationKind", "BranchId" = ot."BranchId", "WarehouseId" = ot."WarehouseId", "SourceLocationId" = CASE WHEN t."ReturnOfId" IS NULL AND (ot."OperationKind" = 'Receipt' OR t."SourceLocationId" IS NULL) THEN COALESCE(ot."SourceLocationId", t."SourceLocationId") ELSE t."SourceLocationId" END, "DestinationLocationId" = CASE WHEN t."ReturnOfId" IS NULL AND (ot."OperationKind" = 'Delivery' OR t."DestinationLocationId" IS NULL) THEN COALESCE(ot."DestinationLocationId", t."DestinationLocationId") ELSE t."DestinationLocationId" END, "DeliveryPolicy" = CASE WHEN ot."OperationKind" = 'Delivery' THEN COALESCE(t."DeliveryPolicy", 'Direct') END FROM "Inv_T_OperationType" ot WHERE t."Id" = p_id AND ot."Id" = t."OperationTypeId"; UPDATE "Inv_T_Transfer" t SET "SourceApproverUserNames" = a."UserName", "ApprovalStatus" = CASE WHEN a."UserName" IS NULL AND t."ApprovalStatus" IS NULL THEN 'Onay Gerekmez' WHEN a."UserName" IS NOT NULL AND t."ApprovalStatus" = 'Onay Gerekmez' THEN NULL ELSE t."ApprovalStatus" END FROM (SELECT x."Id", NULLIF(l."ResponsibleUserName", '') AS "UserName" FROM "Inv_T_Transfer" x LEFT JOIN "Inv_T_Location" l ON l."Id" = x."SourceLocationId" WHERE x."Id" = p_id) a WHERE t."Id" = a."Id" AND t."OperationKind" = 'InternalTransfer' AND t."Status" = 'Draft'; CALL public."Inv_P_TransferNumber"(p_id); CALL public."Inv_P_TransferRecalc"(p_id); -- Durum butonları işlemi PendingAction alanına yazıp ekranın güncelleme ucuyla kaydeder. IF v_act IS NOT NULL THEN CALL public."Inv_P_TransferSetStatus"(p_id, v_act, p_user_id); -- Kaynak depo onayı verilen taslak iç transfer kendiliğinden hazırlanır (kullanıcı kararı: onay → Hazırla tek adım). -- Hazırla'nın şartları (satır, farklı iki iç konum) sağlanmıyorsa denenmez: onay kaydı bozulmaz, belge taslak kalır ve -- Hazırla elle basılınca hatayı gösterir. ELSIF EXISTS (SELECT 1 FROM "Inv_T_Transfer" t INNER JOIN "Inv_T_Location" s ON s."Id" = t."SourceLocationId" AND s."LocationType" = 'Internal' INNER JOIN "Inv_T_Location" d ON d."Id" = t."DestinationLocationId" AND d."LocationType" = 'Internal' WHERE t."Id" = p_id AND t."OperationKind" = 'InternalTransfer' AND t."Status" = 'Draft' AND t."ApprovalStatus" = 'Onaylandı' AND s."Id" <> d."Id" AND EXISTS (SELECT 1 FROM "Inv_T_TransferLine" l WHERE l."TransferId" = t."Id" AND l."IsDeleted" = false)) THEN CALL public."Inv_P_TransferSetStatus"(p_id, 'Confirm', p_user_id); END IF; END; $$;