After new row INSERT statement, use newly created PK as FK in a second INSERT statement within the same Stored Procedure
I think that if you just change this line it should work for you.

SET @order_id = SCOPE_IDENTITY();


Your method of grabbing the max id and adding 1 is not safe for concurrent access, scope_identity() is the correct way of getting the ID of the just inserted row.