Merge pull request #321 from orbitroom/master

Added ship type and total loss that populates from zkillboard
This commit is contained in:
Mr McClain 2016-03-23 20:33:30 -05:00
commit 6223935e34
5 changed files with 97 additions and 4 deletions

View File

@ -0,0 +1,60 @@
from django.conf import settings
import json
import urllib2
import logging
logger = logging.getLogger(__name__)
class srpManager():
@staticmethod
def get_kill_id (killboard_link):
str = (killboard_link)
set = '0123456789'
kill_id = ''.join([c for c in str if c in set])
return kill_id
@staticmethod
def get_kill_data (kill_id):
url = ("https://www.zkillboard.com/api/killID/%s" % kill_id)
request = urllib2.Request(url)
request.add_header('User-Agent',"%s Alliance Auth" % settings.DOMAIN)
request.add_header('Content-Type','application/json')
response = urllib2.urlopen(request)
result = json.load(response)[0]
if result:
ship_type = result['victim']['shipTypeID']
logger.debug("Ship type for kill ID %s is determined to be %s" % (kill_id, ship_type))
ship_value = result['zkb']['totalValue']
logger.debug("total loss value for kill id %s is %s" %(kill_id, ship_value))
return (ship_type, ship_value)
else:
raise ValueError("Invalid Kill ID")
@staticmethod
def get_ship_name (ship_type):
url = ("https://jetbalsa.com/api/json.php/invTypes/%s" % ship_type)
request = urllib2.Request(url)
request.add_header('User-Agent',"%s Alliance Auth" % settings.DOMAIN)
request.add_header('Content-Type','application/json')
response = urllib2.urlopen(request)
result = json.load(response)
if result:
ship_name = result['typeName']
logger.debug("ship type %s determined to be %s" % (ship_type, ship_name))
return ship_name
else:
logger.debug("ship type %s is invalid" % ship_type)
raise ValueError("Cannot get ship name")

View File

@ -1,6 +1,7 @@
from django import forms
class SrpFleetMainForm(forms.Form):
fleet_name = forms.CharField(required=True, label="Fleet Name")
fleet_time = forms.DateTimeField(required=True, label="Fleet Time")
@ -8,8 +9,19 @@ class SrpFleetMainForm(forms.Form):
class SrpFleetUserRequestForm(forms.Form):
killboard_link = forms.CharField(required=True, label="Killboard Link")
additional_info = forms.CharField(required=False, label="Additional Info")
killboard_link = forms.CharField(
label="zKillboard Link",
max_length=255,
required=True
)
def clean_killboard_link(self):
data = self.cleaned_data['killboard_link']
if "zkillboard.com" not in data:
raise forms.ValidationError("Invalid Link. Please use zKillboard.com")
return data
class SrpFleetUpdateCostForm(forms.Form):
@ -17,4 +29,4 @@ class SrpFleetUpdateCostForm(forms.Form):
class SrpFleetMainUpdateForm(forms.Form):
fleet_aar_link = forms.CharField(required=True, label="After Action Report Link")
fleet_aar_link = forms.CharField(required=True, label="After Action Report Link")

View File

@ -24,6 +24,9 @@ class SrpUserRequest(models.Model):
srp_total_amount = models.BigIntegerField(default=0)
character = models.ForeignKey(EveCharacter)
srp_fleet_main = models.ForeignKey(SrpFleetMain)
kb_total_loss = models.BigIntegerField(default=0)
srp_ship_name = models.CharField(max_length=254, default="")
def __str__(self):
return self.character.character_name + " - SrpUserRequest"
return self.character.character_name + " - SrpUserRequest"

View File

@ -15,6 +15,8 @@ from form import SrpFleetMainForm
from form import SrpFleetUserRequestForm
from form import SrpFleetUpdateCostForm
from form import SrpFleetMainUpdateForm
from services.managers.srp_manager import srpManager
from notifications import notify
import logging
@ -185,13 +187,25 @@ def srp_request_view(request, fleet_srp):
character = EveManager.get_character_by_id(authinfo.main_char_id)
srp_fleet_main = SrpFleetMain.objects.get(fleet_srp_code=fleet_srp)
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.save()
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))
notify(request.user, "Your SRP request Killmail Link Failed Validation", message="Your SRP request Killmail link %s is invalid. Please make sure your using zKillboard." % srp_request.killboard_link, level="danger")
return HttpResponseRedirect("/srp")
srp_ship_name = srpManager.get_ship_name(srp_kill_data)
srp_request.srp_ship_name = srp_ship_name
kb_total_loss = ship_value
srp_request.kb_total_loss = kb_total_loss
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))

View File

@ -37,6 +37,8 @@
<th class="text-center">Pilot Name</th>
<th class="text-center">Killboard Link</th>
<th class="text-center">Additional Info</th>
<th class="text-center">Ship Type</th>
<th class="text-center">Killboard Loss Amt</th>
<th class="text-center">SRP ISK Cost</th>
<th class="text-center">Status</th>
{% if perms.auth.srp_management %}
@ -55,6 +57,8 @@
target="_blank">{{ srpfleetrequest.killboard_link }}</a>
</td>
<td class="text-center">{{ srpfleetrequest.additional_info }}</td>
<td class="text-center">{{ srpfleetrequest.srp_ship_name }}</td>
<td class="text-center">ISK: {{ srpfleetrequest.kb_total_loss | intcomma }}</td>
<td class="text-center">ISK: {{ srpfleetrequest.srp_total_amount | intcomma }}</td>
<td class="text-center">
{% if srpfleetrequest.srp_status == "Approved" %}