From 2ec1922ae36549e736518833c2f309a2484aefca Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Wed, 16 Oct 2024 13:50:06 -0500 Subject: [PATCH 1/9] Seperate GET and POST methods --- app.py | 904 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 443 insertions(+), 461 deletions(-) diff --git a/app.py b/app.py index 5bf0497..75ac1c7 100644 --- a/app.py +++ b/app.py @@ -175,8 +175,8 @@ def index_page(): ) -@app.route("/register", methods=["GET", "POST"]) -def handle_form(): +@app.route("/register") +def display_form(): if ( date.today() > datetime.strptime(os.getenv("REG_CLOSE_DATE"), "%B %d, %Y").date() ): @@ -190,226 +190,10 @@ def handle_form(): competition_name=os.getenv("COMPETITION_NAME"), email=os.getenv("CONTACT_EMAIL"), ) - if request.method == "POST": - reg_type = request.form.get("regType") - - # Name - fname = request.form.get("fname").strip() - lname = request.form.get("lname").strip() - fullName = f"{fname}_{lname}" - - school = request.form.get("school") - if school == 'unlisted': - school = request.form.get("unlistedSchool").strip() - coach = request.form.get("coach").strip() - - # Check if registration already exists - if not os.getenv("FLASK_DEBUG"): - pk_school_name = school.replace(" ", "_") - pk_exists = dynamodb.get_item( - TableName=app.config["reg_table_name"], - Key={"pk": {"S": f"{pk_school_name}-{reg_type}-{fullName}"}}, - ) - - if "Item" in pk_exists: - print("registration exists") - return redirect( - f'{app.config["URL"]}/registration_error?reg_type={reg_type}' - ) - - # Base Form Data - form_data = dict( - full_name={"S": f"{fname} {lname}"}, - email={"S": request.form.get("email")}, - phone={"S": request.form.get("phone")}, - school={"S": school}, - reg_type={"S": request.form.get("regType")}, - ) - - # Add Competitor Form Data - if reg_type == "competitor": - if request.form.get("liability") != "on": - msg = "Please go back and accept the Liability Waiver Conditions" - abort(400, msg) - - height = (int(request.form.get("heightFt")) * 12) + int(request.form.get("heightIn")) - belt = request.form.get("beltRank") - if belt == 'black': - dan = request.form.get("blackBeltDan") - if dan == '4': - belt = "Master" - else: - belt = f"{dan} degree {belt}" - eventList = request.form.get("eventList") - if eventList == "": - msg = "You must choose at least one event" - abort(400, msg) - - medical_form = dict( - contacts=request.form.get("contacts"), - medicalConditions=request.form.get("medicalConditionsList").split(','), - ) - if request.form.get("allergies") == "Y": - medical_form['allergies'] = request.form.get("allergy_list").split("\r\n") - else: - medical_form['allergies'] = "None" - if request.form.get("medications") == "Y": - medical_form['medications'] = request.form.get("meds_list").split("\r\n") - else: - medical_form['medications'] = "None" - form_data.update( - dict( - parent={"S": request.form.get("parentName")}, - birthdate={"S": request.form.get("birthdate")}, - age={"N": request.form.get("age")}, - gender={"S": request.form.get("gender")}, - weight={"N": request.form.get("weight")}, - height={"N": str(height)}, - coach={"S": coach}, - beltRank={"S": belt}, - events={"S": eventList.replace("little_tiger", "Little Tiger Showcase")}, - poomsae_form={"S": request.form.get("poomsae form")}, - pair_poomsae_form={"S": request.form.get("pair poomsae form")}, - team_poomsae_form={"S": request.form.get("team poomsae form")}, - family_poomsae_form={"S": request.form.get("family poomsae form")}, - medical_form={"S": json.dumps(medical_form)} - ) - ) - if badges_enabled: - profileImg = request.files["profilePic"] - imageExt = os.path.splitext(profileImg.filename)[1] - if profileImg.content_type == "" or imageExt == "": - msg = "There was an error uploading your profile pic. Please go back and try again." - abort(400, msg) - - form_data.update(dict(imgFilename={"S": f"{school}_{reg_type}_{fullName}{imageExt}"})) - - s3.upload_fileobj( - profileImg, - app.config["profilePicBucket"], - form_data["imgFilename"]["S"], - ) - - events_list = eventList.split(',') - registration_items = [] - if "little_tiger" in events_list: - registration_items = [ - { - "price": price_dict["Little Tiger Showcase"]["price_id"], - "quantity": 1, - }, - ] - events_list.remove("little_tiger") - num_events = len(events_list) - if num_events > 0: - registration_items += [ - { - "price": price_dict['Registration']["price_id"], - "quantity": 1, - }, - ] - num_add_event = num_events - 1 - else: - num_add_event = 0 - if num_add_event > 0: - registration_items.append( - { - "price": price_dict["Additional Event"]["price_id"], - "quantity": num_add_event, - }, - ) - if 'breaking' in request.form.get("eventList"): - registration_items.append( - { - "price": price_dict["Breaking"]["price_id"], - "quantity": 1 - } - ) - if 'sparring-wc' in request.form.get("eventList"): - registration_items.append( - { - "price": price_dict["World Class"]["price_id"], - "quantity": 1 - } - ) - # Code to have 'convenience fee' transfered to separate acct ### - # registration_items.append( - # { - # "price": price_dict["Convenience Fee"]["price_id"], - # "quantity": 1 - # } - # ) - else: - registration_items = [ - { - "price": price_dict["Coach Registration"]["price_id"], - "quantity": 1, - } - ] - - if os.getenv("FLASK_DEBUG"): - # For Testing Form Data - return render_template( - "success.html", - title="Registration Submitted", - competition_name=os.getenv("COMPETITION_NAME"), - favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), - visitor_info_url=visitor_info_url, - visitor_info_text=visitor_info_text, - button_style=button_style, - email=os.getenv("CONTACT_EMAIL"), - reg_detail=form_data, - cost_detail=registration_items, - ) - else: - try: - early_reg_date = datetime.strptime(os.getenv("EARLY_REG_DATE"), '%B %d, %Y') + timedelta(days=1) - current_time = datetime.now() - checkout_timeout = current_time + timedelta(minutes=30) - checkout_details = { - "line_items": registration_items, - "mode": "payment", - "discounts": [], - "success_url": f'{app.config["URL"]}/success', - # Code to have 'convenience fee' transfered to separate acct ### - # "success_url": f'{app.config["URL"]}/success?session_id={{CHECKOUT_SESSION_ID}}', - "cancel_url": f'{app.config["URL"]}/register?reg_type={reg_type}', - "expires_at": int(checkout_timeout.timestamp()), - } - if reg_type == "competitor" and current_time < early_reg_date: - checkout_details["discounts"].append({"coupon": early_reg_coupon["id"]}) - checkout_session = stripe.checkout.Session.create( - line_items=checkout_details['line_items'], - mode=checkout_details['mode'], - discounts=checkout_details['discounts'], - success_url=checkout_details['success_url'], - cancel_url=checkout_details['cancel_url'], - expires_at=checkout_details['expires_at'], - ) - except Exception as e: - return str(e) - - form_data.update(dict(checkout={"S": checkout_session.id})) - sqs.send_message( - QueueUrl=app.config["SQS_QUEUE_URL"], - DelaySeconds=120, - MessageAttributes={ - "Name": {"DataType": "String", "StringValue": fullName}, - "Transaction": { - "DataType": "String", - "StringValue": checkout_session.id, - }, - }, - MessageBody=json.dumps(form_data), - ) - - return redirect(checkout_session.url, code=303) - else: reg_type = request.args.get("reg_type") - school_list = json.load( - s3.get_object(Bucket=app.config["configBucket"], Key="schools.json")["Body"] - ) + school_list = json.load(s3.get_object(Bucket=app.config["configBucket"], Key="schools.json")["Body"]) + # Display the form return render_template( "form.html", @@ -446,11 +230,214 @@ def handle_form(): ) +@app.route("/register", methods=["POST"]) +def handle_form(): + reg_type = request.form.get("regType") + + # Name + fname = request.form.get("fname").strip() + lname = request.form.get("lname").strip() + fullName = f"{fname}_{lname}" + + school = request.form.get("school") + if school == "unlisted": + school = request.form.get("unlistedSchool").strip() + coach = request.form.get("coach").strip() + + # Check if registration already exists + if not os.getenv("FLASK_DEBUG"): + pk_school_name = school.replace(" ", "_") + pk_exists = dynamodb.get_item( + TableName=app.config["reg_table_name"], + Key={"pk": {"S": f"{pk_school_name}-{reg_type}-{fullName}"}}, + ) + + if "Item" in pk_exists: + print("registration exists") + return redirect(f'{app.config["URL"]}/registration_error?reg_type={reg_type}') + + # Base Form Data + form_data = dict( + full_name={"S": f"{fname} {lname}"}, + email={"S": request.form.get("email")}, + phone={"S": request.form.get("phone")}, + school={"S": school}, + reg_type={"S": request.form.get("regType")}, + ) + + # Add Competitor Form Data + if reg_type == "competitor": + if request.form.get("liability") != "on": + msg = "Please go back and accept the Liability Waiver Conditions" + abort(400, msg) + + height = (int(request.form.get("heightFt")) * 12) + int(request.form.get("heightIn")) + belt = request.form.get("beltRank") + if belt == "black": + dan = request.form.get("blackBeltDan") + if dan == "4": + belt = "Master" + else: + belt = f"{dan} degree {belt}" + eventList = request.form.get("eventList") + if eventList == "": + msg = "You must choose at least one event" + abort(400, msg) + + medical_form = dict( + contacts=request.form.get("contacts"), + medicalConditions=request.form.get("medicalConditionsList").split(","), + ) + if request.form.get("allergies") == "Y": + medical_form["allergies"] = request.form.get("allergy_list").split("\r\n") + else: + medical_form["allergies"] = "None" + if request.form.get("medications") == "Y": + medical_form["medications"] = request.form.get("meds_list").split("\r\n") + else: + medical_form["medications"] = "None" + form_data.update( + dict( + parent={"S": request.form.get("parentName")}, + birthdate={"S": request.form.get("birthdate")}, + age={"N": request.form.get("age")}, + gender={"S": request.form.get("gender")}, + weight={"N": request.form.get("weight")}, + height={"N": str(height)}, + coach={"S": coach}, + beltRank={"S": belt}, + events={"S": eventList.replace("little_tiger", "Little Tiger Showcase")}, + poomsae_form={"S": request.form.get("poomsae form")}, + pair_poomsae_form={"S": request.form.get("pair poomsae form")}, + team_poomsae_form={"S": request.form.get("team poomsae form")}, + family_poomsae_form={"S": request.form.get("family poomsae form")}, + medical_form={"S": json.dumps(medical_form)}, + ) + ) + if badges_enabled: + profileImg = request.files["profilePic"] + imageExt = os.path.splitext(profileImg.filename)[1] + if profileImg.content_type == "" or imageExt == "": + msg = "There was an error uploading your profile pic. Please go back and try again." + abort(400, msg) + + form_data.update(dict(imgFilename={"S": f"{school}_{reg_type}_{fullName}{imageExt}"})) + + s3.upload_fileobj( + profileImg, + app.config["profilePicBucket"], + form_data["imgFilename"]["S"], + ) + + events_list = eventList.split(",") + registration_items = [] + if "little_tiger" in events_list: + registration_items = [ + { + "price": price_dict["Little Tiger Showcase"]["price_id"], + "quantity": 1, + }, + ] + events_list.remove("little_tiger") + num_events = len(events_list) + if num_events > 0: + registration_items += [ + { + "price": price_dict["Registration"]["price_id"], + "quantity": 1, + }, + ] + num_add_event = num_events - 1 + else: + num_add_event = 0 + if num_add_event > 0: + registration_items.append( + { + "price": price_dict["Additional Event"]["price_id"], + "quantity": num_add_event, + }, + ) + if "breaking" in request.form.get("eventList"): + registration_items.append({"price": price_dict["Breaking"]["price_id"], "quantity": 1}) + if "sparring-wc" in request.form.get("eventList"): + registration_items.append({"price": price_dict["World Class"]["price_id"], "quantity": 1}) + # Code to have 'convenience fee' transfered to separate acct ### + # registration_items.append( + # { + # "price": price_dict["Convenience Fee"]["price_id"], + # "quantity": 1 + # } + # ) + else: + registration_items = [ + { + "price": price_dict["Coach Registration"]["price_id"], + "quantity": 1, + } + ] + + if os.getenv("FLASK_DEBUG"): + # For Testing Form Data + return render_template( + "success.html", + title="Registration Submitted", + competition_name=os.getenv("COMPETITION_NAME"), + favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), + visitor_info_url=visitor_info_url, + visitor_info_text=visitor_info_text, + button_style=button_style, + email=os.getenv("CONTACT_EMAIL"), + reg_detail=form_data, + cost_detail=registration_items, + ) + else: + try: + early_reg_date = datetime.strptime(os.getenv("EARLY_REG_DATE"), "%B %d, %Y") + timedelta(days=1) + current_time = datetime.now() + checkout_timeout = current_time + timedelta(minutes=30) + checkout_details = { + "line_items": registration_items, + "mode": "payment", + "discounts": [], + "success_url": f'{app.config["URL"]}/success', + # Code to have 'convenience fee' transfered to separate acct ### + # "success_url": f'{app.config["URL"]}/success?session_id={{CHECKOUT_SESSION_ID}}', + "cancel_url": f'{app.config["URL"]}/register?reg_type={reg_type}', + "expires_at": int(checkout_timeout.timestamp()), + } + if reg_type == "competitor" and current_time < early_reg_date: + checkout_details["discounts"].append({"coupon": early_reg_coupon["id"]}) + checkout_session = stripe.checkout.Session.create( + line_items=checkout_details["line_items"], + mode=checkout_details["mode"], + discounts=checkout_details["discounts"], + success_url=checkout_details["success_url"], + cancel_url=checkout_details["cancel_url"], + expires_at=checkout_details["expires_at"], + ) + except Exception as e: + return str(e) + + form_data.update(dict(checkout={"S": checkout_session.id})) + sqs.send_message( + QueueUrl=app.config["SQS_QUEUE_URL"], + DelaySeconds=120, + MessageAttributes={ + "Name": {"DataType": "String", "StringValue": fullName}, + "Transaction": { + "DataType": "String", + "StringValue": checkout_session.id, + }, + }, + MessageBody=json.dumps(form_data), + ) + + return redirect(checkout_session.url, code=303) + + @app.route("/schedule", methods=["GET"]) def schedule_page(): - schedule_dict = json.load( - s3.get_object(Bucket=app.config["configBucket"], Key="schedule.json")["Body"] - ) + schedule_dict = json.load(s3.get_object(Bucket=app.config["configBucket"], Key="schedule.json")["Body"]) return render_template( "schedule.html", title="Schedule", @@ -478,7 +465,7 @@ def events_page(): @app.route("/information", methods=["GET"]) def info_page(): - s3_addl_images = s3.list_objects(Bucket=app.config["mediaBucket"], Prefix="additional_information_images/")['Contents'] + s3_addl_images = s3.list_objects(Bucket=app.config["mediaBucket"], Prefix="additional_information_images/")["Contents"] return render_template( "information.html", title="Information", @@ -581,18 +568,14 @@ def get_age_group(entry): "ultra": list(range(33, 100)), } - age_group = next( - (group for group, ages in age_groups.items() if int(entry["age"]["N"]) in ages) - ) + age_group = next((group for group, ages in age_groups.items() if int(entry["age"]["N"]) in ages)) return age_group def set_weight_class(entries): s3 = boto3.client("s3") - weight_classes = json.load( - s3.get_object(Bucket=app.config["configBucket"], Key="weight_classes.json")["Body"] - ) + weight_classes = json.load(s3.get_object(Bucket=app.config["configBucket"], Key="weight_classes.json")["Body"]) updated_entries = [] for entry in entries: age_group = get_age_group(entry) @@ -794,261 +777,260 @@ def admin_page(): ) -@app.route("/edit", methods=["GET", "POST"]) +@app.route("/edit") @login_required -def edit_entry_page(): - if request.method == "POST": - form_data = dict( - full_name={"S": request.form.get("full_name")}, - email={"S": request.form.get("email")}, - phone={"S": request.form.get("phone")}, - school={"S": request.form.get("school")}, - reg_type={"S": request.form.get("regType")}, - ) - if form_data["reg_type"]["S"] == "competitor": - belt = request.form.get("beltRank") - if belt == 'black': - dan = request.form.get("blackBeltDan") - if dan == '4': - belt = "Master" - else: - belt = f"{dan} degree {belt}" - form_data.update( - dict( - parent={"S": request.form.get("parentName")}, - birthdate={"S": request.form.get("birthdate")}, - age={"N": request.form.get("age")}, - gender={"S": request.form.get("gender")}, - weight={"N": request.form.get("weight")}, - height={"N": request.form.get("height")}, - coach={"S": request.form.get("coach").strip()}, - beltRank={"S": belt}, - poomsae_form={"S": request.form.get("poomsae form")}, - pair_poomsae_form={"S": request.form.get("pair poomsae form")}, - team_poomsae_form={"S": request.form.get("team poomsae form")}, - family_poomsae_form={"S": request.form.get("family poomsae form")}, - ) - ) - update_expression = 'SET {}'.format(','.join(f'#{k}=:{k}' for k in form_data)) - expression_attribute_values = {f':{k}': v for k, v in form_data.items()} - expression_attribute_names = {f'#{k}': k for k in form_data} - - dynamodb.update_item( - TableName=app.config["reg_table_name"], - Key={ - "pk": {"S": request.args.get("pk")}, - }, - UpdateExpression=update_expression, - ExpressionAttributeValues=expression_attribute_values, - ExpressionAttributeNames=expression_attribute_names, - ReturnValues="UPDATED_NEW", +def edit_entry_form(): + pk = request.args.get("pk") + entry = dynamodb.get_item( + TableName=app.config["reg_table_name"], + Key={"pk": {"S": pk}}, + )["Item"] + school_list = json.load(s3.get_object(Bucket=app.config["configBucket"], Key="schools.json")["Body"]) + return render_template( + "edit.html", + title="Edit Entry", + competition_name=os.getenv("COMPETITION_NAME"), + favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), + visitor_info_url=visitor_info_url, + visitor_info_text=visitor_info_text, + button_style=button_style, + schools=school_list, + entry=entry, + additional_scripts=[ + dict( + src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js", + integrity="sha384-vk5WoKIaW/vJyUAd9n/wmopsmNhiy+L2Z+SBxGYnUkunIxVxAv/UtMOhba/xskxh", + ), + dict( + src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/js/bootstrap.min.js", + integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13", + ), + dict(src=url_for("static", filename="js/form.js")), + ], + ) + + +@app.route("/edit", methods=["POST"]) +@login_required +def edit_entry(): + form_data = dict( + full_name={"S": request.form.get("full_name")}, + email={"S": request.form.get("email")}, + phone={"S": request.form.get("phone")}, + school={"S": request.form.get("school")}, + reg_type={"S": request.form.get("regType")}, + ) + if form_data["reg_type"]["S"] == "competitor": + belt = request.form.get("beltRank") + if belt == "black": + dan = request.form.get("blackBeltDan") + if dan == "4": + belt = "Master" + else: + belt = f"{dan} degree {belt}" + form_data.update( + dict( + parent={"S": request.form.get("parentName")}, + birthdate={"S": request.form.get("birthdate")}, + age={"N": request.form.get("age")}, + gender={"S": request.form.get("gender")}, + weight={"N": request.form.get("weight")}, + height={"N": request.form.get("height")}, + coach={"S": request.form.get("coach").strip()}, + beltRank={"S": belt}, + poomsae_form={"S": request.form.get("poomsae form")}, + pair_poomsae_form={"S": request.form.get("pair poomsae form")}, + team_poomsae_form={"S": request.form.get("team poomsae form")}, + family_poomsae_form={"S": request.form.get("family poomsae form")}, ) + ) + update_expression = "SET {}".format(",".join(f"#{k}=:{k}" for k in form_data)) + expression_attribute_values = {f":{k}": v for k, v in form_data.items()} + expression_attribute_names = {f"#{k}": k for k in form_data} - flash(f'{form_data["full_name"]["S"]} updated successfully!', 'success') - return redirect(f'{app.config["URL"]}/admin', code=303) - else: - pk = request.args.get("pk") - entry = dynamodb.get_item( + dynamodb.update_item( TableName=app.config["reg_table_name"], - Key={"pk": {"S": pk}}, - )["Item"] - school_list = json.load( - s3.get_object(Bucket=app.config["configBucket"], Key="schools.json")["Body"] - ) - return render_template( - "edit.html", - title="Edit Entry", - competition_name=os.getenv("COMPETITION_NAME"), - favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), - visitor_info_url=visitor_info_url, - visitor_info_text=visitor_info_text, - button_style=button_style, - schools=school_list, - entry=entry, - additional_scripts=[ - dict( - src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js", - integrity="sha384-vk5WoKIaW/vJyUAd9n/wmopsmNhiy+L2Z+SBxGYnUkunIxVxAv/UtMOhba/xskxh", - ), - dict( - src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/js/bootstrap.min.js", - integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13", - ), - dict(src=url_for("static", filename="js/form.js")), - ], + Key={ + "pk": {"S": request.args.get("pk")}, + }, + UpdateExpression=update_expression, + ExpressionAttributeValues=expression_attribute_values, + ExpressionAttributeNames=expression_attribute_names, + ReturnValues="UPDATED_NEW", ) + flash(f'{form_data["full_name"]["S"]} updated successfully!', "success") + return redirect(f'{app.config["URL"]}/admin', code=303) + + +@app.route("/add_entry") +@login_required +def add_entry_form(): + reg_type = request.args.get("reg_type") + school_list = json.load(s3.get_object(Bucket=app.config["configBucket"], Key="schools.json")["Body"]) + # Display the form + return render_template( + "add_entry.html", + title="Registration", + favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), + visitor_info_url=visitor_info_url, + visitor_info_text=visitor_info_text, + button_style=button_style, + competition_name=os.getenv("COMPETITION_NAME"), + competition_year=os.getenv("COMPETITION_YEAR"), + early_reg_date=os.getenv("EARLY_REG_DATE"), + early_reg_coupon_amount=f'{int(early_reg_coupon["amount_off"]/100)}', + price_dict=price_dict, + reg_type=reg_type, + schools=school_list, + enable_badges=badges_enabled, + enable_address=address_enabled, + additional_scripts=[ + dict( + src=f"https://maps.googleapis.com/maps/api/js?key={maps_api_key}&libraries=places&callback=initMap&solution_channel=GMP_QB_addressselection_v1_cA", # noqa + async_bool="true", + defer="true", + ), + dict( + src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js", + integrity="sha384-vk5WoKIaW/vJyUAd9n/wmopsmNhiy+L2Z+SBxGYnUkunIxVxAv/UtMOhba/xskxh", + ), + dict( + src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/js/bootstrap.min.js", + integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13", + ), + dict(src=url_for("static", filename="js/form.js")), + ], + ) + -@app.route("/add_entry", methods=["GET", "POST"]) +@app.route("/add_entry", methods=["POST"]) @login_required def add_entry(): - if request.method == "POST": - reg_type = request.form.get("regType") - - # Name - fname = request.form.get("fname").strip() - lname = request.form.get("lname").strip() - fullName = f"{fname}_{lname}" - - school = request.form.get("school") - coach = request.form.get("coach").strip() - - # Check if registration already exists - if not os.getenv("FLASK_DEBUG"): - pk_school_name = school.replace(" ", "_") - pk_exists = dynamodb.get_item( - TableName=app.config["reg_table_name"], - Key={"pk": {"S": f"{pk_school_name}-{reg_type}-{fullName}"}}, - ) + reg_type = request.form.get("regType") - if "Item" in pk_exists: - print("registration exists") - return redirect( - f'{app.config["URL"]}/registration_error?reg_type={reg_type}' - ) - - # Base Form Data - form_data = dict( - full_name={"S": f"{fname} {lname}"}, - email={"S": request.form.get("email")}, - phone={"S": request.form.get("phone")}, - school={"S": school}, - reg_type={"S": request.form.get("regType")}, + # Name + fname = request.form.get("fname").strip() + lname = request.form.get("lname").strip() + fullName = f"{fname}_{lname}" + + school = request.form.get("school") + coach = request.form.get("coach").strip() + + # Check if registration already exists + if not os.getenv("FLASK_DEBUG"): + pk_school_name = school.replace(" ", "_") + pk_exists = dynamodb.get_item( + TableName=app.config["reg_table_name"], + Key={"pk": {"S": f"{pk_school_name}-{reg_type}-{fullName}"}}, ) - # Add Competitor Form Data - if reg_type == "competitor": - height = (int(request.form.get("heightFt")) * 12) + int(request.form.get("heightIn")) - belt = request.form.get("beltRank") - if belt == 'black': - dan = request.form.get("blackBeltDan") - if dan == '4': - belt = "Master" - else: - belt = f"{dan} degree {belt}" - if request.form.get("eventType") == 'little_tiger': - eventList = "Little Tiger Showcase" - else: - eventList = request.form.get("eventList") - if eventList == "": - msg = "You must choose at least one event" - abort(400, msg) - - medical_form = dict( - contacts=request.form.get("contacts"), - medicalConditions=request.form.get("medicalConditionsList").split(','), - ) - if request.form.get("allergies") == "Y": - medical_form['allergies'] = request.form.get("allergy_list").split("\r\n") - else: - medical_form['allergies'] = "None" - if request.form.get("medications") == "Y": - medical_form['medications'] = request.form.get("meds_list").split("\r\n") + if "Item" in pk_exists: + print("registration exists") + return redirect(f'{app.config["URL"]}/registration_error?reg_type={reg_type}') + + # Base Form Data + form_data = dict( + full_name={"S": f"{fname} {lname}"}, + email={"S": request.form.get("email")}, + phone={"S": request.form.get("phone")}, + school={"S": school}, + reg_type={"S": request.form.get("regType")}, + ) + + # Add Competitor Form Data + if reg_type == "competitor": + height = (int(request.form.get("heightFt")) * 12) + int(request.form.get("heightIn")) + belt = request.form.get("beltRank") + if belt == "black": + dan = request.form.get("blackBeltDan") + if dan == "4": + belt = "Master" else: - medical_form['medications'] = "None" - form_data.update( - dict( - parent={"S": request.form.get("parentName")}, - birthdate={"S": request.form.get("birthdate")}, - age={"N": request.form.get("age")}, - gender={"S": request.form.get("gender")}, - weight={"N": request.form.get("weight")}, - height={"N": str(height)}, - coach={"S": coach}, - beltRank={"S": belt}, - events={"S": eventList}, - poomsae_form={"S": request.form.get("poomsae form")}, - pair_poomsae_form={"S": request.form.get("pair poomsae form")}, - team_poomsae_form={"S": request.form.get("team poomsae form")}, - family_poomsae_form={"S": request.form.get("family poomsae form")}, - medical_form={"S": json.dumps(medical_form)} - ) - ) - if badges_enabled: - profileImg = request.files["profilePic"] - imageExt = os.path.splitext(profileImg.filename)[1] - if profileImg.content_type == "" or imageExt == "": - msg = "There was an error uploading your profile pic. Please go back and try again." - abort(400, msg) - - form_data.update(dict(imgFilename={"S": f"{school}_{reg_type}_{fullName}{imageExt}"})) - - s3.upload_fileobj( - profileImg, - app.config["profilePicBucket"], - form_data["imgFilename"]["S"], - ) - - if os.getenv("FLASK_DEBUG"): - # For Testing Form Data - return render_template( - "success.html", - title="Registration Submitted", - competition_name=os.getenv("COMPETITION_NAME"), - favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), - visitor_info_url=visitor_info_url, - visitor_info_text=visitor_info_text, - button_style=button_style, - email=os.getenv("CONTACT_EMAIL"), - reg_detail=form_data, - ) + belt = f"{dan} degree {belt}" + if request.form.get("eventType") == "little_tiger": + eventList = "Little Tiger Showcase" else: - form_data.update(dict(checkout={"S": "manual_entry"})) - sqs.send_message( - QueueUrl=app.config["SQS_QUEUE_URL"], - DelaySeconds=120, - MessageAttributes={ - "Name": {"DataType": "String", "StringValue": fullName}, - "Transaction": { - "DataType": "String", - "StringValue": "manual_entry", - }, - }, - MessageBody=json.dumps(form_data), + eventList = request.form.get("eventList") + if eventList == "": + msg = "You must choose at least one event" + abort(400, msg) + + medical_form = dict( + contacts=request.form.get("contacts"), + medicalConditions=request.form.get("medicalConditionsList").split(","), + ) + if request.form.get("allergies") == "Y": + medical_form["allergies"] = request.form.get("allergy_list").split("\r\n") + else: + medical_form["allergies"] = "None" + if request.form.get("medications") == "Y": + medical_form["medications"] = request.form.get("meds_list").split("\r\n") + else: + medical_form["medications"] = "None" + form_data.update( + dict( + parent={"S": request.form.get("parentName")}, + birthdate={"S": request.form.get("birthdate")}, + age={"N": request.form.get("age")}, + gender={"S": request.form.get("gender")}, + weight={"N": request.form.get("weight")}, + height={"N": str(height)}, + coach={"S": coach}, + beltRank={"S": belt}, + events={"S": eventList}, + poomsae_form={"S": request.form.get("poomsae form")}, + pair_poomsae_form={"S": request.form.get("pair poomsae form")}, + team_poomsae_form={"S": request.form.get("team poomsae form")}, + family_poomsae_form={"S": request.form.get("family poomsae form")}, + medical_form={"S": json.dumps(medical_form)}, ) + ) + if badges_enabled: + profileImg = request.files["profilePic"] + imageExt = os.path.splitext(profileImg.filename)[1] + if profileImg.content_type == "" or imageExt == "": + msg = "There was an error uploading your profile pic. Please go back and try again." + abort(400, msg) - return redirect(f'{app.config["URL"]}/success', code=303) + form_data.update(dict(imgFilename={"S": f"{school}_{reg_type}_{fullName}{imageExt}"})) - else: - reg_type = request.args.get("reg_type") - school_list = json.load( - s3.get_object(Bucket=app.config["configBucket"], Key="schools.json")["Body"] - ) - # Display the form + s3.upload_fileobj( + profileImg, + app.config["profilePicBucket"], + form_data["imgFilename"]["S"], + ) + + if os.getenv("FLASK_DEBUG"): + # For Testing Form Data return render_template( - "add_entry.html", - title="Registration", + "success.html", + title="Registration Submitted", + competition_name=os.getenv("COMPETITION_NAME"), favicon_url=url_for("static", filename=get_s3_file(app.config["mediaBucket"], "favicon.png")), visitor_info_url=visitor_info_url, visitor_info_text=visitor_info_text, button_style=button_style, - competition_name=os.getenv("COMPETITION_NAME"), - competition_year=os.getenv("COMPETITION_YEAR"), - early_reg_date=os.getenv("EARLY_REG_DATE"), - early_reg_coupon_amount=f'{int(early_reg_coupon["amount_off"]/100)}', - price_dict=price_dict, - reg_type=reg_type, - schools=school_list, - enable_badges=badges_enabled, - enable_address=address_enabled, - additional_scripts=[ - dict( - src=f"https://maps.googleapis.com/maps/api/js?key={maps_api_key}&libraries=places&callback=initMap&solution_channel=GMP_QB_addressselection_v1_cA", # noqa - async_bool="true", - defer="true", - ), - dict( - src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js", - integrity="sha384-vk5WoKIaW/vJyUAd9n/wmopsmNhiy+L2Z+SBxGYnUkunIxVxAv/UtMOhba/xskxh", - ), - dict( - src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/js/bootstrap.min.js", - integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13", - ), - dict(src=url_for("static", filename="js/form.js")), - ], + email=os.getenv("CONTACT_EMAIL"), + reg_detail=form_data, + ) + else: + form_data.update(dict(checkout={"S": "manual_entry"})) + sqs.send_message( + QueueUrl=app.config["SQS_QUEUE_URL"], + DelaySeconds=120, + MessageAttributes={ + "Name": {"DataType": "String", "StringValue": fullName}, + "Transaction": { + "DataType": "String", + "StringValue": "manual_entry", + }, + }, + MessageBody=json.dumps(form_data), ) + return redirect(f'{app.config["URL"]}/success', code=303) + @app.route('/export') @login_required From ac7a3021a0f5828837c263f69adb66906b90264f Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Wed, 16 Oct 2024 13:51:05 -0500 Subject: [PATCH 2/9] Add 'lookup_table_name' to App Config --- app.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app.py b/app.py index 75ac1c7..d453e65 100644 --- a/app.py +++ b/app.py @@ -22,6 +22,7 @@ app.config["SQS_QUEUE_URL"] = os.getenv("SQS_QUEUE_URL") app.config["reg_table_name"] = os.getenv("REG_DB_TABLE") app.config["auth_table_name"] = os.getenv("AUTH_DB_TABLE") +app.config["lookup_table_name"] = os.getenv("LOOKUP_DB_TABLE", "reg_lookup_table") stripe.api_key = os.getenv("STRIPE_API_KEY") maps_api_key = os.getenv("MAPS_API_KEY") aws_region = os.getenv("AWS_REGION", "us-east-1") From dad18f71f2320774ad4b4bbc7a9c03b282ac1e42 Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Wed, 16 Oct 2024 13:51:49 -0500 Subject: [PATCH 3/9] Add default for 'auth_table_name' --- app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.py b/app.py index d453e65..7537579 100644 --- a/app.py +++ b/app.py @@ -21,7 +21,7 @@ app.config["URL"] = os.getenv("REG_URL") app.config["SQS_QUEUE_URL"] = os.getenv("SQS_QUEUE_URL") app.config["reg_table_name"] = os.getenv("REG_DB_TABLE") -app.config["auth_table_name"] = os.getenv("AUTH_DB_TABLE") +app.config["auth_table_name"] = os.getenv("AUTH_DB_TABLE", "admin_auth_table") app.config["lookup_table_name"] = os.getenv("LOOKUP_DB_TABLE", "reg_lookup_table") stripe.api_key = os.getenv("STRIPE_API_KEY") maps_api_key = os.getenv("MAPS_API_KEY") From 0b515d5e5429c8a60c7c2975c63fc2375b6971e5 Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Wed, 16 Oct 2024 16:54:42 -0500 Subject: [PATCH 4/9] Add initial code for Entry Lookups --- app.py | 22 ++++++++++ static/js/form.js | 50 +++++++++++++++++++++++ templates/form.html | 1 + templates/partials/form_common.html | 7 ++-- templates/partials/form_lookup_modal.html | 20 +++++++++ 5 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 templates/partials/form_lookup_modal.html diff --git a/app.py b/app.py index 7537579..09b4705 100644 --- a/app.py +++ b/app.py @@ -176,6 +176,28 @@ def index_page(): ) +@app.route("/lookup_entry") +def lookup_entry(): + email = request.args.get("email") + name = f"{request.args.get('fname','').lower()} {request.args.get('lname','').lower()}" + entries = dynamodb.scan( + TableName=app.config["lookup_table_name"], + IndexName="email-index", + FilterExpression="email = :email", + ExpressionAttributeValues={ + ":email": { + "S": email, + }, + }, + )["Items"] + + if len(entries) > 1: + if name != " ": + entries = [e for e in entries if name.strip() in e["name"]["S"].lower()] + + return entries + + @app.route("/register") def display_form(): if ( diff --git a/static/js/form.js b/static/js/form.js index a0db002..821937c 100644 --- a/static/js/form.js +++ b/static/js/form.js @@ -51,6 +51,56 @@ function upload_img(files) { reader.readAsDataURL(imageFile); } } +function lookup_entry(email) { + fname = document.getElementById("fname").value; + lname = document.getElementById("lname").value; + + query = "email=" + email; + if (fname != '') { + query += "&fname=" + fname; + } + if (lname != '') { + query += "&lname=" + lname; + } + + fetch('/lookup_entry?' + query) + .then(response => response.json()) + .then(data => { + if (data.length == 1) {autofillEntry(data[0])} + else if (data.length > 1) { + entryLookupDialog = document.getElementById('entryLookupDialog') + entryLookupDialog.addEventListener('show.bs.modal', event => { + const entrySelect = document.getElementById('entrySelect') + for (a in entrySelect.options) { entrySelect.options.remove(0); } + for (i=0; i < data.length; i++) { + entrySelect.options[entrySelect.options.length] = new Option(data[i].name.S, i); + } + }); + entryLookupDialog.addEventListener('hide.bs.modal', event => { + selection = document.getElementById('entrySelect').value + if( selection ) {autofillEntry(data[selection])} + }); + const entryLookupModal = new bootstrap.Modal('#entryLookupDialog') + entryLookupModal.show(data); + } + }); +} +function autofillEntry(data) { + document.getElementById("fname").value = (data.name.S).split(" ")[0]; + document.getElementById("lname").value = (data.name.S).split(" ")[1]; + document.getElementById("inputPhone").value = data.phone.S; + document.getElementById("birthdate").value = (data.birthdate.S).replace(/(\d\d)\/(\d\d)\/(\d{4})/, "$3-$1-$2"); + document.getElementById("inputParentName").value = data.parent.S; + document.getElementById("inputSchool").value = data.school.S; + document.getElementById("inputCoach").value = data.coach.S; + if (data.gender.S == 'male') { + document.getElementById("genderMale").checked = true; + } + else if (data.gender.S == 'female') { + document.getElementById("genderFemale").checked = true; + } + calculateAge(document.getElementById("birthdate").value); +} function updateFields() { if (document.getElementById('regType').value == "competitor") { document.getElementById("classSection").hidden = false; diff --git a/templates/form.html b/templates/form.html index 2dd8bfa..e99d996 100644 --- a/templates/form.html +++ b/templates/form.html @@ -31,5 +31,6 @@

{{ reg_type|capitalize }} Registration Form

+ {% include "partials/form_lookup_modal.html" %} {% include "partials/script_okc_prices.html" %} {%- endblock content %} \ No newline at end of file diff --git a/templates/partials/form_common.html b/templates/partials/form_common.html index 5b93bb7..6b81401 100644 --- a/templates/partials/form_common.html +++ b/templates/partials/form_common.html @@ -4,16 +4,17 @@
- +
- +
- +
diff --git a/templates/partials/form_lookup_modal.html b/templates/partials/form_lookup_modal.html new file mode 100644 index 0000000..c6f43d2 --- /dev/null +++ b/templates/partials/form_lookup_modal.html @@ -0,0 +1,20 @@ + + \ No newline at end of file From faf2479fc4868d2076189fd4f83474bf14a6298c Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Thu, 17 Oct 2024 13:56:05 -0500 Subject: [PATCH 5/9] Ruff formatting updates --- app.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/app.py b/app.py index 09b4705..5227ea8 100644 --- a/app.py +++ b/app.py @@ -38,7 +38,7 @@ # Login login_manager = LoginManager() -login_manager.login_view = 'login' +login_manager.login_view = "login" login_manager.init_app(app) ph = PasswordHasher() @@ -71,10 +71,10 @@ def loader(user_id): if response["Count"] == 0: return user = User( - id=response['Items'][0]["id"], - email=response['Items'][0]["email"], - name=response['Items'][0]["name"], - password=response['Items'][0]["password"] + id=response["Items"][0]["id"], + email=response["Items"][0]["email"], + name=response["Items"][0]["name"], + password=response["Items"][0]["password"], ) return user @@ -116,7 +116,7 @@ def get_s3_file(bucket, file_name): return output -@app.route('/login') +@app.route("/login") def login(): return render_template( "login.html", @@ -129,27 +129,27 @@ def login(): ) -@app.route('/login', methods=['POST']) +@app.route("/login", methods=["POST"]) def login_post(): # login code goes here - email = request.form.get('email').lower() - password = request.form.get('password') - remember = True if request.form.get('remember') else False + email = request.form.get("email").lower() + password = request.form.get("password") + remember = True if request.form.get("remember") else False user = get_user(email) # check if the user actually exists if not user: - flash('Please check your login details and try again.') - return redirect(url_for('login')) + flash("Please check your login details and try again.") + return redirect(url_for("login")) try: ph.verify(user.password, password) except VerifyMismatchError: - flash('Please check your login details and try again.') - return redirect(url_for('login')) + flash("Please check your login details and try again.") + return redirect(url_for("login")) # if the above check passes, then we know the user has the right credentials login_user(user, remember=remember) - return redirect(url_for('admin_page')) + return redirect(url_for("admin_page")) @app.route("/logout") @@ -200,9 +200,7 @@ def lookup_entry(): @app.route("/register") def display_form(): - if ( - date.today() > datetime.strptime(os.getenv("REG_CLOSE_DATE"), "%B %d, %Y").date() - ): + if date.today() > datetime.strptime(os.getenv("REG_CLOSE_DATE"), "%B %d, %Y").date(): return render_template( "disabled.html", title="Registration Closed", @@ -1055,7 +1053,7 @@ def add_entry(): return redirect(f'{app.config["URL"]}/success', code=303) -@app.route('/export') +@app.route("/export") @login_required def generate_csv(): data = dynamodb.scan( From f1364ce51783f762a299c40ea841faa2ea60913e Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Thu, 17 Oct 2024 14:14:17 -0500 Subject: [PATCH 6/9] Add check for regType in autofill --- static/js/form.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/static/js/form.js b/static/js/form.js index 821937c..8cb4e06 100644 --- a/static/js/form.js +++ b/static/js/form.js @@ -89,17 +89,19 @@ function autofillEntry(data) { document.getElementById("fname").value = (data.name.S).split(" ")[0]; document.getElementById("lname").value = (data.name.S).split(" ")[1]; document.getElementById("inputPhone").value = data.phone.S; - document.getElementById("birthdate").value = (data.birthdate.S).replace(/(\d\d)\/(\d\d)\/(\d{4})/, "$3-$1-$2"); - document.getElementById("inputParentName").value = data.parent.S; document.getElementById("inputSchool").value = data.school.S; - document.getElementById("inputCoach").value = data.coach.S; - if (data.gender.S == 'male') { - document.getElementById("genderMale").checked = true; - } - else if (data.gender.S == 'female') { - document.getElementById("genderFemale").checked = true; + if (document.getElementById('regType').value == "competitor") { + document.getElementById("birthdate").value = (data.birthdate.S).replace(/(\d\d)\/(\d\d)\/(\d{4})/, "$3-$1-$2"); + document.getElementById("inputParentName").value = data.parent.S; + document.getElementById("inputCoach").value = data.coach.S; + if (data.gender.S == 'male') { + document.getElementById("genderMale").checked = true; + } + else if (data.gender.S == 'female') { + document.getElementById("genderFemale").checked = true; + } + calculateAge(document.getElementById("birthdate").value); } - calculateAge(document.getElementById("birthdate").value); } function updateFields() { if (document.getElementById('regType').value == "competitor") { From e4069a0e575140bc767cb2a27d62fc0c1a63e58f Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Tue, 22 Oct 2024 16:35:33 -0500 Subject: [PATCH 7/9] Add Med Form autofill --- static/js/form.js | 49 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/static/js/form.js b/static/js/form.js index 8cb4e06..4ca0361 100644 --- a/static/js/form.js +++ b/static/js/form.js @@ -92,6 +92,7 @@ function autofillEntry(data) { document.getElementById("inputSchool").value = data.school.S; if (document.getElementById('regType').value == "competitor") { document.getElementById("birthdate").value = (data.birthdate.S).replace(/(\d\d)\/(\d\d)\/(\d{4})/, "$3-$1-$2"); + calculateAge(document.getElementById("birthdate").value); document.getElementById("inputParentName").value = data.parent.S; document.getElementById("inputCoach").value = data.coach.S; if (data.gender.S == 'male') { @@ -100,7 +101,53 @@ function autofillEntry(data) { else if (data.gender.S == 'female') { document.getElementById("genderFemale").checked = true; } - calculateAge(document.getElementById("birthdate").value); + console.log(data.medical_form.M) + const allergies = data.medical_form.M.allergies.L; + const medications = data.medical_form.M.medications.L; + const contacts = data.medical_form.M.contacts.S; + const medConditions = data.medical_form.M.medicalConditions.L; + if (allergies.length > 0) { + document.getElementById("allergyYes").checked = true; + toggleAllergyList(); + allergyList = [] + for (const allergy of allergies){ + allergyList.push(allergy.S); + } + document.getElementById("allergy_list").value = allergyList.join('\n'); + } + else { + document.getElementById("allergyNo").checked = true; + toggleAllergyList(); + } + if (medications.length > 0) { + document.getElementById("medsYes").checked = true; + toggleMedsList(); + medsList = [] + for (const med of medConditions) { + medsList.push(med.S); + } + document.getElementById("meds_list").value = medsList.join('\n'); + } + else { + document.getElementById("medsNo").checked = true; + toggleMedsList(); + } + if (contacts == "Y") { + document.getElementById("contactsYes").checked = true; + } + else { + document.getElementById("contactsNo").checked = true; + } + // Reset checked medicalConditions boxes + for (const medCondition of ["epilepsy","lungDisease","heartDisease","diabetes","highBp"]) { + document.getElementById(medCondition).checked = false; + } + if (medConditions.length > 0) { + for (const mc of medConditions) { + document.getElementById(mc.S).checked = true; + } + } + document.getElementById("medicalWaiver").checked = true; } } function updateFields() { From 36d79646f8dfbfe856d3276ece0bf1476dc89a2e Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Wed, 23 Oct 2024 11:30:32 -0500 Subject: [PATCH 8/9] Update 'medical_form' property --- app.py | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/app.py b/app.py index 5227ea8..ab06295 100644 --- a/app.py +++ b/app.py @@ -116,6 +116,15 @@ def get_s3_file(bucket, file_name): return output +def format_medical_form(contacts, medicalConditions_list, allergy_list, medications_list): + return dict( + contacts=dict(S=contacts), + medicalConditions=dict(L=[{"S": mc} for mc in medicalConditions_list if mc != ""]), + allergies=dict(L=[{"S": a} for a in allergy_list if a != ""]), + medications=dict(L=[{"S": m} for m in medications_list if m != ""]), + ) + + @app.route("/login") def login(): return render_template( @@ -305,18 +314,13 @@ def handle_form(): msg = "You must choose at least one event" abort(400, msg) - medical_form = dict( - contacts=request.form.get("contacts"), - medicalConditions=request.form.get("medicalConditionsList").split(","), + medical_form = format_medical_form( + request.form.get("contacts"), + request.form.get("medicalConditionsList").split(","), + request.form.get("allergy_list").split("\r\n"), + request.form.get("meds_list").split("\r\n"), ) - if request.form.get("allergies") == "Y": - medical_form["allergies"] = request.form.get("allergy_list").split("\r\n") - else: - medical_form["allergies"] = "None" - if request.form.get("medications") == "Y": - medical_form["medications"] = request.form.get("meds_list").split("\r\n") - else: - medical_form["medications"] = "None" + form_data.update( dict( parent={"S": request.form.get("parentName")}, @@ -332,7 +336,7 @@ def handle_form(): pair_poomsae_form={"S": request.form.get("pair poomsae form")}, team_poomsae_form={"S": request.form.get("team poomsae form")}, family_poomsae_form={"S": request.form.get("family poomsae form")}, - medical_form={"S": json.dumps(medical_form)}, + medical_form={"M": json.dumps(medical_form)}, ) ) if badges_enabled: @@ -977,18 +981,13 @@ def add_entry(): msg = "You must choose at least one event" abort(400, msg) - medical_form = dict( - contacts=request.form.get("contacts"), - medicalConditions=request.form.get("medicalConditionsList").split(","), + medical_form = format_medical_form( + request.form.get("contacts"), + request.form.get("medicalConditionsList").split(","), + request.form.get("allergy_list").split("\r\n"), + request.form.get("meds_list").split("\r\n"), ) - if request.form.get("allergies") == "Y": - medical_form["allergies"] = request.form.get("allergy_list").split("\r\n") - else: - medical_form["allergies"] = "None" - if request.form.get("medications") == "Y": - medical_form["medications"] = request.form.get("meds_list").split("\r\n") - else: - medical_form["medications"] = "None" + form_data.update( dict( parent={"S": request.form.get("parentName")}, From dc7688e7baa763e3c584defd4f5c44feec838ba4 Mon Sep 17 00:00:00 2001 From: Scott Eppler Date: Wed, 23 Oct 2024 15:39:38 -0500 Subject: [PATCH 9/9] Drop 'json.dumps' from "medical_form" prop --- app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index ab06295..3bbc2c8 100644 --- a/app.py +++ b/app.py @@ -336,7 +336,7 @@ def handle_form(): pair_poomsae_form={"S": request.form.get("pair poomsae form")}, team_poomsae_form={"S": request.form.get("team poomsae form")}, family_poomsae_form={"S": request.form.get("family poomsae form")}, - medical_form={"M": json.dumps(medical_form)}, + medical_form={"M": medical_form}, ) ) if badges_enabled: @@ -1003,7 +1003,7 @@ def add_entry(): pair_poomsae_form={"S": request.form.get("pair poomsae form")}, team_poomsae_form={"S": request.form.get("team poomsae form")}, family_poomsae_form={"S": request.form.get("family poomsae form")}, - medical_form={"S": json.dumps(medical_form)}, + medical_form={"S": medical_form}, ) ) if badges_enabled: