from django.db import models from django.shortcuts import get_object_or_404 from django.utils import timezone from decimal import Decimal class Classroom(models.Model): name = models.CharField(max_length=40, blank=True, null=True) def __str__(self): return self.name class Student(models.Model): first_name = models.CharField(max_length=30, blank=True) last_name = models.CharField(max_length=30, blank=True) classroom = models.ForeignKey(Classroom, on_delete=models.DO_NOTHING, blank=True, null=True) tution_fee = models.DecimalField(decimal_places=2, max_digits=12, default=0) paid_all = models.BooleanField(default=False) active = models.BooleanField(default=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) class Meta: ordering = ('first_name',) @property def full_name(self): "Returns the person's full name." return f'{self.first_name} {self.last_name}' def __str__(self): return self.full_name def get_tuition_fee(self): return self.tution_fee def get_total_paid_fee(self): return sum(student.payment for student in self.student_fee.all()) def get_remaining_fee(self): total_fee = self.get_tuition_fee() total_paid = self.get_total_paid_fee() return total_fee - total_paid class StudentFee(models.Model): PaymentTypes = ( ('monthly', 'Monthly'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly'), ) student = models.ForeignKey(Student, related_name='student_fee', on_delete=models.CASCADE) payment_date = models.DateField(default=timezone.now) payment_type = models.CharField(max_length=10, choices=PaymentTypes) payment = models.DecimalField(decimal_places=2, max_digits=12) class Meta: ordering = ('-payment_date',)