# Coupon system optimization

I have the following code for my coupon system. It should work but I'm sure I can optimize it.

Any suggestions would be welcome.

@price_to_pay = @booking_request.guests * @table_offer.price_cents / 100
@remaining = @coupon.current_amount - @price_to_pay
if @remaining > 0
@coupon.current_amount = @remaining
@price_to_pay = 0
elsif @remaining = 0
@coupon.current_amount = 0
@price_to_pay = 0
elsif @remaining < 0
@coupon.current_amount = @remaining
@price_to_pay = @remaining * -1
end
coupon.save


Thank you

-
is this Rails? a lot of instance variables being used here, and some even updated (@price_to_pay), why is that? are they AR attributes? –  tokland Nov 22 '12 at 15:58

I think this replicates the logic:

price = @booking_request.guests * @table_offer.price_cents / 100
@remaining = @coupon.current_amount - price
@coupon.current_amount = @remaining
@price_to_play = @remaining >= 0 ? 0 : -@remaining
coupon.save


Note that I avoid setting @price_to_play to a value and changing it afterwards, that kind of variable re-using makes code harder to understand.

-