def _generate_reservation_email_html_subject(booking): stock = booking.stock user = booking.user venue = stock.resolvedOffer.venue stock_description = _get_stock_description(stock) booking_is_on_event = stock.beginningDatetime is None if booking_is_on_event: email_subject = 'Confirmation de votre commande pour {}'.format(stock_description) email_html = render_template('mails/user_confirmation_email_thing.html', user=user, booking_token=booking.token, thing_name=stock.resolvedOffer.product.name, thing_reference=stock.resolvedOffer.product.idAtProviders, venue=venue) else: date_in_tz = _get_event_datetime(stock) formatted_date_time = format_datetime(date_in_tz) email_subject = 'Confirmation de votre réservation pour {}'.format(stock_description) email_html = render_template('mails/user_confirmation_email_event.html', user=user, booking_token=booking.token, event_occurrence_name=stock.offer.product.name, formatted_date_time=formatted_date_time, venue=venue ) return email_html, email_subject
def make_offerer_driven_cancellation_email_for_offerer(booking): stock_name = booking.stock.resolvedOffer.product.name venue = booking.stock.resolvedOffer.venue user_name = booking.user.publicName user_email = booking.user.email email_subject = 'Confirmation de votre annulation de réservation pour {}, proposé par {}'.format(stock_name, venue.name) ongoing_stock_bookings = find_all_ongoing_bookings_by_stock(booking.stock) stock_date_time = None booking_is_on_event = booking.stock.beginningDatetime is not None if booking_is_on_event: date_in_tz = _get_event_datetime(booking.stock) stock_date_time = format_datetime(date_in_tz) email_html = render_template('mails/offerer_recap_email_after_offerer_cancellation.html', booking_is_on_event=booking_is_on_event, user_name=user_name, user_email=user_email, stock_date_time=stock_date_time, number_of_bookings=len(ongoing_stock_bookings), stock_bookings=ongoing_stock_bookings, stock_name=stock_name, venue=venue, ) return { 'FromName': 'Pass Culture', 'FromEmail': SUPPORT_EMAIL_ADDRESS if feature_send_mail_to_users_enabled() else DEV_EMAIL_ADDRESS, 'Subject': email_subject, 'Html-part': email_html, }
def make_offerer_driven_cancellation_email_for_user(booking): offer_name = booking.stock.resolvedOffer.product.name offerer_name = booking.stock.resolvedOffer.venue.managingOfferer.name booking_value = booking.amount * booking.quantity booking_is_on_event = booking.stock.beginningDatetime is not None formatted_datetime = None commande_ou_reservation = 'réservation' if booking_is_on_event else 'commande' if booking_is_on_event: date_in_tz = _get_event_datetime(booking.stock) formatted_datetime = format_datetime(date_in_tz) email_html = render_template('mails/user_cancellation_by_offerer_email.html', booking_is_on_event=booking_is_on_event, user=booking.user, offer_name=offer_name, event_date=formatted_datetime, offerer_name=offerer_name, booking_value=booking_value ) email_subject = 'Votre {} pour {}, proposé par {} a été annulée par l\'offreur'.format(commande_ou_reservation, offer_name, offerer_name) return { 'FromName': 'Pass Culture', 'FromEmail': SUPPORT_EMAIL_ADDRESS if feature_send_mail_to_users_enabled() else DEV_EMAIL_ADDRESS, 'Subject': email_subject, 'Html-part': email_html, }
def _get_stock_description(stock): if stock.beginningDatetime: date_in_tz = _get_event_datetime(stock) description = '{} le {}'.format(stock.offer.product.name, format_datetime(date_in_tz)) elif ProductType.is_thing(stock.resolvedOffer.type): description = str(stock.resolvedOffer.product.name) return description
def make_final_recap_email_for_stock_with_event(stock): booking_is_on_event = stock.beginningDatetime is not None venue = stock.resolvedOffer.venue date_in_tz = _get_event_datetime(stock) formatted_datetime = format_datetime(date_in_tz) email_subject = '[Réservations] Récapitulatif pour {} le {}'.format(stock.offer.product.name, formatted_datetime) stock_bookings = find_all_ongoing_bookings_by_stock(stock) email_html = render_template('mails/offerer_final_recap_email.html', booking_is_on_event=booking_is_on_event, number_of_bookings=len(stock_bookings), stock_name=stock.offer.product.name, stock_date_time=formatted_datetime, venue=venue, stock_bookings=stock_bookings) return { 'FromName': 'Pass Culture', 'FromEmail': SUPPORT_EMAIL_ADDRESS, 'Subject': email_subject, 'Html-part': email_html, }
def _generate_user_driven_cancellation_email_for_user(user, stock): venue = stock.resolvedOffer.venue if stock.beginningDatetime is None: email_subject = 'Annulation de votre commande pour {}'.format(stock.resolvedOffer.product.name) email_html = render_template('mails/user_cancellation_email_thing.html', user=user, thing_name=stock.resolvedOffer.product.name, thing_reference=stock.resolvedOffer.product.idAtProviders, venue=venue) else: date_in_tz = _get_event_datetime(stock) formatted_date_time = format_datetime(date_in_tz) email_html = render_template('mails/user_cancellation_email_event.html', user=user, event_occurrence_name=stock.offer.product.name, venue=venue, formatted_date_time=formatted_date_time) email_subject = 'Annulation de votre réservation pour {} le {}'.format( stock.offer.product.name, formatted_date_time ) return email_html, email_subject
def make_offerer_booking_recap_email_after_user_action(booking, is_cancellation=False): venue = booking.stock.resolvedOffer.venue user = booking.user stock_bookings = find_all_ongoing_bookings_by_stock(booking.stock) product = booking.stock.resolvedOffer.product human_offer_id = humanize(booking.stock.resolvedOffer.id) booking_is_on_event = booking.stock.beginningDatetime is not None if is_cancellation: email_subject = f'[Réservations] Annulation de réservation pour {product.name}' else: email_subject = f'[Réservations {venue.departementCode}] Nouvelle réservation pour {product.name}' if booking_is_on_event: date_in_tz = _get_event_datetime(booking.stock) formatted_datetime = format_datetime(date_in_tz) email_subject += f' - {formatted_datetime}' else: formatted_datetime = None email_html = render_template('mails/offerer_recap_email_after_user_action.html', is_cancellation=is_cancellation, booking_is_on_event=booking_is_on_event, number_of_bookings=len(stock_bookings), event_or_thing=product, stock_date_time=formatted_datetime, venue=venue, stock_bookings=stock_bookings, user=user, pro_url=PRO_URL, human_offer_id=human_offer_id) return { 'FromName': 'Pass Culture', 'FromEmail': SUPPORT_EMAIL_ADDRESS, 'Subject': email_subject, 'Html-part': email_html, }
def make_booking_recap_email(offer, booking=None, is_cancellation=False): email_html = '<html><body>' email_html += '<p>Cher partenaire Pass Culture,</p>' if offer.eventOccurence: date = offer.eventOccurence.beginningDatetime from_zone = tz.gettz('UTC') to_zone = tz.gettz('UTC-3' if offer.eventOccurence.venue.departementCode == '97' else 'Europe/Paris') utc = date.replace(tzinfo=from_zone) in_tz = utc.astimezone(to_zone) description = '%s le %s' % (offer.eventOccurence.event.name, format_datetime(in_tz)) elif offer.thing: description = '%s (Ref: %s)' % (offer.thing.name, offer.thing.idAtProviders) email_subject = '[Reservations] ' if booking is not None: user = booking.user email_html += '<p>%s (%s)' % (user.publicName, user.email) if is_cancellation: email_subject += 'Annulation pour ' + description email_html += ' vient d\'annuler sa réservation' else: email_subject += 'Nouvelle reservation pour ' + description email_html += ' vient de faire une nouvelle réservation' email_html += '</p>' else: email_subject += 'Récapitulatif pour ' + description if offer.bookingLimitDatetime is not None: if offer.bookingLimitDatetime < datetime.utcnow(): email_html += '<p>Voici le récapitulatif final des réservations (total ' else: email_html += '<p>Voici le récapitulatif des réservations à ce jour (total ' email_html += '%s) pour %s</p>' % (len(offer.bookings), description) if len(offer.bookings) > 0: email_html += '<table>' email_html += '<tr><th>Nom ou pseudo</th>'\ + '<th>Email</th>'\ + '<th>Code réservation</th>'\ '</tr>' for a_booking in offer.bookings: email_html += '<tr>'\ + '<td>%s</td>' % a_booking.user.publicName\ + '<td>%s</td>' % a_booking.user.email\ + '<td>%s</td>' % a_booking.token\ + '</tr>' email_html += '</table>' else: email_html += '<p>Aucune réservation</p>' email_html += '</body></html>' return { 'FromName': 'Pass Culture', 'FromEmail': '*****@*****.**', 'Subject': email_subject, 'Html-part': email_html, }