from flask import current_app as my_app import pandas as pd import re,copy import logging from datetime import datetime from time import time # from .CibilMasterDataService import CibilMasterDataService from .SampleDataProviderService import SampleDataProviderService from .DpdCalculationService import DpdCalculationService from .CibilSummaryDataUpdateService import CibilSummaryDataUpdateService from .CibilDataService import CibilDataService from Models.op_rtr_summary_of_active_loans import Out_active_and_closed_loans_details class CibilBusinessOperationService: # start making summary of single member/applicant's credit bureau summary # report by @param : member_reference_number #to store master data like configured bucket details # dpd_month_bucket_master = [] # sanction_summary_month_buckets = [] # enquiry_summary_month_buckets = [] # #data generating using masters synamic bucket skeletons/headers # sanction_summary_skeleton = {} # enquiry_summary_skeleton = {} # #for hold all summary reports # unique_credit_facility_summary = {'total_count':0,'overdue_count':0,'zero_bal_count':0,'nil_overdue':0,'adv_high_credit':0,'current_balance':0,'overdue_balance':0,'date_latest_opened': '','date_oldest_opened': ''} # live_and_closed_account_summary = [] # sanctioned_amt_details_summary = {} # enquiry_amt_details_summary = {} #http://127.0.0.1:5000/api/cibil?reference_number=202201121116395000000&los_id=MW112233&cibil_type=1&action=1 def doCIBILActiveCloseLoansSummary(los_id,reference_number,cibil_type): # raise Exception('manual stop') logText = 'doCIBILActiveCloseLoansSummary - LOSID - '+los_id+', '+'REFNO - '+reference_number+', '+'CTYPE - '+cibil_type+' ' my_app.logger.info(logText) print('doCIBILActiveCloseLoansSummary - ',logText) # logger = logging.getLogger('cibil.sub') # logger.info(logText) # return True live_and_closed_account_summary = [] credit_facility_details = CibilDataService.getCreditFacilityDetails(reference_number,los_id,cibil_type) logText = 'TOTAL CREDIT FACILITY - ' + str(len(credit_facility_details)) + ' FOUND' my_app.logger.info(logText) print(logText) dpd_details = CibilDataService.getDPDDetails(reference_number,los_id,cibil_type) # return dpd_details borrower_details = CibilDataService.getBorrowerDetails(reference_number,los_id,cibil_type) # cibil_raw_data = SampleDataProviderService.getCIBILRawData(reference_number=member_reference_number,type=1) dpd_month_bucket_master = CibilDataService.getMonthBucketMaster('DPD' ) # raise Exception('manual stop') # start if len(credit_facility_details) > 0: # print('####LOGIC STARTED#######') # over_start_time = time() for idx,row in enumerate(credit_facility_details): # if row['AccountTranDetailsID'] == '388857': # print('#########################BREAK') # break CustomerName1 = "" if borrower_details[0]['ConsumerNameField1'] == None else borrower_details[0]['ConsumerNameField1'].strip() CustomerName2 = "" if borrower_details[0]['ConsumerNameField2'] == None else borrower_details[0]['ConsumerNameField2'].strip() CustomerName = CustomerName1+' '+CustomerName2 GroupString = row['grp_str'] AccountType = row['AccountType'].strip() ReportedandCertifiedDate = row['DateReportedAndCertified'] OpendDate = (row['DateOpenedDisbursed']) if row['DateOpenedDisbursed'] != "" and row['DateOpenedDisbursed'] != None and row['DateOpenedDisbursed'] != 'None' else None DateClosed = (row['DateClosed']) if row['DateClosed'] != "" and row['DateClosed'] != None and row['DateClosed'] != 'None' else None SanctionedAmount = (row['HighCreditSanctionedAmount']) if row['HighCreditSanctionedAmount'] != "" and row['HighCreditSanctionedAmount'] != None and row['HighCreditSanctionedAmount'] != 'None' else 0 CurrentBalance = (row['CurrentBalance']) if row['CurrentBalance'] != "" and row['CurrentBalance'] != None and row['CurrentBalance'] != 'None' else 0 EMIAmount = (row['EMIAmount']) if row['EMIAmount'] != "" and row['EMIAmount'] != None and row['EMIAmount'] != 'None' else 0 OverdueAmount = (row['AmountOverdue']) if row['AmountOverdue'] != "" and row['AmountOverdue'] != None and row['AmountOverdue'] != 'None' else 0 RepaymentTenure = (int(float(row['RepaymentTenure']))) if row['RepaymentTenure'] != "" and row['RepaymentTenure'] != None and row['RepaymentTenure'] != 'None' else 0 Status = row['WrittenOffAndSettledStatus'].strip() Ownership = row['OwnershipIndicator'].strip() Ownership = "I" if Ownership == "Individual" else "J" if Ownership == "Joint" else "AU" if re.search("Authorised User", Ownership) else "G" if Ownership == "Guarantor" else Ownership if AccountType == 'Credit Card': SanctionedAmount = (row['CreditLimit']) if row['CreditLimit'] != "" and row['CreditLimit'] != None and row['CreditLimit'] != 'None' else 0 #unique credit facility function call , if current credit facility is J and G #currently ot in use # if Own == "J" or Own == "G": #CibilBusinessOperationService.getUniqueCreditFacilitySummary(row) #DPD logic start dpd_result = DpdCalculationService.dpdCalculation(row['AccountTranDetailsID'],dpd_details,dpd_month_bucket_master) CurrentDPD = dpd_result['currentDPD'] DPD0_6 = dpd_result['DPD0_6'] DPD7_12 = dpd_result['DPD7_12'] DPD13_24 = dpd_result['DPD13_24'] DPD25_36 = dpd_result['DPD25_36'] # LatestDPD = 0 # DPD0_6 = 0 # DPD7_12 = 0 # DPD13_24 = 0 # DPD25_36 = 0 # temp = {"CustomerName":CustomerName,"AccountType":AccountType,"SanctionedDate":SanctionedDate,"SanctionedAmount":SanctionedAmount,"CurrentBalance":CurrentBalance,"EMIAmount":EMIAmount,"Overdue":Overdue,"Tenure":Tenure,"Own":Own,"LatestDPD":LatestDPD,'DPD0_6':DPD0_6,'DPD7_12':DPD7_12,'DPD13_24':DPD13_24,'DPD25_36':DPD25_36} temp = Out_active_and_closed_loans_details(losid=los_id,ref_no=reference_number,consumer_name=CustomerName,account_type=AccountType,reported_and_certified_date=ReportedandCertifiedDate,opened_date=OpendDate,DateClosed=DateClosed,sanctioned_amount=SanctionedAmount,current_balance=CurrentBalance,emi_amount=EMIAmount,overdue_amount=OverdueAmount,repayment_tenure=RepaymentTenure,status=Status,ownership=Ownership,current_dpd=CurrentDPD,highest_dpd_month_wise_bucket_or_count_0_to_6=DPD0_6,highest_dpd_month_wise_bucket_or_count_07_to_12=DPD7_12,highest_dpd_month_wise_bucket_or_count_13_to_24=DPD13_24,highest_dpd_month_wise_bucket_or_count_25_to_36=DPD25_36,is_active=1,createdAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),updatedAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),createdby=1,updatedby=1,grp_str=GroupString) live_and_closed_account_summary.append(temp); # start_time = time() # print('idx',idx) # print("--- %s seconds ---" %(time() - start_time)) ##### All o/p data insertion startes here except open & closed ac summary. it gets inserted in above loop logText = 'TOTAL ACTIVE&CLOSED LOANS - ' + str(len(live_and_closed_account_summary)) my_app.logger.info(logText) print(logText) res = CibilSummaryDataUpdateService.updateActiveOrClosedLoans(live_and_closed_account_summary) logText = (res) +' INSERTED' my_app.logger.info(logText) print(logText) ##### End of All o/p data insertion startes here except open & closed ac summary. it gets inserted in above loop # return live_and_closed_account_summary # print("--- %s seconds overall ---" %(time() - over_start_time)) return True # transform Sansactioned Amt table from transactions details # def getSanctionedAmtDetails(accountTranDetails): def doCIBILSanctionedLoansSummary(los_id,reference_number,cibil_type,output_type): logText = 'doCIBILSanctionedLoansSummary - LOSID - '+los_id+', '+'REFNO - '+reference_number+', '+'CTYPE - '+cibil_type+', O/PTYPE - '+str(output_type) my_app.logger.info(logText) print(logText) sanctioned_amt_details_summary = {} credit_facility_details = [] month_bucket_master = CibilDataService.getMonthBucketMaster('SAN_SUM')#SAN_SUM = sanction summary bucket master sanction_summary_skeleton = CibilBusinessOperationService.prepareSkeletons(month_bucket_master,type = 2)# 2 = sanction if output_type == 1:credit_facility_details = CibilDataService.getCreditFacilityDetails(reference_number,los_id,cibil_type) elif output_type == 2:credit_facility_details = CibilDataService.getUniqueCreditFacilityDetails(los_id) # print(credit_facility_details) # return(credit_facility_details) logText = 'TOTAL '+ str(len(credit_facility_details))+' CREDIT FACILITIES FOUND' my_app.logger.info(logText) print(logText) # print(month_bucket_master) # print(sanction_summary_skeleton) # print(credit_facility_details) # raise Exception('doCIBILSanctionedLoansSummary') total_enquiry_count_for_log = 0 for index,credit_facility_detail in enumerate(credit_facility_details): creditFacility = credit_facility_detail['AccountType'].strip() SanctionedDate = credit_facility_detail['DateOpenedDisbursed'] DateClosed = credit_facility_detail['DateClosed'] CurrentBalance = credit_facility_detail['CurrentBalance'] SanctionedAmount = credit_facility_detail['HighCreditSanctionedAmount'] if creditFacility == 'Credit Card': SanctionedAmount = credit_facility_detail['CreditLimit'] # print((SanctionedAmount)) SanctionedAmount = float(SanctionedAmount) if SanctionedAmount != "" and SanctionedAmount != 'None' and SanctionedAmount != None else 0 # print('###Credit Card### - ', SanctionedAmount,SanctionedAmount.isnumeric()) month_bucket_index = credit_facility_detail['month_bucket_index'] # month = (datetime.strptime((SanctionedDate.split(" ")[0]), "%Y-%m-%d")).month if SanctionedDate != 'None' else 1 # month_bucket = '1' if month == 1 else '2-3' if month >= 2 and month <= 3 else '4-6' if month >=4 and month <= 6 else '7-12' if month >= 7 and month <= 12 else '13-24' if month >= 13 and month <= 24 else '25-36' if month >= 25 and month <= 36 else '>36' if month > 36 else 'None' month_bucket = DpdCalculationService.dpdFindDaysBucket(month_bucket_master,month_bucket_index) sanctioned_amt_detail = { 'creditFacility': creditFacility, 'SanctionedDate':SanctionedDate,'SanctionedAmount':SanctionedAmount,'monthBucket':month_bucket,'CurrentBalance':CurrentBalance, 'DateClosed' : DateClosed } # print('mergeSanctionAmtDetails') #check current credit facility exists in sanctioned_amt_details_summary if sanctioned_amt_detail['creditFacility'] not in sanctioned_amt_details_summary.keys(): # print("FIRST TIME SKELETON ADDED-",sanctioned_amt_detail['creditFacility'],'-',sanctioned_amt_detail['monthBucket'],'-',sanctioned_amt_detail['SanctionedAmount']) sanctioned_amt_details_summary[ sanctioned_amt_detail['creditFacility'] ] = copy.deepcopy(sanction_summary_skeleton) # print("BEFORE ADDED***********",sanctioned_amt_detail['SanctionedAmount'],type(sanctioned_amt_detail['SanctionedAmount']),sanctioned_amt_detail['monthBucket'],(sanctioned_amt_detail['SanctionedAmount'] != "" and sanctioned_amt_detail['SanctionedAmount'] != None)) # print(sanctioned_amt_details_summary) tempSanctionedAmount = float(sanctioned_amt_detail['SanctionedAmount']) # if sanctioned_amt_detail['SanctionedAmount'].isnumeric()else 0 sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['amt'] += tempSanctionedAmount sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['count'] += 1 sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['total_amt'] += tempSanctionedAmount sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['total_count'] += 1 total_enquiry_count_for_log += 1 #for Amount & Count of open and closed accounts if (sanctioned_amt_detail['DateClosed'] == None or sanctioned_amt_detail['DateClosed'] == "" or sanctioned_amt_detail['DateClosed'] == 'None'): sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['openamt'] += tempSanctionedAmount sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['opencount'] += 1 sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['open_total_amt'] += tempSanctionedAmount sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['open_total_count'] += 1 else: sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['closeamt'] += tempSanctionedAmount sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['closecount'] += 1 sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['closed_total_amt'] += tempSanctionedAmount sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['closed_total_count'] += 1 # print("AFTER ADDED***********") # print(sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]) # print("") # print("SKELTON-",sanction_summary_skeleton) # print("") logText = str(total_enquiry_count_for_log) +' CREDIT FACILITIES SUMMARIZED AS ' + str(len(sanctioned_amt_details_summary)) my_app.logger.info(logText) print(logText) res = CibilSummaryDataUpdateService.updateSanctionedSummaryAndOverallOpenedClosedLoans(sanctioned_amt_details_summary,reference_number,los_id,cibil_type,output_type) logText = str(res) +' INSERTED' my_app.logger.info(logText) print(logText) return sanctioned_amt_details_summary def prepareSkeletons(month_buckets,type): # print('prepareSkeletons') return_skelton = {} if type == 2: # sanction for month_bucket in month_buckets: return_skelton[month_bucket['name']] = {'amt':0,'count':0,'openamt':0,'opencount':0,'closeamt':0,'closecount':0} return_skelton['total_amt'] = 0 return_skelton['total_count'] = 0 return_skelton['open_total_amt'] = 0 return_skelton['open_total_count'] = 0 return_skelton['closed_total_amt'] = 0 return_skelton['closed_total_count'] = 0 elif type == 1:#enquiry for month_bucket in month_buckets: return_skelton[month_bucket['name']] = {'amt':0,'count':0} return_skelton['total_amt'] = 0 return_skelton['total_count'] = 0 # print(return_skelton) return return_skelton # def doCIBILEnquirySummary(enquiry_details, type): def doCIBILEnquirySummary(los_id,reference_number,cibil_type,output_type): logText = 'doCIBILEnquirySummary - LOSID - '+los_id+', '+'REFNO - '+reference_number+', '+'CTYPE - '+cibil_type+', O/P TYPE - '+str(output_type) my_app.logger.info(logText) print(logText) enquiry_amt_details_summary = {} enquiry_details = [] month_bucket_master = CibilDataService.getMonthBucketMaster('ENQ_SUM')#ENQ_SUM = enquiry summary bucket master enquiry_skeleton = CibilBusinessOperationService.prepareSkeletons(month_bucket_master,type = 1)# 1 = enquiry if output_type == 1 : enquiry_details = CibilDataService.getEnquriyDetails(reference_number,los_id,cibil_type) elif output_type == 2 : enquiry_details = CibilDataService.getUniqueEnquriyDetails(los_id) logText = 'TOTAL '+ str(len(enquiry_details))+' ENQURIES FOUND' my_app.logger.info(logText) print(logText) # return enquiry_details # print(month_bucket_master) # print(enquiry_skeleton) # print(enquiry_details) # raise Exception('dssd') total_enquiry_count_for_log = 0 #transform/filter raw consumer enquiry data to necessary data for enquiry_detail in enquiry_details: creditFacility = enquiry_detail['EnquiryPurpose'].strip() SanctionedDate = enquiry_detail['DateOfEnquiry'] SanctionedAmount = float(enquiry_detail['EnquiryAmount']) month_bucket_index = enquiry_detail['month_bucket_index'] # month = (datetime.strptime((SanctionedDate.split(" ")[0]), "%Y-%m-%d")).month # month_bucket = '1' if month == 1 else '2-3' if month >= 2 and month <= 3 else '4-6' if month >=4 and month <= 6 else '7-12' if month >= 7 and month <= 12 else '13-24' if month >= 13 and month <= 24 else '25-36' if month >= 25 and month <= 36 else '>36' if month > 36 else 'None' month_bucket = DpdCalculationService.dpdFindDaysBucket(month_bucket_master,month_bucket_index) # print("") # print("DATA - ",creditFacility,'-',SanctionedDate,'-',SanctionedAmount,'-',month,'-',month_bucket) # print("") #check current credit facility exists in enquiry_amt_details_summary if creditFacility not in enquiry_amt_details_summary.keys(): # print("FIRST TIME SKELETON ADDED-") enquiry_amt_details_summary[ creditFacility ] = copy.deepcopy(enquiry_skeleton) # print("BEFORE ADDED***********") # print(CibilBusinessOperationService.enquiry_amt_details_summary) enquiry_amt_details_summary[creditFacility][month_bucket]['amt'] += SanctionedAmount enquiry_amt_details_summary[creditFacility][month_bucket]['count'] += 1 enquiry_amt_details_summary[creditFacility]['total_count'] += 1 enquiry_amt_details_summary[creditFacility]['total_amt'] += SanctionedAmount total_enquiry_count_for_log += 1 logText = str(total_enquiry_count_for_log) +' ENQURIES SUMMARIZED AS ' + str(len(enquiry_amt_details_summary)) my_app.logger.info(logText) print(logText) #update data res = CibilSummaryDataUpdateService.updateEnquirySummaryData(enquiry_amt_details_summary,reference_number,los_id,cibil_type,output_type) logText = str(res) +' INSERTED' my_app.logger.info(logText) print(logText) return res #not in use not in use not in use not in use def getUniqueCreditFacilitySummary(creditFacility): print('UniqueCreditFacilitySummary-',creditFacility['AmountOverdue'],creditFacility['CurrentBalance'],creditFacility['DateOpenedDisbursed'],type(creditFacility['CurrentBalance'])) CibilBusinessOperationService.unique_credit_facility_summary['total_count'] += 1 if creditFacility['AmountOverdue'] != 'None' : CibilBusinessOperationService.unique_credit_facility_summary['overdue_count'] += 1 CibilBusinessOperationService.unique_credit_facility_summary['overdue_balance'] += float((creditFacility['AmountOverdue'])) if creditFacility['AmountOverdue'] != 'None' else 0 else: CibilBusinessOperationService.unique_credit_facility_summary['nil_overdue'] +=1 if float(creditFacility['CurrentBalance']) == float(0) or creditFacility['CurrentBalance'] == "": CibilBusinessOperationService.unique_credit_facility_summary['zero_bal_count'] +=1 else: CibilBusinessOperationService.unique_credit_facility_summary['current_balance'] += float(creditFacility['CurrentBalance']) if creditFacility['CurrentBalance'] !='None' else 0 if CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] == "": CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] = creditFacility['DateOpenedDisbursed'] if creditFacility['DateOpenedDisbursed'] != 'None' else "" else: CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] = creditFacility['DateOpenedDisbursed'] if CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] > creditFacility['DateOpenedDisbursed'] else CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] if CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] == "": CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] = creditFacility['DateOpenedDisbursed'] if creditFacility['DateOpenedDisbursed'] != 'None' else "" else: CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] = CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] if CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] > creditFacility['DateOpenedDisbursed'] else creditFacility['DateOpenedDisbursed'] ###################################END OF CONSUMER CIBIL BUSINESS SERVICE################################################## ###################################END OF CONSUMER CIBIL BUSINESS SERVICE################################################## ###################################END OF CONSUMER CIBIL BUSINESS SERVICE################################################## ###################################START OF COMMERCIAL CIBIL BUSINESS SERVICE######################################### ###################################START OF COMMERCIAL CIBIL BUSINESS SERVICE######################################### ###################################START OF COMMERCIAL CIBIL BUSINESS SERVICE######################################### ###################################NOT IN USE * NOT IN USE * NOT IN USE * NOT IN USE######################################### #http://127.0.0.1:5000/api/cibil?application_reference_number=202201111930347000000 def doCommercialCIBILOperations(application_reference_number,los_id): print('CommercialCIBILOperations') cibil_raw_data = CibilMasterDataService.getCIBILRawData(reference_number=application_reference_number,los_id=los_id,type = 2) # cibil_raw_data = SampleDataProviderService.getCIBILRawData(reference_number=application_reference_number,type = 2) CibilBusinessOperationService.dpd_month_bucket_master = cibil_raw_data['masters']['dpd_month_buckets'] CibilBusinessOperationService.sanction_summary_month_buckets = cibil_raw_data['masters']['sanction_summary_month_buckets'] CibilBusinessOperationService.enquiry_summary_month_buckets = cibil_raw_data['masters']['enquiry_summary_month_buckets'] CibilBusinessOperationService.prepareSkeletons() # print(cibil_raw_data['commercial_cibil_rawdata']['com_credit_facility_current_details']) # raise Exception('asknalk') # print(cibil_raw_data['commercial_cibil_rawdata']['com_dpd_details']) CibilBusinessOperationService.prepareEnquirySummary(cibil_raw_data['commercial_cibil_rawdata']['com_enquiry_details'],type = 2)#2 = commercials if len(cibil_raw_data['commercial_cibil_rawdata']['com_credit_facility_current_details']) > 0: print('####COMMERCIAL LOGIC STARTED#######') for idx,row in enumerate(cibil_raw_data['commercial_cibil_rawdata']['com_credit_facility_current_details']): # if idx == 2: # print('#########################MAINBREAK') # break CustomerName = cibil_raw_data['commercial_cibil_rawdata']['com_borrower_details'][0]['EnqInfoBorrowerName'] if cibil_raw_data['commercial_cibil_rawdata']['com_borrower_details'][0].get('EnqInfoBorrowerName') is not None else 'NA' AccountType = row['CreditFacilityCDcfType'].strip() ReportedandCertifiedDate = row['CreditFacilityCDLstReportedDate'] OpendDate = (row['CreditFacilityCDDatesSanctionedDt']) if row['CreditFacilityCDDatesSanctionedDt'] != "" and row['CreditFacilityCDDatesSanctionedDt'] != None and row['CreditFacilityCDDatesSanctionedDt'] != 'None' else None SanctionedAmount = (row['CreditFacilityCDAmtSanctionedAmt']) if row['CreditFacilityCDAmtSanctionedAmt'] != "" and row['CreditFacilityCDAmtSanctionedAmt'] != None and row['CreditFacilityCDAmtSanctionedAmt'] != 'None' else 0 CurrentBalance = row['CreditFacilityCDAmtoutstandingBalance'] EMIAmount = (row['CreditFacilityCDAmtinstallmentAmt']) if row['CreditFacilityCDAmtinstallmentAmt'] != "" and row['CreditFacilityCDAmtinstallmentAmt'] != None and row['CreditFacilityCDAmtinstallmentAmt'] != 'None' else 0 row['CreditFacilityCDAmtinstallmentAmt'] OverdueAmount = (row['CreditFacilityCDAmtOverdue']) if row['CreditFacilityCDAmtOverdue'] != "" and row['CreditFacilityCDAmtOverdue'] != None and row['CreditFacilityCDAmtOverdue'] != 'None' else 0 RepaymentTenure = (row['CreditFacilityCDODTenure']) if row['CreditFacilityCDODTenure'] != "" and row['CreditFacilityCDODTenure'] != None and row['CreditFacilityCDODTenure'] != 'None' else 0 Status = row['CreditFacilityCDStatus'] Ownership = 'NA' # CurrentDPD = row['CreditFacilityCDAssetCDPDueDpd'] dpd_result = DpdCalculationService.commercialDpdCalculation(row['CreditFacilityCDcfSrNo'],cibil_raw_data['commercial_cibil_rawdata']['com_dpd_details'],CibilBusinessOperationService.dpd_month_bucket_master) CurrentDPD = dpd_result['currentDPD'] DPD0_6 = dpd_result['DPD0_6'] DPD7_12 = dpd_result['DPD7_12'] DPD13_24 = dpd_result['DPD13_24'] DPD25_36 = dpd_result['DPD25_36'] # LatestDPD = 0 # DPD0_6 = 0 # DPD7_12 = 0 # DPD13_24 = 0 # DPD25_36 = 0 # call sansactioned amt transformation function # for calculate sanctioned amt summary sanctioned_amt_detail = CibilBusinessOperationService.getSanctionedAmtDetails({'AccountType':AccountType,'DateOpenedDisbursed':row['CreditFacilityCDDatesSanctionedDt'],'CurrentBalance':CurrentBalance,'HighCreditSanctionedAmount':SanctionedAmount}) CibilBusinessOperationService.mergeSanctionAmtDetails(sanctioned_amt_detail) # end of call sansactioned amt transformation function # temp = {'los_id':'MW12345','ref_no':application_reference_number,"consumer_name":CustomerName,"account_type":AccountType,"reported_and_certified_date":ReportedandCertifiedDate,"opened_date":OpendDate,"sanctioned_amount":SanctionedAmount,"current_balance":CurrentBalance,"emi_amount":EMIAmount,"overdue_amount":OverdueAmount,"repayment_tenure":RepaymentTenure,"status":Status,"ownership":Ownership,"current_dpd":CurrentDPD,'dpd0_6':DPD0_6,'dpd7_12':DPD7_12,'dpd13_24':DPD25_36,'dpd25_36':DPD25_36,'is_active':1,'createdAt':datetime.now().strftime("%Y-%m-%d %H:%M:%S"),'updatedAt':datetime.now().strftime("%Y-%m-%d %H:%M:%S"),'createdby':1,'updatedby':1} temp = Out_active_and_closed_loans_details(losid=los_id,ref_no=application_reference_number,consumer_name=CustomerName,account_type=AccountType,reported_and_certified_date=ReportedandCertifiedDate,opened_date=OpendDate,sanctioned_amount=SanctionedAmount,current_balance=CurrentBalance,emi_amount=EMIAmount,overdue_amount=OverdueAmount,repayment_tenure=RepaymentTenure,status=Status,ownership=Ownership,current_dpd=CurrentDPD,highest_dpd_month_wise_bucket_or_count_0_to_6=DPD0_6,highest_dpd_month_wise_bucket_or_count_07_to_12=DPD7_12,highest_dpd_month_wise_bucket_or_count_13_to_24=DPD13_24,highest_dpd_month_wise_bucket_or_count_25_to_36=DPD25_36,is_active=1,createdAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),updatedAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),createdby=1,updatedby=1) # print(temp); # raise Exception('tata') # temp = {'los_id':'MW12345'} # if CurrentBalance != 0: CibilBusinessOperationService.live_and_closed_account_summary.append(temp); # print('idx',idx) # raise Exception('manual stop') CibilSummaryDataUpdateService.updateActiveOrClosedLoans(CibilBusinessOperationService.live_and_closed_account_summary) CibilSummaryDataUpdateService.updateEnquirySummaryData(CibilBusinessOperationService.enquiry_amt_details_summary,application_reference_number,los_id) CibilSummaryDataUpdateService.updateSanctionedSummaryAndOverallOpenedClosedLoans(CibilBusinessOperationService.sanctioned_amt_details_summary,application_reference_number,los_id) return (CibilBusinessOperationService.sanctioned_amt_details_summary) # return cibil_raw_data