Ejemplo n.º 1
0
def promote_member(user: _User, source: str) -> _User:
    """
    Promote a user to Member role and change it's role on Mailchimp. 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()
    try:
        _mailchimp_facade.create_or_update_member(user.first_name, user.email)
        _mailchimp_facade.tag_as(user.email, f'turma-{cohort.slug}')
    except _MailChimpError:
        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
Ejemplo n.º 2
0
def click_client_checkout(user: _User):
    """
    Mark user as visited client landing page
    :param user:
    :return:
    """
    _core_facade.client_checkout(user, None)
    _mailchimp_facade.tag_as(user.email, 'client-checkout')
Ejemplo n.º 3
0
def visit_cpl3(user: _User, source: str) -> None:
    """
    User visit CPL2
    :param user:
    :param source:
    :return:
    """
    _core_facade.visit_cpl3(user, source)
    _mailchimp_facade.tag_as(user.email, 'cpl3')
Ejemplo n.º 4
0
def tests_tag_as_potencial_client(resps):
    resps.add(resps.POST,
              'https://us17.api.mailchimp.com/3.0/lists/list_id/members/f21127224363bab9ff7af3574549a203/tags', json='')
    tag_as('*****@*****.**', 'potencial_client', 'potencial-member')
    assert json.loads(resps.calls[0].request.body) == {
        'tags': [
            {'name': 'potencial_client', 'status': 'active'},
            {'name': 'potencial-member', 'status': 'active'}]
    }
Ejemplo n.º 5
0
def visit_client_landing_page(user: _User, source: str) -> None:
    """
    Marke user as visited client landing page
    :param source: string containing source of traffic
    :param user:
    :return:
    """
    _core_facade.visit_client_landing_page(user, source)
    _mailchimp_facade.tag_as(user.email, 'potential-client')
Ejemplo n.º 6
0
def subscribe_to_waiting_list(user: _User, source: str) -> None:
    """
    Subscribe user to waiting list
    :param user:
    :param source:
    :return:
    """
    _core_facade.subscribe_to_waiting_list(user, source)
    _mailchimp_facade.tag_as(user.email, 'lista-de-espera')
Ejemplo n.º 7
0
def client_landing_page(request):
    tag_as(request.user.email, 'potential-client')
    notification_url = reverse('payments:pagarme_notification',
                               kwargs={'user_id': request.user.id})
    return render(
        request, 'payments/client_landing_page.html', {
            'PAGARME_CRYPTO_KEY': settings.PAGARME_CRYPTO_KEY,
            'price': PYTOOLS_PRICE,
            'notification_url': request.build_absolute_uri(notification_url)
        })
Ejemplo n.º 8
0
def client_checkout(request):
    """
    Track user who clicked on client LP Checkout button
    :param request:
    :return:
    """
    if request.method != 'POST':
        return
    tag_as(request.user.email, 'client-checkout')
    return JsonResponse({'client-checkout': 'ok'})
Ejemplo n.º 9
0
def visit_member_landing_page(user, source):
    """
    Mark user as visited member landing page
    :param source: string containing source of traffic
    :param user:
    :return:
    """
    _core_facade.visit_member_landing_page(user, source)
    try:
        _mailchimp_facade.tag_as(user.email, 'potential-member')
    except _MailChimpError:
        pass  # Ok not handling, probably invalid email
Ejemplo n.º 10
0
def run_pytools_promotion_campaign() -> int:
    """
    Run pytools campaign for users registered 7 weeks ago
    :return: number of user's marked for promotion
    """
    begin, end = _payments_facade.calculate_7th_week_before_promotion()
    promotion_users = _core_facade.find_leads_by_date_joined_interval(begin, end)
    for user in promotion_users:
        try:
            _mailchimp_facade.tag_as(user.email, 'pytools-promotion')
        except _MailChimpError:
            pass
    return len(promotion_users)
Ejemplo n.º 11
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
Ejemplo n.º 12
0
def sso(request):
    """
    Proceed login into discourse

    Code based on https://meta.discourse.org/t/sso-example-for-django/14258
    """
    if not has_permission(request.user, access_forum):
        tag_as(request.user.email, 'potencial-member')
        return render(request, 'discourse/landing_page.html')
    payload = request.GET.get('sso')
    signature = request.GET.get('sig')
    try:
        decoded = _decode_payload(payload, signature)
        _check_nonce_is_present(decoded)
    except InvalidSOOPayload as e:
        return bad_request(request, e)
    else:
        nonce = parse.parse_qs(decoded)['nonce'][0]
        user = request.user
        url = _generate_discourse_login_url(nonce, user)
        return HttpResponseRedirect(url)
Ejemplo n.º 13
0
def client_landing_page(request):
    user = request.user
    if user.is_authenticated:
        tag_as(user.email, 'potential-client')
        notification_url = reverse('payments:pagarme_notification',
                                   kwargs={'user_id': user.id})
    else:
        notification_url = reverse('payments:pagarme_anonymous_notification')
    user_creation = user.date_joined if user.is_authenticated else now()
    is_promotion_season = payment_facade.is_on_pytools_promotion_season(
        user_creation)
    price = PYTOOLS_PROMOTION_PRICE if is_promotion_season else PYTOOLS_PRICE
    price_float = price / 100
    _, promotion_end_date = payment_facade.calculate_pytools_promotion_interval(
    )
    return render(
        request, 'payments/client_landing_page.html', {
            'PAGARME_CRYPTO_KEY': settings.PAGARME_CRYPTO_KEY,
            'price': price,
            'price_float': price_float,
            'is_promotion_season': is_promotion_season,
            'promotion_end_date': promotion_end_date,
            'notification_url': request.build_absolute_uri(notification_url)
        })
Ejemplo n.º 14
0
def waiting_list_ty(request):
    tag_as(request.user.email, 'lista-de-espera')
    return render(request, 'payments/waiting_list_ty.html',
                  {'email': request.user.email})
Ejemplo n.º 15
0
def member_landing_page(request):
    tag_as(request.user.email, 'potential-member')
    return render(request, 'payments/member_landing_page.html', {})
Ejemplo n.º 16
0
def webinar(request, slug):
    if not has_permission(request.user, access_cohorts):
        tag_as(request.user.email, 'potencial-member')
        return render(request, 'cohorts/webinar_landing_page.html')
    return render(request, 'cohorts/webinar_detail.html',
                  {'webinar': facade.find_webinar(slug=slug)})
Ejemplo n.º 17
0
def live_class(request, pk):
    if not has_permission(request.user, access_cohorts):
        tag_as(request.user.email, 'potencial-member')
        return render(request, 'cohorts/live_class_landing_page.html')
    return render(request, 'cohorts/live_class_detail.html',
                  {'live_class': facade.find_live_class(pk=pk)})
Ejemplo n.º 18
0
def enrol(request, slug):
    module = get_module_with_contents(slug)
    tag_as(request.user.email, slug)
    return render(request, 'modules/module_enrol.html', {'module': module})