Borrowing-TrackerBackend/equipment_tracker/breakages/models.py

46 lines
2 KiB
Python

from django.db import models
from accounts.models import CustomUser
from transactions.models import Transaction
from equipments.models import EquipmentInstance
from django.utils.timezone import now
class BreakageReport(models.Model):
transaction = models.ForeignKey(
Transaction, on_delete=models.CASCADE)
equipments = models.ManyToManyField(EquipmentInstance)
resolved = models.BooleanField(default=False)
timestamp = models.DateTimeField(default=now, editable=False)
def __str__(self):
return f"Breakage report for transaction #{self.transaction.id} by {self.transaction.borrower} under {self.transaction.teacher}"
def save(self, *args, **kwargs):
# Check if the instance is being updated
if not self._state.adding:
# Check if all associated equipment instances have status "Working"
all_working = all(
eq.status == 'Working' for eq in self.equipments.all())
# If all equipment instances are working
if all_working:
# set resolved field to True
self.resolved = True
# set the status of the associated transaction to "Finalized"
self.transaction.status = 'Finalized'
self.transaction.save()
# Then save the instance again to reflect the changes
super().save(*args, **kwargs)
# If not, set the resolved field to False
else:
if (self.resolved != False or self.transaction.status != 'With Breakages: Pending Resolution'):
# set resolved field to False
self.resolved = False
# set the status of the associated transaction to still be pending
self.transaction.status = 'With Breakages: Pending Resolution'
self.transaction.save()
# Then save the instance again to reflect the changes
super().save(*args, **kwargs)
else:
super().save(*args, **kwargs)