92 lines
3.2 KiB
Python
92 lines
3.2 KiB
Python
from django.shortcuts import render
|
|
from django.contrib.auth.models import User, Group
|
|
from rest_framework import viewsets, permissions, settings
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
from api import serializers
|
|
from sde import serializers as sde_serializers
|
|
from django.http import JsonResponse
|
|
from django.db.models import Q
|
|
|
|
from sde.models import SDEType
|
|
|
|
|
|
class UserViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows users to be viewed or edited.
|
|
"""
|
|
queryset = User.objects.all().order_by('-date_joined')
|
|
serializer_class = serializers.UserSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
class GroupViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows groups to be viewed or edited.
|
|
"""
|
|
queryset = Group.objects.all()
|
|
serializer_class = serializers.GroupSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
@api_view(['POST'])
|
|
def custom_types_search(request):
|
|
items = []
|
|
|
|
for q in request.data:
|
|
condition = Q()
|
|
for k in q.keys():
|
|
value = q[k]
|
|
|
|
token = k.split('___')
|
|
key, mods = token[0], token[1:]
|
|
|
|
if "i" in mods:
|
|
condition = condition & Q(**{key + '__icontains': value})
|
|
elif "in" in mods:
|
|
condition = condition & Q(**{key + '__in': value})
|
|
else:
|
|
condition = condition & Q(**{key: value})
|
|
|
|
if "not" in mods:
|
|
condition = ~condition
|
|
|
|
items.extend(SDEType.objects.filter(condition))
|
|
|
|
paginator = settings.api_settings.DEFAULT_PAGINATION_CLASS()
|
|
result_page = paginator.paginate_queryset(items, request)
|
|
serializer = sde_serializers.SDETypeSerializer(result_page, many=True)
|
|
return paginator.get_paginated_response(serializer.data)
|
|
|
|
|
|
@api_view(['POST'])
|
|
def reprocess_eval(request):
|
|
ep_mat = request.data.get("ep_mat")
|
|
ep_items = request.data.get("ep_items")
|
|
efficiency = request.data.get("efficiency", 0.55)
|
|
|
|
matprices = {item["typeID"]: {'sell': item["prices"]["sell"]["min"], 'buy': item["prices"]["buy"]["max"]} for item in ep_mat['items']}
|
|
|
|
item_reprocess = []
|
|
for rawitem in ep_items["items"]:
|
|
item = SDEType.objects.get(id=rawitem["typeID"])
|
|
buy_reprocess = sell_reprocess = 0.0
|
|
for mat in item.typematerials.all():
|
|
try:
|
|
buy_reprocess += matprices[mat.material_type_id]['buy'] * mat.quantity/item.portionSize * efficiency
|
|
sell_reprocess += matprices[mat.material_type_id]['sell'] * mat.quantity/item.portionSize * efficiency
|
|
except KeyError as e:
|
|
JsonResponse({"error": f"No price for material {e}"})
|
|
item_reprocess.append({
|
|
"typeID": item.id,
|
|
"name": item.name,
|
|
"buy": rawitem["prices"]['buy']["max"],
|
|
"sell": rawitem["prices"]['sell']["min"],
|
|
"buy_reprocess": buy_reprocess,
|
|
"sell_reprocess": sell_reprocess,
|
|
})
|
|
|
|
paginator = settings.api_settings.DEFAULT_PAGINATION_CLASS()
|
|
result_page = paginator.paginate_queryset(item_reprocess, request)
|
|
return paginator.get_paginated_response(result_page)
|