mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 20:40:17 +02:00
424 lines
20 KiB
Python
Executable File
424 lines
20 KiB
Python
Executable File
from __future__ import unicode_literals
|
|
from django.shortcuts import render, redirect
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth.decorators import permission_required
|
|
from django.contrib import messages
|
|
from eveonline.managers import EveManager
|
|
from authentication.models import AuthServicesInfo
|
|
from srp.models import SrpFleetMain
|
|
from srp.models import SrpUserRequest
|
|
from srp.form import SrpFleetMainForm
|
|
from srp.form import SrpFleetUserRequestForm
|
|
from srp.form import SrpFleetUpdateCostForm
|
|
from srp.form import SrpFleetMainUpdateForm
|
|
from services.managers.srp_manager import srpManager
|
|
from notifications import notify
|
|
from django.utils import timezone
|
|
from authentication.decorators import members_and_blues
|
|
from esi.clients import esi_client_factory
|
|
import uuid
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def random_string(string_length=10):
|
|
"""Returns a random string of length string_length."""
|
|
random = str(uuid.uuid4()) # Convert UUID format to a Python string.
|
|
random = random.upper() # Make all characters uppercase.
|
|
random = random.replace("-", "") # Remove the UUID '-'.
|
|
return random[0:string_length] # Return the random string.
|
|
|
|
|
|
@login_required
|
|
@members_and_blues()
|
|
def srp_management(request):
|
|
logger.debug("srp_management called by user %s" % request.user)
|
|
totalcost = 0
|
|
runningcost = 0
|
|
price_pair = {}
|
|
for fleet_main in SrpFleetMain.objects.filter(fleet_srp_status="").iterator():
|
|
for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main).iterator():
|
|
totalcost = totalcost + fleet_data.srp_total_amount
|
|
runningcost = runningcost + fleet_data.srp_total_amount
|
|
price_pair[fleet_main.id] = runningcost
|
|
logger.debug("Determined SRP fleet %s costs %s" % (fleet_main.id, runningcost))
|
|
runningcost = 0
|
|
logger.debug("Determined total outstanding SRP cost %s" % totalcost)
|
|
|
|
context = {"srpfleets": SrpFleetMain.objects.filter(fleet_srp_status=""), "totalcost": totalcost,
|
|
"price_pair": price_pair}
|
|
return render(request, 'registered/srpmanagement.html', context=context)
|
|
|
|
|
|
@login_required
|
|
@members_and_blues()
|
|
def srp_management_all(request):
|
|
logger.debug("srp_management_all called by user %s" % request.user)
|
|
totalcost = 0
|
|
runningcost = 0
|
|
price_pair = {}
|
|
for fleet_main in SrpFleetMain.objects.all().iterator():
|
|
for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main).iterator():
|
|
totalcost = totalcost + fleet_data.srp_total_amount
|
|
runningcost = runningcost + fleet_data.srp_total_amount
|
|
price_pair[fleet_main.id] = runningcost
|
|
logger.debug("Determined SRP fleet %s costs %s" % (fleet_main.id, runningcost))
|
|
runningcost = 0
|
|
logger.debug("Determined all-time total SRP cost %s" % totalcost)
|
|
|
|
context = {"srpfleets": SrpFleetMain.objects.all(), "totalcost": totalcost, "price_pair": price_pair}
|
|
return render(request, 'registered/srpmanagement.html', context=context)
|
|
|
|
|
|
@login_required
|
|
@members_and_blues()
|
|
def srp_fleet_view(request, fleet_id):
|
|
logger.debug("srp_fleet_view called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
fleet_main = SrpFleetMain.objects.get(id=fleet_id)
|
|
totalcost = 0
|
|
for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main).filter(srp_status="Approved"):
|
|
totalcost = totalcost + fleet_data.srp_total_amount
|
|
logger.debug("Determiend fleet id %s total cost %s" % (fleet_id, totalcost))
|
|
|
|
context = {"fleet_id": fleet_id, "fleet_status": fleet_main.fleet_srp_status,
|
|
"srpfleetrequests": SrpUserRequest.objects.filter(srp_fleet_main=fleet_main),
|
|
"totalcost": totalcost}
|
|
|
|
return render(request, 'registered/srpfleetdata.html', context=context)
|
|
else:
|
|
logger.error(
|
|
"Unable to view SRP fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
|
|
return redirect("auth_srp_management_view")
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_add_view(request):
|
|
logger.debug("srp_fleet_add_view called by user %s" % request.user)
|
|
completed = False
|
|
completed_srp_code = ""
|
|
|
|
if request.method == 'POST':
|
|
form = SrpFleetMainForm(request.POST)
|
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
|
if form.is_valid():
|
|
authinfo = AuthServicesInfo.objects.get(user=request.user)
|
|
character = EveManager.get_character_by_id(authinfo.main_char_id)
|
|
|
|
srp_fleet_main = SrpFleetMain()
|
|
srp_fleet_main.fleet_name = form.cleaned_data['fleet_name']
|
|
srp_fleet_main.fleet_doctrine = form.cleaned_data['fleet_doctrine']
|
|
srp_fleet_main.fleet_time = form.cleaned_data['fleet_time']
|
|
srp_fleet_main.fleet_srp_code = random_string(8)
|
|
srp_fleet_main.fleet_commander = character
|
|
|
|
srp_fleet_main.save()
|
|
|
|
completed = True
|
|
completed_srp_code = srp_fleet_main.fleet_srp_code
|
|
logger.info("Created SRP Fleet %s by user %s" % (srp_fleet_main.fleet_name, request.user))
|
|
messages.success(request, 'Created SRP fleet %s.' % srp_fleet_main.fleet_name)
|
|
|
|
else:
|
|
logger.debug("Returning blank SrpFleetMainForm")
|
|
form = SrpFleetMainForm()
|
|
|
|
render_items = {'form': form, "completed": completed, "completed_srp_code": completed_srp_code}
|
|
|
|
return render(request, 'registered/srpfleetadd.html', context=render_items)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_remove(request, fleet_id):
|
|
logger.debug("srp_fleet_remove called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
|
|
srpfleetmain.delete()
|
|
logger.info("SRP Fleet %s deleted by user %s" % (srpfleetmain.fleet_name, request.user))
|
|
messages.success(request, 'Removed SRP fleet %s.' % srpfleetmain.fleet_name)
|
|
else:
|
|
logger.error(
|
|
"Unable to delete SRP fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP fleet with ID %s' % fleet_id)
|
|
return redirect("auth_srp_management_view")
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_disable(request, fleet_id):
|
|
logger.debug("srp_fleet_disable called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
|
|
srpfleetmain.fleet_srp_code = ""
|
|
srpfleetmain.save()
|
|
logger.info("SRP Fleet %s disabled by user %s" % (srpfleetmain.fleet_name, request.user))
|
|
messages.success(request, 'Disabled SRP fleet %s.' % srpfleetmain.fleet_name)
|
|
else:
|
|
logger.error(
|
|
"Unable to disable SRP fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP fleet with ID %s' % fleet_id)
|
|
return redirect("auth_srp_management_view")
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_enable(request, fleet_id):
|
|
logger.debug("srp_fleet_enable called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
|
|
srpfleetmain.fleet_srp_code = random_string(8)
|
|
srpfleetmain.save()
|
|
logger.info("SRP Fleet %s enable by user %s" % (srpfleetmain.fleet_name, request.user))
|
|
messages.success(request, 'Enabled SRP fleet %s.' % srpfleetmain.fleet_name)
|
|
else:
|
|
logger.error(
|
|
"Unable to enable SRP fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP fleet with ID %s' % fleet_id)
|
|
return redirect("auth_srp_management_view")
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_mark_completed(request, fleet_id):
|
|
logger.debug("srp_fleet_mark_completed called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
|
|
srpfleetmain.fleet_srp_status = "Completed"
|
|
srpfleetmain.save()
|
|
logger.info("Marked SRP Fleet %s as completed by user %s" % (srpfleetmain.fleet_name, request.user))
|
|
messages.success(request, 'Marked SRP fleet %s as completed.' % srpfleetmain.fleet_name)
|
|
else:
|
|
logger.error("Unable to mark SRP fleet with id %s as completed for user %s - fleet matching id not found." % (
|
|
fleet_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP fleet with ID %s' % fleet_id)
|
|
return redirect("auth_srp_fleet_view", fleet_id)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_mark_uncompleted(request, fleet_id):
|
|
logger.debug("srp_fleet_mark_uncompleted called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
|
|
srpfleetmain.fleet_srp_status = ""
|
|
srpfleetmain.save()
|
|
logger.info("Marked SRP Fleet %s as incomplete for user %s" % (fleet_id, request.user))
|
|
messages.success(request, 'Marked SRP fleet %s as incomplete.' % srpfleetmain.fleet_name)
|
|
return redirect("auth_srp_fleet_view", fleet_id)
|
|
else:
|
|
logger.error("Unable to mark SRP Fleet id %s as incomplete for user %s - fleet matching id not found." % (
|
|
fleet_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP fleet with ID %s' % fleet_id)
|
|
return redirect('auth_srp_management_view')
|
|
|
|
|
|
@login_required
|
|
@members_and_blues()
|
|
def srp_request_view(request, fleet_srp):
|
|
logger.debug("srp_request_view called by user %s for fleet srp code %s" % (request.user, fleet_srp))
|
|
completed = False
|
|
no_srp_code = False
|
|
|
|
if SrpFleetMain.objects.filter(fleet_srp_code=fleet_srp).exists() is False:
|
|
no_srp_code = True
|
|
logger.error("Unable to locate SRP Fleet using code %s for user %s" % (fleet_srp, request.user))
|
|
|
|
if request.method == 'POST':
|
|
form = SrpFleetUserRequestForm(request.POST)
|
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
|
|
|
if form.is_valid():
|
|
authinfo = AuthServicesInfo.objects.get(user=request.user)
|
|
character = EveManager.get_character_by_id(authinfo.main_char_id)
|
|
srp_fleet_main = SrpFleetMain.objects.get(fleet_srp_code=fleet_srp)
|
|
post_time = timezone.now()
|
|
srp_status = "Pending"
|
|
|
|
srp_request = SrpUserRequest()
|
|
srp_request.killboard_link = form.cleaned_data['killboard_link']
|
|
srp_request.additional_info = form.cleaned_data['additional_info']
|
|
srp_request.character = character
|
|
srp_request.srp_fleet_main = srp_fleet_main
|
|
srp_request.srp_status = srp_status
|
|
|
|
try:
|
|
srp_kill_link = srpManager.get_kill_id(srp_request.killboard_link)
|
|
(srp_kill_data, ship_value) = srpManager.get_kill_data(srp_kill_link)
|
|
except ValueError:
|
|
logger.debug("User %s Submitted Invalid Killmail Link %s or server could not be reached" % (
|
|
request.user, srp_request.killboard_link))
|
|
# THIS SHOULD BE IN FORM VALIDATION
|
|
messages.error(request,
|
|
"Your SRP request Killmail link is invalid. Please make sure you are using zKillboard.")
|
|
return redirect("auth_srp_management_view")
|
|
c = esi_client_factory()
|
|
srp_ship_name = c.Universe.get_universe_types_type_id(type_id=srp_kill_data).result()['type_name']
|
|
srp_request.srp_ship_name = srp_ship_name
|
|
kb_total_loss = ship_value
|
|
srp_request.kb_total_loss = kb_total_loss
|
|
srp_request.post_time = post_time
|
|
srp_request.save()
|
|
completed = True
|
|
logger.info("Created SRP Request on behalf of user %s for fleet name %s" % (
|
|
request.user, srp_fleet_main.fleet_name))
|
|
messages.success(request, 'Submitted SRP request for your %s.' % srp_ship_name)
|
|
|
|
else:
|
|
logger.debug("Returning blank SrpFleetUserRequestForm")
|
|
form = SrpFleetUserRequestForm()
|
|
|
|
render_items = {'form': form, "completed": completed, "no_srp_code": no_srp_code}
|
|
|
|
return render(request, 'registered/srpfleetrequest.html', context=render_items)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_request_remove(request, srp_request_id):
|
|
logger.debug("srp_request_remove called by user %s for srp request id %s" % (request.user, srp_request_id))
|
|
stored_fleet_view = None
|
|
|
|
if SrpUserRequest.objects.filter(id=srp_request_id).exists():
|
|
srpuserrequest = SrpUserRequest.objects.get(id=srp_request_id)
|
|
stored_fleet_view = srpuserrequest.srp_fleet_main.id
|
|
srpuserrequest.delete()
|
|
logger.info("Deleted SRP request id %s for user %s" % (srp_request_id, request.user))
|
|
messages.success(request, 'Deleted SRP request from %s for their %s.' % (
|
|
srpuserrequest.character, srpuserrequest.srp_ship_name))
|
|
if stored_fleet_view is None:
|
|
logger.error("Unable to delete srp request id %s for user %s - request matching id not found." % (
|
|
srp_request_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP request with ID %s' % srp_request_id)
|
|
return redirect("auth_srp_management_view")
|
|
else:
|
|
return redirect("auth_srp_fleet_view", stored_fleet_view)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_request_approve(request, srp_request_id):
|
|
logger.debug("srp_request_approve called by user %s for srp request id %s" % (request.user, srp_request_id))
|
|
stored_fleet_view = None
|
|
|
|
if SrpUserRequest.objects.filter(id=srp_request_id).exists():
|
|
srpuserrequest = SrpUserRequest.objects.get(id=srp_request_id)
|
|
stored_fleet_view = srpuserrequest.srp_fleet_main.id
|
|
srpuserrequest.srp_status = "Approved"
|
|
if srpuserrequest.srp_total_amount == 0:
|
|
srpuserrequest.srp_total_amount = srpuserrequest.kb_total_loss
|
|
srpuserrequest.save()
|
|
logger.info("Approved SRP request id %s for character %s by user %s" % (
|
|
srp_request_id, srpuserrequest.character, request.user))
|
|
messages.success(request, 'Approved SRP request from %s for their %s.' % (
|
|
srpuserrequest.character, srpuserrequest.srp_ship_name))
|
|
notify(
|
|
srpuserrequest.character.user,
|
|
'SRP Request Approved',
|
|
level='success',
|
|
message='Your SRP request for a %s lost during %s has been approved for %s ISK.' % (
|
|
srpuserrequest.srp_ship_name, srpuserrequest.srp_fleet_main.fleet_name, srpuserrequest.srp_total_amount)
|
|
)
|
|
if stored_fleet_view is None:
|
|
logger.error("Unable to approve srp request id %s on behalf of user %s - request matching id not found." % (
|
|
srp_request_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP request with ID %s' % srp_request_id)
|
|
return redirect("auth_srp_management_view")
|
|
else:
|
|
return redirect("auth_srp_fleet_view", stored_fleet_view)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_request_reject(request, srp_request_id):
|
|
logger.debug("srp_request_reject called by user %s for srp request id %s" % (request.user, srp_request_id))
|
|
stored_fleet_view = None
|
|
|
|
if SrpUserRequest.objects.filter(id=srp_request_id).exists():
|
|
srpuserrequest = SrpUserRequest.objects.get(id=srp_request_id)
|
|
stored_fleet_view = srpuserrequest.srp_fleet_main.id
|
|
srpuserrequest.srp_status = "Rejected"
|
|
srpuserrequest.save()
|
|
logger.info("SRP request id %s for character %s rejected by %s" % (
|
|
srp_request_id, srpuserrequest.character, request.user))
|
|
messages.success(request, 'Rejected SRP request from %s for their %s.' % (
|
|
srpuserrequest.character, srpuserrequest.srp_ship_name))
|
|
notify(
|
|
srpuserrequest.character.user,
|
|
'SRP Request Rejected',
|
|
level='danger',
|
|
message='Your SRP request for a %s lost during %s has been rejected.' % (
|
|
srpuserrequest.srp_ship_name, srpuserrequest.srp_fleet_main.fleet_name)
|
|
)
|
|
|
|
if stored_fleet_view is None:
|
|
logger.error("Unable to reject SRP request id %s on behalf of user %s - request matching id not found." % (
|
|
srp_request_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP request with ID %s' % srp_request_id)
|
|
return redirect("auth_srp_management_view")
|
|
else:
|
|
return redirect("auth_srp_fleet_view", stored_fleet_view)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_request_update_amount_view(request, fleet_srp_request_id):
|
|
logger.debug("srp_request_update_amount_view called by user %s for fleet srp request id %s" % (
|
|
request.user, fleet_srp_request_id))
|
|
|
|
if SrpUserRequest.objects.filter(id=fleet_srp_request_id).exists() is False:
|
|
logger.error("Unable to locate SRP request id %s for user %s" % (fleet_srp_request_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP request with ID %s' % fleet_srp_request_id)
|
|
return redirect("auth_srp_management_view")
|
|
|
|
if request.method == 'POST':
|
|
form = SrpFleetUpdateCostForm(request.POST)
|
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
|
if form.is_valid():
|
|
srp_request = SrpUserRequest.objects.get(id=fleet_srp_request_id)
|
|
srp_request.srp_total_amount = form.cleaned_data['srp_total_amount']
|
|
srp_request.save()
|
|
logger.info("Updated srp request id %s total to %s by user %s" % (
|
|
fleet_srp_request_id, form.cleaned_data['srp_total_amount'], request.user))
|
|
messages.success(request, 'Updated SRP amount.')
|
|
return redirect("auth_srp_fleet_view", srp_request.srp_fleet_main.id)
|
|
else:
|
|
logger.debug("Returning blank SrpFleetUpdateCostForm")
|
|
form = SrpFleetUpdateCostForm()
|
|
|
|
render_items = {'form': form}
|
|
|
|
return render(request, 'registered/srpfleetrequestamount.html', context=render_items)
|
|
|
|
|
|
@login_required
|
|
@permission_required('auth.srp_management')
|
|
def srp_fleet_edit_view(request, fleet_id):
|
|
logger.debug("srp_fleet_edit_view called by user %s for fleet id %s" % (request.user, fleet_id))
|
|
no_fleet_id = False
|
|
if SrpFleetMain.objects.filter(id=fleet_id).exists():
|
|
if request.method == 'POST':
|
|
form = SrpFleetMainUpdateForm(request.POST)
|
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
|
if form.is_valid():
|
|
srpfleetmain = SrpFleetMain.objects.get(id=fleet_id)
|
|
srpfleetmain.fleet_srp_aar_link = form.cleaned_data['fleet_aar_link']
|
|
srpfleetmain.save()
|
|
logger.info("User %s edited SRP Fleet %s" % (request.user, srpfleetmain.fleet_name))
|
|
messages.success(request, 'Saved changes to SRP fleet %s' % srpfleetmain.fleet_name)
|
|
return redirect("auth_srp_management_view")
|
|
else:
|
|
logger.debug("Returning blank SrpFleetMainUpdateForm")
|
|
form = SrpFleetMainUpdateForm()
|
|
render_items = {'form': form, "no_fleet_id": no_fleet_id}
|
|
return render(request, 'registered/srpfleetupdate.html', context=render_items)
|
|
|
|
else:
|
|
logger.error(
|
|
"Unable to edit srp fleet id %s for user %s - fleet matching id not found." % (fleet_id, request.user))
|
|
messages.error(request, 'Unable to locate SRP fleet with ID %s' % fleet_id)
|
|
return redirect("auth_srp_management_view")
|