voucher_approval_service.py 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. from dao.project_dao import getAllUsersFromMaster,getUserDetailsFromMaster
  2. from dao.voucher_approval_dao import *
  3. from datetime import datetime
  4. from utils.Email import sendEmail
  5. from utils.fcm_notification import send_notification
  6. def getVoucherApprovalUserReportService(mongo):
  7. queryResult = []
  8. try:
  9. users=getAllUsersFromMaster(mongo)
  10. for user in users:
  11. if 'emp_id' in user and 'intervention' in user:
  12. insert_obj={
  13. "Employee Code": user['emp_id'],
  14. "Employee Name": user['first_name'],
  15. "Intervention":user['intervention'],
  16. "Senior 1 10000 Emp Code": "",
  17. "Senior 1 10000 Emp Name": "",
  18. "Senior 2 10000 Emp Code": "",
  19. "Senior 2 10000 Emp Name": "",
  20. "Senior 1 50000 Emp Code": "",
  21. "Senior 1 50000 Emp Name": "",
  22. "Senior 2 50000 Emp Code": "",
  23. "Senior 2 50000 Emp Name": "",
  24. "Senior 3 50000 Emp Code": "",
  25. "Senior 3 50000 Emp Name": "",
  26. "Senior 1 5Lac Emp Code": "",
  27. "Senior 1 5Lac Emp Name": "",
  28. "Senior 2 5Lac Emp Code": "",
  29. "Senior 2 5Lac Emp Name": "",
  30. "Senior 3 5Lac Emp Code": "",
  31. "Senior 3 5Lac Emp Name": "",
  32. "Senior 1 6Lac Emp Code": "",
  33. "Senior 1 6Lac Emp Name": "",
  34. "Senior 2 6Lac Emp Code": "",
  35. "Senior 2 6Lac Emp Name": "",
  36. "Senior 3 6Lac Emp Code": "",
  37. "Senior 3 6Lac Emp Name": "",
  38. "Senior 1 10Lac Emp Code": "",
  39. "Senior 1 10Lac Emp Name": "",
  40. "Senior 1 above 10Lac Emp Code": "",
  41. "Senior 1 above 10Lac Emp Name": "",
  42. "Finance Level 1 Emp Code":"",
  43. "Finance Level 1 Emp Name":"",
  44. "Finance Level 2 Emp Code":"",
  45. "Finance Level 2 Emp Name":""
  46. }
  47. queryResult.append(insert_obj)
  48. except Exception as err:
  49. # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo)
  50. print(err)
  51. queryResult = []
  52. return queryResult
  53. def getSeniorDetailsService(emp_key,mongo):
  54. queryResult = []
  55. try:
  56. queryResult=getVoucherSeniorListDao(emp_key,mongo)
  57. except Exception as err:
  58. print(err)
  59. queryResult = []
  60. return queryResult
  61. def uploadSeniorDetailsService(request_obj,mongo):
  62. queryResult={}
  63. error_response=[]
  64. try:
  65. formatted_users={}
  66. users=getAllUsersFromMaster(mongo)
  67. for user in users:
  68. if 'emp_id' in user:
  69. formatted_users[user['emp_id']]=user
  70. for data in request_obj['data']:
  71. try:
  72. emp_code=data['Employee Code']
  73. emp_name=data['Employee Name']
  74. intervention=data['Intervention']
  75. if emp_code in formatted_users:
  76. try:
  77. # Upto 10000 senior
  78. senior_1_10000_emp_code=data['Senior 1 10000 Emp Code']
  79. senior_1_10000_emp_name=data['Senior 1 10000 Emp Name']
  80. senior_2_10000_emp_code=data['Senior 2 10000 Emp Code']
  81. senior_2_10000_emp_name=data['Senior 2 10000 Emp Name']
  82. # 10000 to 50000 senior
  83. senior_1_50000_emp_code=data['Senior 1 50000 Emp Code']
  84. senior_1_50000_emp_name=data['Senior 1 50000 Emp Name']
  85. senior_2_50000_emp_code=data['Senior 2 50000 Emp Code']
  86. senior_2_50000_emp_name=data['Senior 2 50000 Emp Name']
  87. senior_3_50000_emp_code=data['Senior 3 50000 Emp Code']
  88. senior_3_50000_emp_name=data['Senior 3 50000 Emp Name']
  89. # 50000 to 5Lac senior
  90. senior_1_5lac_emp_code=data['Senior 1 5Lac Emp Code']
  91. senior_1_5lac_emp_name=data['Senior 1 5Lac Emp Name']
  92. senior_2_5lac_emp_code=data['Senior 2 5Lac Emp Code']
  93. senior_2_5lac_emp_name=data['Senior 2 5Lac Emp Name']
  94. senior_3_5lac_emp_code=data['Senior 3 5Lac Emp Code']
  95. senior_3_5lac_emp_name=data['Senior 3 5Lac Emp Name']
  96. # 5Lac to 6Lac senior
  97. senior_1_6lac_emp_code=data['Senior 1 6Lac Emp Code']
  98. senior_1_6lac_emp_name=data['Senior 1 6Lac Emp Name']
  99. senior_2_6lac_emp_code=data['Senior 2 6Lac Emp Code']
  100. senior_2_6lac_emp_name=data['Senior 2 6Lac Emp Name']
  101. senior_3_6lac_emp_code=data['Senior 3 6Lac Emp Code']
  102. senior_3_6lac_emp_name=data['Senior 3 6Lac Emp Name']
  103. # 6Lac to 10Lac senior
  104. senior_1_10lac_emp_code=data['Senior 1 10Lac Emp Code']
  105. senior_1_10lac_emp_name=data['Senior 1 10Lac Emp Name']
  106. # Above 10lac
  107. senior_1_above10lac_emp_code=data['Senior 1 above 10Lac Emp Code']
  108. senior_1_above10lac_emp_name=data['Senior 1 above 10Lac Emp Name']
  109. # Finance Level 1
  110. finance_level_1_emp_code=data["Finance Level 1 Emp Code"]
  111. finance_level_1_emp_name=data["Finance Level 1 Emp Name"]
  112. # Finance Level 2
  113. finance_level_2_emp_code=data["Finance Level 2 Emp Code"]
  114. finance_level_2_emp_name=data["Finance Level 2 Emp Name"]
  115. if ((senior_1_10000_emp_code!="NA" and senior_1_10000_emp_code not in formatted_users)
  116. or (senior_2_10000_emp_code!="NA" and senior_2_10000_emp_code not in formatted_users)
  117. or (senior_1_50000_emp_code!="NA" and senior_1_50000_emp_code not in formatted_users)
  118. or (senior_2_50000_emp_code!="NA" and senior_2_50000_emp_code not in formatted_users)
  119. or (senior_3_50000_emp_code!="NA" and senior_3_50000_emp_code not in formatted_users)
  120. or (senior_1_5lac_emp_code!="NA" and senior_1_5lac_emp_code not in formatted_users)
  121. or (senior_2_5lac_emp_code!="NA" and senior_2_5lac_emp_code not in formatted_users)
  122. or (senior_3_5lac_emp_code!="NA" and senior_3_5lac_emp_code not in formatted_users)
  123. or (senior_1_6lac_emp_code!="NA" and senior_1_6lac_emp_code not in formatted_users)
  124. or (senior_2_6lac_emp_code!="NA" and senior_2_6lac_emp_code not in formatted_users)
  125. or (senior_3_6lac_emp_code!="NA" and senior_3_6lac_emp_code not in formatted_users)
  126. or (senior_1_10lac_emp_code!="NA" and senior_1_10lac_emp_code not in formatted_users)
  127. or (senior_1_above10lac_emp_code!="NA" and senior_1_above10lac_emp_code not in formatted_users)
  128. or (finance_level_1_emp_code!="NA" and finance_level_1_emp_code not in formatted_users)
  129. or (finance_level_2_emp_code!="NA" and finance_level_2_emp_code not in formatted_users)):
  130. error_response.append(emp_code)
  131. else:
  132. # Update into database
  133. try:
  134. senior_1_10000_emp_key='NA'
  135. senior_2_10000_emp_key='NA'
  136. if senior_1_10000_emp_code!='NA':
  137. senior_1_10000_emp_key=formatted_users[senior_1_10000_emp_code]['key']
  138. if senior_2_10000_emp_code!='NA':
  139. senior_2_10000_emp_key=formatted_users[senior_2_10000_emp_code]['key']
  140. senior_1_50000_emp_key='NA'
  141. senior_2_50000_emp_key='NA'
  142. senior_3_50000_emp_key='NA'
  143. if senior_1_50000_emp_code!='NA':
  144. senior_1_50000_emp_key=formatted_users[senior_1_50000_emp_code]['key']
  145. if senior_2_50000_emp_code!='NA':
  146. senior_2_50000_emp_key=formatted_users[senior_2_50000_emp_code]['key']
  147. if senior_3_50000_emp_code!='NA':
  148. senior_3_50000_emp_key=formatted_users[senior_3_50000_emp_code]['key']
  149. senior_1_5lac_emp_key='NA'
  150. senior_2_5lac_emp_key='NA'
  151. senior_3_5lac_emp_key='NA'
  152. if senior_1_5lac_emp_code!='NA':
  153. senior_1_5lac_emp_key=formatted_users[senior_1_5lac_emp_code]['key']
  154. if senior_2_5lac_emp_code!='NA':
  155. senior_2_5lac_emp_key=formatted_users[senior_2_5lac_emp_code]['key']
  156. if senior_3_5lac_emp_code!='NA':
  157. senior_3_5lac_emp_key=formatted_users[senior_3_5lac_emp_code]['key']
  158. senior_1_6lac_emp_key='NA'
  159. senior_2_6lac_emp_key='NA'
  160. senior_3_6lac_emp_key='NA'
  161. if senior_1_6lac_emp_code!='NA':
  162. senior_1_6lac_emp_key=formatted_users[senior_1_6lac_emp_code]['key']
  163. if senior_2_6lac_emp_code!='NA':
  164. senior_2_6lac_emp_key=formatted_users[senior_2_6lac_emp_code]['key']
  165. if senior_3_6lac_emp_code!='NA':
  166. senior_3_6lac_emp_key=formatted_users[senior_3_6lac_emp_code]['key']
  167. senior_1_10lac_emp_key='NA'
  168. if senior_1_10lac_emp_code!='NA':
  169. senior_1_10lac_emp_key=formatted_users[senior_1_10lac_emp_code]['key']
  170. senior_1_above10lac_emp_key='NA'
  171. if senior_1_above10lac_emp_code!='NA':
  172. senior_1_above10lac_emp_key=formatted_users[senior_1_above10lac_emp_code]['key']
  173. finance_level_1_emp_key='NA'
  174. if finance_level_1_emp_code!='NA':
  175. finance_level_1_emp_key=formatted_users[finance_level_1_emp_code]['key']
  176. finance_level_2_emp_key='NA'
  177. if finance_level_2_emp_code!='NA':
  178. finance_level_2_emp_key=formatted_users[finance_level_2_emp_code]['key']
  179. insert_obj={
  180. 'emp_key':formatted_users[emp_code]['key'],
  181. 'emp_name':emp_name,
  182. 'intervention':intervention,
  183. 'senior_1_10000_emp_key':senior_1_10000_emp_key,
  184. 'senior_1_10000_emp_name':senior_1_10000_emp_name,
  185. 'senior_2_10000_emp_key':senior_2_10000_emp_key,
  186. 'senior_2_10000_emp_name':senior_2_10000_emp_name,
  187. 'senior_1_50000_emp_key':senior_1_50000_emp_key,
  188. 'senior_1_50000_emp_name':senior_1_50000_emp_name,
  189. 'senior_2_50000_emp_key':senior_2_50000_emp_key,
  190. 'senior_2_50000_emp_name':senior_2_50000_emp_name,
  191. 'senior_3_50000_emp_key':senior_3_50000_emp_key,
  192. 'senior_3_50000_emp_name':senior_3_50000_emp_name,
  193. 'senior_1_5lac_emp_key':senior_1_5lac_emp_key,
  194. 'senior_1_5lac_emp_name':senior_1_5lac_emp_name,
  195. 'senior_2_5lac_emp_key':senior_2_5lac_emp_key,
  196. 'senior_2_5lac_emp_name':senior_2_5lac_emp_name,
  197. 'senior_3_5lac_emp_key':senior_3_5lac_emp_key,
  198. 'senior_3_5lac_emp_name':senior_3_5lac_emp_name,
  199. 'senior_1_6lac_emp_key':senior_1_6lac_emp_key,
  200. 'senior_1_6lac_emp_name':senior_1_6lac_emp_name,
  201. 'senior_2_6lac_emp_key':senior_2_6lac_emp_key,
  202. 'senior_2_6lac_emp_name':senior_2_6lac_emp_name,
  203. 'senior_3_6lac_emp_key':senior_3_6lac_emp_key,
  204. 'senior_3_6lac_emp_name':senior_3_6lac_emp_name,
  205. 'senior_1_10lac_emp_key':senior_1_10lac_emp_key,
  206. 'senior_1_10lac_emp_name':senior_1_10lac_emp_name,
  207. 'senior_1_above10lac_emp_key':senior_1_above10lac_emp_key,
  208. 'senior_1_above10lac_emp_name':senior_1_above10lac_emp_name,
  209. 'finance_level_1_emp_key': finance_level_1_emp_key,
  210. 'finance_level_1_emp_name': finance_level_1_emp_name,
  211. 'finance_level_2_emp_key':finance_level_2_emp_key,
  212. 'finance_level_2_emp_name':finance_level_2_emp_name
  213. }
  214. except Exception as err:
  215. print(err)
  216. updateSeniorDataMaster(insert_obj,mongo)
  217. except Exception as err:
  218. print(err)
  219. error_response.append(emp_code)
  220. else:
  221. error_response.append(emp_code)
  222. except Exception as err:
  223. print(err)
  224. except Exception as err:
  225. print(err)
  226. if len(error_response)==0:
  227. queryResult={'status':'failure','message': 'Something went wrong!','error_list':error_response}
  228. else:
  229. queryResult={'status':'success','message': 'Data Updated Successfully!'}
  230. return queryResult
  231. def findApprovalTrackForVoucher(request_obj,mongo):
  232. senior_found=False
  233. approval_track = {"senior_level_1":{},"senior_level_2":{},"senior_level_3":{},"finance_level_1":{},"finance_level_2":{}}
  234. try:
  235. # Fetch user Details from user master
  236. user_list=getVoucherSeniorListDao(request_obj['user_id'],mongo)
  237. amount=request_obj['product_total_amount']
  238. for user_obj in user_list:
  239. senior_found=True
  240. senior_level_1_key='NA'
  241. senior_level_1_name='NA'
  242. senior_level_2_key='NA'
  243. senior_level_2_name='NA'
  244. senior_level_3_key='NA'
  245. senior_level_3_name='NA'
  246. finance_level_1_key='NA'
  247. finance_level_1_name='NA'
  248. finance_level_2_key='NA'
  249. finance_level_2_name='NA'
  250. try:
  251. finance_level_1_key=user_obj['finance_level_1_emp_key']
  252. finance_level_1_name=user_obj['finance_level_1_emp_name']
  253. finance_level_2_key==user_obj['finance_level_2_emp_key']
  254. finance_level_2_name=user_obj['finance_level_2_emp_name']
  255. except Exception as err:
  256. print(err)
  257. # Other Condition of Opex
  258. if request_obj['project_type']=='Opex - Vendor payment':
  259. if amount<=10000:# 2 Level Approval (DPH)
  260. senior_level_1_key=user_obj['senior_1_10000_emp_key']
  261. senior_level_1_name=user_obj['senior_1_10000_emp_name']
  262. senior_level_2_key=user_obj['senior_2_10000_emp_key']
  263. senior_level_2_name=user_obj['senior_2_10000_emp_name']
  264. elif amount>10000 and amount<=50000: # 3 Level Approval (PH)
  265. senior_level_1_key=user_obj['senior_1_50000_emp_key']
  266. senior_level_1_name=user_obj['senior_1_50000_emp_name']
  267. senior_level_2_key=user_obj['senior_2_50000_emp_key']
  268. senior_level_2_name=user_obj['senior_2_50000_emp_name']
  269. senior_level_3_key=user_obj['senior_3_50000_emp_key']
  270. senior_level_3_name=user_obj['senior_3_50000_emp_name']
  271. elif amount>50000 and amount<=100000: # 3 Level Approval (PD)
  272. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  273. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  274. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  275. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  276. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  277. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  278. elif amount>100000 and amount<=500000: # 3 Level Approval (CXO)
  279. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  280. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  281. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  282. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  283. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  284. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  285. elif amount>500000 and amount<=600000: # 3 Level Approval (Any two CXO)
  286. senior_level_1_key=user_obj['senior_1_6lac_emp_key']
  287. senior_level_1_name=user_obj['senior_1_6lac_emp_name']
  288. senior_level_2_key=user_obj['senior_2_6lac_emp_key']
  289. senior_level_2_name=user_obj['senior_2_6lac_emp_name']
  290. senior_level_3_key=user_obj['senior_3_6lac_emp_key']
  291. senior_level_3_name=user_obj['senior_3_6lac_emp_name']
  292. elif amount>600000 and amount<=1000000: # 1 Level Approval (CEO)
  293. senior_level_1_key=user_obj['senior_1_10lac_emp_key']
  294. senior_level_1_name=user_obj['senior_1_10lac_emp_name']
  295. elif amount>1000000: # 1 Level Approval (Trusty)
  296. senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
  297. senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
  298. elif request_obj['project_type']=='Capex - Centre Advances':
  299. if amount<50000: # 3 Level Approval (PH)
  300. senior_level_1_key=user_obj['senior_1_50000_emp_key']
  301. senior_level_1_name=user_obj['senior_1_50000_emp_name']
  302. senior_level_2_key=user_obj['senior_2_50000_emp_key']
  303. senior_level_2_name=user_obj['senior_2_50000_emp_name']
  304. senior_level_3_key=user_obj['senior_3_50000_emp_key']
  305. senior_level_3_name=user_obj['senior_3_50000_emp_name']
  306. elif amount>50000 and amount<=100000: # 3 Level Approval (PD)
  307. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  308. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  309. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  310. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  311. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  312. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  313. elif amount>100000 and amount<=500000: # 3 Level Approval (CXO)
  314. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  315. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  316. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  317. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  318. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  319. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  320. elif amount>500000 and amount<=750000: # 3 Level Approval (Any two CXO)
  321. senior_level_1_key=user_obj['senior_1_6lac_emp_key']
  322. senior_level_1_name=user_obj['senior_1_6lac_emp_name']
  323. senior_level_2_key=user_obj['senior_2_6lac_emp_key']
  324. senior_level_2_name=user_obj['senior_2_6lac_emp_name']
  325. senior_level_3_key=user_obj['senior_3_6lac_emp_key']
  326. senior_level_3_name=user_obj['senior_3_6lac_emp_name']
  327. elif amount>750000 and amount<=1500000: # 1 Level Approval (CEO)
  328. senior_level_1_key=user_obj['senior_1_10lac_emp_key']
  329. senior_level_1_name=user_obj['senior_1_10lac_emp_name']
  330. elif amount>1500000: # 1 Level Approval (Trusty)
  331. senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
  332. senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
  333. elif request_obj['project_type']=='Capex - In Budget':
  334. if amount<100000: # 3 Level Approval (PH)
  335. senior_level_1_key=user_obj['senior_1_50000_emp_key']
  336. senior_level_1_name=user_obj['senior_1_50000_emp_name']
  337. senior_level_2_key=user_obj['senior_2_50000_emp_key']
  338. senior_level_2_name=user_obj['senior_2_50000_emp_name']
  339. senior_level_3_key=user_obj['senior_3_50000_emp_key']
  340. senior_level_3_name=user_obj['senior_3_50000_emp_name']
  341. elif amount>100000 and amount<=150000: # 3 Level Approval (PD)
  342. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  343. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  344. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  345. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  346. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  347. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  348. elif amount>150000 and amount<=500000: # 3 Level Approval (CXO)
  349. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  350. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  351. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  352. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  353. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  354. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  355. elif amount>500000 and amount<=750000: # 3 Level Approval (Any two CXO)
  356. senior_level_1_key=user_obj['senior_1_6lac_emp_key']
  357. senior_level_1_name=user_obj['senior_1_6lac_emp_name']
  358. senior_level_2_key=user_obj['senior_2_6lac_emp_key']
  359. senior_level_2_name=user_obj['senior_2_6lac_emp_name']
  360. senior_level_3_key=user_obj['senior_3_6lac_emp_key']
  361. senior_level_3_name=user_obj['senior_3_6lac_emp_name']
  362. elif amount>750000 and amount<=1500000: # 1 Level Approval (CEO)
  363. senior_level_1_key=user_obj['senior_1_10lac_emp_key']
  364. senior_level_1_name=user_obj['senior_1_10lac_emp_name']
  365. elif amount>1500000: # 1 Level Approval (Trusty)
  366. senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
  367. senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
  368. else:
  369. if amount<=10000:# 2 Level Approval
  370. senior_level_1_key=user_obj['senior_1_10000_emp_key']
  371. senior_level_1_name=user_obj['senior_1_10000_emp_name']
  372. senior_level_2_key=user_obj['senior_2_10000_emp_key']
  373. senior_level_2_name=user_obj['senior_2_10000_emp_name']
  374. elif amount>10000 and amount<=50000: # 3 Level Approval
  375. senior_level_1_key=user_obj['senior_1_50000_emp_key']
  376. senior_level_1_name=user_obj['senior_1_50000_emp_name']
  377. senior_level_2_key=user_obj['senior_2_50000_emp_key']
  378. senior_level_2_name=user_obj['senior_2_50000_emp_name']
  379. senior_level_3_key=user_obj['senior_3_50000_emp_key']
  380. senior_level_3_name=user_obj['senior_3_50000_emp_name']
  381. elif amount>50000 and amount<=500000: # 3 Level Approval
  382. senior_level_1_key=user_obj['senior_1_5lac_emp_key']
  383. senior_level_1_name=user_obj['senior_1_5lac_emp_name']
  384. senior_level_2_key=user_obj['senior_2_5lac_emp_key']
  385. senior_level_2_name=user_obj['senior_2_5lac_emp_name']
  386. senior_level_3_key=user_obj['senior_3_5lac_emp_key']
  387. senior_level_3_name=user_obj['senior_3_5lac_emp_name']
  388. elif amount>500000 and amount<=600000: # 3 Level Approval
  389. senior_level_1_key=user_obj['senior_1_6lac_emp_key']
  390. senior_level_1_name=user_obj['senior_1_6lac_emp_name']
  391. senior_level_2_key=user_obj['senior_2_6lac_emp_key']
  392. senior_level_2_name=user_obj['senior_2_6lac_emp_name']
  393. senior_level_3_key=user_obj['senior_3_6lac_emp_key']
  394. senior_level_3_name=user_obj['senior_3_6lac_emp_name']
  395. elif amount>600000 and amount<=1000000: # 1 Level Approval
  396. senior_level_1_key=user_obj['senior_1_10lac_emp_key']
  397. senior_level_1_name=user_obj['senior_1_10lac_emp_name']
  398. elif amount>1000000: # 1 Level Approval
  399. senior_level_1_key=user_obj['senior_1_above10lac_emp_key']
  400. senior_level_1_name=user_obj['senior_1_above10lac_emp_name']
  401. approval_track['senior_level_1']={
  402. "level" : "Senior Level 1",
  403. "name" : senior_level_1_name,
  404. "id" : senior_level_1_key,
  405. "status" : "PENDING"
  406. }
  407. approval_track['senior_level_2']={
  408. "level" : "Senior Level 2",
  409. "name" : senior_level_2_name,
  410. "id" : senior_level_2_key,
  411. "status" : "NOT VISIBLE"
  412. }
  413. approval_track['senior_level_3']={
  414. "level" : "Senior Level 3",
  415. "name" : senior_level_3_name,
  416. "id" : senior_level_3_key,
  417. "status" : "NOT VISIBLE"
  418. }
  419. approval_track['finance_level_1']={
  420. "level" : "Finance Level 1",
  421. "name" : finance_level_1_name,
  422. "id" : finance_level_1_key,
  423. "status" : "NOT VISIBLE"
  424. }
  425. approval_track['finance_level_2']={
  426. "level" : "Finance Level 2",
  427. "name" : finance_level_2_name,
  428. "id" : finance_level_2_key,
  429. "status" : "NOT VISIBLE"
  430. }
  431. except Exception as err:
  432. senior_found=False
  433. print(err)
  434. return senior_found,approval_track
  435. def approveDeclineVoucherService(request_obj,mongo,app):
  436. queryResult={}
  437. try:
  438. update_obj={}
  439. flag=request_obj['status']
  440. voucher_details=getVoucherDetailsDao(request_obj['voucher_id'],mongo)
  441. remark=request_obj["reason"]
  442. seniorId=request_obj['user_id']
  443. timestamp=int(datetime.now().timestamp())*1000
  444. approverName = ""
  445. approverLevel = ""
  446. approverId = ""
  447. approvalTrackLevel = ""
  448. notification_format=""
  449. for voucher in voucher_details:
  450. user_id=voucher['user_id']
  451. email_senior_id='NA'
  452. seniorLevel1=voucher['approval_track']['senior_level_1']
  453. seniorLevel2=voucher['approval_track']['senior_level_2']
  454. seniorLevel3=voucher['approval_track']['senior_level_3']
  455. financeLevel1=voucher['approval_track']['finance_level_1']
  456. financeLevel2=voucher['approval_track']['finance_level_2']
  457. # if senior id = senior level1
  458. if seniorLevel1["id"]==seniorId and seniorLevel1["status"]=="PENDING":
  459. approverName = seniorLevel1["name"]
  460. approverId = seniorLevel1["id"]
  461. approverLevel = seniorLevel1["level"]
  462. approvalTrackLevel = "senior_level_1"
  463. # If expense approved
  464. if flag=="APPROVED":
  465. if seniorLevel2["id"]=="NA":
  466. notification_format = "Please print the claim and submit to Finance Level 1 along with supporting documents if any"
  467. if seniorLevel3["id"]=="NA":
  468. notification_format = "Please print the claim and submit to Finance Level 1 along with supporting documents if any"
  469. if financeLevel1["id"]=="NA":
  470. if financeLevel2["id"]=="NA":
  471. update_obj["voucher_status"]=flag
  472. # create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
  473. else:
  474. email_senior_id=financeLevel2["id"]
  475. update_obj["approval_track.finance_level_2.status"]= "PENDING"
  476. else:
  477. email_senior_id=financeLevel1["id"]
  478. update_obj["approval_track.finance_level_1.status"]= "PENDING"
  479. else:
  480. email_senior_id=seniorLevel3["id"]
  481. update_obj["approval_track.senior_level_3.status"]= "PENDING"
  482. else:
  483. email_senior_id=seniorLevel2["id"]
  484. update_obj["approval_track.senior_level_2.status"]= "PENDING"
  485. # if senior id = senior level2
  486. elif seniorLevel2["id"]==seniorId and seniorLevel2["status"]=="PENDING":
  487. approverName = seniorLevel2["name"]
  488. approverId = seniorLevel2["id"]
  489. approverLevel = seniorLevel2["level"]
  490. approvalTrackLevel = "senior_level_2"
  491. # If expense approved
  492. if flag=="APPROVED":
  493. if seniorLevel3["id"]=="NA":
  494. notification_format = "Please print the claim and submit to Finance Level 1 along with supporting documents if any"
  495. if financeLevel1["id"]=="NA":
  496. if financeLevel2["id"]=="NA":
  497. update_obj["voucher_status"]=flag
  498. # create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
  499. else:
  500. email_senior_id=financeLevel2["id"]
  501. update_obj["approval_track.finance_level_2.status"]= "PENDING"
  502. else:
  503. email_senior_id=financeLevel1["id"]
  504. update_obj["approval_track.finance_level_1.status"]= "PENDING"
  505. else:
  506. email_senior_id=seniorLevel3["id"]
  507. update_obj["approval_track.senior_level_3.status"]= "PENDING"
  508. # if senior id = senior level3
  509. elif seniorLevel3["id"]==seniorId and seniorLevel3["status"]=="PENDING":
  510. approverName = seniorLevel3["name"]
  511. approverId = seniorLevel3["id"]
  512. approverLevel = seniorLevel3["level"]
  513. approvalTrackLevel = "senior_level_3"
  514. # If expense approved
  515. if flag=="APPROVED":
  516. if financeLevel1["id"]=="NA":
  517. if financeLevel2["id"]=="NA":
  518. update_obj["voucher_status"]=flag
  519. # create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
  520. else:
  521. email_senior_id=financeLevel2["id"]
  522. update_obj["approval_track.finance_level_2.status"]= "PENDING"
  523. else:
  524. email_senior_id=financeLevel1["id"]
  525. update_obj["approval_track.finance_level_1.status"]= "PENDING"
  526. # if senior id = Finance level 1
  527. elif financeLevel1["id"]==seniorId and financeLevel1["status"]=="PENDING":
  528. approverName = financeLevel1["name"]
  529. approverId = financeLevel1["id"]
  530. approverLevel = financeLevel1["level"]
  531. approvalTrackLevel = "finance_level_1"
  532. # If expense approved
  533. if flag=="APPROVED":
  534. if financeLevel2["id"]=="NA":
  535. update_obj["voucher_status"]=flag
  536. # create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
  537. else:
  538. email_senior_id=financeLevel2["id"]
  539. update_obj["approval_track.finance_level_2.status"]= "PENDING"
  540. # if senior id = Finance level 2
  541. elif financeLevel2["id"]==seniorId and financeLevel2["status"]=="PENDING":
  542. approverName = financeLevel2["name"]
  543. approverId = financeLevel2["id"]
  544. approverLevel = financeLevel2["level"]
  545. approvalTrackLevel = "finance_level_2"
  546. # If expense approved
  547. if flag=="APPROVED":
  548. update_obj["voucher_status"]=flag
  549. # create_email(po,"APPROVED",approverName,approverLevel,mongo,app)
  550. update_obj["approval_track." + approvalTrackLevel + ".status"]=flag
  551. update_obj["approval_track." + approvalTrackLevel + ".info"]={"status":flag,"remark":remark,"updated_on":timestamp}
  552. # for disapproved
  553. if flag=="DECLINED":
  554. update_obj["voucher_status"]= "DECLINED"
  555. # Status Log
  556. approval_status={
  557. "user_id":user_id,
  558. "voucher_id":request_obj['voucher_id'],
  559. "timestamp":timestamp,
  560. "action":flag,
  561. "approver_name":approverName,
  562. "approver_level":approverLevel,
  563. "approver_id":approverId,
  564. "type":"approval",
  565. "remark":remark
  566. }
  567. # Update Voucher
  568. updateVoucherApprovalStatus(update_obj,request_obj['voucher_id'],mongo)
  569. # Insert into voucher-status-log
  570. insertVoucherStatusLog(approval_status,mongo)
  571. if email_senior_id!='NA':
  572. try:
  573. senior_lst=getUserDetailsFromMaster(email_senior_id,mongo)
  574. if len(senior_lst)!=0:
  575. # send_notification(senior_lst[0], "Expense Request Status", "Your Expense request has been " + flag)
  576. # Notification to user
  577. user_lst=getUserDetailsFromMaster(user_id,mongo)
  578. if len(user_lst)!=0:
  579. send_notification(user_lst[0], "Expense Request Status", "Your Expense request has been " + flag)
  580. if notification_format!="":
  581. send_notification(user_lst[0], "Expense Request Status", notification_format)
  582. if len(user_lst)!=0:
  583. personal_email_id=senior_lst[0]['personal_email_id']
  584. subject="Expense Voucher Request"
  585. body="Expense Voucher Request by "+user_lst[0]['full_name']
  586. sendEmail("",personal_email_id,body,False,subject)
  587. except Exception as identifier:
  588. print(identifier)
  589. queryResult = {
  590. 'status': 'success',
  591. 'message': 'Voucher '+flag+' successfully!'
  592. }
  593. except Exception as err:
  594. queryResult = {
  595. 'status': 'failure',
  596. 'message': 'Something went wrong!'
  597. }
  598. print(err)
  599. return queryResult
  600. def getVoucherPendingLisForApprovals(u_id,mongo):
  601. queryResult = []
  602. try:
  603. queryResult = getPendingVoucherForApprovalDao(u_id, mongo)
  604. except Exception as err:
  605. queryResult = []
  606. return queryResult
  607. def getVoucherDetails(id, mongo):
  608. queryResult = []
  609. try:
  610. queryResult = getVoucherDetailsDao(id, mongo)
  611. except Exception as err:
  612. queryResult = []
  613. return queryResult
  614. def getVoucherDetailsPrintCount(id, mongo):
  615. queryResult = {}
  616. try:
  617. vouchers = getVoucherDetailsDao(id, mongo)
  618. count=1
  619. for voucher in vouchers:
  620. if 'print_count' in voucher:
  621. count=voucher['print_count']+1
  622. if count<=3:
  623. # print
  624. queryResult={'status':'OK'}
  625. # Update print count
  626. updateVoucherApprovalStatus({'print_count':count},id,mongo)
  627. else:
  628. # failure
  629. queryResult={'status':'Failure','message':'You exceed your print limit!'}
  630. except Exception as err:
  631. queryResult={'status':'Failure','message':'Something went wrong!'}
  632. return queryResult