165 lines
9.3 KiB
Python
165 lines
9.3 KiB
Python
# from services.dbservice import DbService
|
|
from sqlalchemy.sql import text,func
|
|
from app import db
|
|
from flask import jsonify
|
|
import decimal, datetime, json
|
|
|
|
# from Models.con_account_transaction_detail import Con_account_transaction_detail
|
|
# from Models.con_dpd_transaction_detail import Con_dpd_transaction_detail
|
|
# from Models.con_enquiry_detail import Con_enquiry_detail
|
|
from Models.month_bucket_master import Month_bucket_master
|
|
from Models.intermediate_tables import In_borrower_detail,In_credit_facility,In_dpd_transaction_detail,In_enquiry_detail
|
|
|
|
|
|
class CibilDataService:
|
|
|
|
|
|
|
|
# start Collecting Consumer CIBIL RawData of single member/applicant
|
|
# report by @param : member_reference_number
|
|
def getBorrowerDetails(reference_number,los_id,cibil_type):
|
|
|
|
# records = db.engine.execute(text('SELECT id ,BDeatailsID ,CONVERT(NVARCHAR, MemberReferenceNumber) as MemberReferenceNumber ,EnquiryMemberUserID ,SubjectReturnCode ,CONVERT(NVARCHAR, EnquiryControlNumber) as EnquiryControlNumber ,CONVERT(VARCHAR,DateTimeProcessed) as DateTimeProcessed ,ConsumerNameField1 ,ConsumerNameField2 ,ConsumerNameField3 ,ConsumerNameField4 ,ConsumerNameField5 ,CONVERT(VARCHAR,DateofBirth) as DateofBirth ,Gender ,DateofEntryforErrorCode ,ErrorSegmentTag ,ErrorCode ,DateofEntryforCIBILRemarksCode ,CIBILRemarks ,DateofEntryforErrorDisputeRemarksCode ,ErrorDisputeRemarksCode ,ErrorDisputeRemarksCode2 ,AccountType ,CONVERT(VARCHAR,DateReportedAndCertified) as DateReportedAndCertified ,Occupation ,CONVERT(NVARCHAR, Income) as Income ,NetGrossIncomeIndicator ,MonthlyAnnualIncomeIndicator ,DateOfEntryforErrorCode1 ,ErrorCode1 ,DateOfEntryForCIBILRemarksCode1 ,CIBILRemarksCode ,DateOfEntryForErrorDisputeRemarksCode1 ,ErrorDisputeRemarksCode1 ,ATErrorDisputeRemarksCode1 ,ATErrorDisputeRemarksCode2 ,DateOfEntry ,DisputeRemarksLine ,EMailID ,AccountNumber ,CONVERT(VARCHAR,createdAt) as createdAt ,CONVERT(VARCHAR,updatedAt) as updatedAt ,createdby ,updatedby FROM con_borrower_detail where MemberReferenceNumber = :member_reference_number'),{'member_reference_number':member_reference_number})
|
|
# records = records.fetchall()
|
|
# print(len(records))
|
|
records = In_borrower_detail.query.filter_by(ReferenceNumber = reference_number,losid = los_id,cibil_type = cibil_type).all()
|
|
# print(len(records))
|
|
# print((records))
|
|
data = []
|
|
# print(field_names)
|
|
for idx,i in enumerate(records):
|
|
# print('###### START #######')
|
|
# print((i))
|
|
# print(idx,str(i.MemberReferenceNumber))
|
|
# records[idx].MemberReferenceNumber = str(i.MemberReferenceNumber)
|
|
# print('**************************************')
|
|
row_as_dict = {column: str(getattr(i, column)) for column in i.__table__.c.keys()}
|
|
# print('###### END #######')
|
|
data.append(row_as_dict)
|
|
|
|
# print(result)
|
|
|
|
# exit()
|
|
return data
|
|
|
|
|
|
|
|
|
|
def getCreditFacilityDetails(reference_number,los_id,cibil_type):
|
|
# https://flask-sqlalchemy.palletsprojects.com/en/2.x/queries/
|
|
|
|
# records = Con_account_transaction_detail.query.all()
|
|
records = In_credit_facility.query.filter_by(ReferenceNumber = reference_number,losid = los_id,cibil_type = cibil_type).all()
|
|
# records = In_credit_facility.query.filter_by(losid = los_id).all()
|
|
temp = []
|
|
# print(records)
|
|
for record in records:
|
|
# print(record.id,'---',record.AccountTranDetailsID)
|
|
row_as_dict = {column: str(getattr(record, column)) for column in record.__table__.c.keys()}
|
|
# print(row_as_dict)
|
|
# t = CibilConsumerDataService.getConsumerDPDDetails(member_reference_number,row_as_dict['AccountTranDetailsID'
|
|
# ])
|
|
# row_as_dict['dpd'] = t
|
|
temp.append(row_as_dict)
|
|
|
|
return temp
|
|
|
|
def getUniqueCreditFacilityDetails(los_id):
|
|
# https://flask-sqlalchemy.palletsprojects.com/en/2.x/queries/
|
|
|
|
# records = Con_account_transaction_detail.query.all() func.max(In_credit_facility.grp_str)
|
|
# records = db.session.query(In_credit_facility.losid, db.func.max(In_credit_facility.losid).label('active_machines')).group_by(In_credit_facility.losid).all()
|
|
records = db.session.query(db.func.max(In_credit_facility.losid).label('losid'),db.func.max(In_credit_facility.AccountType).label('AccountType'),db.func.max(In_credit_facility.month_bucket_index).label('month_bucket_index'),db.func.max(In_credit_facility.DateOpenedDisbursed).label('DateOpenedDisbursed'),db.func.max(In_credit_facility.DateClosed).label('DateClosed'),db.func.max(In_credit_facility.CurrentBalance).label('CurrentBalance'),db.func.max(In_credit_facility.HighCreditSanctionedAmount).label('HighCreditSanctionedAmount'),db.func.max(In_credit_facility.CreditLimit).label('CreditLimit'),func.max(In_credit_facility.grp_str).label('grp_str')).filter(In_credit_facility.losid == los_id).group_by(In_credit_facility.grp_str).all()
|
|
|
|
return json.loads(json.dumps([dict(r) for r in records], default=CibilDataService.alchemyencoder))
|
|
# records = In_credit_facility.query(func.max(In_credit_facility.grp_str)).filter_by(losid = los_id).all()
|
|
temp = []
|
|
# print(type(records))
|
|
# print(len(records))
|
|
for record in records:
|
|
# print('---',record.active_machines)
|
|
# print(type(record),'--',(record))
|
|
# print(dict(record),'--')
|
|
# row_as_dict = {column: str(getattr(record, column.name)) for column in record.__table__.columns}
|
|
# row_as_dict = record._mapping
|
|
# print(jsonify(json_list = record))
|
|
|
|
# t = CibilConsumerDataService.getConsumerDPDDetails(member_reference_number,row_as_dict['AccountTranDetailsID'
|
|
# ])
|
|
# row_as_dict['dpd'] = t
|
|
temp.append(dict(record))
|
|
|
|
return temp
|
|
|
|
|
|
def getDPDDetails(reference_number,los_id,cibil_type):
|
|
|
|
|
|
records = In_dpd_transaction_detail.query.filter_by(ReferenceNumber = reference_number,cibil_type = cibil_type).order_by(In_dpd_transaction_detail.AccountTranDetailsID.desc(),In_dpd_transaction_detail.StartDate.desc()).all()
|
|
# records = In_dpd_transaction_detail.query.filter_by(ReferenceNumber = reference_number,losid = los_id,cibil_type = cibil_type).order_by(In_dpd_transaction_detail.AccountTranDetailsID.desc(),In_dpd_transaction_detail.StartDate.desc()).all()
|
|
temp = []
|
|
# print(records)
|
|
for record in records:
|
|
# print(record.id,'---',record.AccountTranDetailsID)
|
|
row_as_dict = {column: str(getattr(record, column)) for column in record.__table__.c.keys()}
|
|
# print(row_as_dict)
|
|
temp.append(row_as_dict)
|
|
|
|
return temp
|
|
|
|
|
|
def getEnquriyDetails(reference_number,los_id,cibil_type):
|
|
|
|
# records = Con_dpd_transaction_detail.query.filter_by(MemberRefNo = member_reference_number,AccountTranDetailsID = account_tran_details_id).order_by(Con_dpd_transaction_detail.StartDate.desc()).all()
|
|
records = In_enquiry_detail.query.filter_by(ReferenceNumber = reference_number,losid = los_id,cibil_type = cibil_type).order_by(In_enquiry_detail.DateOfEnquiry.desc()).all()
|
|
temp = []
|
|
# print(records)
|
|
for record in records:
|
|
# print(record.id,'---',record.AccountTranDetailsID)
|
|
row_as_dict = {column: str(getattr(record, column)) for column in record.__table__.c.keys()}
|
|
# print(row_as_dict)
|
|
temp.append(row_as_dict)
|
|
|
|
return temp
|
|
|
|
def getUniqueEnquriyDetails(los_id):
|
|
# print('getUniqueEnquriyDetails' + los_id)
|
|
# records = Con_dpd_transaction_detail.query.filter_by(MemberRefNo = member_reference_number,AccountTranDetailsID = account_tran_details_id).order_by(Con_dpd_transaction_detail.StartDate.desc()).all()
|
|
records = In_enquiry_detail.query.filter_by(losid = los_id).order_by(In_enquiry_detail.DateOfEnquiry.desc()).all()
|
|
temp = []
|
|
# print(records)
|
|
for record in records:
|
|
# print(record.id,'---',record.AccountTranDetailsID)
|
|
row_as_dict = {column: str(getattr(record, column)) for column in record.__table__.c.keys()}
|
|
# print(row_as_dict)
|
|
temp.append(row_as_dict)
|
|
|
|
return temp
|
|
|
|
|
|
def getMonthBucketMaster(mtype=None):
|
|
|
|
# records = Con_dpd_transaction_detail.query.filter_by(MemberRefNo = member_reference_number,AccountTranDetailsID = account_tran_details_id).order_by(Con_dpd_transaction_detail.StartDate.desc()).all()
|
|
records = Month_bucket_master.query.filter_by(type = (mtype),isactive = 1).order_by(Month_bucket_master.id.asc()).all()
|
|
temp = []
|
|
# print(records)
|
|
for record in records:
|
|
# print(record.id,'---',record.AccountTranDetailsID)
|
|
row_as_dict = {column: str(getattr(record, column)) for column in record.__table__.c.keys()}
|
|
# print(row_as_dict)
|
|
temp.append(row_as_dict)
|
|
|
|
return temp
|
|
|
|
def alchemyencoder(obj):
|
|
# """JSON encoder function for SQLAlchemy special classes."""
|
|
if isinstance(obj, datetime.date):
|
|
return obj.isoformat()
|
|
elif isinstance(obj, decimal.Decimal):
|
|
return float(obj)
|
|
|
|
|
|
|
|
|
|
|