in approve-request/app.py [0:0]
def lambda_handler(event,context):
logger.info(json.dumps(event))
success_responseData = {
"Status" : "SUCCESS",
"Reason" : "Approved",
"UniqueId" : 'None',
"Data" : "Owner approved the stack creation"
}
if event['queryStringParameters'] and 'requestId' in event['queryStringParameters'] and 'requestStatus' in event['queryStringParameters']:
request_id = event['queryStringParameters']['requestId']
request_status = event['queryStringParameters']['requestStatus']
success_responseData['UniqueId'] = request_id
request = get_request_item(request_id)
requested_amt = request['pricingInfoAtRequest']['EstCurrMonthPrice']
business_entity_id = request['businessEntityId']
budget = get_budgets_for_request(business_entity_id)
accrued_blocked = budget['accruedBlockedSpend']
accrued_forecast = budget['accruedForecastedSpend']
accrued_approved = budget['accruedApprovedSpend']
requested_amt_monthly = request['pricingInfoAtRequest']['31DayPrice']
wait_url = request['stackWaitUrl']
try:
logger.info("Accruals before processing the request Blocked: {}, Forcasted: {}, Approved: {}".format(accrued_blocked, accrued_forecast, accrued_approved))
if request['requestStatus'] == 'PENDING' or request['requestStatus'] == 'BLOCKED' :
if request_status == "Approve":
success_responseData['Status'] = "SUCCESS"
update_approval_request_status(request_id)
# Recalcuate the accruals and move the requested amt to forecasted from blocked
accrued_blocked = accrued_blocked - requested_amt_monthly
accrued_forecast = accrued_forecast + requested_amt
accrued_approved = accrued_approved + (requested_amt_monthly - requested_amt)
update_accrued_amt(business_entity_id, accrued_forecast, accrued_blocked, accrued_approved)
elif request_status == "Reject":
success_responseData['Status'] = "FAILURE"
success_responseData['Reason'] = "Rejected"
success_responseData['Data'] = "Admin rejected the stack"
update_rejection_request_status(request_id)
# Remove the blocked amount since request is rejected
accrued_blocked = accrued_blocked - requested_amt_monthly
update_accrued_amt(business_entity_id, accrued_forecast, accrued_blocked, accrued_approved)
response = requests.put(wait_url, data=json.dumps(success_responseData))
logger.info("Successfully responded for waithandle with response: {}".format(response))
else:
logger.info('Request can abe approved/rejected only when it is in blocked or pending state')
except Exception as e:
logger.error("Failed approving the request: {}".format(e))
response = {"data":'Successfully Processed the request'}
return {'statusCode':'200','body':json.dumps(response)}
else:
response = {"error":'Mandatory request paramters not found' }
return {'statusCode':'200','body':json.dumps(response)}