from dao.project_dao import getAllUsersFromMaster,getUserDetailsFromMaster
from dao.voucher_approval_dao import *
from datetime import datetime
from utils.Email import sendEmail
from utils.fcm_notification import send_notification
from dao.vendor_dao import getVendorDetailsDao
def getVoucherApprovalUserReportService(mongo):
queryResult = []
try:
users=getAllUsersFromMaster(mongo)
for user in users:
if 'emp_id' in user and 'intervention' in user:
insert_obj={
"Employee Code": user['emp_id'],
"Employee Name": user['first_name'],
"Intervention":user['intervention'],
"Senior 1 10000 Emp Code": "",
"Senior 1 10000 Emp Name": "",
"Senior 2 10000 Emp Code": "",
"Senior 2 10000 Emp Name": "",
"Senior 1 50000 Emp Code": "",
"Senior 1 50000 Emp Name": "",
"Senior 2 50000 Emp Code": "",
"Senior 2 50000 Emp Name": "",
"Senior 3 50000 Emp Code": "",
"Senior 3 50000 Emp Name": "",
"Senior 1 5Lac Emp Code": "",
"Senior 1 5Lac Emp Name": "",
"Senior 2 5Lac Emp Code": "",
"Senior 2 5Lac Emp Name": "",
"Senior 3 5Lac Emp Code": "",
"Senior 3 5Lac Emp Name": "",
"Senior 1 6Lac Emp Code": "",
"Senior 1 6Lac Emp Name": "",
"Senior 2 6Lac Emp Code": "",
"Senior 2 6Lac Emp Name": "",
"Senior 3 6Lac Emp Code": "",
"Senior 3 6Lac Emp Name": "",
"Senior 1 10Lac Emp Code": "",
"Senior 1 10Lac Emp Name": "",
"Senior 1 above 10Lac Emp Code": "",
"Senior 1 above 10Lac Emp Name": "",
"Finance Level 1 Emp Code":"",
"Finance Level 1 Emp Name":"",
"Finance Level 2 Emp Code":"",
"Finance Level 2 Emp Name":""
}
queryResult.append(insert_obj)
except Exception as err:
# insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo)
print(err)
queryResult = []
return queryResult
def getSeniorDetailsService(emp_key,mongo):
queryResult = []
try:
queryResult=getVoucherSeniorListDao(emp_key,mongo)
except Exception as err:
print(err)
queryResult = []
return queryResult
def uploadSeniorDetailsService(request_obj,mongo):
queryResult={}
error_response=[]
try:
formatted_users={}
users=getAllUsersFromMaster(mongo)
for user in users:
if 'emp_id' in user:
formatted_users[user['emp_id']]=user
for data in request_obj['data']:
try:
emp_code=data['Employee Code']
emp_name=data['Employee Name']
intervention=data['Intervention']
if emp_code in formatted_users:
try:
# Upto 10000 senior
senior_1_10000_emp_code=data['Senior 1 10000 Emp Code']
senior_1_10000_emp_name=data['Senior 1 10000 Emp Name']
senior_2_10000_emp_code=data['Senior 2 10000 Emp Code']
senior_2_10000_emp_name=data['Senior 2 10000 Emp Name']
# 10000 to 50000 senior
senior_1_50000_emp_code=data['Senior 1 50000 Emp Code']
senior_1_50000_emp_name=data['Senior 1 50000 Emp Name']
senior_2_50000_emp_code=data['Senior 2 50000 Emp Code']
senior_2_50000_emp_name=data['Senior 2 50000 Emp Name']
senior_3_50000_emp_code=data['Senior 3 50000 Emp Code']
senior_3_50000_emp_name=data['Senior 3 50000 Emp Name']
# 50000 to 5Lac senior
senior_1_5lac_emp_code=data['Senior 1 5Lac Emp Code']
senior_1_5lac_emp_name=data['Senior 1 5Lac Emp Name']
senior_2_5lac_emp_code=data['Senior 2 5Lac Emp Code']
senior_2_5lac_emp_name=data['Senior 2 5Lac Emp Name']
senior_3_5lac_emp_code=data['Senior 3 5Lac Emp Code']
senior_3_5lac_emp_name=data['Senior 3 5Lac Emp Name']
# 5Lac to 6Lac senior
senior_1_6lac_emp_code=data['Senior 1 6Lac Emp Code']
senior_1_6lac_emp_name=data['Senior 1 6Lac Emp Name']
senior_2_6lac_emp_code=data['Senior 2 6Lac Emp Code']
senior_2_6lac_emp_name=data['Senior 2 6Lac Emp Name']
senior_3_6lac_emp_code=data['Senior 3 6Lac Emp Code']
senior_3_6lac_emp_name=data['Senior 3 6Lac Emp Name']
# 6Lac to 10Lac senior
senior_1_10lac_emp_code=data['Senior 1 10Lac Emp Code']
senior_1_10lac_emp_name=data['Senior 1 10Lac Emp Name']
# Above 10lac
senior_1_above10lac_emp_code=data['Senior 1 above 10Lac Emp Code']
senior_1_above10lac_emp_name=data['Senior 1 above 10Lac Emp Name']
# Finance Level 1
finance_level_1_emp_code=data["Finance Level 1 Emp Code"]
finance_level_1_emp_name=data["Finance Level 1 Emp Name"]
# Finance Level 2
finance_level_2_emp_code=data["Finance Level 2 Emp Code"]
finance_level_2_emp_name=data["Finance Level 2 Emp Name"]
if ((senior_1_10000_emp_code!="NA" and senior_1_10000_emp_code not in formatted_users)
or (senior_2_10000_emp_code!="NA" and senior_2_10000_emp_code not in formatted_users)
or (senior_1_50000_emp_code!="NA" and senior_1_50000_emp_code not in formatted_users)
or (senior_2_50000_emp_code!="NA" and senior_2_50000_emp_code not in formatted_users)
or (senior_3_50000_emp_code!="NA" and senior_3_50000_emp_code not in formatted_users)
or (senior_1_5lac_emp_code!="NA" and senior_1_5lac_emp_code not in formatted_users)
or (senior_2_5lac_emp_code!="NA" and senior_2_5lac_emp_code not in formatted_users)
or (senior_3_5lac_emp_code!="NA" and senior_3_5lac_emp_code not in formatted_users)
or (senior_1_6lac_emp_code!="NA" and senior_1_6lac_emp_code not in formatted_users)
or (senior_2_6lac_emp_code!="NA" and senior_2_6lac_emp_code not in formatted_users)
or (senior_3_6lac_emp_code!="NA" and senior_3_6lac_emp_code not in formatted_users)
or (senior_1_10lac_emp_code!="NA" and senior_1_10lac_emp_code not in formatted_users)
or (senior_1_above10lac_emp_code!="NA" and senior_1_above10lac_emp_code not in formatted_users)
or (finance_level_1_emp_code!="NA" and finance_level_1_emp_code not in formatted_users)
or (finance_level_2_emp_code!="NA" and finance_level_2_emp_code not in formatted_users)):
error_response.append(emp_code)
else:
# Update into database
try:
senior_1_10000_emp_key='NA'
senior_2_10000_emp_key='NA'
if senior_1_10000_emp_code!='NA':
senior_1_10000_emp_key=formatted_users[senior_1_10000_emp_code]['key']
if senior_2_10000_emp_code!='NA':
senior_2_10000_emp_key=formatted_users[senior_2_10000_emp_code]['key']
senior_1_50000_emp_key='NA'
senior_2_50000_emp_key='NA'
senior_3_50000_emp_key='NA'
if senior_1_50000_emp_code!='NA':
senior_1_50000_emp_key=formatted_users[senior_1_50000_emp_code]['key']
if senior_2_50000_emp_code!='NA':
senior_2_50000_emp_key=formatted_users[senior_2_50000_emp_code]['key']
if senior_3_50000_emp_code!='NA':
senior_3_50000_emp_key=formatted_users[senior_3_50000_emp_code]['key']
senior_1_5lac_emp_key='NA'
senior_2_5lac_emp_key='NA'
senior_3_5lac_emp_key='NA'
if senior_1_5lac_emp_code!='NA':
senior_1_5lac_emp_key=formatted_users[senior_1_5lac_emp_code]['key']
if senior_2_5lac_emp_code!='NA':
senior_2_5lac_emp_key=formatted_users[senior_2_5lac_emp_code]['key']
if senior_3_5lac_emp_code!='NA':
senior_3_5lac_emp_key=formatted_users[senior_3_5lac_emp_code]['key']
senior_1_6lac_emp_key='NA'
senior_2_6lac_emp_key='NA'
senior_3_6lac_emp_key='NA'
if senior_1_6lac_emp_code!='NA':
senior_1_6lac_emp_key=formatted_users[senior_1_6lac_emp_code]['key']
if senior_2_6lac_emp_code!='NA':
senior_2_6lac_emp_key=formatted_users[senior_2_6lac_emp_code]['key']
if senior_3_6lac_emp_code!='NA':
senior_3_6lac_emp_key=formatted_users[senior_3_6lac_emp_code]['key']
senior_1_10lac_emp_key='NA'
if senior_1_10lac_emp_code!='NA':
senior_1_10lac_emp_key=formatted_users[senior_1_10lac_emp_code]['key']
senior_1_above10lac_emp_key='NA'
if senior_1_above10lac_emp_code!='NA':
senior_1_above10lac_emp_key=formatted_users[senior_1_above10lac_emp_code]['key']
finance_level_1_emp_key='NA'
if finance_level_1_emp_code!='NA':
finance_level_1_emp_key=formatted_users[finance_level_1_emp_code]['key']
finance_level_2_emp_key='NA'
if finance_level_2_emp_code!='NA':
finance_level_2_emp_key=formatted_users[finance_level_2_emp_code]['key']
insert_obj={
'emp_key':formatted_users[emp_code]['key'],
'emp_name':emp_name,
'intervention':intervention,
'senior_1_10000_emp_key':senior_1_10000_emp_key,
'senior_1_10000_emp_name':senior_1_10000_emp_name,
'senior_2_10000_emp_key':senior_2_10000_emp_key,
'senior_2_10000_emp_name':senior_2_10000_emp_name,
'senior_1_50000_emp_key':senior_1_50000_emp_key,
'senior_1_50000_emp_name':senior_1_50000_emp_name,
'senior_2_50000_emp_key':senior_2_50000_emp_key,
'senior_2_50000_emp_name':senior_2_50000_emp_name,
'senior_3_50000_emp_key':senior_3_50000_emp_key,
'senior_3_50000_emp_name':senior_3_50000_emp_name,
'senior_1_5lac_emp_key':senior_1_5lac_emp_key,
'senior_1_5lac_emp_name':senior_1_5lac_emp_name,
'senior_2_5lac_emp_key':senior_2_5lac_emp_key,
'senior_2_5lac_emp_name':senior_2_5lac_emp_name,
'senior_3_5lac_emp_key':senior_3_5lac_emp_key,
'senior_3_5lac_emp_name':senior_3_5lac_emp_name,
'senior_1_6lac_emp_key':senior_1_6lac_emp_key,
'senior_1_6lac_emp_name':senior_1_6lac_emp_name,
'senior_2_6lac_emp_key':senior_2_6lac_emp_key,
'senior_2_6lac_emp_name':senior_2_6lac_emp_name,
'senior_3_6lac_emp_key':senior_3_6lac_emp_key,
'senior_3_6lac_emp_name':senior_3_6lac_emp_name,
'senior_1_10lac_emp_key':senior_1_10lac_emp_key,
'senior_1_10lac_emp_name':senior_1_10lac_emp_name,
'senior_1_above10lac_emp_key':senior_1_above10lac_emp_key,
'senior_1_above10lac_emp_name':senior_1_above10lac_emp_name,
'finance_level_1_emp_key': finance_level_1_emp_key,
'finance_level_1_emp_name': finance_level_1_emp_name,
'finance_level_2_emp_key':finance_level_2_emp_key,
'finance_level_2_emp_name':finance_level_2_emp_name
}
except Exception as err:
print(err)
updateSeniorDataMaster(insert_obj,mongo)
except Exception as err:
print(err)
error_response.append(emp_code)
else:
error_response.append(emp_code)
except Exception as err:
print(err)
except Exception as err:
print(err)
if len(error_response)==0:
queryResult={'status':'failure','message': 'Something went wrong!','error_list':error_response}
else:
queryResult={'status':'success','message': 'Data Updated Successfully!'}
return queryResult
def findApprovalTrackForVoucher(request_obj,mongo):
senior_found=False
approval_track = {"senior_level_1":{},"senior_level_2":{},"senior_level_3":{},"finance_level_1":{},"finance_level_2":{}}
try:
# Fetch user Details from user master
user_list=getVoucherSeniorListDao(request_obj['user_id'],mongo)
amount=request_obj['product_total_amount']
for user_obj in user_list:
senior_found=True
senior_level_1_key='NA'
senior_level_1_name='NA'
senior_level_2_key='NA'
senior_level_2_name='NA'
senior_level_3_key='NA'
senior_level_3_name='NA'
finance_level_1_key='NA'
finance_level_1_name='NA'
finance_level_2_key='NA'
finance_level_2_name='NA'
try:
finance_level_1_key=user_obj['finance_level_1_emp_key']
finance_level_1_name=user_obj['finance_level_1_emp_name']
finance_level_2_key==user_obj['finance_level_2_emp_key']
finance_level_2_name=user_obj['finance_level_2_emp_name']
except Exception as err:
print(err)
# Other Condition of Opex
if request_obj['project_type']=='Opex - Vendor payment':
if amount<=10000:# 2 Level Approval (DPH)
senior_level_1_key=user_obj['senior_1_10000_emp_key']
senior_level_1_name=user_obj['senior_1_10000_emp_name']
senior_level_2_key=user_obj['senior_2_10000_emp_key']
senior_level_2_name=user_obj['senior_2_10000_emp_name']
elif amount>10000 and amount<=50000: # 3 Level Approval (PH)
senior_level_1_key=user_obj['senior_1_50000_emp_key']
senior_level_1_name=user_obj['senior_1_50000_emp_name']
senior_level_2_key=user_obj['senior_2_50000_emp_key']
senior_level_2_name=user_obj['senior_2_50000_emp_name']
senior_level_3_key=user_obj['senior_3_50000_emp_key']
senior_level_3_name=user_obj['senior_3_50000_emp_name']
elif amount>50000 and amount<=100000: # 3 Level Approval (PD)
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>100000 and amount<=500000: # 3 Level Approval (CXO)
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>500000 and amount<=600000: # 3 Level Approval (Any two CXO)
senior_level_1_key=user_obj['senior_1_6lac_emp_key']
senior_level_1_name=user_obj['senior_1_6lac_emp_name']
senior_level_2_key=user_obj['senior_2_6lac_emp_key']
senior_level_2_name=user_obj['senior_2_6lac_emp_name']
senior_level_3_key=user_obj['senior_3_6lac_emp_key']
senior_level_3_name=user_obj['senior_3_6lac_emp_name']
elif amount>600000 and amount<=1000000: # 1 Level Approval (CEO)
senior_level_1_key=user_obj['senior_1_10lac_emp_key']
senior_level_1_name=user_obj['senior_1_10lac_emp_name']
elif amount>1000000: # 1 Level Approval (Trusty)
senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
elif request_obj['project_type']=='Capex - Centre Advances':
if amount<50000: # 3 Level Approval (PH)
senior_level_1_key=user_obj['senior_1_50000_emp_key']
senior_level_1_name=user_obj['senior_1_50000_emp_name']
senior_level_2_key=user_obj['senior_2_50000_emp_key']
senior_level_2_name=user_obj['senior_2_50000_emp_name']
senior_level_3_key=user_obj['senior_3_50000_emp_key']
senior_level_3_name=user_obj['senior_3_50000_emp_name']
elif amount>50000 and amount<=100000: # 3 Level Approval (PD)
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>100000 and amount<=500000: # 3 Level Approval (CXO)
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>500000 and amount<=750000: # 3 Level Approval (Any two CXO)
senior_level_1_key=user_obj['senior_1_6lac_emp_key']
senior_level_1_name=user_obj['senior_1_6lac_emp_name']
senior_level_2_key=user_obj['senior_2_6lac_emp_key']
senior_level_2_name=user_obj['senior_2_6lac_emp_name']
senior_level_3_key=user_obj['senior_3_6lac_emp_key']
senior_level_3_name=user_obj['senior_3_6lac_emp_name']
elif amount>750000 and amount<=1500000: # 1 Level Approval (CEO)
senior_level_1_key=user_obj['senior_1_10lac_emp_key']
senior_level_1_name=user_obj['senior_1_10lac_emp_name']
elif amount>1500000: # 1 Level Approval (Trusty)
senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
elif request_obj['project_type']=='Capex - In Budget':
if amount<100000: # 3 Level Approval (PH)
senior_level_1_key=user_obj['senior_1_50000_emp_key']
senior_level_1_name=user_obj['senior_1_50000_emp_name']
senior_level_2_key=user_obj['senior_2_50000_emp_key']
senior_level_2_name=user_obj['senior_2_50000_emp_name']
senior_level_3_key=user_obj['senior_3_50000_emp_key']
senior_level_3_name=user_obj['senior_3_50000_emp_name']
elif amount>100000 and amount<=150000: # 3 Level Approval (PD)
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>150000 and amount<=500000: # 3 Level Approval (CXO)
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>500000 and amount<=750000: # 3 Level Approval (Any two CXO)
senior_level_1_key=user_obj['senior_1_6lac_emp_key']
senior_level_1_name=user_obj['senior_1_6lac_emp_name']
senior_level_2_key=user_obj['senior_2_6lac_emp_key']
senior_level_2_name=user_obj['senior_2_6lac_emp_name']
senior_level_3_key=user_obj['senior_3_6lac_emp_key']
senior_level_3_name=user_obj['senior_3_6lac_emp_name']
elif amount>750000 and amount<=1500000: # 1 Level Approval (CEO)
senior_level_1_key=user_obj['senior_1_10lac_emp_key']
senior_level_1_name=user_obj['senior_1_10lac_emp_name']
elif amount>1500000: # 1 Level Approval (Trusty)
senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
else:
if amount<=10000:# 2 Level Approval
senior_level_1_key=user_obj['senior_1_10000_emp_key']
senior_level_1_name=user_obj['senior_1_10000_emp_name']
senior_level_2_key=user_obj['senior_2_10000_emp_key']
senior_level_2_name=user_obj['senior_2_10000_emp_name']
elif amount>10000 and amount<=50000: # 3 Level Approval
senior_level_1_key=user_obj['senior_1_50000_emp_key']
senior_level_1_name=user_obj['senior_1_50000_emp_name']
senior_level_2_key=user_obj['senior_2_50000_emp_key']
senior_level_2_name=user_obj['senior_2_50000_emp_name']
senior_level_3_key=user_obj['senior_3_50000_emp_key']
senior_level_3_name=user_obj['senior_3_50000_emp_name']
elif amount>50000 and amount<=500000: # 3 Level Approval
senior_level_1_key=user_obj['senior_1_5lac_emp_key']
senior_level_1_name=user_obj['senior_1_5lac_emp_name']
senior_level_2_key=user_obj['senior_2_5lac_emp_key']
senior_level_2_name=user_obj['senior_2_5lac_emp_name']
senior_level_3_key=user_obj['senior_3_5lac_emp_key']
senior_level_3_name=user_obj['senior_3_5lac_emp_name']
elif amount>500000 and amount<=600000: # 3 Level Approval
senior_level_1_key=user_obj['senior_1_6lac_emp_key']
senior_level_1_name=user_obj['senior_1_6lac_emp_name']
senior_level_2_key=user_obj['senior_2_6lac_emp_key']
senior_level_2_name=user_obj['senior_2_6lac_emp_name']
senior_level_3_key=user_obj['senior_3_6lac_emp_key']
senior_level_3_name=user_obj['senior_3_6lac_emp_name']
elif amount>600000 and amount<=1000000: # 1 Level Approval
senior_level_1_key=user_obj['senior_1_10lac_emp_key']
senior_level_1_name=user_obj['senior_1_10lac_emp_name']
elif amount>1000000: # 1 Level Approval
senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
approval_track['senior_level_1']={
"level" : "Senior Level 1",
"name" : senior_level_1_name,
"id" : senior_level_1_key,
"status" : "PENDING"
}
approval_track['senior_level_2']={
"level" : "Senior Level 2",
"name" : senior_level_2_name,
"id" : senior_level_2_key,
"status" : "NOT VISIBLE"
}
approval_track['senior_level_3']={
"level" : "Senior Level 3",
"name" : senior_level_3_name,
"id" : senior_level_3_key,
"status" : "NOT VISIBLE"
}
approval_track['finance_level_1']={
"level" : "Finance Level 1",
"name" : finance_level_1_name,
"id" : finance_level_1_key,
"status" : "NOT VISIBLE"
}
approval_track['finance_level_2']={
"level" : "Finance Level 2",
"name" : finance_level_2_name,
"id" : finance_level_2_key,
"status" : "NOT VISIBLE"
}
except Exception as err:
senior_found=False
print(err)
return senior_found,approval_track
def approveDeclineVoucherService(request_obj,mongo,app):
queryResult={}
try:
update_obj={}
flag=request_obj['status']
voucher_details=getVoucherDetailsDao(request_obj['voucher_id'],mongo)
remark=request_obj["reason"]
seniorId=request_obj['user_id']
timestamp=int(datetime.now().timestamp())*1000
approverName = ""
approverLevel = ""
approverId = ""
approvalTrackLevel = ""
notification_format=""
for voucher in voucher_details:
user_id=voucher['user_id']
email_senior_id='NA'
seniorLevel1=voucher['approval_track']['senior_level_1']
seniorLevel2=voucher['approval_track']['senior_level_2']
seniorLevel3=voucher['approval_track']['senior_level_3']
financeLevel1=voucher['approval_track']['finance_level_1']
financeLevel2=voucher['approval_track']['finance_level_2']
# if senior id = senior level1
if seniorLevel1["id"]==seniorId and seniorLevel1["status"]=="PENDING":
approverName = seniorLevel1["name"]
approverId = seniorLevel1["id"]
approverLevel = seniorLevel1["level"]
approvalTrackLevel = "senior_level_1"
# If expense approved
if flag=="APPROVED":
if seniorLevel2["id"]=="NA":
notification_format = "Please print the claim and submit to Finance Level 1 along with supporting documents if any"
if seniorLevel3["id"]=="NA":
notification_format = "Please print the claim and submit to Finance Level 1 along with supporting documents if any"
if financeLevel1["id"]=="NA":
if financeLevel2["id"]=="NA":
update_obj["voucher_status"]=flag
# create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
else:
email_senior_id=financeLevel2["id"]
update_obj["approval_track.finance_level_2.status"]= "PENDING"
else:
email_senior_id=financeLevel1["id"]
update_obj["approval_track.finance_level_1.status"]= "PENDING"
else:
email_senior_id=seniorLevel3["id"]
update_obj["approval_track.senior_level_3.status"]= "PENDING"
else:
email_senior_id=seniorLevel2["id"]
update_obj["approval_track.senior_level_2.status"]= "PENDING"
# if senior id = senior level2
elif seniorLevel2["id"]==seniorId and seniorLevel2["status"]=="PENDING":
approverName = seniorLevel2["name"]
approverId = seniorLevel2["id"]
approverLevel = seniorLevel2["level"]
approvalTrackLevel = "senior_level_2"
# If expense approved
if flag=="APPROVED":
if seniorLevel3["id"]=="NA":
notification_format = "Please print the claim and submit to Finance Level 1 along with supporting documents if any"
if financeLevel1["id"]=="NA":
if financeLevel2["id"]=="NA":
update_obj["voucher_status"]=flag
# create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
else:
email_senior_id=financeLevel2["id"]
update_obj["approval_track.finance_level_2.status"]= "PENDING"
else:
email_senior_id=financeLevel1["id"]
update_obj["approval_track.finance_level_1.status"]= "PENDING"
else:
email_senior_id=seniorLevel3["id"]
update_obj["approval_track.senior_level_3.status"]= "PENDING"
# if senior id = senior level3
elif seniorLevel3["id"]==seniorId and seniorLevel3["status"]=="PENDING":
approverName = seniorLevel3["name"]
approverId = seniorLevel3["id"]
approverLevel = seniorLevel3["level"]
approvalTrackLevel = "senior_level_3"
# If expense approved
if flag=="APPROVED":
if financeLevel1["id"]=="NA":
if financeLevel2["id"]=="NA":
update_obj["voucher_status"]=flag
# create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
else:
email_senior_id=financeLevel2["id"]
update_obj["approval_track.finance_level_2.status"]= "PENDING"
else:
email_senior_id=financeLevel1["id"]
update_obj["approval_track.finance_level_1.status"]= "PENDING"
# if senior id = Finance level 1
elif financeLevel1["id"]==seniorId and financeLevel1["status"]=="PENDING":
approverName = financeLevel1["name"]
approverId = financeLevel1["id"]
approverLevel = financeLevel1["level"]
approvalTrackLevel = "finance_level_1"
# If expense approved
if flag=="APPROVED":
if financeLevel2["id"]=="NA":
update_obj["voucher_status"]=flag
# create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
else:
email_senior_id=financeLevel2["id"]
update_obj["approval_track.finance_level_2.status"]= "PENDING"
# if senior id = Finance level 2
elif financeLevel2["id"]==seniorId and financeLevel2["status"]=="PENDING":
approverName = financeLevel2["name"]
approverId = financeLevel2["id"]
approverLevel = financeLevel2["level"]
approvalTrackLevel = "finance_level_2"
# If expense approved
if flag=="APPROVED":
update_obj["voucher_status"]=flag
# create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
update_obj["approval_track." + approvalTrackLevel + ".status"]=flag
update_obj["approval_track." + approvalTrackLevel + ".info"]={"status":flag,"remark":remark,"updated_on":timestamp}
# for disapproved
if flag=="DECLINED":
update_obj["voucher_status"]= "DECLINED"
# Status Log
approval_status={
"user_id":user_id,
"voucher_id":request_obj['voucher_id'],
"timestamp":timestamp,
"action":flag,
"approver_name":approverName,
"approver_level":approverLevel,
"approver_id":approverId,
"type":"approval",
"remark":remark
}
# Update Voucher
updateVoucherApprovalStatus(update_obj,request_obj['voucher_id'],mongo)
# Insert into voucher-status-log
insertVoucherStatusLog(approval_status,mongo)
if email_senior_id!='NA':
try:
senior_lst=getUserDetailsFromMaster(email_senior_id,mongo)
if len(senior_lst)!=0:
# send_notification(senior_lst[0], "Expense Request Status", "Your Expense request has been " + flag)
# Notification to user
user_lst=getUserDetailsFromMaster(user_id,mongo)
if len(user_lst)!=0:
send_notification(user_lst[0], "Expense Request Status", "Your Expense request has been " + flag)
if notification_format!="":
send_notification(user_lst[0], "Expense Request Status", notification_format)
if len(user_lst)!=0:
name=""
if 'first_name' in senior_lst[0]:
name+=senior_lst[0]['first_name']
if 'last_name' in senior_lst[0]:
name+=" "+senior_lst[0]['last_name']
vendor_name=""
if 'vendorName' in voucher and voucher['vendorName']!='':
vendor_name=voucher['vendorName']
elif 'vendor_id' in voucher and voucher['vendor_id'] != '':
vendor_id = voucher['vendor_id'] # MOU Expiry
vendor_lst=getVendorDetailsDao(vendor_id,mongo)
if len(vendor_lst)!=0:
vendor_name=vendor_lst[0]['v_name']
subject="Expense Voucher Request"
body="Dear "+name+",
Expense Voucher raised by "+user_lst[0]['full_name']+" of '"+vendor_name+"' of rs "+str(voucher['product_total_amount'])+", please approve the same."
if 'official_email_id' in senior_lst[0] and senior_lst[0]['official_email_id']!="" and senior_lst[0]['official_email_id']!="NA":
reciever_email=senior_lst[0]['official_email_id']
sendEmail("",reciever_email,body,False,subject)
except Exception as identifier:
print(identifier)
queryResult = {
'status': 'success',
'message': 'Voucher '+flag+' successfully!'
}
except Exception as err:
queryResult = {
'status': 'failure',
'message': 'Something went wrong!'
}
print(err)
return queryResult
def getVoucherPendingLisForApprovals(u_id,mongo):
queryResult = []
try:
queryResult = getPendingVoucherForApprovalDao(u_id, mongo)
except Exception as err:
queryResult = []
return queryResult
def getVoucherArchiveLisForApprovals(u_id,mongo):
queryResult = []
try:
queryResult = getArchiveVoucherForApprovalDao(u_id, mongo)
except Exception as err:
queryResult = []
return queryResult
def getVoucherDetails(id, mongo):
queryResult = []
try:
queryResult = getVoucherDetailsDao(id, mongo)
except Exception as err:
queryResult = []
return queryResult
def getVoucherDetailsPrintCount(id, mongo):
queryResult = {}
try:
vouchers = getVoucherDetailsDao(id, mongo)
count=1
for voucher in vouchers:
if 'print_count' in voucher:
count=voucher['print_count']+1
if count<=3:
# print
queryResult={'status':'OK'}
# Update print count
updateVoucherApprovalStatus({'print_count':count},id,mongo)
else:
# failure
queryResult={'status':'Failure','message':'You exceed your print limit!'}
except Exception as err:
queryResult={'status':'Failure','message':'Something went wrong!'}
return queryResult