836 refactor reservations controller

Resolves #836 

Actually, I'm going to go and write tests for this so don't merge until then

<!---
@huboard:{"order":905.0,"milestone_order":882,"custom_state":""}
-->

Damn, I forgot that I used a `case` statement here. It's really not that pretty but I'm not sure there's a better way without some serious re-architecting. I feel like in the interest of overall improvement we should merge this stuff in, but ultimately this will probably need another refactoring, ideally.