No need to have the `else` and repeat twice the `new` state. Just get it out of the if and it will be OK.
What about the tricky states like 1 payment completed and 1 cancelled? As it is now it will be considered as `new` which is weird. I would add a `mixed` state for this.