def subscription(request, subscription_id=None): ''' Details for an subscription of a member ''' member = request.user.member future_subscription = member.future_subscription is not None can_order = member.future_subscription is None and ( member.subscription is None or member.subscription.canceled) renderdict = get_menu_dict(request) if subscription_id is None: subscription = member.subscription else: subscription = get_object_or_404(Subscription, id=subscription_id) future_subscription = future_subscription and not ( subscription == member.future_subscription) end_date = end_of_next_business_year() if subscription is not None: cancelation_date = subscription.cancelation_date if cancelation_date is not None and cancelation_date <= next_cancelation_date( ): end_date = end_of_business_year() renderdict.update({ 'subscription': subscription, 'co_members': subscription.recipients.exclude(email=request.user.member.email), 'primary': subscription.primary_member.email == request.user.member.email, 'next_extra_subscription_date': Subscription.next_extra_change_date(), 'next_size_date': Subscription.next_size_change_date(), 'has_extra_subscriptions': ExtraSubscriptionCategoryDao.all_categories_ordered().count() > 0, 'sub_overview_addons': addons.config.get_sub_overviews(), }) renderdict.update({ 'no_subscription': subscription is None, 'end_date': end_date, 'can_order': can_order, 'future_subscription': future_subscription, 'member': request.user.member, 'shares': request.user.member.active_shares.count(), 'shares_unpaid': request.user.member.share_set.filter(paid_date=None).count(), 'menu': { 'subscription': 'active' }, }) return render(request, 'subscription.html', renderdict)
def subscription_change(request, subscription_id): ''' change an subscription ''' subscription = get_object_or_404(Subscription, id=subscription_id) now = timezone.now().date() can_change = not (temporal.cancelation_date() <= now < temporal.start_of_next_business_year()) renderdict = get_menu_dict(request) renderdict.update({ 'subscription': subscription, 'member': request.user.member, 'change_size': can_change, 'next_cancel_date': temporal.next_cancelation_date(), 'next_extra_subscription_date': Subscription.next_extra_change_date(), 'next_business_year': temporal.start_of_next_business_year(), 'sub_change_addons': addons.config.get_sub_changes(), }) return render(request, 'subscription_change.html', renderdict)
def subscription(request, subscription_id=None): ''' Details for an subscription of a member ''' member = request.user.member future_subscription = member.subscription_future is not None can_order = member.subscription_future is None and ( member.subscription_current is None or member.subscription_current.cancellation_date is not None) renderdict = get_menu_dict(request, 'subscription') if subscription_id is None: subscription = member.subscription_current else: subscription = get_object_or_404(Subscription, id=subscription_id) future_subscription = future_subscription and not ( subscription == member.subscription_future) end_date = end_of_next_business_year() if subscription is not None: cancellation_date = subscription.cancellation_date if cancellation_date is not None and cancellation_date <= next_cancelation_date( ): end_date = end_of_business_year() asc = member.usable_shares_count share_error = subscription.share_overflow - asc < 0 primary = subscription.primary_member.id == member.id can_leave = member.is_cooperation_member and not share_error and not primary renderdict.update({ 'subscription': subscription, 'co_members': subscription.co_members(member), 'primary': subscription.primary_member.email == member.email, 'next_extra_subscription_date': Subscription.next_extra_change_date(), 'next_size_date': Subscription.next_size_change_date(), 'has_extra_subscriptions': ExtraSubscriptionCategoryDao.all_categories_ordered().count() > 0, 'sub_overview_addons': addons.config.get_sub_overviews(), 'can_leave': can_leave, }) renderdict.update({ 'no_subscription': subscription is None, 'end_date': end_date, 'can_order': can_order, 'future_subscription': future_subscription, 'member': request.user.member, 'shares': request.user.member.active_shares.count(), 'shares_unpaid': request.user.member.share_set.filter(paid_date=None).count(), }) return render(request, 'subscription.html', renderdict)
def import_abo(self, data): fields = data['fields'] abo = Subscription(pk=data['pk']) abo.depot = Depot.objects.get(pk=fields['depot']) abo.future_depot = None abo.primary_member = None # filled in later in second pass abo.nickname = 'Abo ' + fields['number'] abo.start_date = ACTIVATION_DATE if fields['active']: abo.end_date = None else: abo.end_date = DEACTIVATION_DATE abo.notes = "" abo.save() if fields['active']: abo.activate(datetime.date.fromisoformat(ACTIVATION_DATE)) else: abo.activate(datetime.date.fromisoformat(ACTIVATION_DATE)) abo.deactivate(datetime.date.fromisoformat(DEACTIVATION_DATE))