diff --git a/services/managers/srp_manager.py b/services/managers/srp_manager.py new file mode 100644 index 00000000..6bd2f8b9 --- /dev/null +++ b/services/managers/srp_manager.py @@ -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") + + + + + + + + + + diff --git a/srp/form.py b/srp/form.py index 7f9225e5..fcffe74a 100755 --- a/srp/form.py +++ b/srp/form.py @@ -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") \ No newline at end of file + fleet_aar_link = forms.CharField(required=True, label="After Action Report Link") diff --git a/srp/models.py b/srp/models.py index 4400db6b..58e096e6 100755 --- a/srp/models.py +++ b/srp/models.py @@ -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" \ No newline at end of file + return self.character.character_name + " - SrpUserRequest" diff --git a/srp/views.py b/srp/views.py index 930820f0..43e42319 100755 --- a/srp/views.py +++ b/srp/views.py @@ -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)) diff --git a/stock/templates/registered/srpfleetdata.html b/stock/templates/registered/srpfleetdata.html index 596bc457..3d1e7201 100755 --- a/stock/templates/registered/srpfleetdata.html +++ b/stock/templates/registered/srpfleetdata.html @@ -37,6 +37,8 @@ Pilot Name Killboard Link Additional Info + Ship Type + Killboard Loss Amt SRP ISK Cost Status {% if perms.auth.srp_management %} @@ -55,6 +57,8 @@ target="_blank">{{ srpfleetrequest.killboard_link }} {{ srpfleetrequest.additional_info }} + {{ srpfleetrequest.srp_ship_name }} + ISK: {{ srpfleetrequest.kb_total_loss | intcomma }} ISK: {{ srpfleetrequest.srp_total_amount | intcomma }} {% if srpfleetrequest.srp_status == "Approved" %}