def cs_select_depot(request, cs_session): if request.method == 'POST': cs_session.depot = DepotDao.depot_by_id(request.POST.get('depot')) return redirect(cs_session.next_page()) depots = DepotDao.all_depots() requires_map = any(depot.has_geo for depot in depots) render_dict = { 'member': cs_session.main_member, 'depots': depots, 'selected': cs_session.depot, 'requires_map': requires_map, } return render(request, 'createsubscription/select_depot.html', render_dict)
def cs_select_depot(request): if request.user.is_authenticated: member = request.user.member else: member = request.session.get('main_member') if member is None: return redirect('http://' + Config.server_url()) if request.method == 'POST': depot = DepotDao.depot_by_id(request.POST.get('depot')) request.session['selecteddepot'] = depot return redirect('/my/create/subscription/start') depots = DepotDao.all_depots() requires_map = True for depot in depots: requires_map = requires_map or depot.has_geo renderdict = { 'member': member, 'depots': depots, 'requires_map': requires_map, } return render(request, 'createsubscription/select_depot.html', renderdict)
def createsubscription(request): """ create a subscription """ if request.user.is_authenticated(): member = request.user.member else: member = request.session.get('main_member') if member is None: return redirect("http://" + Config.server_url()) shareerror = False subscriptionform = SubscriptionForm() session_subscription = request.session.get('create_subscription') co_members = request.session.get('create_co_members', []) co_members_shares = request.session.get('create_co_members_shares', []) member_shares = request.session.get('create_member_shares', []) selectedsubscription = "none" selected_depot = None existing_member_shares = 0 if member.pk is not None: existing_member_shares = member.share_set.all().count() shares = existing_member_shares if session_subscription is not None: selectedsubscription = next( iter( SubscriptionSizeDao.sizes_by_size( session_subscription.size).values_list('name', flat=True) or []), 'none') selected_depot = session_subscription.depot co_member_shares = len(co_members_shares) if request.method == "POST": shares += int(request.POST.get("shares")) selectedsubscription = request.POST.get("subscription") subscriptionform = SubscriptionForm(request.POST) shares += co_member_shares min_num_shares = next( iter( SubscriptionSizeDao.sizes_by_name( selectedsubscription).values_list('shares', flat=True) or []), 1) if shares < min_num_shares or not subscriptionform.is_valid(): shareerror = shares < min_num_shares else: size = next( iter( SubscriptionSizeDao.sizes_by_name( selectedsubscription).values_list('size', flat=True) or []), 0) if size > 0: session_subscription = Subscription( **subscriptionform.cleaned_data) session_subscription.depot = DepotDao.depot_by_id( request.POST.get("depot")) session_subscription.primary_member = member session_subscription.size = size if len(member_shares) < int(request.POST.get("shares")): toadd = int(request.POST.get("shares")) - len(member_shares) for num in range(0, toadd): member_shares.append(Share(member=member, paid_date=None)) elif len(member_shares) > int(request.POST.get("shares")): toremove = len(member_shares) - int(request.POST.get("shares")) for num in range(0, toremove): member_shares.pop() if request.POST.get("add_member"): request.session['create_subscription'] = session_subscription request.session['create_member_shares'] = member_shares return redirect("/my/cosubmember/0") else: password = None if member.pk is None: member.save() password = password_generator() member.user.set_password(password) member.user.save() if session_subscription is not None: session_subscription.save() member.subscription_id = session_subscription.id member.save() send_welcome_mail( member.email, password, hashlib.sha1((member.email + str(member.id)).encode('utf8')).hexdigest()) for co_member in co_members: co_member.subscription_id = session_subscription.id co_member.save() pw = None if co_member.confirmed is False: pw = password_generator() co_member.user.set_password(pw) co_member.user.save() send_been_added_to_subscription( co_member.email, pw, member.get_name(), shares, hashlib.sha1( (co_member.email + str(co_member.id)).encode('utf8')).hexdigest()) for share in member_shares + co_members_shares: if share.id is None: if share.member.email == member.email: share.member = member else: share.member = list( (co_member for co_member in co_members if co_member.email == share.member.email))[0] share.save() send_share_created_mail(share) request.session['create_subscription'] = None request.session['create_co_members'] = [] request.session['create_co_members_shares'] = [] request.session['create_member_shares'] = [] if request.user.is_authenticated(): return redirect("/my/home") else: return redirect("/my/welcome") renderdict = { 'co_member_shares': co_member_shares, 'existing_member_shares': existing_member_shares, 'member': member, 'subscription_sizes': SubscriptionSizeDao.all_sizes_ordered(), 'depots': DepotDao.all_depots(), 'selected_depot': selected_depot, 'selected_subscription': selectedsubscription, 'shareerror': shareerror, 'co_members': co_members, 'subscriptionform': subscriptionform } return render(request, "createsubscription.html", renderdict)