Files
004.erp.generic/backend/modules/services.py
mariomitte 5d39e048ba
Some checks failed
ERP CI Pipeline / test (push) Has been cancelled
prvi kod za live uporabu
2026-07-09 21:21:17 +02:00

70 lines
2.1 KiB
Python

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