I have some models for student fees payments and would like to render the following based on the models:
Classes, No of students in each class, Amount Payable in each class, & Total amount paid in each class
My models are as below: for Classroom setup
class ClassArmSetup(models.Model):
SECTION = (
('Primary', 'Primary'),
('Secondary', 'Secondary'),
('Creche', 'Creche'),
('Nursery', 'Nursery'),
)
id = models.AutoField(primary_key='True')
name = models.CharField(max_length=255, unique=True)
short_name = models.CharField(
'Classroom Short Form',
max_length=20, blank=True
)
academic_year = models.ForeignKey(AcademicYear, on_delete=models.CASCADE, null=True)
term = models.ForeignKey(TermSetup, on_delete=models.CASCADE, null=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
objects = models.Manager()
def classroom_code(self):
if not self.code:
return ""
return self.code
class StudentClassRegistration(models.Model):
STATUS = [
('Active', 'Active'),
('Withdrawn', 'Withdrawn'),
('Completed', 'Completed'),
]
chosen_class = models.ForeignKey(
ClassArmSetup, related_name='admission_students',
on_delete=models.CASCADE,
blank=True, null=True
)
admitted = models.BooleanField(default=False)
admission_date = models.DateField(blank=True, null=True)
migration_status = models.CharField(
max_length=255,
blank=True, null=True, default='Active'
)
status = models.TextField(choices=STATUS, verbose_name='Status', null=True)
rejected = models.BooleanField(default=False)
assigned_as_student = models.BooleanField(default=False)
academic_year =models.ForeignKey(AcademicYear, on_delete=models.CASCADE, null=True, verbose_name='Session')
term =models.ForeignKey(TermSetup, on_delete=models.CASCADE, null=True, verbose_name='Term')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.lastname) + ' ' + str(self.firstname) + ' ' + str(self.othername)
class Meta:
ordering = ['chosen_class']
class TuitionFeesSetup(models.Model):
year= models.ForeignKey(AcademicYear, on_delete=models.CASCADE, null=True, verbose_name="Session")
term= models.ForeignKey(TermSetup, on_delete=models.CASCADE, null=True, verbose_name="Term")
classroom= models.ForeignKey(ClassArmSetup, on_delete=models.CASCADE, null=True, verbose_name="Class", related_name='class_fee_setup')
amount=models.IntegerField(null=True, verbose_name="Tuition Fees Amount(N)")
created = models.DateTimeField(auto_now_add=True, null=True)
updated = models.DateTimeField(auto_now=True, null=True)
objects = models.Manager()
class Meta:
verbose_name = ('Fees Setup Payment')
verbose_name_plural = ('Fees Setup')
def __str__(self):
return str(self.amount)
class TuitionFeesPayment(models.Model):
PAYMENT_METHOD = (
('Cash', 'Cash'),
('Bank', 'Bank'),
('Cheque', 'Cheque'),
('Scholarship', 'Scholarship'),
('Discount', 'Discount'),
('Bad Debt', 'Bad Debt')
)
year= models.ForeignKey(AcademicYear, on_delete=models.CASCADE, null=True, verbose_name="Session")
term= models.ForeignKey(TermSetup, on_delete=models.CASCADE, null=True, verbose_name="Term")
classroom= models.ForeignKey(ClassArmSetup, on_delete=models.CASCADE, null=True, verbose_name="Class", related_name='class_pay')
student= models.ForeignKey(StudentClassRegistration, on_delete=models.CASCADE, null=True, verbose_name="Student", related_name='student_pay')
class_fee= models.ForeignKey(TuitionFeesSetup, on_delete=models.CASCADE, null=True, verbose_name="Tuition Fee")
amount_paid=models.IntegerField(verbose_name="Amount(N) Paid", null=True, blank=True)
payment_method=models.CharField(choices=PAYMENT_METHOD, blank=True, max_length=50, verbose_name="Payment Method")
receipt_reference=models.CharField(max_length=255, null=True, verbose_name="Receipt Reference", editable=False, unique=True, default= random_string)
payment_date = models.DateField(null=True, default="2022-04-08")
created = models.DateTimeField(auto_now_add=True, null=True)
updated = models.DateTimeField(auto_now=True, null=True)
objects = models.Manager()
class Meta:
verbose_name = ('Fees Setup Payment')
verbose_name_plural = ('Fees Setup Payments')
What I want to do is to render out the information like this on a template:
Each Class
Number of students in each class
Fees set up for each class
Total amount expected from each each class
Total amount received from each class
Thanks in advance