def practice_service_messages(self): grades = [10, 11, 12] messages = [] expiring_services = self.expiring_services() # Format messages about expiring services. if expiring_services.values(): msg = '' num_days = self.number_of_days_until(expiring_services) if num_days < 1: days = 'today.' else: days = num_days > 1 and 'in %s days.' or 'in %s day.' days = days % num_days template = 'Your access to %s practice will expire '+days service_grades = expiring_services.keys() service_grades.sort() if service_grades == grades: msg = template % self.subject.capitalize() else: services = ' and '.join(['Grade %s' %s for s in service_grades]) msg = template % services messages.append(msg) else: # no services expiring? Then don't show any messages. return [] # Now, we do the formatting of the active services. active_services = self.active_services() # Remove all the services that we already reported on above. for grade in expiring_services.keys(): active_services.pop(grade, None) if active_services.values(): # flatten the list of memberservice lists memberservices = ListType(chain.from_iterable(active_services.values())) # sort according to expiry_date memberservices.sort(key=lambda service: service.expiry_date) # use the first expiry date formatted_expiry_date = \ self.format_date(memberservices[0].expiry_date) msg = '' template = 'You will still have access to %s practice until %s.' service_grades = active_services.keys() service_grades.sort() services = ' and '.join(['Grade %s' %s for s in service_grades]) msg = template % (services, formatted_expiry_date) messages.append(msg) # Lastly, add a link to the order form. if expiring_services: messages.append( '<a href="/order">To extend your subscription, click here.</a>') return messages
def number_of_days_until(self, expiring_services): # flatten the list of memberservice lists memberservices = ListType(chain.from_iterable(expiring_services.values())) # sort according to expiry_date memberservices.sort(key=lambda service: service.expiry_date) # use the last expiry date expiry_date = memberservices[0].expiry_date now = datetime.now().date() delta = expiry_date - now return delta.days