def size_change(request, subscription_id): """ Overriden from core change the size of a subscription """ subscription = get_object_or_404(Subscription, id=subscription_id) parts_order_allowed = subscription.waiting or subscription.active if request.method == 'POST' and int(timezone.now().strftime( "%m")) <= Config.business_year_cancelation_month(): if not parts_order_allowed: raise ValidationError( _('Für gekündigte {} können keine Bestandteile bestellt werden' ).format(Config.vocabulary('subscription_pl')), code='invalid') form = SubscriptionPartOrderForm(subscription, request.POST) if form.is_valid(): selected = form.get_selected() err_msg = quantity_error(selected, subscription.active_and_future_parts) if not err_msg: create_subscription_parts(subscription, selected) return redirect("content_edit", subscription_id=subscription_id) else: form.add_error(None, err_msg) else: form = SubscriptionPartOrderForm() renderdict = { 'form': form, 'subscription': subscription, 'hours_used': Config.assignment_unit() == 'HOURS', 'next_cancel_date': temporal.next_cancelation_date(), 'parts_order_allowed': parts_order_allowed, } return render(request, 'size_change.html', renderdict)
def size_change(request, subscription_id): """ change the size of a subscription """ subscription = get_object_or_404(Subscription, id=subscription_id) parts_order_allowed = subscription.waiting or subscription.active if request.method == 'POST': if not parts_order_allowed: raise ValidationError( _('Für gekündigte {} können keine Bestandteile bestellt werden' ).format(Config.vocabulary('subscription_pl')), code='invalid') form = SubscriptionPartOrderForm(subscription, request.POST) if form.is_valid(): create_subscription_parts(subscription, form.get_selected()) return return_to_previous_location(request) else: form = SubscriptionPartOrderForm() renderdict = get_menu_dict(request) renderdict.update({ 'form': form, 'subscription': subscription, 'hours_used': Config.assignment_unit() == 'HOURS', 'next_cancel_date': temporal.next_cancelation_date(), 'parts_order_allowed': parts_order_allowed, }) return render(request, 'size_change.html', renderdict)
def cs_select_subscription(request, cs_session): if request.method == 'POST': form = SubscriptionPartSelectForm(cs_session.subscriptions, request.POST) if form.is_valid(): cs_session.subscriptions = form.get_selected() return redirect(cs_session.next_page()) else: form = SubscriptionPartSelectForm(cs_session.subscriptions) render_dict = { 'form': form, 'subscription_selected': sum(form.get_selected().values()) > 0, 'hours_used': Config.assignment_unit() == 'HOURS', } return render(request, 'createsubscription/select_subscription.html', render_dict)
def size_change(request, subscription_id): """ change the size of a subscription """ subscription = get_object_or_404(Subscription, id=subscription_id) if request.method == 'POST': form = SubscriptionPartOrderForm(subscription, request.POST) if form.is_valid(): create_subscription_parts(subscription, form.get_selected()) return return_to_previous_location(request) else: form = SubscriptionPartOrderForm() renderdict = get_menu_dict(request) renderdict.update({ 'form': form, 'subscription': subscription, 'hours_used': Config.assignment_unit() == 'HOURS', 'next_cancel_date': temporal.next_cancelation_date(), }) return render(request, 'size_change.html', renderdict)
def size_change(request, subscription_id): """ change the size of a subscription """ subscription = get_object_or_404(Subscription, id=subscription_id) saved = False share_error = False if request.method == 'POST' and int(timezone.now().strftime( '%m')) <= Config.business_year_cancelation_month(): # create dict with subscription type -> selected amount selected = selected_subscription_types(request.POST) # check if members of sub have enough shares if subscription.all_shares < sum([ sub_type.shares * amount for sub_type, amount in selected.items() ]): share_error = True elif sum(selected.values() ) > 0: # check that at least one subscription was selected replace_subscription_types(subscription, selected) saved = True products = SubscriptionProductDao.get_all() renderdict = get_menu_dict(request) renderdict.update({ 'saved': saved, 'subscription': subscription, 'shareerror': share_error, 'hours_used': Config.assignment_unit() == 'HOURS', 'next_cancel_date': temporal.next_cancelation_date(), 'selected_subscription': subscription.future_types.all()[0].id, 'products': products, }) return render(request, 'size_change.html', renderdict)
def initial_select_size(request, cs_session, **kwargs): if request.method == 'POST': form = SubscriptionPartSelectForm(cs_session.subscriptions, request.POST) if form.is_valid(): selected = form.get_selected() cs_session.custom_prod = {} err_msg = quantity_error(selected) if not err_msg or request.POST.get("subscription") == "-1": cs_session.subscriptions = selected return redirect(cs_session.next_page()) else: form.add_error(None, err_msg) else: form = SubscriptionPartSelectForm(cs_session.subscriptions) render_dict = { 'form': form, 'subscription_selected': sum(form.get_selected().values()) > 0, 'hours_used': Config.assignment_unit() == 'HOURS', } return render(request, 'cs/initial_select_size.html', render_dict)
def size_change(request, subscription_id): """ change the size of a subscription """ subscription = get_object_or_404(Subscription, id=subscription_id) saved = False if request.method == 'POST': form = SubscriptionTypeEditForm(subscription, request.POST) if form.is_valid(): replace_subscription_types(subscription, form.get_selected()) saved = True else: form = SubscriptionTypeEditForm(subscription) renderdict = get_menu_dict(request) renderdict.update({ 'form': form, 'saved': saved, 'subscription': subscription, 'hours_used': Config.assignment_unit() == 'HOURS', 'next_cancel_date': temporal.next_cancelation_date(), }) return render(request, 'size_change.html', renderdict)
def job(request, job_id): ''' Details for a job ''' member = request.user.member job = get_object_or_404(Job, id=int(job_id)) slotrange = list(range(0, job.slots)) allowed_additional_participants = list(range(1, job.free_slots + 1)) job_fully_booked = len(allowed_additional_participants) == 0 job_is_in_past = job.end_time() < timezone.now() job_is_running = job.start_time() < timezone.now() job_canceled = job.canceled can_subscribe = job.infinite_slots or not ( job_fully_booked or job_is_in_past or job_is_running or job_canceled) renderdict = get_menu_dict(request) if request.method == 'POST' and can_subscribe and 0 < int( request.POST.get('jobs')) <= job.free_slots: num = int(request.POST.get('jobs')) # adding participants amount = 1 if Config.assignment_unit() == 'ENTITY': amount = job.multiplier elif Config.assignment_unit() == 'HOURS': amount = job.multiplier * job.duration for i in range(num): assignment = Assignment.objects.create(member=member, job=job, amount=amount) for extra in job.type.job_extras_set.all(): if request.POST.get('extra' + str(extra.extra_type.id)) == str( extra.extra_type.id): assignment.job_extras.add(extra) assignment.save() membernotification.job_signup(member.email, job) # redirect to same page such that refresh in the browser or back # button does not trigger a resubmission of the form return redirect('job', job_id=job_id) elif request.method == 'POST': renderdict['messages'].extend(error_message(request)) all_participants = MemberDao.members_by_job(job) number_of_participants = len(all_participants) unique_participants = all_participants.annotate( assignment_for_job=Count('id')).distinct() participants_summary = [] emails = [] for participant in unique_participants: name = '{} {}'.format(participant.first_name, participant.last_name) if participant.assignment_for_job == 2: name += _(' (mit einer weiteren Person)') elif participant.assignment_for_job > 2: name += _(' (mit {} weiteren Personen)').format( participant.assignment_for_job - 1) contact_url = reverse('contact-member', args=[participant.id]) extras = [] for assignment in AssignmentDao.assignments_for_job_and_member( job.id, participant): for extra in assignment.job_extras.all(): extras.append(extra.extra_type.display_full) reachable = participant.reachable_by_email is True or request.user.is_staff or \ job.type.activityarea.coordinator == participant participants_summary.append( (name, contact_url, reachable, ' '.join(extras))) emails.append(participant.email) renderdict['messages'].extend(job_messages(request, job)) renderdict.update({ 'can_contact': request.user.has_perm('juntagrico.can_send_mails') or (job.type.activityarea.coordinator == member and request.user.has_perm('juntagrico.is_area_admin')), 'emails': '\n'.join(emails), 'number_of_participants': number_of_participants, 'participants_summary': participants_summary, 'job': job, 'slotrange': slotrange, 'allowed_additional_participants': allowed_additional_participants, 'can_subscribe': can_subscribe, 'edit_url': get_job_admin_url(request, job) }) return render(request, 'job.html', renderdict)