Beispiel #1
0
def cancel_share(share, now, end_date):
    now = now or timezone.now().date()
    end_date = end_date or next_membership_end_date()
    if share.paid_date is None:
        share.delete()
    else:
        share.cancelled_date = now
        share.termination_date = end_date
        share.save()
Beispiel #2
0
def cancel_membership(request):
    member = request.user.member
    if request.method == 'POST':
        now = timezone.now().date()
        end_date = next_membership_end_date()
        message = request.POST.get('message')
        member = request.user.member
        member.canceled = True
        member.end_date = end_date
        member.cancelation_date = now
        if member.is_cooperation_member:
            adminnotification.member_canceled(member, end_date, message)
        else:
            member.inactive = True

        member.save()
        for share in member.active_shares:
            cancel_share(share, now, end_date)
        return redirect('profile')

    missing_iban = member.iban == ''
    coop_member = member.is_cooperation_member
    asc = member.usable_shares_count
    sub = member.subscription
    f_sub = member.future_subscription
    future_active = f_sub is not None and f_sub.state == 'active' and f_sub.state == 'waiting'
    current_active = sub is not None and sub.state == 'active' and sub.state == 'waiting'
    future = future_active and f_sub.share_overflow - asc < 0
    current = current_active and sub.share_overflow - asc < 0
    share_error = future or current
    can_cancel = not coop_member or (not missing_iban and not share_error)

    renderdict = get_menu_dict(request)
    renderdict.update({
        'coop_member': coop_member,
        'end_date': next_membership_end_date(),
        'member': member,
        'can_cancel': can_cancel,
        'missing_iban': missing_iban,
    })
    return render(request, 'cancelmembership.html', renderdict)