mirror of
https://github.com/lemeow125/Borrowing-TrackerBackend.git
synced 2024-11-16 22:09:27 +08:00
Merge branch 'master' of https://git.keannu1.duckdns.org/keannu125/Borrowing-TrackerBackend
This commit is contained in:
commit
e8524e1d45
4 changed files with 20 additions and 5 deletions
|
@ -99,11 +99,12 @@ class AvailableEquipmentInstanceViewSet(generics.ListAPIView):
|
||||||
# Get all equipment instances associated with non-finalized transactions
|
# Get all equipment instances associated with non-finalized transactions
|
||||||
non_finalized_equipments = EquipmentInstance.objects.filter(
|
non_finalized_equipments = EquipmentInstance.objects.filter(
|
||||||
transaction__in=non_finalized_transactions
|
transaction__in=non_finalized_transactions
|
||||||
).prefetch_related('equipment')
|
).order_by('id').prefetch_related('equipment')
|
||||||
|
|
||||||
# Get all equipment instances which are not associated with non-finalized transactions
|
# Get all equipment instances which are not associated with non-finalized transactions
|
||||||
queryset = EquipmentInstance.objects.exclude(
|
queryset = EquipmentInstance.objects.exclude(
|
||||||
id__in=non_finalized_equipments.values_list('id', flat=True)
|
id__in=non_finalized_equipments.values_list(
|
||||||
|
'id', flat=True)
|
||||||
)
|
)
|
||||||
cache.set(key, queryset, timeout=60*60*24)
|
cache.set(key, queryset, timeout=60*60*24)
|
||||||
|
|
||||||
|
|
|
@ -43,5 +43,7 @@ class Transaction(models.Model):
|
||||||
return f"Transaction #{self.id} under {self.teacher} by {self.borrower}"
|
return f"Transaction #{self.id} under {self.teacher} by {self.borrower}"
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
cache.delete('available_equipment_instances')
|
||||||
|
cache.delete('equipment_instances')
|
||||||
cache.delete('non_finalized_transactions')
|
cache.delete('non_finalized_transactions')
|
||||||
return super().save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
|
|
|
@ -5,6 +5,7 @@ from .models import Transaction
|
||||||
from breakages.models import BreakageReport
|
from breakages.models import BreakageReport
|
||||||
from accounts.models import CustomUser
|
from accounts.models import CustomUser
|
||||||
from config.settings import DEBUG
|
from config.settings import DEBUG
|
||||||
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
|
||||||
class CustomUserSerializer(serializers.ModelSerializer):
|
class CustomUserSerializer(serializers.ModelSerializer):
|
||||||
|
@ -128,6 +129,7 @@ class TransactionSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
return transaction
|
return transaction
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
|
cache.delete('non_finalized_transactions')
|
||||||
user = self.context['request'].user
|
user = self.context['request'].user
|
||||||
|
|
||||||
# User Validation
|
# User Validation
|
||||||
|
@ -189,7 +191,10 @@ class TransactionSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
# This updates the status field of all equipment instances in a single query
|
# This updates the status field of all equipment instances in a single query
|
||||||
EquipmentInstance.objects.filter(
|
EquipmentInstance.objects.filter(
|
||||||
id__in=[equipment.id for equipment in equipments]).update(status='Available')
|
id__in=[equipment.id for equipment in equipments]).update(status='Available')
|
||||||
return super().update(instance, validated_data)
|
q = super().update(instance, validated_data)
|
||||||
|
cache.delete('available_equipment_instances')
|
||||||
|
cache.delete('equipment_instances')
|
||||||
|
return q
|
||||||
|
|
||||||
# For Approved transactions,
|
# For Approved transactions,
|
||||||
# If not changing to Borrowed or Cancelled, throw an error
|
# If not changing to Borrowed or Cancelled, throw an error
|
||||||
|
@ -206,7 +211,10 @@ class TransactionSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
# This updates the status field of all equipment instances in a single query
|
# This updates the status field of all equipment instances in a single query
|
||||||
EquipmentInstance.objects.filter(
|
EquipmentInstance.objects.filter(
|
||||||
id__in=[equipment.id for equipment in equipments]).update(status='Available')
|
id__in=[equipment.id for equipment in equipments]).update(status='Available')
|
||||||
return super().update(instance, validated_data)
|
q = super().update(instance, validated_data)
|
||||||
|
cache.delete('available_equipment_instances')
|
||||||
|
cache.delete('equipment_instances')
|
||||||
|
return q
|
||||||
|
|
||||||
# If there are no issues and a transaction changes from Approved to Borrowed, label the selected equipment's statuses as Borrowed
|
# If there are no issues and a transaction changes from Approved to Borrowed, label the selected equipment's statuses as Borrowed
|
||||||
if instance.transaction_status == "Approved" and validated_data.get('transaction_status') == "Borrowed":
|
if instance.transaction_status == "Approved" and validated_data.get('transaction_status') == "Borrowed":
|
||||||
|
@ -248,7 +256,10 @@ class TransactionSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
# This updates the status field of all equipment instances in a single query
|
# This updates the status field of all equipment instances in a single query
|
||||||
EquipmentInstance.objects.filter(
|
EquipmentInstance.objects.filter(
|
||||||
id__in=[equipment.id for equipment in equipments]).update(status='Available')
|
id__in=[equipment.id for equipment in equipments]).update(status='Available')
|
||||||
return super().update(instance, validated_data)
|
q = super().update(instance, validated_data)
|
||||||
|
cache.delete('available_equipment_instances')
|
||||||
|
cache.delete('equipment_instances')
|
||||||
|
return q
|
||||||
|
|
||||||
# If the transaction changes from Returned: Pending Checking to With Breakages, we create a Breakage Report instance
|
# If the transaction changes from Returned: Pending Checking to With Breakages, we create a Breakage Report instance
|
||||||
if instance.transaction_status == "Returned: Pending Checking" and validated_data.get('transaction_status') == "With Breakages: Pending Resolution":
|
if instance.transaction_status == "Returned: Pending Checking" and validated_data.get('transaction_status') == "With Breakages: Pending Resolution":
|
||||||
|
|
|
@ -3,6 +3,7 @@ from accounts.permissions import IsTeacher, IsStudent
|
||||||
from rest_framework import viewsets, generics
|
from rest_framework import viewsets, generics
|
||||||
from .serializers import TransactionSerializer
|
from .serializers import TransactionSerializer
|
||||||
from .models import Transaction
|
from .models import Transaction
|
||||||
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
|
||||||
class TransactionViewSet(viewsets.ModelViewSet):
|
class TransactionViewSet(viewsets.ModelViewSet):
|
||||||
|
|
Loading…
Reference in a new issue