diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 5ccbc7dc..ec817f45 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -55,11 +55,14 @@ urlpatterns = [ name='auth_srp_fleet_mark_completed'), url(r'^srp_fleet_mark_uncompleted/(\w+)', srp.views.srp_fleet_mark_uncompleted, name='auth_srp_fleet_mark_uncompleted'), - url(r'^srp_request_remove/(\w+)', srp.views.srp_request_remove, + url(r'^srp_request_remove/', srp.views.srp_request_remove, name="auth_srp_request_remove"), - url(r'srp_request_approve/(\w+)', srp.views.srp_request_approve, + url(r'srp_request_approve/', srp.views.srp_request_approve, name='auth_srp_request_approve'), - url(r'srp_request_reject/(\w+)', srp.views.srp_request_reject, name='auth_srp_request_reject'), + url(r'srp_request_reject/', srp.views.srp_request_reject, + name='auth_srp_request_reject'), + url(_(r'srp_request_amount_update/(\w+)'), srp.views.srp_request_update_amount, + name="auth_srp_request_update_amount"), # Notifications url(r'^remove_notifications/(\w+)/$', notifications.views.remove_notification, name='auth_remove_notification'), @@ -179,8 +182,6 @@ urlpatterns += i18n_patterns( url(_(r'^srp_fleet_add_view/$'), srp.views.srp_fleet_add_view, name='auth_srp_fleet_add_view'), url(_(r'^srp_fleet_edit/(\w+)$'), srp.views.srp_fleet_edit_view, name='auth_srp_fleet_edit_view'), url(_(r'^srp_request/(\w+)'), srp.views.srp_request_view, name='auth_srp_request_view'), - url(_(r'srp_request_amount_update/(\w+)'), srp.views.srp_request_update_amount_view, - name="auth_srp_request_update_amount_view"), # Tools url(_(r'^tool/fleet_formatter_tool/$'), services.views.fleet_formatter_view, diff --git a/services/managers/srp_manager.py b/services/managers/srp_manager.py index a71c3ca2..94bca0db 100644 --- a/services/managers/srp_manager.py +++ b/services/managers/srp_manager.py @@ -31,6 +31,7 @@ class srpManager: 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 + victim_name = result['victim']['characterName'] + return ship_type, ship_value, victim_name else: raise ValueError("Invalid Kill ID") diff --git a/srp/form.py b/srp/form.py index 2d0d6504..036d6438 100755 --- a/srp/form.py +++ b/srp/form.py @@ -25,9 +25,5 @@ class SrpFleetUserRequestForm(forms.Form): return data -class SrpFleetUpdateCostForm(forms.Form): - srp_total_amount = forms.IntegerField(required=True, label=_("Total SRP Amount")) - - class SrpFleetMainUpdateForm(forms.Form): fleet_aar_link = forms.CharField(required=True, label=_("After Action Report Link")) diff --git a/srp/views.py b/srp/views.py index 775a7f96..1c8cb3b5 100755 --- a/srp/views.py +++ b/srp/views.py @@ -3,13 +3,13 @@ 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 django.http import JsonResponse 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 @@ -58,7 +58,7 @@ def srp_fleet_view(request, fleet_id): if SrpFleetMain.objects.filter(id=fleet_id).exists(): fleet_main = SrpFleetMain.objects.get(id=fleet_id) context = {"fleet_id": fleet_id, "fleet_status": fleet_main.fleet_srp_status, - "srpfleetrequests": fleet_main.srpuserrequest_set.all(), + "srpfleetrequests": fleet_main.srpuserrequest_set.order_by('srp_ship_name'), "totalcost": fleet_main.total_cost} return render(request, 'registered/srpfleetdata.html', context=context) @@ -194,18 +194,23 @@ def srp_fleet_mark_uncompleted(request, fleet_id): @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)) + messages.error(request, + _('Unable to locate SRP code with ID %(srpfleetid)s') % {"srpfleetid": fleet_srp}) + return redirect("auth_srp_management_view") if request.method == 'POST': form = SrpFleetUserRequestForm(request.POST) logger.debug("Request type POST contains form valid: %s" % form.is_valid()) if form.is_valid(): + if SrpUserRequest.objects.filter(killboard_link=form.cleaned_data['killboard_link']).exists(): + messages.error(request, + _("This Killboard link has already been posted.")) + return redirect("auth_srp_management_view") + 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) @@ -219,7 +224,7 @@ def srp_request_view(request, fleet_srp): try: srp_kill_link = srpManager.get_kill_id(srp_request.killboard_link) - (ship_type_id, ship_value) = srpManager.get_kill_data(srp_kill_link) + (ship_type_id, ship_value, victim_name) = 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)) @@ -227,117 +232,138 @@ def srp_request_view(request, fleet_srp): messages.error(request, _("Your SRP request Killmail link is invalid. Please make sure you are using zKillboard.")) return redirect("auth_srp_management_view") - srp_ship_name = EveManager.get_itemtype(ship_type_id).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 %(ship)s.') % {"ship": srp_ship_name}) + characters = EveManager.get_characters_by_owner_id(request.user.id) + for character in characters: + if character.character_name == victim_name: + srp_request.srp_ship_name = EveManager.get_itemtype(ship_type_id).name + srp_request.kb_total_loss = ship_value + srp_request.post_time = post_time + srp_request.save() + 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 %(ship)s.') % {"ship": srp_request.srp_ship_name}) + return redirect("auth_srp_management_view") + else: + continue + messages.error(request, + _("%(charname)s does not belong to your Auth account. Please add the API key for this character and try again") + % {"charname": victim_name}) + return redirect("auth_srp_management_view") else: logger.debug("Returning blank SrpFleetUserRequestForm") form = SrpFleetUserRequestForm() - render_items = {'form': form, "completed": completed, "no_srp_code": no_srp_code} + render_items = {'form': form} 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)) +def srp_request_remove(request): + numrequests = len(request.POST)-1 + logger.debug("srp_request_remove called by user %s for %s srp request id's" % (request.user, numrequests)) 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 %(character)s for their %(ship)s.') % { - "character": srpuserrequest.character, "ship": srpuserrequest.srp_ship_name}) + for srp_request_id in request.POST: + if numrequests == 0: + messages.warning(request, _("No SRP requests selected")) + return redirect("auth_srp_management_view") + if srp_request_id == "csrfmiddlewaretoken": + continue + 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)) 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 %(requestid)s') % {"requestid": srp_request_id}) return redirect("auth_srp_management_view") else: + messages.success(request, _('Deleted %(numrequests)s SRP requests') % {"numrequests": numrequests}) 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)) +def srp_request_approve(request): + numrequests = len(request.POST)-1 + logger.debug("srp_request_approve called by user %s for %s srp request id's" % (request.user, numrequests)) 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 %(character)s for their %(ship)s.') % { - "character": srpuserrequest.character, "ship": 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) - ) + for srp_request_id in request.POST: + if numrequests == 0: + messages.warning(request, _("No SRP requests selected")) + return redirect("auth_srp_management_view") + if srp_request_id == "csrfmiddlewaretoken": + continue + 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)) + 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 %(requestid)s') % {"requestid": srp_request_id}) return redirect("auth_srp_management_view") else: + messages.success(request, _('Approved %(numrequests)s SRP requests') % {"numrequests": numrequests}) 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)) +def srp_request_reject(request): + numrequests = len(request.POST)-1 + logger.debug("srp_request_reject called by user %s for %s srp request id's" % (request.user, numrequests)) 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 %(character)s for their %(ship)s.') % { - "character": srpuserrequest.character, "ship": 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) - ) - + for srp_request_id in request.POST: + if numrequests == 0: + messages.warning(request, _("No SRP requests selected")) + return redirect("auth_srp_management_view") + if srp_request_id == "csrfmiddlewaretoken": + continue + 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)) + 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 %(requestid)s') % {"requestid": srp_request_id}) return redirect("auth_srp_management_view") else: + messages.success(request, _('Rejected %(numrequests)s SRP requests.') % {"numrequests": numrequests}) 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" % ( +def srp_request_update_amount(request, fleet_srp_request_id): + logger.debug("srp_request_update_amount 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: @@ -345,24 +371,12 @@ def srp_request_update_amount_view(request, fleet_srp_request_id): messages.error(request, _('Unable to locate SRP request with ID %(requestid)s') % {"requestid": 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) + srp_request = SrpUserRequest.objects.get(id=fleet_srp_request_id) + srp_request.srp_total_amount = request.POST['value'] + srp_request.save() + logger.info("Updated srp request id %s total to %s by user %s" % ( + fleet_srp_request_id, request.POST['value'], request.user)) + return JsonResponse({"success":True,"pk":fleet_srp_request_id,"newValue":request.POST['value']}) @login_required diff --git a/stock/static/css/checkbox.css b/stock/static/css/checkbox.css new file mode 100644 index 00000000..6c2eb2f1 --- /dev/null +++ b/stock/static/css/checkbox.css @@ -0,0 +1,58 @@ +.checkbox label:after, +.radio label:after { + content: ''; + display: table; + clear: both; +} + +.checkbox .cr, +.radio .cr { + position: relative; + display: inline-block; + border: 1px solid #a9a9a9; + border-radius: .25em; + width: 1.3em; + height: 1.3em; + float: left; + margin-right: .5em; +} + +.radio .cr { + border-radius: 50%; +} + +.checkbox .cr .cr-icon, +.radio .cr .cr-icon { + position: absolute; + font-size: .8em; + line-height: 0; + top: 50%; + left: 20%; +} + +.radio .cr .cr-icon { + margin-left: 0.04em; +} + +.checkbox label input[type="checkbox"], +.radio label input[type="radio"] { + display: none; +} + +.checkbox label input[type="checkbox"] + .cr > .cr-icon, +.radio label input[type="radio"] + .cr > .cr-icon { + transform: scale(3) rotateZ(-20deg); + opacity: 0; + transition: all .3s ease-in; +} + +.checkbox label input[type="checkbox"]:checked + .cr > .cr-icon, +.radio label input[type="radio"]:checked + .cr > .cr-icon { + transform: scale(1) rotateZ(0deg); + opacity: 1; +} + +.checkbox label input[type="checkbox"]:disabled + .cr, +.radio label input[type="radio"]:disabled + .cr { + opacity: .5; +} \ No newline at end of file diff --git a/stock/templates/bundles/x-editable-js.html b/stock/templates/bundles/x-editable-js.html new file mode 100644 index 00000000..ab132384 --- /dev/null +++ b/stock/templates/bundles/x-editable-js.html @@ -0,0 +1,4 @@ +{% load static %} + + + diff --git a/stock/templates/bundles/x-editable.css.html b/stock/templates/bundles/x-editable.css.html new file mode 100644 index 00000000..535d4b40 --- /dev/null +++ b/stock/templates/bundles/x-editable.css.html @@ -0,0 +1,4 @@ +{% load staticfiles %} + + + diff --git a/stock/templates/registered/srpfleetdata.html b/stock/templates/registered/srpfleetdata.html index ce526b04..1bbbe862 100755 --- a/stock/templates/registered/srpfleetdata.html +++ b/stock/templates/registered/srpfleetdata.html @@ -7,7 +7,42 @@ {% block title %}Alliance Auth{% endblock %} {% block page_title %}Srp Fleet Data{% endblock page_title %} -{% block extra_css %}{% endblock extra_css %} +{% block extra_css %} + {% include 'bundles/x-editable.css.html' %} + + +{% endblock extra_css %} {% block content %}
{% trans "Pilot Name" %} | -{% trans "Killboard Link" %} | -{% trans "Additional Info" %} | -{% trans "Ship Type" %} | -{% trans "Killboard Loss Amt" %} | -{% trans "SRP ISK Cost" %} | -{% trans "Post Time" %} | -{% trans "Status" %} | - {% if perms.auth.srp_management %} -{% trans "Actions" %} | - {% endif %} -
---|---|---|---|---|---|---|---|---|
{{ srpfleetrequest.character.character_name }} | -- Link - | -{{ srpfleetrequest.additional_info }} | -{{ srpfleetrequest.srp_ship_name }} | -ISK: {{ srpfleetrequest.kb_total_loss | intcomma }} | -ISK: {{ srpfleetrequest.srp_total_amount | intcomma }} | -{{ srpfleetrequest.post_time | date:"Y-m-d H:i" }} | -
- {% if srpfleetrequest.srp_status == "Approved" %}
-
- {% trans "Approved" %}
-
- {% elif srpfleetrequest.srp_status == "Rejected" %}
-
- {% trans "Rejected" %}
-
- {% else %}
-
- {% trans "Pending" %}
-
- {% endif %}
- |
+