def index(request): if request.method == 'GET': try: type='' user_name='anhphongkiem' debt_owner=User.objects.get(username=user_name) lsCusomer=Customer.objects(debt_owner=debt_owner.id) lsCusDebit = CusDebit.objects(status=1).order_by('-create_date,loan_date') lsCusDebitDetail =CusDebitDetail.objects(status=1).order_by('-create_date,cus_debit_id') if 'type' in request.GET: if request.GET['type']=='chovay': type = 'chovay' elif request.GET['type']=='trano': type = 'trano' except Exception as ex: print(ex) finally: context = {'type':type,'lsCusomer':lsCusomer,'lsCusDebit':lsCusDebit,'lsCusDebitDetail':lsCusDebitDetail} return render(request,'myapp/d-CustomerDebitDetail.html', context) elif request.method == 'POST': if request.POST['type'] == "cusLoan": try: # cus_id = request.POST['hd_cus_id'] # cusDebit_debit =float(request.POST['hd_cus_amount']) # cusDebit_loan_date=datetime.strptime(request.POST['cus_loan_date'],'%m/%d/%Y') # cusDebit_rate = float(request.POST['hd_cus_rate']) # cusDebit_cycle = float(request.POST['cus_cycle']) # cus=Customer.objects.get(id=cus_id) # # loan_type = LoanType.objects.get(code='LN',unit='D') # # createcusdebit(cus,cusDebit_loan_date,cusDebit_debit,cusDebit_rate,cusDebit_cycle,loan_type) close_cycle_all() print('add cusdebit ') type = "chovay" user_name='anhphongkiem' debt_owner=User.objects.get(username=user_name) lsCusomer=Customer.objects(debt_owner=debt_owner.id) lsCusDebit = CusDebit.objects(status=1).order_by('loan_date') lsCusDebitDetail =CusDebitDetail.objects(status=1).order_by('cus_debit_id') except Exception as ex: print(ex) finally: context = {'type':type,'lsCusomer':lsCusomer,'lsCusDebit':lsCusDebit,'lsCusDebitDetail':lsCusDebitDetail} return render(request,'myapp/d-CustomerDebitDetail.html', context)
def updateCusDebitDetail(vCus_debit,vIndex,vStart_cycle,vNew_rate): try: start_cycle = vStart_cycle vCus_debit_id = vCus_debit.id lscdd = CusDebitDetail.objects( cus_debit_id = vCus_debit_id ,index__gt = vIndex ).order_by('index') if len(lscdd) > 0 : for temp in lscdd : print(temp.index) cdd = temp cdd.rate = vNew_rate cdd.start_cycle = start_cycle cdd.amount = (cdd.start_cycle * cdd.days * cdd.rate) / 1000000 cdd.end_cycle = cdd.start_cycle + cdd.amount - cdd.payment cdd.save() start_cycle = cdd.end_cycle cus_debit_detail = CusDebitDetail.objects.get( cus_debit_id = vCus_debit_id ,flag = 1 ) vCus_debit.total_debit = cus_debit_detail.end_cycle vCus_debit.total_debit_trailer = cus_debit_detail.end_cycle vCus_debit.save() except Exception as ex: print("updateCusDebitDetail: " + ex)
def getCustomerDebitDetail(): listcus = getCustomerInfo() allcustomerdebitdetail = CusDebitDetail.objects() cusdebitdetailafterfilter = [] for l in listcus: for cdd in allcustomerdebitdetail: if(cdd.cus_id == l.cus_id ): cusdebitdetailafterfilter.append(cdd) return cusdebitdetailafterfilter
def insert_missing_debit_detail_trailer(vCus, vCus_debit, vFrom_date, today, vStart_cycle, vRate): try: lscdd = CusDebitDetail.objects(cus_id=vCus.id,cus_debit_id=vCus_debit.id, to_date__lt=today,flag = 0).order_by('index') cus_debit_detail = CusDebitDetail.objects.get(cus_id=vCus.id,cus_debit_id=vCus_debit.id,flag = 1) lscddTemp = CusDebitDetail.objects(cus_id=vCus.id,cus_debit_id=vCus_debit.id).order_by('index') if len(lscdd) > 0 : for cdd in lscdd : cdtt = CusDebitDetailTrailer() cdtt.cus_id = cdd.cus_id cdtt.cus_debit_id = cdd.cus_debit_id cdtt.from_date = cdd.from_date cdtt.to_date = cdd.to_date cdtt.rate = cdd.rate cdtt.start_cycle = cdd.start_cycle cdtt.amount = cdd.amount cdtt.payment = cdd.payment cdtt.end_cycle = cdd.end_cycle cdtt.debit = cdd.debit cdtt.status = cdd.status cdtt.days = cdd.days cdtt.create_date = cdd.create_date cdtt.flag = cdd.flag cdtt.index = cdd.index cdtt.save() if (len(lscdd)+1) == len(lscddTemp) : insert_debit_detail_trailer(vCus, vCus_debit, cus_debit_detail.from_date, today, cus_debit_detail.start_cycle, cus_debit_detail.rate,cus_debit_detail.index) else: cus_debit_detail__ = CusDebitDetail.objects.get(cus_id=vCus.id,cus_debit_id=vCus_debit.id,index = len(lscdd),flag = 0) insert_debit_detail_trailer(vCus, vCus_debit, cus_debit_detail__.to_date + relativedelta(days=+1), today, cus_debit_detail__.end_cycle, cus_debit_detail__.rate,len(lscdd)+1) else: insert_debit_detail_trailer(vCus, vCus_debit, vFrom_date, today, vStart_cycle, cus_debit_detail.rate,1) except Exception as ex: print(ex)
def analyze_payment(vCus_id,vcus_debit_id,vAmount,vPayment_id): try: vToday = datetime.now().strftime("%y-%m-%d-%H-%M-%S") vRemainAmount = vAmount lscdt = CusDebitDetail.objects(cus_debit_id = vcus_debit_id,status=1).order_by('loan_date') pdt = PaymentDetail.objects() for cd in lscdt: payment_amount = 0.00 current_debit = cd.end_cycle if vRemainAmount > 0: if cd.end_cycle >= vAmount: payment_amount = vAmount cd.payment = payment_amount remain_debit = cd.end_cycle - payment_amount cd.end_cycle = remain_debit vRemainAmount = 0.00 else: payment_amount = cd.end_cycle cd.payment = payment_amount remain_debit = cd.end_cycle - payment_amount cd.end_cycle = remain_debit vRemainAmount = vAmount - payment_amount #Insert into payment detail pdt.payment_id = vPayment_id pdt.cus_debit_id = vcus_debit_id pdt.cus_id = vCus_id pdt.create_date= vToday pdt.debit = current_debit pdt.payment = payment_amount pdt.remain = pdt.debit - pdt.payment pdt.status = 1 pdt.save() #End for if vRemainAmount > 0: analyze_payment(vCus_id,vcus_debit_id,vRemainAmount,vPayment_id) except Exception as ex: print(ex)
def createMakePayment(vCus_id,vPayment_date,vPayment,loan_type): cus=Customer.objects.get(id=vCus_id) lsCusDebit =CusDebit.objects(cus_id = cus.id,status = 1).order_by('loan_date') createEstimatePayment(vCus_id,vPayment_date,vPayment) # create new a payment p = Payment() p.cus_id = cus p.pay_date = vPayment_date p.amount = vPayment p.status = 1 p.save() for cusDebit in lsCusDebit : cs=cusDebit if cs.total_debit_trailer > 0 and cs.total_debit_trailer < cs.total_debit : lsCus_debit_detail = CusDebitDetail.objects(cus_debit_id = cs.id) for c in lsCus_debit_detail : c.delete() lsCus_debit_detail_trailer = CusDebitDetailTrailer.objects(cus_debit_id = cs.id) for Cus_debit_detail_trailer in lsCus_debit_detail_trailer: cdt = Cus_debit_detail_trailer cd = CusDebitDetail() cd.cus_id = cdt.cus_id cd.cus_debit_id = cdt.cus_debit_id cd.from_date= cdt.from_date cd.to_date= cdt.to_date cd.rate = cdt.rate cd.start_cycle = cdt.start_cycle cd.amount = cdt.amount cd.payment = cdt.payment cd.end_cycle = cdt.end_cycle cd.debit = cdt.debit cd.status = cdt.status cd.days = cdt.days cd.create_date= cdt.create_date cd.flag = cdt.flag cd.index = cdt.index cd.save() cus_debit_detail_trailer = CusDebitDetailTrailer.objects.get(cus_debit_id = cs.id,flag = 1) cs.total_debit =cs.total_debit_trailer cs.status = 0 cs.payment = cus_debit_detail_trailer.payment cs.last_close_date = cus_debit_detail_trailer.to_date cs.save() #insert payment_detail pd = PaymentDetail() pd.payment_id = p pd.cus_debit_id = cs pd.cus_id = cus pd.debit = cus_debit_detail_trailer.payment pd.payment = cus_debit_detail_trailer.payment pd.cus_debit_detail_id = cus_debit_detail_trailer pd.status = 1 pd.save() #insert record missing createcusdebit(cus,cs.last_close_date,cs.total_debit,cs.rate,cs.cycle,loan_type,'') elif cs.total_debit_trailer == 0 : print("update status=0") cus_debit_detail_trailer = CusDebitDetailTrailer.objects.get(cus_debit_id = cs.id,flag = 1) cs.total_debit =cs.total_debit_trailer cs.status = 0 cs.payment = cus_debit_detail_trailer.payment cs.last_close_date = cus_debit_detail_trailer.to_date cs.save() #insert payment_detail pd = PaymentDetail() pd.payment_id = p pd.cus_debit_id = cs pd.cus_id = cus pb.debit = cus_debit_detail_trailer.payment pd.payment = cus_debit_detail_trailer.payment pb.cus_debit_detail_id = cus_debit_detail_trailer pd.status = 1 pd.save() elif cs.total_debit_trailer == cs.total_debit : print("no update ")
def insert_missing_debit_detail_test1(vCus,vCus_debit,vFrom_date,vStart_cycle,vRate,index,vCus_debit_detail): try: vToday = datetime.strptime(str(date.today()),'%Y-%m-%d') vTodate = vFrom_date + relativedelta(days=+vCus_debit.cycle) vTodate =vTodate + relativedelta(days=-1) vStart_cycle_temp=vStart_cycle vdiff=((vToday -vFrom_date).days)/vCus_debit.cycle vdiff_round=int(vdiff) index = index print(vdiff_round) while vdiff_round > 0: print(str(vdiff_round)) cdt = CusDebitDetail() cdt.cus_id = vCus cdt.cus_debit_id = vCus_debit cdt.from_date= vFrom_date cdt.rate = vRate cdt.start_cycle = vStart_cycle_temp cdt.amount = (vStart_cycle_temp*vCus_debit.cycle*cdt.rate)/1000000 cdt.to_date= vTodate cdt.payment = 0 cdt.end_cycle = cdt.start_cycle + cdt.amount - cdt.payment cdt.debit = 0 cdt.status = 1 cdt.days = float(str((cdt.to_date -cdt.from_date).days))+1 cdt.index =index #--------------------------------------------------------------------- # Assign for next cycle vFrom_date = cdt.to_date + relativedelta(days=+1) vTodate = vFrom_date + relativedelta(days=+vCus_debit.cycle) vTodate =vTodate + relativedelta(days=-1) vStart_cycle_temp = cdt.end_cycle index += 1 vdiff_round -= 1 #--------------------------------------------------------------------- cdt.save() if (((vToday -vFrom_date).days)%vCus_debit.cycle) >= 0 : cdt = CusDebitDetail() cdt.cus_id = vCus cdt.cus_debit_id = vCus_debit cdt.from_date= vFrom_date cdt.rate = vRate cdt.start_cycle = vStart_cycle_temp cdt.amount = (vStart_cycle_temp*(((vToday -vFrom_date).days)%vCus_debit.cycle +1)*cdt.rate)/1000000 cdt.to_date = vToday cdt.payment = 0 cdt.end_cycle = cdt.start_cycle + cdt.amount - cdt.payment cdt.debit = 0 cdt.status = 1 cdt.days = float(str((cdt.to_date -cdt.from_date).days))+1 cdt.flag = 1 cdt.index= index #--------------------------------------------------------------------- # Assign for next cycle vFrom_date = cdt.to_date vTodate = vFrom_date + relativedelta(months=+1) vStart_cycle_temp = cdt.end_cycle #--------------------------------------------------------------------- cdt.save() #total debit and last_close_date vCus_debit.total_debit = cdt.end_cycle vCus_debit.total_debit_trailer = cdt.end_cycle vCus_debit.last_close_date = cdt.to_date vCus_debit.save() vCus_debit_detail.delete() except Exception as ex: print(ex)