| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920 |
- from dao.voucher_dao import *
- from dao.vendor_dao import getAllVendorListDao
- 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={}
- 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['quote_file'] = quote['quote_file'].append(quotImageResponse['message'])
-
- 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
- else:
- if 'vendorName' in data and data['vendorName']!='':
- insert_doc['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:
- personal_email_id=senior_lst[0]['personal_email_id']
- subject="Expense Voucher Request"
- body="Expense Voucher Request by "+user_name
- sendEmail("",personal_email_id,body,False,subject)
-
- except expression as identifier:
- print(identifier)
- queryResult = {
- 'status': 'success',
- 'message': 'Project 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
|