refactor the promotion one rules code