def __init__(self, reservations, language): self.reservations = reservations self.language = language combined = tuple(combine_reservations(reservations)) assert len(combined) == 1 self.reservation = combined[0]
def send_reservation_mail(reservations, email_type, language, to_managers=False, reason=u'', old_time=None, new_time=None): if isinstance(reservations, CombinedReservations): reservation = reservations else: reservation = tuple(combine_reservations(reservations))[0] resource = utils.get_resource_by_uuid(reservation.resource) # the resource doesn't currently exist in testing so we quietly # exit. This should be changed => #TODO if not resource: log.warn('Cannot send email as the resource does not exist') return sender = utils.get_site_email_sender() if not sender: log.warn('Cannot send email as no sender is configured') return resource = resource.getObject() if to_managers: recipients = get_manager_emails(resource) if not recipients: log.warn("Couldn't find a manager to send an email to") return else: recipients = [reservation.email] subject, body = get_email_content(resource, email_type, language) for recipient in recipients: mail = ReservationMail(resource, reservation, sender=sender, recipient=recipient, subject=subject, body=body, reason=reason, old_time=old_time, new_time=new_time) if may_send_mail(resource, mail, intended_for_admin=to_managers): send_mail(resource, mail)
def test_combined_reservations(self): class Reservation(object): def __init__(self, id, token, timespans, data): self.id = id self.data = data self.token = token self._timespans = timespans def timespans(self): return self._timespans reservations = [ Reservation(1, 'a', [ (date(2014, 1, 1), date(2014, 1, 1)), (date(2014, 1, 2), date(2014, 1, 2)), (date(2014, 1, 3), date(2014, 1, 3)), ], data={'id': 1}), Reservation(2, 'b', [ (date(2015, 1, 1), date(2015, 1, 1)), (date(2015, 1, 2), date(2015, 1, 2)), ], data={'id': 2}), Reservation(3, 'b', [ (date(2015, 1, 3), date(2015, 1, 3)), ], data={'id': 3}), ] combined = list(combine_reservations(reservations)) self.assertEqual(len(combined), 2) a, b = combined self.assertEqual(a.reservation.data['id'], 1) self.assertEqual(b.reservation.data['id'], 2) self.assertEqual(a.timespans(), [ (date(2014, 1, 1), date(2014, 1, 1)), (date(2014, 1, 2), date(2014, 1, 2)), (date(2014, 1, 3), date(2014, 1, 3)), ]) self.assertEqual(b.timespans(), [ (date(2015, 1, 1), date(2015, 1, 1)), (date(2015, 1, 2), date(2015, 1, 2)), (date(2015, 1, 3), date(2015, 1, 3)), ])
def send_reservation_mail( reservations, email_type, language, to_managers=False, reason=u'', old_time=None, new_time=None ): if isinstance(reservations, CombinedReservations): reservation = reservations else: reservation = tuple(combine_reservations(reservations))[0] resource = utils.get_resource_by_uuid(reservation.resource) # the resource doesn't currently exist in testing so we quietly # exit. This should be changed => #TODO if not resource: log.warn('Cannot send email as the resource does not exist') return sender = utils.get_site_email_sender() if not sender: log.warn('Cannot send email as no sender is configured') return resource = resource.getObject() if to_managers: recipients = get_manager_emails(resource) if not recipients: log.warn("Couldn't find a manager to send an email to") return else: recipients = [reservation.email] subject, body = get_email_content(resource, email_type, language) for recipient in recipients: mail = ReservationMail( resource, reservation, sender=sender, recipient=recipient, subject=subject, body=body, reason=reason, old_time=old_time, new_time=new_time ) if may_send_mail(resource, mail, intended_for_admin=to_managers): send_mail(resource, mail)
def send_reservations_confirmed(reservations, language): sender = utils.get_site_email_sender() if not sender: log.warn('Cannot send email as no sender is configured') return # load resources resources = load_resources(reservations) # send reservations grouped by reservee email groupkey = lambda r: r.email by_recipient = groupby(sorted(reservations, key=groupkey), key=groupkey) for recipient, grouped_reservations in by_recipient: lines = [] for reservation in combine_reservations(grouped_reservations): resource = resources[reservation.resource] prefix = '' if reservation.autoapprovable else '* ' title_prefix = '{}x '.format(reservation.quota) lines.append( prefix + utils.get_resource_title(resource, title_prefix) ) for start, end in reservation.timespans(): lines.append(utils.display_date(start, end)) lines.append('') # differs between resources subject, body = get_email_content( resource, 'reservation_received', language ) mail = ReservationMail( resource, reservation, sender=sender, recipient=recipient, subject=subject, body=body, reservations=lines[:-1] ) if may_send_mail(resource, mail, intended_for_admin=False): send_mail(resource, mail)
def send_reservations_confirmed(reservations, language): sender = utils.get_site_email_sender() if not sender: log.warn('Cannot send email as no sender is configured') return # load resources resources = load_resources(reservations) # send reservations grouped by reservee email groupkey = lambda r: r.email by_recipient = groupby(sorted(reservations, key=groupkey), key=groupkey) for recipient, grouped_reservations in by_recipient: lines = [] for reservation in combine_reservations(grouped_reservations): resource = resources[reservation.resource] prefix = '' if reservation.autoapprovable else '* ' title_prefix = '{}x '.format(reservation.quota) lines.append(prefix + utils.get_resource_title(resource, title_prefix)) for start, end in reservation.timespans(): lines.append(utils.display_date(start, end)) lines.append('') # differs between resources subject, body = get_email_content(resource, 'reservation_received', language) mail = ReservationMail(resource, reservation, sender=sender, recipient=recipient, subject=subject, body=body, reservations=lines[:-1]) if may_send_mail(resource, mail, intended_for_admin=False): send_mail(resource, mail)
def on_reservations_confirmed(event): # send one mail to the reservee if settings.get('send_email_to_reservees'): send_reservations_confirmed(event.reservations, event.language) # send many mails to the admins if settings.get('send_email_to_managers') != 'never': for reservation in combine_reservations(event.reservations): if reservation.autoapprovable: send_reservation_mail( reservation, 'reservation_made', event.language, to_managers=True ) else: send_reservation_mail( reservation, 'reservation_pending', event.language, to_managers=True )
def on_reservations_confirmed(event): # send one mail to the reservee if settings.get('send_email_to_reservees'): send_reservations_confirmed(event.reservations, event.language) # send many mails to the admins if settings.get('send_email_to_managers') != 'never': for reservation in combine_reservations(event.reservations): if reservation.autoapprovable: send_reservation_mail(reservation, 'reservation_made', event.language, to_managers=True) else: send_reservation_mail(reservation, 'reservation_pending', event.language, to_managers=True)
def unique(self, reservations): return tuple(combine_reservations(reservations))