def check(self, request, proposal_id): proposal = get_object_or_404(CapabilityProposal, id=proposal_id) if not proposal.capability.organization.character_is_member( request.hero): messages.error(request, "You cannot do that", "danger") return redirect_back(request, reverse('character:character_home'), error_message="You cannot do that")
def conquest_action(request, unit_id): unit = get_object_or_404( WorldUnit, id=unit_id, owner_character=request.hero ) tile_event = get_object_or_404( TileEvent, active=True, type=TileEvent.CONQUEST, tile=unit.location.tile, organization_id=request.POST.get('conqueror_id') ) hours = int(request.POST.get('hours')) if unit.status == WorldUnit.NOT_MOBILIZED: messages.error(request, "Unit not movilized") elif unit.location != request.hero.location: messages.error(request, "You must be in the same region to do this.") elif not 0 < hours <= request.hero.hours_in_turn_left: messages.error(request, "Invalid number of hours") elif request.POST.get('action') == "support": tile_event.counter += unit.get_fighting_soldiers().count() * hours // (15*24) request.hero.hours_in_turn_left -= hours request.hero.save() tile_event.save() elif request.POST.get('action') == "counter": tile_event.counter -= unit.get_fighting_soldiers().count() * hours // (15*24) request.hero.hours_in_turn_left -= hours request.hero.save() tile_event.save() else: messages.error(request, "Invalid action") return redirect_back(request, unit.get_absolute_url())
def pay_debt(request, unit_id): unit = get_object_or_404( WorldUnit, id=unit_id, location=request.hero.location ) # it is allowed to pay units owned by another character owners_debt = unit.get_owners_debt() if owners_debt > request.hero.cash: return redirect_back(request, unit.get_absolute_url, "You don't have that much money") unit.pay_debt(request.hero) messages.success(request, "You paid your full debt of {} coins.".format( owners_debt )) return redirect_back(request, unit.get_absolute_url())
def status_change(request, unit_id, new_status): unit = get_object_or_404(WorldUnit, id=unit_id, owner_character=request.hero) try: unit.change_status(new_status) except WorldUnitStatusChangeException as e: messages.error(request, str(e), "danger") return redirect_back(request, unit.get_absolute_url())
def add_contact(request, character_id): target_character = get_object_or_404(Character, id=character_id, world=request.hero.world) created = MessageRelationship.objects.get_or_create( from_character=request.hero, to_character=target_character)[1] if created: messages.success(request, "Character added to contacts", "success") return redirect_back(request, reverse('character:character_home'))
def rename(request, unit_id): unit = get_object_or_404( WorldUnit, id=unit_id, owner_character=request.hero ) if request.POST.get('name'): unit.name = request.POST.get('name') unit.save() return redirect_back(request, unit.get_absolute_url())
def remove_contact(request, character_id): target_character = get_object_or_404(Character, id=character_id, world=request.hero.world) try: target_relationship = MessageRelationship.objects.get( from_character=request.hero, to_character=target_character) target_relationship.delete() messages.success(request, "Character removed contacts", "success") except MessageRelationship.DoesNotExist: pass return redirect_back(request, reverse('character:character_home'))
def post(self, request, proposal_id): check_result = self.check(request, proposal_id) if check_result is not None: return check_result proposal = get_object_or_404(CapabilityProposal, id=proposal_id) if proposal.closed: return redirect_back(request, reverse('character:character_home'), error_message="Voting closed") issued_vote = request.POST.get('vote') if issued_vote not in dict(CapabilityVote.VOTE_CHOICES).keys(): return redirect_back(request, reverse('character:character_home'), error_message="Invalid vote") proposal.issue_vote(request.hero, issued_vote) messages.success(request, "Your vote has been issued.", "success") return redirect(proposal.get_absolute_url())
def document_view(request, document_id): document = get_object_or_404(PolicyDocument, id=document_id) hero_is_member = document.organization.character_is_member(request.hero) if not document.public and not hero_is_member: return redirect_back(request, reverse('character:character_home'), error_message="You cannot view this document") context = { 'document': document, 'hero_is_member': hero_is_member, } return render(request, 'organization/view_document.html', context)
def banning_capability_view(request, capability_id): capability = get_object_or_404(Capability, id=capability_id, type=Capability.BAN) character_to_ban = get_object_or_404( Character, id=request.POST.get('character_to_ban_id')) if character_to_ban not in capability.applying_to.character_members.all(): return redirect_back(request, reverse('character:character_home'), error_message="You cannot do that") proposal = {'character_id': character_to_ban.id} capability.create_proposal(request.hero, proposal) return capability_success(capability, request)
def arrest_warrant_capability_view(request, capability_id): capability = get_object_or_404(Capability, id=capability_id, type=Capability.ARREST_WARRANT) target_character = get_object_or_404( Character, id=request.POST.get('character_to_imprison_id')) if target_character.world != capability.applying_to.world: return redirect_back(request, reverse('character:character_home'), error_message="You cannot do that") proposal = {'action': 'issue', 'character_id': target_character.id} capability.create_proposal(request.hero, proposal) return capability_success(capability, request)
def battle_settings(request, unit_id): unit = get_object_or_404(WorldUnit, id=unit_id, owner_character=request.hero) battle_line = int(request.POST['battle_line']) battle_side_pos = int(request.POST['battle_side_pos']) if not 0 <= battle_line < 5 or not -5 <= battle_side_pos <= 5: raise Http404("Invalid settings") battle_orders = request.POST['battle_orders'] if battle_orders not in [order[0] for order in Order.WHAT_CHOICES]: raise Http404("Invalid orders") unit.default_battle_orders = Order.objects.create(what=battle_orders) unit.battle_side_pos = battle_side_pos unit.battle_line = battle_line unit.save() return redirect_back(request, unit.get_absolute_url())
def post(self, request, capability_id, document_id=None): if 'delete' in request.POST.keys() and document_id is None: return redirect_back(request, reverse('character:character_home'), error_message="You cannot do that") capability = get_object_or_404( Capability, id=capability_id, type=Capability.POLICY_DOCUMENT) if document_id is None: new_document = True else: document = get_object_or_404(PolicyDocument, id=document_id) new_document = False proposal = { 'new': new_document, 'document_id': None if new_document else document.id, 'delete': 'delete' in request.POST.keys(), 'title': request.POST.get('title'), 'body': request.POST.get('body'), 'public': request.POST.get('public'), } capability.create_proposal(request.hero, proposal) return capability_success(capability, request)
def payment_settings(request, unit_id): unit = get_object_or_404( WorldUnit, id=unit_id, owner_character=request.hero ) if request.POST.get('action') == 'enable' and unit.auto_pay == 0: unit.auto_pay = 1 unit.save() messages.success(request, "You enabled auto payment for {}.".format( unit )) elif request.POST.get('action') == 'disable' and unit.auto_pay == 1: unit.auto_pay = 0 unit.save() messages.success(request, "You disabled auto payment for {}.".format( unit )) else: messages.warning(request, "Invalid action.") return redirect_back(request, unit.get_absolute_url())
def mark_read(request, recipient_id): request.recipient.read = not request.recipient.read request.recipient.save() return redirect_back(request, reverse('messaging:home'))
def mark_favourite(request, recipient_id): request.recipient.favourite = not request.recipient.favourite request.recipient.save() return redirect_back(request, reverse('messaging:home'))
def mark_all_read(request): MessageRecipient.objects.filter(character=request.hero, read=False).update(read=True) return redirect_back(request, reverse('character:character_home'))