def leaveapplication():
form = LeaveApplicationForm()
if form.validate_on_submit():
leave = LeaveApplication(user_id=current_user.id ,leavetype_id=form.leavetype.data,
date_created=datetime.utcnow(), date_from=form.date_from.data, date_to=form.date_to.data,
description=form.description.data)
db.session.add(leave)
db.session.commit()
flash('Your application has been sent.')
# Calculate the difference between two dates
leave_period = leave.date_to - leave.date_from
# Get the current user LeaveBalance
current_leavebalance = LeaveBalance.query.filter_by(user_id=current_user.user_id, leavetype_id=leave.leavetype_id).first()
# Perform Calculation to deduct the leave_period from the current balance
updated_leavebalance = current_leavebalance.credits - leave_period.days
update = LeaveBalance.query.filter_by(user_id=leave.user_id)
update.credits = updated_leavebalance
db.session.add(update)
db.session.commit()
ZGVmIGxlYXZlYXBwbGljYXRpb24oKToKICAgIGZvcm0gPSBMZWF2ZUFwcGxpY2F0aW9uRm9ybSgpCiAgICBpZiBmb3JtLnZhbGlkYXRlX29uX3N1Ym1pdCgpOgogICAgICAgIGxlYXZlID0gTGVhdmVBcHBsaWNhdGlvbih1c2VyX2lkPWN1cnJlbnRfdXNlci5pZCAsbGVhdmV0eXBlX2lkPWZvcm0ubGVhdmV0eXBlLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVfY3JlYXRlZD1kYXRldGltZS51dGNub3coKSwgZGF0ZV9mcm9tPWZvcm0uZGF0ZV9mcm9tLmRhdGEsIGRhdGVfdG89Zm9ybS5kYXRlX3RvLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPWZvcm0uZGVzY3JpcHRpb24uZGF0YSkKCiAgICAgICAgZGIuc2Vzc2lvbi5hZGQobGVhdmUpCiAgICAgICAgZGIuc2Vzc2lvbi5jb21taXQoKQogICAgICAgIGZsYXNoKCdZb3VyIGFwcGxpY2F0aW9uIGhhcyBiZWVuIHNlbnQuJykKCgkJIyBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXMKICAgICAgICBsZWF2ZV9wZXJpb2QgPSBsZWF2ZS5kYXRlX3RvIC0gbGVhdmUuZGF0ZV9mcm9tCiAgICAgICAgCiAgICAgICAgIyBHZXQgdGhlIGN1cnJlbnQgdXNlciBMZWF2ZUJhbGFuY2UKICAgICAgICBjdXJyZW50X2xlYXZlYmFsYW5jZSA9IExlYXZlQmFsYW5jZS5xdWVyeS5maWx0ZXJfYnkodXNlcl9pZD1jdXJyZW50X3VzZXIudXNlcl9pZCwgbGVhdmV0eXBlX2lkPWxlYXZlLmxlYXZldHlwZV9pZCkuZmlyc3QoKQogICAgICAgIAogICAgICAgICMgUGVyZm9ybSBDYWxjdWxhdGlvbiB0byBkZWR1Y3QgdGhlIGxlYXZlX3BlcmlvZCBmcm9tIHRoZSBjdXJyZW50IGJhbGFuY2UKICAgICAgICB1cGRhdGVkX2xlYXZlYmFsYW5jZSA9IGN1cnJlbnRfbGVhdmViYWxhbmNlLmNyZWRpdHMgLSBsZWF2ZV9wZXJpb2QuZGF5cwogICAgICAgIHVwZGF0ZSA9IExlYXZlQmFsYW5jZS5xdWVyeS5maWx0ZXJfYnkodXNlcl9pZD1sZWF2ZS51c2VyX2lkKQogICAgICAgIHVwZGF0ZS5jcmVkaXRzID0gdXBkYXRlZF9sZWF2ZWJhbGFuY2UKICAgICAgICBkYi5zZXNzaW9uLmFkZCh1cGRhdGUpCiAgICAgICAgZGIuc2Vzc2lvbi5jb21taXQoKQ==