def confirm(request): if not 'gift_membership' in request.session: return redirect('enrollment.gift.views.index') if not 'giver' in request.session['gift_membership']: # Not quite sure how this can happen, but it has happened. return redirect('enrollment.gift.views.form') if 'order_sent' in request.session['gift_membership']: return redirect('enrollment.gift.views.receipt') giver = Giver(**request.session['gift_membership']['giver']) receivers = [Receiver(**r) for r in request.session['gift_membership']['receivers']] form_valid = giver.validate() for receiver in receivers: form_valid = form_valid and receiver.validate() if not form_valid: return redirect('enrollment.gift.views.form') context = { 'giver': giver, 'receivers': receivers, 'display_christmas_warning': date.today() <= CHRISTMAS_WARNING_END } return render(request, 'central/enrollment/gift/confirm.html', context)
def validate(request): # TODO: Use the django form API if not 'gift_membership' in request.session: return redirect('enrollment.gift.views.index') if 'order_sent' in request.session['gift_membership']: return redirect('enrollment.gift.views.receipt') if request.method != 'POST' or not 'receivers' in request.POST: return redirect('enrollment.gift.views.form') giver = Giver( request.POST['giver_name'].strip(), request.POST['giver_address'].strip(), request.POST['giver_zipcode'].strip(), request.POST['giver_memberid'].strip(), request.POST['giver_phone'].strip(), request.POST['giver_email'].strip(), ) receivers = [] try: for r in json.loads(request.POST['receivers']): receivers.append(Receiver( r['type'].strip(), r['name'].strip(), r['dob'].strip(), r['address'].strip(), r['zipcode'].strip(), r['phone'].strip(), r['email'].strip(), )) except ValueError: # Something wrong with the json-formatted POST value. Not quite sure how this can happen, but it has happened. return redirect('enrollment.gift.views.form') request.session['gift_membership'] = { 'giver': giver.to_dict(), 'receivers': [r.to_dict() for r in receivers], 'any_normal_memberships': any(r.type['code'] == 'normal' for r in receivers) } form_valid = giver.validate() for receiver in receivers: form_valid = form_valid and receiver.validate() if not form_valid: return redirect('enrollment.gift.views.form') return redirect('enrollment.gift.views.confirm')
def form(request): if 'gift_membership' not in request.session: request.session['gift_membership'] = {} if 'order_sent' in request.session['gift_membership']: return redirect('enrollment.gift:receipt') giver = None if 'giver' in request.session['gift_membership']: giver = Giver(**request.session['gift_membership']['giver']) giver.validate(request, add_messages=True) receivers = [] if 'receivers' in request.session['gift_membership']: receivers = [Receiver(**r) for r in request.session['gift_membership']['receivers']] for receiver in receivers: receiver.validate(request, add_messages=True) if 'type' in request.POST: # We had some error where type was set to the empty string. Not sure how # that can happen (it was with Firefox 20.0), but the type isn't that # important so just ignore this error. try: chosen_type = int(request.POST['type']) except ValueError: chosen_type = None else: chosen_type = None # Clone the list and add a 'price' key to each type dict membership_types_with_price = [] for type in membership_types: type_with_price = type.copy() if type['code'] in ['normal', 'family']: type_with_price['price'] = None membership_types_with_price.append(type_with_price) else: type_with_price['price'] = PriceCode.get_gift_membership_price(type_with_price['code']) membership_types_with_price.append(type_with_price) context = { 'types': membership_types_with_price, 'giver': giver, 'receivers': receivers, 'chosen_type': chosen_type, 'display_christmas_warning': date.today() <= CHRISTMAS_WARNING_END, } return render(request, 'central/enrollment/gift/form.html', context)
def form(request): if not 'gift_membership' in request.session: request.session['gift_membership'] = {} if 'order_sent' in request.session['gift_membership']: return redirect('enrollment.gift.views.receipt') giver = None if 'giver' in request.session['gift_membership']: giver = Giver(**request.session['gift_membership']['giver']) giver.validate(request, add_messages=True) receivers = [] if 'receivers' in request.session['gift_membership']: receivers = [Receiver(**r) for r in request.session['gift_membership']['receivers']] for receiver in receivers: receiver.validate(request, add_messages=True) if 'type' in request.POST: # We had some error where type was set to the empty string. Not sure how # that can happen (it was with Firefox 20.0), but the type isn't that # important so just ignore this error. try: chosen_type = int(request.POST['type']) except ValueError: chosen_type = None else: chosen_type = None context = { 'types': membership_types, 'giver': giver, 'receivers': receivers, 'chosen_type': chosen_type, 'display_christmas_warning': date.today() <= CHRISTMAS_WARNING_END, } return render(request, 'central/enrollment/gift/form.html', context)