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