Example #1
0
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)
Example #2
0
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)
Example #3
0
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
Example #4
0
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)
Example #5
0
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)
Example #6
0
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 ")
Example #7
0
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)