voucher_approval_service.py 40 KB

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