# ১৪.৮ : পে লোন আর লোন লিস্ট ভিউ

আজকে আমরা loan pay ভিউ আর লোন লিস্ট ভিউ নিয়ে কাজ করবো।&#x20;

প্রথমে আমরা loan pay নিয়ে কাজ করবো। এখন ইউজার তার লোন লিস্ট থেকে একটা পার্টিকুলার লোন এর টাকা পে করতে পারবে। যখনি সে পে লোন এ ক্লিক করবে ওই লোন টা পে হবে। অর্থাৎ প্রত্যেকটা লোন এর একটা আইডি থাকবে যেটা দিয়ে ওই পার্টিকুলার লোন কে খুঁজে পাবো। যেহেতু loan id লাগবে সো আমাদেরকে get ফাংশন ইউজ করতে হবে class based ভিউ তে। Loan আইডি দিয়ে transaction কে গেট করে নিবো get\_object\_or\_404 ফাংশন দিয়ে। তারপর loan amount যদি ইউজার ব্যালান্স থেকে বেশি হয় তাইলে সে ওটা পে করতে পারবে না। আর balance থেকে যদি loan amount কম হয় তাইলে সেটা পে করতে পারবে আর সেটার transaction\_type টা loan paid করে দিবো আর ইউজার কে loan লিস্ট ইউআরএল এ পাঠিয়ে দিবো।

আর লোন লিস্ট ভিউ তে LoginRequiredMixin টা ইনহেরিট করবো সাথে যেহেতু আমরা লোন এর লিস্ট দেখবো সেজন্যে ক্লাস based ভিউ এর list ভিউ ইউজ করবো।&#x20;

এখানে model এর নাম দিবো, template\_name নাম দিবো, আর যেহেতু লোন লিস্ট টা frontend এ লুপ চালাবো সেজন্যে context\_object\_name এ আমরা যে নাম দিবো সেটা frontend এ লুপ চালিয়ে সব লোন দেখতে পাবো।

```python
class PayLoanView(LoginRequiredMixin, View):
    def get(self, request, loan_id):
        loan = get_object_or_404(Transaction, id=loan_id)
        print(loan)
        if loan.loan_approve:
            user_account = loan.account
                # Reduce the loan amount from the user's balance
                # 5000, 500 + 5000 = 5500
                # balance = 3000, loan = 5000
            if loan.amount < user_account.balance:
                user_account.balance -= loan.amount
                loan.balance_after_transaction = user_account.balance
                user_account.save()
                loan.loan_approved = True
                loan.transaction_type = LOAN_PAID
                loan.save()
                return redirect('transactions:loan_list')
            else:
                messages.error(
            self.request,
            f'Loan amount is greater than available balance'
        )

        return redirect('loan_list')


class LoanListView(LoginRequiredMixin,ListView):
    model = Transaction
    template_name = 'transactions/loan_request.html'
    context_object_name = 'loans' # loan list ta ei loans context er moddhe thakbe
    
    def get_queryset(self):
        user_account = self.request.user.account
        queryset = Transaction.objects.filter(account=user_account,transaction_type=3)
        return queryset
```
