From 9eb437cb09b2b326406715084d651bb570ba8515 Mon Sep 17 00:00:00 2001 From: lizzy Date: Thu, 27 Jun 2019 20:22:06 -0700 Subject: [PATCH] 12: error if member does not exist --- app.py | 43 +++++++++++++++++++++++++++++++------------ app/errors.py | 6 +++--- sample_db.sqlite | Bin 65536 -> 0 bytes 3 files changed, 34 insertions(+), 15 deletions(-) delete mode 100644 sample_db.sqlite diff --git a/app.py b/app.py index f1046ff..ba7151b 100644 --- a/app.py +++ b/app.py @@ -15,7 +15,9 @@ username = "sandbox" api_key = os.environ.get('AT_API_KEY') -test_number = "+254123456789" +test_number = "+254123456789" +africastalking.initialize(username, api_key) +sms = africastalking.SMS def test_text(): africastalking.initialize(username, api_key) @@ -31,12 +33,14 @@ def test_text(): print ('Encountered an error while sending: %s' % str(e)) def add_transaction(from_user, msg): - leader_phone = from_user + leader_phone = int(from_user) + print(leader_phone) leader = User.query.filter(User.phone == leader_phone).first() # TODO: check to make sure user exists, is leader member_phone = msg[1] member = User.query.filter(User.phone == member_phone).first() - # TODO: prompt new user if record not found + if member == None: + return send_error(leader_phone) amount = int(msg[2]) loan_balance = member.loan.balance new_user_transaction = Transaction( @@ -53,23 +57,29 @@ def add_transaction(from_user, msg): africastalking.initialize(username, api_key) sms = africastalking.SMS try: - leader_text = sms.send("Transaction added. Requesting confirmation from " + str(member_phone), [leader_phone]) - member_text = sms.send("Your Co-Op Leader has added a " + amount + " repayment transaction for your loan. \ - Please respond with 'Y' to confirm this transaction is accurate or 'N' to reject it." + str(loan_balance - amount), [member_phone]) + leader_text = sms.send("Transaction added. Requesting confirmation from " + str(member_phone), ['+' + str(leader_phone)]) + member_text = sms.send("Your Co-Op Leader has added a " + str(amount) + " repayment transaction for your loan. \ + Please respond with 'Y' to confirm this transaction is accurate or 'N' to reject it. Your new balance will be: " + str(loan_balance - amount), ['+' + str(member_phone)]) print (leader_text) print (member_text) + return 'success: added loan transaction' except Exception as e: print ('Encountered an error while sending: %s' % str(e)) + return 'Encountered an error while sending: %s' % str(e) + +def send_error(sender_phone): + error_text = sms.send("The user you are trying to update does not exist in our database. Please text {user number} ADD if you would like to add them", ['+' + str(sender_phone)]) + print(error_text) + return 'error: user does not exist' def confirm_transaction(from_user): - member = User.query.filter(User.phone == from_user).first() + member = User.query.filter(User.phone == int(from_user)).first() # TODO: return error message if user does not exist - user_transaction = member.transactions.last + user_transaction = member.transactions.all()[-1] # TODO: return notice message if transaction has already been confirmed if user_transaction.state == 'initiated': user_transaction.state = 'confirmed' member.loan.balance = user_transaction.new_balance - sms = africastalking.SMS db.session.add(member) db.session.add(user_transaction) @@ -197,12 +207,21 @@ def index(): # text receive if request.method == 'POST': - from_user = request.form.getlist('from')[0] + try: + from_user = request.form.getlist('from')[0] + print(from_user) + except: + from_user = None + if from_user == None: + return 'failure: request error' msg = request.form.getlist('text')[0].split() cmd = msg[0] + print(msg) + print(cmd) if cmd.lower() == 'loan': - add_transaction(from_user, msg) - return 'success: added loan transaction' + if len(msg) != 3: + return 'error' + return add_transaction(from_user, msg) elif cmd.lower() == 'y': confirm_transaction(from_user) elif cmd.lower() == 'n': diff --git a/app/errors.py b/app/errors.py index 1fa9df9..b1a629c 100644 --- a/app/errors.py +++ b/app/errors.py @@ -3,9 +3,9 @@ @app.errorhandler(404) def not_found_error(error): - return render_template('404.html'), 404 + return render_template('404.html'), 404 @app.errorhandler(500) def internal_error(error): - db.session.rollback() - return render_template('500.html'), 500 \ No newline at end of file + db.session.rollback() + return render_template('500.html'), 500 \ No newline at end of file diff --git a/sample_db.sqlite b/sample_db.sqlite deleted file mode 100644 index b401ad0f0f8b85b31a46f854acca074d7330fd4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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