示例#1
0
文件: views.py 项目: alarin/carrot
def ticket_edit(request, project_slug=None, ticket_number=None):
    is_new = not ticket_number
    if is_new:
        ticket = Ticket()
    else:
        ticket = get_object_or_404(Ticket, number=ticket_number, project__slug=project_slug)
    images = ticket.attachments.filter(kind='image').order_by('created')
    files = ticket.attachments.exclude(kind='image').order_by('created')
    estimate = TicketEstimate.objects.filter(ticket=ticket)
    if is_new:
        initial_data = {
            'project': request.GET.get('project'),
            'fix_version': request.GET.get('version'),
            'estimate': estimate and estimate[0].hours or '',
        }
    else:
        initial_data = {
            'estimate': estimate and estimate[0].hours or '',
        }
    ticket_form = TicketForm(instance=ticket, initial=initial_data)

    def get_redirect_path(ticket):
        if not ticket.pk:
            return redirect('/')
        return request.POST.get('next') or\
            redirect('carrot_ticket', project_slug=ticket.project.slug, ticket_number=ticket.number)

    if request.method == 'POST':
        if request.POST.get('action') == 'save':
            ticket_form = TicketForm(request.POST, files=request.FILES, instance=ticket)
            if ticket_form.is_valid():
                ticket = ticket_form.save(commit=False)
                if not ticket.pk or not ticket.reporter:
                    ticket.reporter = request.user
                ticket.save(user=request.user)
                if request.user.carrotprofile.role() == 'pm':
                    if ticket_form.cleaned_data['estimate']:
                        te = TicketEstimate.objects.get_or_create(ticket=ticket)[0]
                        te.hours = int(ticket_form.cleaned_data['estimate'])
                        te.save()
                if ticket_form.cleaned_data['file']:
                    TicketAttachment.objects.create(ticket=ticket, file=ticket_form.cleaned_data['file'])
                return get_redirect_path(ticket)
        if request.POST.get('action', 'cancel') == 'cancel':
            return get_redirect_path(ticket)

    data = {
        'new': is_new,
        'ticket': ticket,
        'files': files,
        'images': images,
        'ticket_form': ticket_form,
        'all_versions': Version.objects.filter(is_completed=False).select_related(),
    }
    return TemplateResponse(request, 'carrot/tickets/ticket_edit.html', data)