refactor date for accepting days
refactor out calendar validations and key generation out to new class to remove duplication between classes