def claim_create(request, score_id): """ Добавление претензии на странице параметра. """ user = request.user score = get_object_or_404(Score, pk=score_id) redirect = reverse('exmo2010:score_view', args=[score.pk, ]) redirect += '#claims' # Named Anchor для открытия нужной вкладки title = _('Add new claim for %s') % score if request.method == 'POST' and ( user.has_perm('exmo2010.add_claim_score', score) or user.has_perm('exmo2010.answer_claim_score', score)): form = ClaimAddForm(request.POST, prefix="claim") if form.is_valid(): # Если заполнено поле claim_id, значит это ответ на претензию if form.cleaned_data['claim_id'] is not None and user.has_perm('exmo2010.answer_claim_score', score): claim_id = form.cleaned_data['claim_id'] claim = get_object_or_404(Claim, pk=claim_id) answer = form.cleaned_data['comment'] claim.add_answer(user, answer) else: # Если поле claim_id пустое, значит это выставление претензии claim = score.add_claim(user, form.cleaned_data['comment']) claim_was_posted_or_deleted.send( sender=Claim.__class__, claim=claim, request=request, creation=True, ) return HttpResponseRedirect(redirect) else: crumbs = ['Home', 'Monitoring', 'Organization', 'ScoreList', 'ScoreView'] breadcrumbs(request, crumbs, score) current_title = _('Create claim') return render_to_response( 'claim_form.html', { 'monitoring': score.task.organization.monitoring, 'task': score.task, 'score': score, 'current_title': current_title, 'title': title, 'form': form, }, context_instance=RequestContext(request), ) else: raise Http404
def claim_manager(request, score_id, claim_id=None, method=None): """ Вью для манипуляции с претензиями. """ score = get_object_or_404(Score, pk=score_id) redirect = reverse('exmo2010:score_view', args=[score.pk]) title = _('Add new claim for %s') % score if claim_id: claim = get_object_or_404(Claim, pk=claim_id) elif not method: # create new if not request.user.has_perm('exmo2010.add_claim', score): return HttpResponseForbidden(_('Forbidden')) if request.method == 'GET': form = ClaimForm() form.fields['creator'].initial = request.user.pk form.fields['score'].initial = score.pk elif request.method == 'POST': form = ClaimForm(request.POST) if form.is_valid(): if form.cleaned_data['score'] == score and form.cleaned_data['creator'] == request.user: claim = score.add_claim(request.user, form.cleaned_data['comment']) claim_was_posted_or_deleted.send( sender=Claim.__class__, claim=claim, request=request, creation=True, ) return HttpResponseRedirect(redirect) crumbs = ['Home', 'Monitoring', 'Organization', 'ScoreList', 'ScoreView'] breadcrumbs(request, crumbs, score) current_title = _('Edit claim') return render_to_response( 'claim_form.html', { 'monitoring': score.task.organization.monitoring, 'task': score.task, 'score': score, 'current_title': current_title, 'title': title, 'form': form, }, context_instance=RequestContext(request), )
def claim_delete(request): """ Удаление претензии (AJAX). """ if request.is_ajax() and request.method == 'POST': claim_id = request.POST.get('pk') if claim_id is not None: claim = get_object_or_404(Claim, pk=claim_id) claim.delete() result = simplejson.dumps({'success': True}) claim_was_posted_or_deleted.send( sender=Claim.__class__, claim=claim, request=request, creation=False, ) return HttpResponse(result, mimetype='application/json') raise Http404