smc_cet_cibil_py/services/CibilDataService.py
2023-10-06 16:44:28 +05:30

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)