refactored and added some promotional rules logic.