Example #1
0
def edit_ticket(request, ticket_id=None, project=None,
    template='ponymine/edit_ticket.html', redirect_url=None,
    form_class=TicketForm):
    """
    Creates or modifies a ticket
    """
    data = {}

    # get the ticket
    if ticket_id:
        ticket = get_object_or_404(Ticket, pk=ticket_id)
        project = ticket.project
    else:
        ticket = Ticket(project=project)

    data['ticket'] = ticket

    utils.check_membership(project, request.user)

    if request.method == "POST":
        form = form_class(request.POST, instance=ticket)
        if form.is_valid():
            # copy the existing ticket so we can make the change log
            old_ticket = copy.copy(ticket)

            # create or update the ticket
            new_ticket = form.save(commit=False)
            if not new_ticket.id:
                new_ticket.reported_by = request.user
                new_ticket.project = project
            new_ticket.save()

            # log any differences between the tickets
            utils.create_change_logs(request,
                                     old_ticket,
                                     new_ticket,
                                     form.cleaned_data.get('notes', ''))

            # determine where the user should go after saving the ticket
            if not redirect_url:
                redirect_url = new_ticket.get_absolute_url()

            return HttpResponseRedirect(redirect_url)
    else:
        # set the ticket's status based on the query string
        status_id = request.GET.get('status', None)
        if status_id:
            ticket.status = Status.objects.get(pk=int(status_id))
        form = form_class(instance=ticket)

    # limit which users can be assigned a ticket
    project_member_ids = [u.id for u in project.members.all()]
    members = User.objects.filter(pk__in=project_member_ids)
    form.limit_assignable_users(members)

    data['title'] = ticket.id and _('Update Ticket') or _('New Ticket')
    data['form'] = form
    data['project'] = project

    return render(template, data, context_instance=RequestContext(request))
Example #2
0
from django.db import models
from ponymine.models import Project, Ticket

class Milestone(models.Model):
    project = models.ForeignKey(Project)
    name = models.CharField(max_length=75)
    due_date = models.DateField(blank=True, null=True)
    description = models.TextField()
    is_complete = models.BooleanField(default=False, blank=True)
    
    class Meta:
        ordering = ('-due_date', 'name')

if not getattr(Ticket, 'milestone', None):
    # Add a milestone column to our Ticket class if it hasn't been added yet
    Ticket.add_to_class('milestone', models.ForeignKey(Milestone, blank=True, null=True))