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": "" } }
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
}
dep_list=getAssetCategoryListDao(mongo)
quotations={}
s_v_j=[]
invoices=[]
cheque=[]
# 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']
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 = []
# 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'] = float(data['product_amount' +
str(value)])
if 'product_gst' + str(value) in data:
quote['product_gst'] = float(data['product_gst' +
str(value)])
if append == True:
od.append(quote)
insert_doc['od'] = od
if 'p_additional_charges' in data:
insert_doc['po_additional_charges'] = float(data['p_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'] = float(data['product_total_amount' ])
total_amount = float(data['product_total_amount'])
insert_doc['product_gross_amount'] = float(data['product_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 = data['amount_words'] # MOU Expiry
insert_doc['amount_words'] = amount_words
if 'intervention' in data and data['intervention']!='':
insert_doc['intervention']=data['intervention']
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(total_amount)+", please approve the same."
if 'official_email_id' in senior_lst[0] and senior_lst[0]['official_email_id']!="" and senior_lst[0]['official_email_id']!="NA":
reciever_email=senior_lst[0]['official_email_id']
sendEmail("",reciever_email,body,False,subject)
except Exception as identifier:
print(identifier)
queryResult = {
'status': 'success',
'message': 'Voucher 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:
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']
po_order_id=''
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':formatted_vendors[vendor_id]['v_code'],
'vendor_name':formatted_vendors[vendor_id]['v_name'],
'vendor_pan':formatted_vendors[vendor_id]['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']
}
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