১৪.১ : ট্রানজেকশন মডেল তৈরী

আজকে আমরা আমাদের tracsaction related কাজ গুলা যেমন ডিপোজিট করা, withdraw করা, লোন রিকোয়েস্ট করা এই কাজ গুলা করবো। সেজন্যে আমরা transactions নামে একটা অ্যাপ তৈরি করবো।

django-admin startapp transactions

অ্যাপ তৈরির পর সেটিংস এ সেটা কে রেজিষ্টার করে দিবো।

তাইলে আমরা টোটাল ৩ টাইপ transaction করবো

১. ডিপোজিট

২. উইথড্র

৩. লোন নেওয়া

সেটার জন্যে transactions অ্যাপ এর মধ্যেও মডেল লেখার কাজ টা শুরু করবো আমরা।

ফার্স্ট এ আমরা একটা Transaction নামে একটা একটা মডেল তৈরি করবো যেটা ইনহেরিট করবে models.model কে। এখন একজন ইউজার চাইলে savings বা current দুই টাইপ এর অ্যাকাউন্ট খুলতে পারে সেই সাথে সে মাল্টিপল transaction করতে পারে যেমন ডিপোজিট, লোন, উইথড্র সব । সো UserBankAccout এর সাথে one to many relationship বিল্ড করলাম আমরা। এরপর ইউজার কত amount transaction করবে সেটার ফিল্ড দিবো, সেটা দিবো ডেসিমাল ফিল্ড যাতে সে দশমিক ভ্যালু ও ডিপোজিট করতে পারে। Transaction শেষে তার টোটাল ব্যালান্স টা সে যেনো দেখতে পায় সেটার জন্যে balanace_after_transaction রাখবো। এরপর কি টাইপ transaction করতেছে সেটার ফিল্ড দিবো। Timestamp রাখবো অর্থাৎ সে কখন transaction করতেছে সেটার ডেট store করে রাখবো। লোন approve এর একটা ফিল্ড রাখবো যাতে সে লোন রিকোয়েস্ট করলে সেটা ইনিশিয়াল ভাবে false থাকে আর একজন এডমিন যেন সেটাকে approve করে দিতে পারে।

এখন transaction টাইপ এর চয়েজ ফিল্ড লিখবো সেটাকে আমরা constant.py এ রাখবো আর সেটাকে আমাদের models এ ইমপোর্ট করবো।

transcations/models.py

from django.db import models
from accounts.models import UserBankAccount
# Create your models here.
from .constants import TRANSACTION_TYPE

class Transaction(models.Model):
    account = models.ForeignKey(UserBankAccount, related_name = 'transactions', on_delete = models.CASCADE) # ekjon user er multiple transactions hote pare
    
    amount = models.DecimalField(decimal_places=2, max_digits = 12)
    balance_after_transaction = models.DecimalField(decimal_places=2, max_digits = 12)
    transaction_type = models.IntegerField(choices=TRANSACTION_TYPE, null = True)
    timestamp = models.DateTimeField(auto_now_add=True)
    loan_approve = models.BooleanField(default=False) 
    
    class Meta:
        ordering = ['timestamp'] 

transcations/constants.py

DEPOSIT = 1
WITHDRAWAL = 2
LOAN = 3
LOAN_PAID = 4

TRANSACTION_TYPE = (
    (DEPOSIT, 'Deposite'),
    (WITHDRAWAL, 'Withdrawal'),
    (LOAN, 'Loan'),
    (LOAN_PAID, 'Loan Paid'),
    
)

Last updated