from dao.voucher_dao import * from dao.vendor_dao import getAllVendorListDao,getVendorDetailsDao from dao.project_dao import getAllUsersFromMaster,getPOListForReport,getUserDetailsFromMaster from datetime import datetime from dao.fetch_master_dao import getTDSRateListDao import time import json from utils.UploadImage import uploadImagetoFolder from service.voucher_approval_service import findApprovalTrackForVoucher from dao.voucher_approval_dao import insertVoucherStatusLog, getVoucherDetailsDao,updateVoucherApprovalStatus from dao.asset_dao import getAssetCategoryListDao from utils.Email import sendEmail def getVoucherList(u_id, mongo): # Validate email id and password queryResult = [] try: queryResult = getVoucherListByUID(u_id, mongo) except Exception as err: # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo) queryResult = [] return queryResult def getAllVoucherListService(mongo): # Validate email id and password queryResult = [] try: queryResult = getAllVoucherList(mongo) except Exception as err: # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo) queryResult = [] return queryResult def updateVoucherDateService(data,mongo): queryResult = {} try: updateVoucherDao(data['voucher_code'],data['date'],mongo) queryResult = {'status': 'success','message': 'Voucher updated successfully!'} except Exception as err: queryResult = {'status': 'failure', 'message': 'Something went wrong!'} print(err) return queryResult def submittedVoucherCopyService(id,mongo): queryResult={} try: timestamp=int(datetime.now().timestamp())*1000 updateVoucherPhyCopyStatusDao(id,timestamp,mongo) queryResult = { 'status': 'success', 'message': 'Copy submitted successfully!' } except Exception as err: queryResult = { 'status': 'failure', 'message': 'Something went wrong!' } print(err) return queryResult def deleteVoucherService(id,mongo): queryResult={} try: timestamp=int(datetime.now().timestamp())*1000 updateVoucherDeleteStatusDao(id,timestamp,mongo) queryResult = { 'status': 'success', 'message': 'Voucher deleted successfully!' } except Exception as err: queryResult = { 'status': 'failure', 'message': 'Something went wrong!' } print(err) return queryResult def delete_voucher_file_service(data,mongo): queryResult={} try: query={} update_obj={} if data['file_type']=="invoice": query={"id": data['voucher_id']} update_obj={ "$pull": { "invoices": data['file_name'] }} elif data['file_type']=="single_vendor_justification": query={"id": data['voucher_id']} update_obj={"$pull": { "single_vendor_justification": data['file_name'] }} elif data['file_type']=="quotation": query={"id": data['voucher_id'],"quotations.id":data["quote_id"]} update_obj={ "$set": { "quotations.$.quote_file": "" } } elif data['file_type']=="tds_e_c": query={"id": data['voucher_id']} update_obj={ "$pull": { "tds_e_c_attachment": data['file_name'] }} voucherFileDeleteDao(query,update_obj,mongo) queryResult={'status':'success','message': 'File deleted successfully!'} except Exception as err: print(err) # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo) queryResult={'status':'failure','message': 'Something went wrong!'} return queryResult def createVoucherService(files,data,app,mongo): queryResult = {} try: approval_track=[] timestamp=int(datetime.now().timestamp())*1000 total_amount = 0 user_id="" submit=False selectGenrate=False formatted_dep={} vendor_name="" create_flag=validateCreateVoucher(data,mongo) if create_flag==True: insert_doc = { 'voucher_status':'PENDING', 'approval_track':approval_track, 'maintainence_amount_limit':False, 'tds_exemption':False, } dep_list=getAssetCategoryListDao(mongo) quotations={} s_v_j=[] invoices=[] cheque=[] tds_e_c=[] # fetch voucher details if data['id']!='0': try: voucher_details=getVoucherListById(data['id'],mongo) if len(voucher_details)!=0: if 'single_vendor_justification' in voucher_details[0]: s_v_j=voucher_details[0]['single_vendor_justification'] if 'invoices' in voucher_details[0]: invoices=voucher_details[0]['invoices'] if 'cheque' in voucher_details[0]: cheque=voucher_details[0]['cheque'] for quote in voucher_details[0]['quotations']: quotations[quote['id']]=quote except Exception as err: print("Inner",err) for dep_obj in dep_list: formatted_dep[dep_obj['name']]=dep_obj['dep'] if 'maintainence_amount_limit' in data: submit=True insert_doc['maintainence_amount_limit'] = True if 'amount_limit' in data: submit=True insert_doc['amount_limit'] = True if 'req_exception' in data: i=0 for v_file in files.getlist('single_vendor_justification'): i+=1 quotImageResponse = uploadImagetoFolder(v_file, 's_v_j'+str(i) , app) if quotImageResponse['status'] == 'success': s_v_j.append(quotImageResponse['message']) if len(s_v_j)==0: queryResult = {'status': 'failure', 'message': 'Please upload single vendor justification form!'} submit=False return queryResult else: submit=True insert_doc['single_vendor_justification']=s_v_j insert_doc['req_exception'] = True if 'req_exception_note' in data: insert_doc['req_exception_note'] = data['req_exception_note'] # New Condition Start if 'electricity' in data: insert_doc['electricity'] = True submit=True if 'scholarship' in data: insert_doc['scholarship'] = True submit=True if 'salary_f_f' in data: insert_doc['salary_f_f'] = True submit=True if 'tds_req' in data: insert_doc['tds_req'] = True submit=True # New Condition End if 'tds_exemption' in data: i=0 for tds_file in files.getlist('tds_e_c'): i+=1 quotImageResponse = uploadImagetoFolder(tds_file, 'tds_e_c'+str(i) , app) if quotImageResponse['status'] == 'success': tds_e_c.append(quotImageResponse['message']) insert_doc['tds_e_c_attachment']=tds_e_c insert_doc['tds_exemption'] = True quote_suffix = [] for key in data: if key.startswith('v_name'): quote_suffix.append(key[len('v_name'):]) upload=False insert_doc['po_mou']=data['po_mou'] if 'po_mou' in data and data['po_mou']=='po' and data['po']=='NA': # Amount Validation if (insert_doc['maintainence_amount_limit']==True and float(data['product_total_amount' ])>=25000) or (float(data['product_total_amount' ])>=100000): upload=False queryResult = {'status': 'failure', 'message': 'Please upload mou!'} else: upload=True elif 'po_mou' in data and data['po_mou']=='mou': insert_doc['mou_file']=data['mou_file'] upload=True if (len(quote_suffix)>=3 or submit==True) or (data['po']!='NA') or upload==True: quotations_new = [] # Upload quotations for value in quote_suffix: append = False quote = {'id':value,'v_name': '', 'exception': '', 'note': '','quote_file':[]} if value=="": quote["id"]="0" if value in quotations: quote=quotations[value] elif value=="" and '0' in quotations: quote=quotations['0'] if 'v_name' + str(value) in data and data['v_name' + str(value)] != '': append = True quote['v_name'] = data['v_name' + str(value)] if 'exception' + str(value) in data: quote['exception'] = True else: quote['exception'] = False if 'note' + str(value) in data: quote['note'] = data['note' + str(value)] if 'quote_file' + str(value) in files: quote_file = (files['quote_file' + str(value)]) quotImageResponse = uploadImagetoFolder(quote_file, 'quote_' + str(value), app) if quotImageResponse['status'] == 'success': quote_file_list=quote['quote_file'] quote_file_list.append(quotImageResponse['message']) quote['quote_file'] = quote_file_list if append == True: quotations_new.append(quote) insert_doc['quotations'] = quotations_new i=0 for v_file in files.getlist('invoice'): i+=1 quotImageResponse = uploadImagetoFolder( v_file, 'invoice_'+str(i) , app) if quotImageResponse['status'] == 'success': invoices.append(quotImageResponse['message']) insert_doc['invoices']=invoices project_id = data['id'] order_id = '' suffix = [] for key in data: if key.startswith('product_dec'): suffix.append(key[len('product_dec'):]) od = [] total_amount = 0 # Upload Order Details for value in suffix: append = False quote = { 'product_dec': '', 'product_qty': '', 'product_amount': '', 'product_gst': '', 'product_cat':'', 'product_loc':'', 'product_depriciation':'', 'donated':'' } if 'product_dec' + str(value) in data and data[ 'product_dec' + str(value)] != '': append = True quote['product_dec'] = data['product_dec' + str(value)] if data['project_type'] == 'Capex - Centre Advances' or data['project_type'] == 'Capex - In Budget': if 'product_cat' + str(value) in data and data['product_cat' + str(value)] != '': quote['product_cat'] = data['product_cat' + str(value)] if data['product_cat' + str(value)] in formatted_dep: quote['product_depriciation'] =formatted_dep[data['product_cat' + str(value)]] if 'product_loc' + str(value) in data and data['product_loc' + str(value)] != '': quote['product_loc'] = data['product_loc' + str(value)] # if 'product_depriciation' + str(value) in data: # quote['product_depriciation'] = float(data['product_depriciation' + str(value)]) if 'donated' + str(value) in data and data['donated' + str(value)] != '': quote['donated'] = data['donated' + str(value)] if 'product_qty' + str(value) in data: quote['product_qty'] = int(data['product_qty' + str(value)]) if 'product_amount' + str(value) in data: quote['product_amount'] = int(data['product_amount' + str(value)]) if 'product_gst' + str(value) in data: quote['product_gst'] = float(data['product_gst' + str(value)]) if append == True: total_amount += (quote['product_amount'] * quote['product_qty']) + quote['product_gst'] od.append(quote) insert_doc['od'] = od if 'p_additional_charges' in data: insert_doc['po_additional_charges'] = float(data['p_additional_charges']) total_amount+=insert_doc['po_additional_charges'] if 'tds_rate' in data: insert_doc['tds_rate'] = float(data['tds_rate']) if 'on_account_of' in data: insert_doc['on_account_of'] = data['on_account_of'] # if 'tds_type' in data: # insert_doc['tds_type'] = str(data['tds_type']) # if 'tds_name' in data: # insert_doc['tds_name'] = str(data['tds_name']) user_name="" if 'user_id' in data: insert_doc['user_id'] = str(data['user_id']) try: user_lst=getUserDetailsFromMaster(str(data['user_id']),mongo) if len(user_lst)!=0: user_name=user_lst[0]['full_name'] except Exception as err: print(err) if 'id' in data: insert_doc['id'] = str(data['id']) if 'po' in data: insert_doc['po_id'] = data['po'] if 'budget_head' in data: insert_doc['budget_head'] = data['budget_head'] if 'project_type' in data: insert_doc['project_type'] = data['project_type'] # For Opex Donation if data['project_type'] == 'Opex Donation': if 'registration_copy' in files: # Upload registration_copy registration_copy_file = files['registration_copy'] regImageResponse = uploadImagetoFolder(registration_copy_file, 'reg_', app) if regImageResponse['status'] == 'success': insert_doc['registration_copy'] = regImageResponse[ 'message'] if 'deed_copy' in files: # Upload deed_copy deed_copy_file = files['deed_copy'] deedImageResponse = uploadImagetoFolder( deed_copy_file, 'deed_', app) if deedImageResponse['status'] == 'success': insert_doc['deed_copy'] = deedImageResponse['message'] if '80_g_copy' in files: # Upload 80_g_copy G80_file = files['80_g_copy'] g80ImageResponse = uploadImagetoFolder(G80_file, '80g_', app) if g80ImageResponse['status'] == 'success': insert_doc['80g_copy'] = g80ImageResponse['message'] if '12_a_copy' in files: # Upload 12_a_copy a12_file = files['12_a_copy'] a12ImageResponse = uploadImagetoFolder(a12_file, '12a_', app) if a12ImageResponse['status'] == 'success': insert_doc['12a_copy'] = a12ImageResponse['message'] if 'audit_sheet' in files: # Upload audit_sheet audit_sheet_file = files['audit_sheet'] auditImageResponse = uploadImagetoFolder( audit_sheet_file, 'audit_', app) if auditImageResponse['status'] == 'success': insert_doc['audit_sheet'] = auditImageResponse['message'] if 'board_resolution' in files: # Upload board_resolution board_resolution_file = files['board_resolution'] boardImageResponse = uploadImagetoFolder( board_resolution_file, 'board_', app) if boardImageResponse['status'] == 'success': insert_doc['board_resolution'] = boardImageResponse[ 'message'] if 'donation_letter' in files: # Upload donation_letter donation_letter_file = files['donation_letter'] donationImageResponse = uploadImagetoFolder( donation_letter_file, 'donation_', app) if donationImageResponse['status'] == 'success': insert_doc['donation_letter'] = donationImageResponse[ 'message'] elif data['project_type'] == 'Training & Development': insert_doc['trainer_name'] = data['trainer_name'] insert_doc['training_topic'] = data['training_topic'] insert_doc['training_duration'] = data['training_duration'] insert_doc['training_category'] = data['training_category'] insert_doc['training_count'] = int(data['training_count']) elif data['project_type'] == 'Capex - Centre Advances' or data['project_type'] == 'Capex - In Budget': selectGenrate==True if 'product_total_amount' in data: insert_doc['product_total_amount'] = total_amount insert_doc['product_gross_amount'] = total_amount if 'vendor_type' in data and data['vendor_type']=='registered': if 'vendors' in data and data['vendors'] != '': vendor_id = data['vendors'] # MOU Expiry insert_doc['vendor_id'] = vendor_id vendor_lst=getVendorDetailsDao(vendor_id,mongo) if len(vendor_lst)!=0: vendor_name=vendor_lst[0]['v_name'] else: if 'vendorName' in data and data['vendorName']!='': insert_doc['vendor_name']=data['vendorName'] vendor_name=data['vendorName'] if 'vendorAddress' in data and data['vendorAddress']!='': insert_doc['vendor_address']=data['vendorAddress'] if 'vendorMobileNo' in data and data['vendorMobileNo']!='': insert_doc['vendor_number']=data['vendorMobileNo'] if 'vendorEmail' in data and data['vendorEmail']!='': insert_doc['vendor_email']=data['vendorEmail'] if 'payment_type' in data and data['payment_type'] != '': payment_type = data['payment_type'] insert_doc['payment_type'] = payment_type if data['payment_type']=='neft': insert_doc['v_account_no']=data['v_account_no'] insert_doc['v_ifsc']=data['v_ifsc'] i=0 for v_file in files.getlist('v_cheque_file'): i+=1 quotImageResponse = uploadImagetoFolder( v_file, 'cheq_'+str(i) , app) if quotImageResponse['status'] == 'success': cheque.append(quotImageResponse['message']) insert_doc['cheque']=cheque if 'MOP' in data and data['MOP'] != '': MOP = data['MOP'] insert_doc['MOP'] = MOP if 'amount_words' in data and data['amount_words'] != '': amount_words = number_to_word(total_amount) insert_doc['amount_words'] = amount_words.lower() if 'intervention' in data and data['intervention']!='': insert_doc['intervention']=data['intervention'] if 'project_name' in data and data['project_name']!='': insert_doc['project_name']=data['project_name'] if insert_doc['id']=='0': order_id,voucher_year=create_voucher_id(mongo) insert_doc['voucher_code']=order_id insert_doc['voucher_year']=voucher_year insert_doc['voucher_created_on'] = int(datetime.now().timestamp() *1000) else: insert_doc['voucher_updated_on'] = int(datetime.now().timestamp() *1000) senior_found,approval_track=findApprovalTrackForVoucher(insert_doc,mongo) if senior_found==True: insert_doc['approval_track']= approval_track if selectGenrate==True: createAndGenrateAssetCode(data,od,order_id,timestamp,mongo) _id=saveVoucherDao(insert_doc,mongo) insertVoucherStatusLog({ "user_id":str(data['user_id']), "voucher_id":str(_id), "timestamp":timestamp, "action":"SUBMITTED" },mongo) senior_level_1=approval_track['senior_level_1']['id'] senior_level_2=approval_track['senior_level_2']['id'] senior_level_3=approval_track['senior_level_3']['id'] finance_level_1=approval_track['finance_level_1']['id'] finance_level_2=approval_track['finance_level_2']['id'] senior_id='NA' if senior_level_1!='NA': senior_id=senior_level_1 elif senior_level_2!='NA': senior_id=senior_level_2 elif senior_level_3!='NA': senior_id=senior_level_3 elif finance_level_1!='NA': senior_id=finance_level_1 elif finance_level_2!='NA': senior_id=finance_level_2 if senior_id!='NA': try: senior_lst=getUserDetailsFromMaster(senior_id,mongo) if len(senior_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'] subject="Expense Voucher Request" body="Dear "+name+",

Expense Voucher raised by "+user_name+" of '"+vendor_name+"' of rs "+str(round(total_amount,2))+", 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 added successfully!' } else: queryResult = { 'status': 'failure', 'message': 'No Senior Assigned!' } else: if upload==True: queryResult = {'status': 'failure', 'message': '3 quotations required!'} else: queryResult = {'status': 'failure', 'message': 'Please regenrate the asset code and try again!'} except Exception as err: queryResult = {'status': 'failure', 'message': 'Something went wrong!'} print("Outer",err) return queryResult def updateVoucherTDSService(request_obj,mongo): queryResult={} try: update_obj={} voucher_id=request_obj['voucher_id'] tds_id=request_obj["tds_id"] voucher_details=getVoucherDetailsDao(voucher_id,mongo) timestamp=int(datetime.now().timestamp())*1000 formatted_tds={} tds_list=getTDSRateListDao(mongo) for tds_obj in tds_list: formatted_tds[tds_obj['id']]=tds_obj for voucher in voucher_details: add_charges=voucher['po_additional_charges'] total_amt=0 total_gst=0 amt_words='' if 'od' in voucher: for od in voucher['od']: total_amt+=od['product_amount']*od['product_qty'] total_gst+=od['product_gst'] gross_amt=total_amt+add_charges+total_gst if tds_id=='0': total_amt=gross_amt amt_words=int_to_en(int(total_amt)) # Update Voucher updateVoucherApprovalStatus({"tds_name" : "","tds_rate" : 0,"tds_type" : "","product_gross_amount":gross_amt,"product_total_amount":total_amt,'amount_words':amt_words},voucher_id,mongo) else: if tds_id in formatted_tds: tds_name=formatted_tds[tds_id]['name'] tds_type=formatted_tds[tds_id]['type'] tds_rate=formatted_tds[tds_id]['rate'] total_amt=(total_amt - (total_amt * tds_rate) / 100)+add_charges+total_gst amt_words=int_to_en(int(total_amt)) # Update Voucher updateVoucherApprovalStatus({"tds_name" : tds_name,"tds_rate" : tds_rate,"tds_type" : tds_type,"product_gross_amount":gross_amt,"product_total_amount":total_amt,'amount_words':amt_words},voucher_id,mongo) queryResult = { 'status': 'success', 'message': 'Voucher updated successfully!' } except Exception as err: queryResult = { 'status': 'failure', 'message': 'Something went wrong!' } print(err) return queryResult def create_voucher_id(mongo): order_id = '' voucher_year='' try: if datetime.now().month>=4: voucher_year = (str(time.strftime("%y", time.localtime())) + '-' + str(int(time.strftime("%y", time.localtime())) + 1)) else: voucher_year = (str(int(time.strftime("%y", time.localtime()))-1) + '-' + str(int(time.strftime("%y", time.localtime())) )) # get PO Year db_year = getVoucherYear(mongo) voucher_count = '01' for year_obj in db_year: print(year_obj,voucher_year) if voucher_year == year_obj['year']: # Fetch total PO created ID voucher_count = getInserterdVoucherCount(voucher_year, mongo) voucher_count = str(voucher_count + 1) if voucher_count + 1 > 9 else '0' + str(voucher_count +1) else: # insert new year object insertVoucherYear(voucher_year, mongo) order_id = (voucher_year + '/' + voucher_count) except Exception as err: print(err) return order_id,voucher_year def getVoucherAnalyticsDataService(from_date,to_date, mongo): # Validate email id and password queryResult = {"total_voucher_amount":0, "urgent_voucher":{'count':0,"total_amount":0}, "voucher_type":[], "budget_head":[], "intervention":[], "payment_type":[], "voucher_per_vendor":{} } formatted_vendors={} voucher_per_vendor={} try: vouchers=getVoucherAnalyticsDataDao(from_date,to_date, mongo) voucher_type={} budget_head={} intervention={} payment_type={} vendors=getAllVendorListDao(mongo) for vendor in vendors: formatted_vendors[vendor['id']]=vendor for voucher in vouchers: try: queryResult['total_voucher_amount']=queryResult['total_voucher_amount']+voucher['product_total_amount'] if 'MOP' in voucher and voucher['MOP']=='urgent': queryResult['urgent_voucher']['count']=queryResult['urgent_voucher']['count']+1 queryResult['urgent_voucher']['total_amount']=queryResult['urgent_voucher']['total_amount']+voucher['product_total_amount'] if voucher['project_type'] in voucher_type: voucher_type[voucher['project_type']]=voucher_type[voucher['project_type']]+voucher['product_total_amount'] else: voucher_type[voucher['project_type']]=voucher['product_total_amount'] if voucher['budget_head'] in budget_head: budget_head[voucher['budget_head']]=budget_head[voucher['budget_head']]+voucher['product_total_amount'] else: budget_head[voucher['budget_head']]=voucher['product_total_amount'] if voucher['intervention'] in intervention: intervention[voucher['intervention']]=intervention[voucher['intervention']]+voucher['product_total_amount'] else: intervention[voucher['intervention']]=voucher['product_total_amount'] if voucher['payment_type'] in payment_type: payment_type[voucher['payment_type']]=payment_type[voucher['payment_type']]+voucher['product_total_amount'] else: payment_type[voucher['payment_type']]=voucher['product_total_amount'] if voucher['vendor_id'] in voucher_per_vendor: voucher_per_vendor[voucher['vendor_id']]['count']=voucher_per_vendor[voucher['vendor_id']]['count']+1 voucher_per_vendor[voucher['vendor_id']]['amount']=voucher_per_vendor[voucher['vendor_id']]['amount']+voucher['product_total_amount'] else: vendor_code='' vendor_name='' if voucher['vendor_id'] in formatted_vendors: vendor_code=formatted_vendors[voucher['vendor_id']]['v_code'] vendor_name=formatted_vendors[voucher['vendor_id']]['v_name'] voucher_per_vendor[voucher['vendor_id']]={'count':1,'amount':voucher['product_total_amount'],'vendor_code':vendor_code,'vendor_name':vendor_name} except Exception as err: print(err) queryResult['voucher_type']=jsonToArray(voucher_type) queryResult['budget_head']=jsonToArray(budget_head) queryResult['intervention']=jsonToArray(intervention) queryResult['payment_type']=jsonToArray(payment_type) queryResult['voucher_per_vendor']=voucher_per_vendor except Exception as err: # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo) queryResult = [] return queryResult def getVoucherReportDataService(from_date,to_date,mongo): queryResult = [] formatted_users={} formatted_vendors={} formatted_po={} try: users=getAllUsersFromMaster(mongo) vendors=getAllVendorListDao(mongo) purchase_orders=getPOListForReport(mongo) for user in users: formatted_users[user['key']]=user for vendor in vendors: formatted_vendors[vendor['id']]=vendor for po in purchase_orders: formatted_po[po['id']]=po['po_order_id'] vouchers = getVoucherAnalyticsDataDao(from_date,to_date, mongo) for voucher in vouchers: try: user_id=voucher['user_id'] vendor_id=voucher['vendor_id'] v_code ="" v_name ="" v_pan="" if vendor_id in formatted_vendors: v_code = formatted_vendors[vendor_id]['v_code'] v_name = formatted_vendors[vendor_id]['v_name'] v_pan = formatted_vendors[vendor_id]['v_pan'] elif 'vendor_name' in voucher: v_name = voucher['vendor_name'] po_order_id='' created_on = datetime.fromtimestamp((voucher['voucher_created_on']/1000)) if voucher['po_id'] in formatted_po: po_order_id=formatted_po[voucher['po_id']] for od in voucher['od']: insert_obj={'voucher_code':voucher['voucher_code'], 'intervention':voucher['intervention'], 'emp_id':formatted_users[user_id]['emp_id'], 'user_name':formatted_users[user_id]['first_name'], 'vendor_code':v_code, 'vendor_name':v_name, 'vendor_pan':v_pan, 'project_type':voucher['project_type'], 'mop':voucher['MOP'], 'budget_head':voucher['budget_head'], 'payment_type':voucher['payment_type'], 'tds_rate':voucher['tds_rate'], 'additional_charges':voucher['po_additional_charges'], 'total_amount':voucher['product_total_amount'], 'amount_words':voucher['amount_words'], 'po_order_id':po_order_id, 'product_dec':od['product_dec'], 'product_qty':od['product_qty'], 'product_amount':od['product_amount'], 'product_gst':od['product_gst'], 'on_account_of':'', 'voucher_created_on':created_on.strftime("%d/%m/%Y %H:%M%p") } if 'on_account_of' in voucher: insert_obj['on_account_of']=voucher['on_account_of'] queryResult.append(insert_obj) except Exception as err: print(err) except Exception as err: print(err) # insert_into_error_log({'timestamp':int(datetime.now().timestamp()*1000),'type':'api','err':str(err),'function':'validateLogin'},mongo) queryResult = [] return queryResult def getVoucherStatusLogsService(id,mongo): queryResult = [] try: queryResult = getVoucherStatusLogDao(id, mongo) except Exception as err: queryResult = [] return queryResult def jsonToArray(obj_data): response_array=[] try: for key in obj_data: response_array.append([key,obj_data[key]]) except Exception as err: print(err) return response_array def int_to_en(num): d = { 0 : 'zero', 1 : 'one', 2 : 'two', 3 : 'three', 4 : 'four', 5 : 'five', \ 6 : 'six', 7 : 'seven', 8 : 'eight', 9 : 'nine', 10 : 'ten', \ 11 : 'eleven', 12 : 'twelve', 13 : 'thirteen', 14 : 'fourteen', \ 15 : 'fifteen', 16 : 'sixteen', 17 : 'seventeen', 18 : 'eighteen', \ 19 : 'ninteen', 20 : 'twenty', \ 30 : 'thirty', 40 : 'fourth', 50 : 'fifty', 60 : 'sixty', \ 70 : 'seventy', 80 : 'eighty', 90 : 'ninty' } k = 1000 m = k * 1000 if (num < 20): return d[num] if (num < 100): if num % 10 == 0: return d[num] else: return d[num // 10 * 10] + ' ' + d[num % 10] if (num < k): if num % 100 == 0: return d[num // 100] + ' hundred' else: return d[num // 100] + ' hundred ' + int_to_en(num % 100) if (num < m): if num % k == 0: return int_to_en(num // k) + ' thousand' else: return int_to_en(num // k) + ' thousand, ' + int_to_en(num % k) def validateCreateVoucher(data,mongo): create=False try: if 'project_type' in data: if data['project_type'] == 'Capex - Centre Advances' or data['project_type'] == 'Capex - In Budget': asset_code_obj=json.loads(data['generatedAssetCode']) if not json.loads(data['generatedAssetCode']): # No Asset Code genrated create=True else: for index in asset_code_obj: if getAssetCodePresentOrNotDao(asset_code_obj[index][0],mongo)!=0: create=False break else: create=True else: create=True create=True except Exception as err: print(err) return create def createAndGenrateAssetCode(data,od,voucher_code,timestamp,mongo): create_voucher=False try: genrated_asset_code_obj=json.loads(data['generatedAssetCode']) # genrated_asset_code_status_obj=json.loads(data['generatedAssetCodeStatus']) selected_asset_code_obj=json.loads(data['selectAssetCode']) # selected_asset_code_status_obj=json.loads(data['selectAssetCodeStatus']) asset_master_type=getAssetCategoryListDao(mongo) formatted_asset_type={} for asset_obj in asset_master_type: formatted_asset_type[asset_obj['name']]=asset_obj['category'] for index in selected_asset_code_obj: if len(selected_asset_code_obj[index])!=0: updateAssetDetailsSelected(selected_asset_code_obj[index],{'voucher_code':voucher_code,'intervention':data['intervention']},mongo) for index in genrated_asset_code_obj: for asset_code in genrated_asset_code_obj[index][0]: try: order_details=od[int(index)-1] asset_master_type_det="" owned_don="owned" if 'donated' in order_details and order_details['donated']!="": owned_don='donation' if order_details['product_cat'] in formatted_asset_type: asset_master_type_det=formatted_asset_type[order_details['product_cat']] insert_obj={ 'id':'', 'amount':order_details['product_amount']+(order_details['product_gst']/order_details['product_qty']), 'asset_master_type':asset_master_type_det, "assign" : False, "assign_to" : "NA", "created_on" :timestamp, "donated_by" : "NA", "place" : order_details['product_loc'], "product_name" : order_details['product_dec'], "status" : "working", "owned_donation" : owned_don, 'asset_type':order_details['product_cat'], 'asset_code':asset_code, 'voucher_code':voucher_code, 'intervention':data['intervention'], 'created_from':'accounts'} # Insert into asset master saveAssetDetailsDao(insert_obj,mongo) except Exception as err: print(err) create_voucher=True except Exception as err: create_voucher=False print(err) return create_voucher def number_to_word(number): def get_word(n): words={ 0:"", 1:"One", 2:"Two", 3:"Three", 4:"Four", 5:"Five", 6:"Six", 7:"Seven", 8:"Eight", 9:"Nine", 10:"Ten", 11:"Eleven", 12:"Twelve", 13:"Thirteen", 14:"Fourteen", 15:"Fifteen", 16:"Sixteen", 17:"Seventeen", 18:"Eighteen", 19:"Nineteen", 20:"Twenty", 30:"Thirty", 40:"Forty", 50:"Fifty", 60:"Sixty", 70:"Seventy", 80:"Eighty", 90:"Ninty" } if n<=20: return words[n] else: ones=n%10 tens=n-ones return words[tens]+" "+words[ones] def get_all_word(n): d=[100,10,100,100] v=["","Hundred And","Thousand","lakh"] w=[] for i,x in zip(d,v): t=get_word(n%i) if t!="": t+=" "+x w.append(t.rstrip(" ")) n=n//i w.reverse() w=' '.join(w).strip() if w.endswith("And"): w=w[:-3] return w arr=str(number).split(".") number=int(arr[0]) crore=number//10000000 number=number%10000000 word="" if crore>0: word+=get_all_word(crore) word+=" crore " word+=get_all_word(number).strip()+" Rupees" if len(arr)>1: if len(arr[1])==1: arr[1]+="0" word+=" and "+get_all_word(int(arr[1]))+" paisa" return word