Beispiel #1
0
def promote_member(user: _User, source: str) -> _User:
    """
    Promote a user to Member role and change it's role on Email Marketing. Will not fail in case API call fails.
    Email welcome email is sent to user
    :param source: source of traffic
    :param user:
    :return:
    """
    _core_facade.promote_to_member(user, source)
    _cohorts_facade.subscribe_to_last_cohort(user)
    cohort = _cohorts_facade.find_most_recent_cohort()
    sync_user_on_discourse(user)
    try:
        _email_marketing_facade.create_or_update_member(user.first_name,
                                                        user.email,
                                                        id=user.id)
        _email_marketing_facade.tag_as(user.email, user.id,
                                       f'turma-{cohort.slug}')
    except _ActiveCampaignError:
        pass
    email_msg = render_to_string(
        'payments/membership_email.txt', {
            'user': user,
            'cohort_detail_url': build_absolute_uri(cohort.get_absolute_url())
        })
    _send_mail(
        f'Inscrição na Turma {cohort.title} realizada! Confira o link com detalhes.',
        email_msg, _settings.DEFAULT_FROM_EMAIL, [user.email])
    return user
Beispiel #2
0
def member_landing_page(request):
    user = request.user
    if user.is_authenticated:
        user_facade.visit_member_landing_page(request.user,
                                              source=request.GET.get(
                                                  'utm_source',
                                                  default='unknown'))
        notification_url = reverse('payments:membership_notification',
                                   kwargs={'user_id': user.id})
    else:
        notification_url = reverse(
            'payments:membership_anonymous_notification')

    if settings.SUBSCRIPTIONS_OPEN:
        template = 'payments/member_landing_page_subscription_open.html'
        price = membership_facade.calculate_membership_price(user)
        price_float = price / 100
        price_installment = (price // 10) / 100
        return render(
            request, template, {
                'PAGARME_CRYPTO_KEY': settings.PAGARME_CRYPTO_KEY,
                'price': price,
                'price_float': price_float,
                'price_installment': price_installment,
                'notification_url':
                request.build_absolute_uri(notification_url),
                'cohort': cohorts_facade.find_most_recent_cohort()
            })
    else:
        template = 'payments/member_landing_page_subscription_closed.html'
        return render(request, template, {})
Beispiel #3
0
def ty(request):
    user = request.user
    cohort_slug = find_most_recent_cohort().slug
    python_birds_path = reverse(
        'core:lead_landing') + f'?utm_source=lancamento-{cohort_slug}'
    if user.is_authenticated:
        user_facade.subscribe_launch_landing_page(
            user, request.GET.get('utm_source', 'unknown'))
    return render(request, 'launch/ty.html',
                  {'python_birds_path': python_birds_path})
Beispiel #4
0
def promote_member(user: _User, source: str) -> _User:
    """
    Promote a user to Member role and change it's role on Email Marketing. Will not fail in case API call fails.
    Email welcome email is sent to user
    :param source: source of traffic
    :param user:
    :return:
    """
    _core_facade.promote_to_member(user, source)
    _cohorts_facade.subscribe_to_last_cohort(user)
    cohort = _cohorts_facade.find_most_recent_cohort()
    sync_user_on_discourse.delay(user.id)
    _email_marketing_facade.create_or_update_member.delay(
        user.first_name, user.email, f'turma-{cohort.slug}', id=user.id)
    return user
Beispiel #5
0
def _render_launch_page(is_launch_open, request, template_closed_launch,
                        template_open_launch, redirect_path_name: str):
    user = request.user
    if user.is_authenticated:
        user_facade.visit_member_landing_page(request.user,
                                              source=request.GET.get(
                                                  'utm_source',
                                                  default='unknown'))
        notification_url = reverse('payments:membership_notification',
                                   kwargs={'user_id': user.id})
    else:
        notification_url = reverse(
            'payments:membership_anonymous_notification')
    if is_launch_open:
        template = template_open_launch
        discount = membership_facade.calculate_discount(user)
        discount_float = discount / 100

        price = membership_facade.calculate_membership_price(user)
        price_float = price / 100
        full_price_float = price_float + discount_float
        price_installment = (price // 10) / 100
        full_price_installment = full_price_float // 10
        login_url = reverse('login')
        redirect_path = reverse(redirect_path_name)
        qs = urlencode(
            {'utm_source': request.GET.get('utm_source', 'unknown')})
        redirect_url = f'{redirect_path}?{qs}'
        qs = urlencode({'next': redirect_url})
        login_url = f'{login_url}?{qs}'
        return render(
            request, template, {
                'PAGARME_CRYPTO_KEY': settings.PAGARME_CRYPTO_KEY,
                'price': price,
                'price_float': price_float,
                'price_installment': price_installment,
                'notification_url':
                request.build_absolute_uri(notification_url),
                'cohort': cohorts_facade.find_most_recent_cohort(),
                'has_discount': discount_float > 0,
                'discount_float': discount_float,
                'full_price_installment': full_price_installment,
                'full_price_float': full_price_float,
                'login_url': login_url,
            })
    else:
        template = template_closed_launch
        return render(request, template, {})
Beispiel #6
0
def force_register_member(first_name, email, source='unknown'):
    """
    Create a new user on the system generation a random password or update existing one based on email.
    An Welcome email is sent to the user informing his password with the link to change it.
    User is also registered on Email Marketing. But she will be registered even if api call fails
    :param first_name: User's first name
    :param email: User's email
    :param source: source of User traffic
    :return: User
    """
    user = _core_facade.register_member(first_name, email, source)
    _cohorts_facade.subscribe_to_last_cohort(user)
    cohort = _cohorts_facade.find_most_recent_cohort()
    sync_user_on_discourse.delay(user.id)
    _email_marketing_facade.create_or_update_member.delay(first_name, email, f'turma-{cohort.slug}', id=user.id)
    return user
Beispiel #7
0
def force_register_member(first_name, email, source='unknown'):
    """
    Create a new user on the system generation a random password or update existing one based on email.
    An Welcome email is sent to the user informing his password with the link to change it.
    User is also registered on Mailchimp. But she will be registered even if api call fails
    :param first_name: User's first name
    :param email: User's email
    :param source: source of User traffic
    :return: User
    """
    user = _core_facade.register_member(first_name, email, source)
    _cohorts_facade.subscribe_to_last_cohort(user)
    cohort = _cohorts_facade.find_most_recent_cohort()
    try:
        _mailchimp_facade.create_or_update_member(first_name, email)
        _mailchimp_facade.tag_as(email, f'turma-{cohort.slug}')
    except _MailChimpError:
        pass
    return user
def activate_subscription_on_all_services(subscription: Subscription, responsible=None, observation='',
                                          phone=None) -> Subscription:
    """
    Create or activate user account on Memberkit, Active Campaign and Discourse
    :param subscription:
    :return:
    """
    memberkit_facade.activate(subscription, responsible, observation)
    sync_user_on_discourse(subscription)
    subscriber = subscription.subscriber
    tags = list(subscription.email_marketing_tags)
    if subscription.include_on_cohort:
        cohort_facade.subscribe_to_last_cohort(subscriber)
        cohort = cohort_facade.find_most_recent_cohort()
        tags.append(f'turma-{cohort.slug}')
    email_marketing_facade.create_or_update_user.delay(
        subscriber.get_full_name(),
        subscriber.email,
        None,
        *tags,
        id=subscriber.id,
        phone=phone
    )
    return subscription
Beispiel #9
0
def membership_thanks(request):
    return render(request, 'payments/membership_thanks.html',
                  {'cohort': cohorts_facade.find_most_recent_cohort()})