reports_service.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. from dao.reports_dao import *
  2. from dao.vendor_dao import getAllVendorListDao
  3. from dao.project_dao import getAllUsersFromMaster, getPOListForReport
  4. from datetime import datetime
  5. import os
  6. import time
  7. import xlsxwriter
  8. from utils.UploadImage import uploadImagetoFolder
  9. from service.voucher_approval_service import findApprovalTrackForVoucher
  10. def getMouReportDataService(from_date, to_date, mongo):
  11. queryResult = []
  12. formatted_vendors = {}
  13. try:
  14. vendors = getAllVendorListDao(mongo)
  15. for vendor in vendors:
  16. formatted_vendors[vendor['id']] = vendor
  17. mou_list = getMOUReportsDataDao(from_date, to_date, mongo)
  18. i = 1
  19. for mou in mou_list:
  20. try:
  21. user_id = mou['user_id']
  22. vendor_id = mou['vendor_id']
  23. end_date = '-'
  24. mou_file = '-'
  25. if 'mou_expiry' in mou and mou['mou_expiry'] != 0:
  26. end_date = datetime.fromtimestamp(mou['mou_expiry'] /
  27. 1000).strftime("%x")
  28. if 'mou_file' in mou:
  29. mou_file = "http://ec2-13-127-150-184.ap-south-1.compute.amazonaws.com:9005/uploads/" + mou[
  30. 'mou_file']
  31. insert_obj = {
  32. 'Sr,No':
  33. i,
  34. 'Party Type':
  35. "Vendor",
  36. 'Contract Type':
  37. "NA",
  38. 'Department':
  39. mou['intervention'],
  40. 'School / Center':
  41. "NA",
  42. 'Classes coverd/Staff':
  43. "NA",
  44. 'vendor_name':
  45. formatted_vendors[vendor_id]['v_name'],
  46. 'vendor_pan':
  47. formatted_vendors[vendor_id]['v_pan'],
  48. 'project_type':
  49. mou['project_type'],
  50. 'mop':
  51. mou['MOP'],
  52. 'Start Date':
  53. datetime.fromtimestamp(mou['created_on'] /
  54. 1000).strftime("%x"),
  55. 'End date':
  56. end_date,
  57. 'total_amount':
  58. mou['po_total_amount'],
  59. 'amount_words':
  60. mou['amount_words'],
  61. 'Status':
  62. "NA",
  63. 'Reminder':
  64. "NA",
  65. 'Email To':
  66. "NA",
  67. 'Contract Value in Rs.':
  68. "NA",
  69. 'Payment Terms':
  70. "NA",
  71. 'Rate Details':
  72. "NA",
  73. 'Deposit Amt':
  74. "NA",
  75. 'Copy/Original or zerox':
  76. 'NA',
  77. "Remarks":
  78. mou['po_reason'],
  79. "Remark":
  80. "NA",
  81. "Reminder":
  82. "NA",
  83. "sent":
  84. "NA",
  85. "Link 1":
  86. mou_file,
  87. "Link 2":
  88. "",
  89. "Link 3":
  90. ""
  91. }
  92. queryResult.append(insert_obj)
  93. i += 1
  94. except Exception as err:
  95. print(err)
  96. except Exception as err:
  97. # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo)
  98. queryResult = []
  99. return queryResult
  100. def getTdsReportDataService(from_date, to_date, mongo):
  101. response = []
  102. tds_list = []
  103. formatted_vendors = {}
  104. try:
  105. tds_list = tdsNameList(mongo)
  106. vendors = getAllVendorListDao(mongo)
  107. tds_name_g = ''
  108. # response.append({'':'','':'','':'','':'KOTAK EDUCATION','FOUNDATION, MUMBAI':'','':"",'':'','':'','':'','':'','':"",'':"",'':""})
  109. # response.append({'':'','':'','':'','':'','':'','':"",'':'','':'','':'','':'','':"",'':"",'':""})
  110. # response.append({'':'','':'','':'','':'DETAIL OF TDS','DEDUCTED & PAID FOR':'THE MONTH OF APR 20','':"",'':'','':'','':'','':'','':"",'':"",'':""})
  111. for vendor in vendors:
  112. formatted_vendors[vendor['id']] = vendor
  113. j = 1
  114. for tds_name in tds_list:
  115. voucher_list = getTdsReportsDataDao(from_date, to_date, tds_name,
  116. mongo)
  117. total_gross = 0
  118. total_tds = 0
  119. if j != 1 and len(voucher_list) > 0:
  120. response.append({
  121. 'Sr,No': 'Sr,No',
  122. 'PAN No.': 'PAN No.',
  123. tds_name_g: tds_name,
  124. 'NAME AS PER PAN': 'NAME AS PER PAN',
  125. 'DEDUCTEES': 'DEDUCTEES',
  126. 'VN': "VN",
  127. 'GROSS AMT': 'GROSS AMT',
  128. 'RATE': 'RATE',
  129. 'TDS AMT': 'TDS AMT',
  130. 'D.O.P': 'D.O.P',
  131. 'BSR code': "BSR code",
  132. 'CIN No.': "CIN No.",
  133. 'DOP': "DOP"
  134. })
  135. i = 1
  136. j += 1
  137. for voucher in voucher_list:
  138. try:
  139. vendor_id = voucher['vendor_id']
  140. tds_amt = 0
  141. gross_amt = 0
  142. if 'product_gross_amount' in voucher:
  143. gross_amt = voucher['product_gross_amount']
  144. tds_amt = gross_amt - voucher['product_total_amount']
  145. if i == 1:
  146. tds_name_g = tds_name
  147. response.append({
  148. 'Sr,No':
  149. i,
  150. 'PAN No.':
  151. formatted_vendors[vendor_id]['v_pan'],
  152. tds_name_g:
  153. formatted_vendors[vendor_id]['v_pan_name'],
  154. 'NAME AS PER PAN':
  155. formatted_vendors[vendor_id]['v_pan_name'],
  156. 'DEDUCTEES':
  157. voucher['tds_type'],
  158. 'VN':
  159. "",
  160. 'GROSS AMT':
  161. gross_amt,
  162. 'RATE':
  163. voucher['tds_rate'],
  164. 'TDS AMT':
  165. tds_amt,
  166. 'D.O.P':
  167. '',
  168. 'BSR code':
  169. "",
  170. 'CIN No.':
  171. "",
  172. 'DOP':
  173. ""
  174. })
  175. total_gross += gross_amt
  176. total_tds += tds_amt
  177. i += 1
  178. except Exception as err:
  179. print(err)
  180. if total_gross != 0:
  181. response.append({
  182. 'Sr,No': '',
  183. 'PAN No.': '',
  184. tds_name_g: '',
  185. 'NAME AS PER PAN': '',
  186. 'DEDUCTEES': '',
  187. 'VN': "",
  188. 'GROSS AMT': '',
  189. 'RATE': '',
  190. 'TDS AMT': '',
  191. 'D.O.P': '',
  192. 'BSR code': "",
  193. 'CIN No.': "",
  194. 'DOP': ""
  195. })
  196. response.append({
  197. 'Sr,No': '',
  198. 'PAN No.': '',
  199. tds_name_g: '',
  200. 'NAME AS PER PAN': '',
  201. 'DEDUCTEES': '',
  202. 'VN': "",
  203. 'GROSS AMT': total_gross,
  204. 'RATE': '',
  205. 'TDS AMT': total_tds,
  206. 'D.O.P': '',
  207. 'BSR code': "",
  208. 'CIN No.': "",
  209. 'DOP': ""
  210. })
  211. response.append({
  212. 'Sr,No': '',
  213. 'PAN No.': '',
  214. tds_name_g: '',
  215. 'NAME AS PER PAN': '',
  216. 'DEDUCTEES': '',
  217. 'VN': "",
  218. 'GROSS AMT': '',
  219. 'RATE': '',
  220. 'TDS AMT': '',
  221. 'D.O.P': '',
  222. 'BSR code': "",
  223. 'CIN No.': "",
  224. 'DOP': ""
  225. })
  226. response.append({
  227. 'Sr,No': '',
  228. 'PAN No.': '',
  229. tds_name_g: '',
  230. 'NAME AS PER PAN': '',
  231. 'DEDUCTEES': '',
  232. 'VN': "",
  233. 'GROSS AMT': '',
  234. 'RATE': '',
  235. 'TDS AMT': '',
  236. 'D.O.P': '',
  237. 'BSR code': "",
  238. 'CIN No.': "",
  239. 'DOP': ""
  240. })
  241. except Exception as err:
  242. print(err)
  243. # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo)
  244. response = []
  245. return response
  246. def getTallyReportDataService(from_date, to_date, mongo):
  247. response = []
  248. formatted_vendors = {}
  249. try:
  250. vendors = getAllVendorListDao(mongo)
  251. for vendor in vendors:
  252. formatted_vendors[vendor['id']] = vendor
  253. voucher_list = getTallyReportsDataDao(from_date, to_date, mongo)
  254. i = 1
  255. for voucher in voucher_list:
  256. try:
  257. vendor_id = voucher['vendor_id']
  258. tds_amt = 0
  259. gross_amt = 0
  260. gst_amt = 0
  261. v_name = ''
  262. v_code = ''
  263. v_address = ''
  264. if vendor_id in formatted_vendors:
  265. v_name = formatted_vendors[vendor_id]['v_name']
  266. v_address = formatted_vendors[vendor_id]['v_address']
  267. v_code = formatted_vendors[vendor_id]['v_code']
  268. elif 'vendor_name' in voucher:
  269. v_name = voucher['vendor_name']
  270. v_address = voucher['vendor_address']
  271. if 'product_gross_amount' in voucher:
  272. gross_amt = voucher['product_gross_amount']
  273. tds_amt = gross_amt - voucher['product_total_amount']
  274. if 'od' in voucher:
  275. for order_details in voucher['od']:
  276. gst_amt += order_details['product_gst']
  277. gross_amt = voucher['product_gross_amount']
  278. total_amt = voucher['product_total_amount']
  279. add_charges = voucher['po_additional_charges']
  280. tds_amt = gross_amt - total_amt
  281. response.append({
  282. 'Sr,No':
  283. i,
  284. 'Bill Date.':
  285. datetime.fromtimestamp(voucher['voucher_created_on'] /
  286. 1000).strftime("%x"),
  287. 'Voucher Type':
  288. 'Purchase',
  289. 'Expense Head':
  290. voucher['budget_head'],
  291. 'Status':
  292. "Dr",
  293. 'Party Name':
  294. v_name,
  295. 'Party Code':
  296. v_code,
  297. 'Address':
  298. v_address,
  299. 'State':
  300. '',
  301. 'Amount':
  302. total_amt - gst_amt - add_charges,
  303. 'Total Tax':
  304. gst_amt,
  305. 'Tds':
  306. tds_amt,
  307. 'Additional Charges':
  308. add_charges,
  309. 'Total Amount':
  310. gross_amt,
  311. 'Bill No.':
  312. voucher['voucher_code'],
  313. 'Bill Date':
  314. "",
  315. 'Remark':
  316. ""
  317. })
  318. i += 1
  319. except Exception as err:
  320. print(err)
  321. except Exception as err:
  322. print(err)
  323. response = []
  324. return response
  325. def getDepriciationReportService(request_data, app, mongo):
  326. queryResult = {'status': 'failure', 'message': 'Something went wrong!'}
  327. try:
  328. current_date = datetime.now()
  329. fy_year = str(current_date.year - 1) + '-' + str(current_date.year)
  330. if current_date.month < 4:
  331. fy_year = str(current_date.year -
  332. 2) + '-' + str(current_date.year - 1)
  333. filepath = os.path.join(app.config['UPLOAD_FOLDER'], 'far.xlsx')
  334. # Get Asset depriciation percentage
  335. dep_per, age = getAssetDepriciationDataDao(request_data['category'],
  336. mongo)
  337. # Get Asset Master of requested category
  338. assets = getAssetReportsDataDao(request_data['category'], mongo)
  339. headers = [
  340. "Sr. No.", "Date", "Invoice / Voucher Number", "Location",
  341. "Intervention", "Quantity", "Decription of the Asset",
  342. "Group of Asset", "Depreciation %", "Status", "Purchase Cost",
  343. "Additions", "Write Off", "Sale", "Depreciation",
  344. "Written Down Value (WDV)"
  345. ]
  346. # ========================== #
  347. # Create a workbook and add a worksheet.
  348. workbook = xlsxwriter.Workbook(filepath)
  349. worksheet = workbook.add_worksheet()
  350. worksheet.freeze_panes(0, 3)
  351. # Start from the first cell. Rows and columns are zero indexed.
  352. row = 0
  353. col = 0
  354. worksheet.write(row, 0, 'KOTAK')
  355. worksheet.write(row, 1, 'EDUCATION FOUNDATION, MUMBAI')
  356. row += 1
  357. worksheet.write(row, 0, 'Format')
  358. worksheet.set_column(row, 1, len('for fixed assets: '+request_data['category']))
  359. worksheet.write(row, 1, 'for fixed assets: '+request_data['category'])
  360. row += 1
  361. merge_format = workbook.add_format({'border': 1,'bold': True,'align': 'center',})
  362. worksheet.merge_range('L3:O3', 'For the F.Y. '+fy_year, merge_format)
  363. worksheet.write(row, 15, 'As per 31st March '+fy_year.split('-')[1],merge_format)
  364. row+=1
  365. worksheet.set_row(row, 20,merge_format)
  366. column = 0
  367. for header in headers:
  368. if column > 1:
  369. worksheet.set_column(row, column, len(header))
  370. worksheet.write(row, column, header)
  371. column += 1
  372. # ========================== #
  373. i = 1
  374. for asset in assets:
  375. if 'voucher_code' in asset:
  376. try:
  377. row += 1
  378. purchase_date = datetime.strptime(asset['purchase_date'],
  379. '%m/%d/%Y')
  380. year_diff = current_date.year - purchase_date.year
  381. if year_diff > age:
  382. year_diff = age
  383. amount = int(asset['amount'])
  384. dep_amount = 0
  385. wdv = 0
  386. sale = '-'
  387. write_off = '-'
  388. if 'sale' in asset and asset['sale'] == True:
  389. sale = asset['sale_amount']
  390. if 'write_off' in asset and asset['write_off'] == True:
  391. write_off = asset['write_off_amount']
  392. try:
  393. if year_diff != 0:
  394. for k in range(1, year_diff):
  395. dep_amount += (amount * dep_per) / 100
  396. amount = amount - dep_amount
  397. except Exception as err:
  398. print(err)
  399. wdv = int(asset['amount']) - dep_amount
  400. worksheet.set_column(row, column, len(header))
  401. worksheet.write(row, 0, i)
  402. worksheet.write(row, 1, asset['purchase_date'])
  403. worksheet.write(row, 2, asset['voucher_code'])
  404. worksheet.write(row, 3, asset['place'])
  405. worksheet.write(row, 4, asset['intervention'])
  406. worksheet.write(row, 5, 1)
  407. worksheet.write(row, 6, asset['discription'])
  408. worksheet.write(row, 7, request_data['category'])
  409. worksheet.write(row, 8, dep_per)
  410. worksheet.write(row, 9, asset['computer_type'])
  411. worksheet.write(row, 10, asset['amount'])
  412. worksheet.write(row, 11, '-')
  413. worksheet.write(row, 12, write_off)
  414. worksheet.write(row, 13, sale)
  415. worksheet.write(row, 14, dep_amount)
  416. worksheet.write(row, 15, wdv)
  417. i += 1
  418. except Exception as err:
  419. print(err)
  420. workbook.close()
  421. # If created on is of current year and purchase date is between april to march than depri. will be calculated of full
  422. # if purchase date is between oct to march than depri. will be calculated of half
  423. # Past three depri created
  424. queryResult = {
  425. 'status': 'success',
  426. 'message': 'file uploaded successfully!'
  427. }
  428. except Exception as err:
  429. print(err)
  430. return queryResult
  431. def getVoucherMISReportDataService(from_date, to_date, mongo):
  432. queryResult = []
  433. formatted_users = {}
  434. formatted_vendors = {}
  435. formatted_po = {}
  436. try:
  437. users = getAllUsersFromMaster(mongo)
  438. vendors = getAllVendorListDao(mongo)
  439. purchase_orders = getPOListForReport(mongo)
  440. for user in users:
  441. formatted_users[user['key']] = user
  442. for vendor in vendors:
  443. formatted_vendors[vendor['id']] = vendor
  444. for po in purchase_orders:
  445. formatted_po[po['id']] = po['po_order_id']
  446. vouchers = getAllVoucherAnalyticsDataDao(from_date, to_date, mongo)
  447. for voucher in vouchers:
  448. try:
  449. user_id = voucher['user_id']
  450. vendor_code=''
  451. vendor_name=''
  452. vendor_pan=''
  453. v_type='Registered'
  454. pending_level=''
  455. pending_senior_name=''
  456. v_account_no=''
  457. v_ifsc=''
  458. if 'vendor_id' in voucher:
  459. vendor_id = voucher['vendor_id']
  460. vendor_code=formatted_vendors[vendor_id]['v_code']
  461. vendor_name=formatted_vendors[vendor_id]['v_name']
  462. vendor_pan=formatted_vendors[vendor_id]['v_pan']
  463. v_account_no=formatted_vendors[vendor_id]['v_account_no']
  464. v_ifsc=formatted_vendors[vendor_id]['v_ifsc']
  465. elif 'vendor_name' in voucher:
  466. vendor_name=voucher['vendor_name']
  467. v_type='Un-registered'
  468. if 'v_account_no' in voucher:
  469. v_account_no=voucher['v_account_no']
  470. v_ifsc=voucher['v_ifsc']
  471. if 'approval_track' in voucher:
  472. for level in voucher['approval_track']:
  473. status=voucher['approval_track'][level]['status']
  474. if status=='PENDING':
  475. pending_level=voucher['approval_track'][level]['level']
  476. pending_senior_name=voucher['approval_track'][level]['name']
  477. invoice_url=[]
  478. for invoice in voucher['invoices']:
  479. invoice_url.append('http://ec2-13-127-150-184.ap-south-1.compute.amazonaws.com:9005/uploads/'+invoice)
  480. insert_obj = {
  481. 'voucher_code': voucher['voucher_code'],
  482. 'intervention': voucher['intervention'],
  483. 'emp_id': formatted_users[user_id]['emp_id'],
  484. 'user_name': formatted_users[user_id]['first_name'],
  485. 'vendor_type':v_type,
  486. 'vendor_code':vendor_code,
  487. 'vendor_name': vendor_name,
  488. 'vendor_pan': vendor_pan,
  489. 'vendor_account_no':v_account_no,
  490. 'vendor_ifsc':v_ifsc,
  491. 'project_type': voucher['project_type'],
  492. 'mop': voucher['MOP'],
  493. 'budget_head': voucher['budget_head'],
  494. 'payment_type': voucher['payment_type'],
  495. 'tds_rate': voucher['tds_rate'],
  496. 'additional_charges': voucher['po_additional_charges'],
  497. 'total_amount': voucher['product_total_amount'],
  498. 'amount_words': voucher['amount_words'],
  499. 'status':voucher['voucher_status'],
  500. 'pending_at':pending_level,
  501. 'pending_senior_name':pending_senior_name,
  502. 'invoice':invoice_url
  503. }
  504. quotations=[]
  505. if voucher['po_id'] in formatted_po:
  506. po_details=formatted_po[voucher['po_id']]['quotations']
  507. quotations=po_details['quotations']
  508. insert_obj['po_id']=voucher['po_id']
  509. else:
  510. insert_obj['po_id']='NA'
  511. if 'quotations' in voucher:
  512. quotations=voucher['quotations']
  513. if len(quotations)!=0:
  514. k=1
  515. for quotation in quotations:
  516. insert_obj['vendor_name'+str(k)]=quotation['v_name']
  517. insert_obj['exception'+str(k)]=quotation['exception']
  518. insert_obj['note'+str(k)]=quotation['note']
  519. insert_obj['quote_file'+str(k)]='http://ec2-13-127-150-184.ap-south-1.compute.amazonaws.com:9005/uploads/'+quotation['quote_file']
  520. k+=1
  521. else:
  522. for k in range(1,4):
  523. insert_obj['vendor_name'+str(k)]=''
  524. insert_obj['exception'+str(k)]=''
  525. insert_obj['note'+str(k)]=''
  526. insert_obj['quote_file'+str(k)]=''
  527. # print(insert_obj)
  528. queryResult.append(insert_obj)
  529. except Exception as err:
  530. print(err)
  531. except Exception as err:
  532. # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo)
  533. queryResult = []
  534. return queryResult