Beispiel #1
0
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
Beispiel #2
0
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,
    }
Beispiel #3
0
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,
    }
Beispiel #4
0
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
Beispiel #5
0
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,
    }
Beispiel #6
0
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
Beispiel #7
0
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,
    }
Beispiel #8
0
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,
           }