def add_balance(): """For GET requests, display the login form. For POSTS, login the current user by processing the form.""" form = BalanceForm() if form.validate_on_submit(): user = User.query.get(form.email.data) if user: if user.balance is None: user.balance = UserBalance() user.balance.amount = 0.0 user.balance.amount += form.amount.data txn_id = str(uuid.uuid4())[:8] reason = "ABU - Admin Balance update" credit_transaction = Transaction() credit_transaction.txn_id = txn_id credit_transaction.party = form.email.data credit_transaction.counter_party = "Admin" credit_transaction.amount = form.amount.data credit_transaction.type = 'Cr' credit_transaction.reason = reason db.session.add(user.balance) db.session.add(credit_transaction) db.session.commit() return redirect(url_for("user_page")) else: flash('Invalid User Id') return render_template("add_balance.html", form=form)
def charge_players(): """For GET requests, display the login form. For POSTS, login the current user by processing the form.""" form = ChargePlayersForm() if form.validate_on_submit(): date_str = form.play_date.data total_amount = form.total_amount.data reason = form.reason.data play_date = parser.parse(date_str).date() played_date = PlayScheduledDates.query.filter(PlayScheduledDates.play_date==play_date).first() attending_players = [ attendee for attendee in played_date.attendees if attendee.status=='Yes'] total_players = len(attending_players) if len(attending_players) else 1 amount_per_head = total_amount/float(total_players) low_balance_users = {} for attendee in attending_players: user = User.query.get(attendee.attendee_email) if user: user.debit_balance(amount_per_head) txn_id = str(uuid.uuid4())[:8] debit_transaction = Transaction() debit_transaction.txn_id = txn_id debit_transaction.party = user.email debit_transaction.counter_party = "Admin" debit_transaction.amount = -amount_per_head debit_transaction.type = 'Dr' debit_transaction.reason = reason db.session.add(debit_transaction) db.session.add(user) if user.get_balance() < 10 : low_balance_users[user.email] = (user.first_name, user.get_balance()) played_date.is_charged = True; db.session.commit() send_bulk_emails(low_balance_users) return redirect(url_for("user_page")) return render_template("charge_players.html", form=form)
def send_money(): """For GET requests, display the login form. For POSTS, login the current user by processing the form.""" form = PayForm() if form.validate_on_submit(): transaction_amount = form.amount.data sender = current_user receiver = User.query.get(form.receiver_email.data) if receiver is None: flash('Receiver Does Not exist in system') return render_template("pay.html", form=form) if sender.balance is None or sender.balance.amount < transaction_amount: flash('You have insufficient balance') return render_template("pay.html", form=form) if transaction_amount <= 0: flash('Wrong amount entered') return render_template("pay.html", form=form) if sender.email == receiver.email: flash('Sender and Receiver Cant be same') return render_template("pay.html", form=form) sender.debit_balance(transaction_amount) receiver.credit_balance(transaction_amount) txn_id = str(uuid.uuid4())[:8] reason = "SNM - Send Money" debit_transaction = Transaction() debit_transaction.txn_id = txn_id debit_transaction.party = sender.email debit_transaction.counter_party = receiver.email debit_transaction.amount = -transaction_amount debit_transaction.type = 'Dr' debit_transaction.reason = reason credit_transaction = Transaction() credit_transaction.txn_id = txn_id credit_transaction.party = receiver.email credit_transaction.counter_party = sender.email credit_transaction.amount = transaction_amount credit_transaction.type = 'Cr' credit_transaction.reason = reason db.session.add(sender.balance) db.session.add(receiver.balance) db.session.add(debit_transaction) db.session.add(credit_transaction) db.session.commit() if current_user.get_balance() < 10 : send_low_balance_email(current_user.email, current_user.first_name, current_user.get_balance()) return redirect(url_for("user_page")) return render_template("send_money.html", form=form)