This commit is contained in:
70
backend/modules/services.py
Normal file
70
backend/modules/services.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from django.db import transaction
|
||||
from .models import Vehicle, WorkOrder, VehicleServiceRecord
|
||||
from decimal import Decimal
|
||||
|
||||
|
||||
class VehicleService:
|
||||
@staticmethod
|
||||
def create_vehicle(data: dict) -> Vehicle:
|
||||
vehicle = Vehicle(**data)
|
||||
try:
|
||||
vehicle.full_clean()
|
||||
except Exception as e:
|
||||
raise ValidationError({"detail": str(e)})
|
||||
|
||||
vehicle.save()
|
||||
return vehicle
|
||||
|
||||
@staticmethod
|
||||
def update_vehicle(instance: Vehicle, data: dict) -> Vehicle:
|
||||
for k, v in data.items():
|
||||
setattr(instance, k, v)
|
||||
try:
|
||||
instance.full_clean()
|
||||
except Exception as e:
|
||||
raise ValidationError({"detail": str(e)})
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
@staticmethod
|
||||
def create_work_order(data: dict) -> WorkOrder:
|
||||
# expecting creator in data
|
||||
wo = WorkOrder(**data)
|
||||
try:
|
||||
wo.full_clean()
|
||||
except Exception as e:
|
||||
raise ValidationError({"detail": str(e)})
|
||||
|
||||
# save will handle updating vehicle mileage if end_mileage set
|
||||
with transaction.atomic():
|
||||
wo.save()
|
||||
return wo
|
||||
|
||||
@staticmethod
|
||||
def update_work_order(instance: WorkOrder, data: dict) -> WorkOrder:
|
||||
for k, v in data.items():
|
||||
setattr(instance, k, v)
|
||||
try:
|
||||
instance.full_clean()
|
||||
except Exception as e:
|
||||
raise ValidationError({"detail": str(e)})
|
||||
with transaction.atomic():
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
@staticmethod
|
||||
def create_service_record(data: dict) -> VehicleServiceRecord:
|
||||
rec = VehicleServiceRecord(**data)
|
||||
try:
|
||||
rec.full_clean()
|
||||
except Exception as e:
|
||||
raise ValidationError({"detail": str(e)})
|
||||
with transaction.atomic():
|
||||
rec.save()
|
||||
# optionally update vehicle.current_mileage if rec.mileage > current
|
||||
v = rec.vehicle
|
||||
if rec.mileage and rec.mileage > (v.current_mileage or 0):
|
||||
v.current_mileage = rec.mileage
|
||||
v.save()
|
||||
return rec
|
||||
Reference in New Issue
Block a user