Exemplo n.º 1
0
def create_ticket(request):
    if request.method == 'POST':
        form = TicketForm(request.POST, request.FILES)
        form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]
        form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in User.objects.filter(is_active=True).order_by('username')]
        if form.is_valid():
            ticket = form.save(user=request.user)
            return HttpResponseRedirect(ticket.get_absolute_url())
    else:
        initial_data = {}
        if request.user.usersettings.settings.get('use_email_as_submitter', False) and request.user.email:
            initial_data['submitter_email'] = request.user.email
        if request.GET.has_key('queue'):
            initial_data['queue'] = request.GET['queue']

        form = TicketForm(initial=initial_data)
        form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]
        if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
            users = User.objects.filter(is_active=True, is_staff=True).order_by('username')
        else:
            users = User.objects.filter(is_active=True).order_by('username')
        form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in users]
        if helpdesk_settings.HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO:
            form.fields['assigned_to'].widget = forms.HiddenInput()

    return render_to_response('helpdesk/create_ticket.html',
        RequestContext(request, {
            'form': form,
            'tags_enabled': HAS_TAG_SUPPORT,
        }))
Exemplo n.º 2
0
def create_ticket(request):
    if request.method == 'POST':
        form = TicketForm(request.POST, request.FILES)
        form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]
        form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in User.objects.filter(is_active=True).order_by('username')]
        if form.is_valid():
            ticket = form.save(user=request.user)
            return HttpResponseRedirect(ticket.get_absolute_url())
    else:
        initial_data = {}
        if request.user.usersettings.settings.get('use_email_as_submitter', False) and request.user.email:
            initial_data['submitter_email'] = request.user.email
        if request.GET.has_key('queue'):
            initial_data['queue'] = request.GET['queue']

        form = TicketForm(initial=initial_data)
        form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]

        if request.user.is_superuser:
            assigned_to_choices_filter = {'is_active':True}
        else:
            assigned_to_choices_filter = {'is_active':True, 'is_superuser':True}

        form.fields['assigned_to'].choices = [('', '--------')] + \
         [[u.id, u.username] for u in User.objects.filter(**assigned_to_choices_filter).order_by('username')]

    return render_to_response('helpdesk/create_ticket.html',
        RequestContext(request, {
            'form': form,
            'tags_enabled': HAS_TAG_SUPPORT,
        }))
Exemplo n.º 3
0
def create_ticket(request):
    if request.method == "POST":
        # add request to process user related events
        form = TicketForm(request.POST, request.FILES, request=request)
        form.fields["queue"].choices = [("", "--------")] + [[q.id, q.title] for q in Queue.objects.all()]
        form.fields["assigned_to"].choices = [("", "--------")] + [
            [u.id, u.username] for u in User.objects.filter(is_active=True).order_by("username")
        ]
        if form.is_valid():
            ticket = form.save(user=request.user)
            return HttpResponseRedirect(ticket.get_absolute_url())
    else:
        initial_data = {}
        if request.user.usersettings.settings.get("use_email_as_submitter", False) and request.user.email:
            initial_data["submitter_email"] = request.user.email
        if request.GET.has_key("queue"):
            initial_data["queue"] = request.GET["queue"]

        form = TicketForm(initial=initial_data)
        form.fields["queue"].choices = [("", "--------")] + [[q.id, q.title] for q in Queue.objects.all()]
        if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
            users = User.objects.filter(is_active=True, is_staff=True).order_by("username")
        else:
            users = User.objects.filter(is_active=True).order_by("username")
        form.fields["assigned_to"].choices = [("", "--------")] + [[u.id, u.username] for u in users]
        if helpdesk_settings.HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO:
            form.fields["assigned_to"].widget = forms.HiddenInput()

    return render_to_response(
        "helpdesk/create_ticket.html",
        RequestContext(
            request, {"form": form, "tagging_enabled": HAS_TAGGING_SUPPORT, "taggit_enabled": HAS_TAGGIT_SUPPORT}
        ),
    )
Exemplo n.º 4
0
    def api_public_create_ticket(self):
        form = TicketForm(self.request.POST)
        form.fields['queue'].choices = [[q.id, q.title] for q in Queue.objects.all()]
        form.fields['assigned_to'].choices = [[u.id, u.username] for u in User.objects.filter(is_active=True)]

        if form.is_valid():
            ticket = form.save(user=self.request.user)
            return api_return(STATUS_OK, "%s" % ticket.id)
        else:
            return api_return(STATUS_ERROR, text=form.errors.as_text())
Exemplo n.º 5
0
    def api_public_create_ticket(self):
        form = TicketForm(self.request.POST)
        form.fields['queue'].choices = [[q.id, q.title] for q in Queue.objects.all()]
        form.fields['assigned_to'].choices = [[u.id, u.get_username()] for u in User.objects.filter(is_active=True)]

        if form.is_valid():
            ticket = form.save(user=self.request.user)
            return api_return(STATUS_OK, "%s" % ticket.id)
        else:
            return api_return(STATUS_ERROR, text=form.errors.as_text())
Exemplo n.º 6
0
 def dispatch(self, request, *args, **kwargs):
     self.object = self.get_object()
     self.reply_form = CommentForm(request.POST or None if 'reply' in
                                   request.POST else None)
     self.ticket_form = TicketForm(
         request.POST or None if 'ticket' in request.POST else None,
         instance=self.object)
     self.attachment_formset = AttachmentFormset(
         data=request.POST or None if 'reply' in request.POST else None,
         files=request.FILES or None)
     return super(TicketView, self).dispatch(request, *args, **kwargs)
Exemplo n.º 7
0
def form_data(request):

    from helpdesk.forms import TicketForm, PublicTicketForm
    from helpdesk.models import Queue

    assignable_users = User.objects.filter(is_active=True).order_by(
        User.USERNAME_FIELD)
    initial_data = {}
    form = PublicTicketForm(initial=initial_data)

    try:
        if request.user.email:
            initial_data['submitter_email'] = request.user.email
        if 'queue' in request.GET:
            initial_data['queue'] = request.GET['queue']

        if request.user.is_staff:
            form = TicketForm(initial=initial_data)
            form.fields['queue'].choices = [
                ('', '--------')
            ] + [[q.id, q.title] for q in Queue.objects.all()]
            form.fields['assigned_to'].choices = [
                ('', '--------')
            ] + [[u.id, u.get_username()] for u in assignable_users]
        else:
            form = PublicTicketForm(initial=initial_data)
            form.fields['queue'].choices = [
                ('', '--------')
            ] + [[q.id, q.title] for q in Queue.objects.all()]

    except Exception, e:
        pass
Exemplo n.º 8
0
 def dispatch(self, request, *args, **kwargs):
     self.object = self.get_object()
     self.reply_form = CommentForm(request.POST or None if 'reply' in request.POST else None)
     self.ticket_form = TicketForm(request.POST or None if 'ticket' in request.POST else None,
                                   instance=self.object)
     self.attachment_formset = AttachmentFormset(data=request.POST or None if 'reply' in request.POST else None,
                                                 files=request.FILES or None)
     return super(TicketView, self).dispatch(request, *args, **kwargs)
Exemplo n.º 9
0
def create_ticket(request):
    if request.method == 'POST':
        id = request.POST.get('id')
        if id:
            ticket = get_object_or_404(Ticket, id=id)
            form = EditTicketForm(request.POST, request.FILES, instance=ticket)
        else:
            form = TicketForm(request.POST, request.FILES)

        if form.is_valid():
            if id:
                ticket = form.save()
            else:
                ticket = form.save(user=request.user)
            return HttpResponseRedirect(ticket.get_absolute_url())
    else:
        initial_data = {}
        id = request.GET.get('id')
        account_id = request.GET.get('account_id')
        if account_id:
            initial_data['account'] = Account.objects.get(id=account_id)

        if request.user.usersettings.settings.get(
                'use_email_as_submitter',
                False) and request.user.account.email:
            initial_data['submitter_email'] = request.user.account.email

        if id:
            ticket = get_object_or_404(Ticket, id=id)
            form = EditTicketForm(instance=ticket)
        else:
            form = TicketForm(initial=initial_data)

        form.fields['assigned_to'].initial = request.user.account
        form.fields['owner'].initial = request.user

    return render_to_response(
        'helpdesk/create_ticket.html',
        RequestContext(request, {
            'form': form,
            'tags_enabled': HAS_TAG_SUPPORT,
        }))
Exemplo n.º 10
0
def create_ticket(request):
    if request.method == 'POST':
        form = TicketForm(request.POST, request.FILES)
        form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]
        form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in User.objects.filter(is_active=True).order_by('username')]
        if form.is_valid():
            ticket = form.save(user=request.user)
            return HttpResponseRedirect(ticket.get_absolute_url())
    else:
        initial_data = {}
        if request.user.usersettings.settings.get('use_email_as_submitter', False) and request.user.email:
            initial_data['submitter_email'] = request.user.email
        if request.GET.has_key('queue'):
            initial_data['queue'] = request.GET['queue']

        form = TicketForm(initial=initial_data)
        form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]
        if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
            users = User.objects.filter(is_active=True, is_staff=True).order_by('username')
        else:
            users = User.objects.filter(is_active=True).order_by('username')
        form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in users]
        if helpdesk_settings.HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO:
            form.fields['assigned_to'].widget = forms.HiddenInput()

    return render_to_response('helpdesk/create_ticket.html',
        RequestContext(request, {
            'form': form,
            'tags_enabled': HAS_TAG_SUPPORT,
        }))
Exemplo n.º 11
0
def view_ticket(request, ticket_id):
    ticket = get_object_or_404(Ticket, id=ticket_id)

    if request.GET.has_key('take'):
        # Allow the user to assign the ticket to themselves whilst viewing it.

        # Trick the update_ticket() view into thinking it's being called with
        # a valid POST.
        request.POST = {
            'owner': request.user.id,
            'public': 1,
            'title': ticket.title,
            'comment': ''
        }
        return update_ticket(request, ticket_id)

    if request.GET.has_key('close') and ticket.status == Ticket.RESOLVED_STATUS:
        if not ticket.assigned_to:
            owner = 0
        else:
            owner = ticket.assigned_to.id

        # Trick the update_ticket() view into thinking it's being called with
        # a valid POST.
        request.POST = {
            'new_status': Ticket.CLOSED_STATUS,
            'public': 1,
            'owner': owner,
            'title': ticket.title,
            'comment': _('Accepted resolution and closed ticket'),
            }

        return update_ticket(request, ticket_id)

    if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
        users = User.objects.filter(is_active=True, is_staff=True).order_by('username')
    else:
        users = User.objects.filter(is_active=True).order_by('username')


    # TODO: shouldn't this template get a form to begin with?
    form = TicketForm(initial={'due_date':ticket.due_date})

    return render_to_response('helpdesk/ticket.html',
        RequestContext(request, {
            'ticket': ticket,
            'form': form,
            'active_users': users,
            'priorities': Ticket.PRIORITY_CHOICES,
            'preset_replies': PreSetReply.objects.filter(Q(queues=ticket.queue) | Q(queues__isnull=True)),
            'tags_enabled': HAS_TAG_SUPPORT,
        }))
Exemplo n.º 12
0
class TicketView(DetailView):
    template_name = 'helpdesk/ticket.html'
    model = Ticket
    reply_form = None
    ticket_form = None
    attachment_formset = None

    def dispatch(self, request, *args, **kwargs):
        self.object = self.get_object()
        self.reply_form = CommentForm(request.POST or None if 'reply' in request.POST else None)
        self.ticket_form = TicketForm(request.POST or None if 'ticket' in request.POST else None,
                                      instance=self.object)
        self.attachment_formset = AttachmentFormset(data=request.POST or None if 'reply' in request.POST else None,
                                                    files=request.FILES or None)
        return super(TicketView, self).dispatch(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        ticket = self.get_object()
        self.object = ticket
        if 'reply' in request.POST and self.reply_form.is_valid() and self.attachment_formset.is_valid():
            reply = self.reply_form.save(commit=False)
            reply.author = request.user
            reply.ticket = ticket
            reply.save()

            self.attachment_formset.instance = reply
            self.attachment_formset.save()

            ticket.state = self.reply_form.cleaned_data['state']
            ticket.save()

            new_answer.send(sender=Comment, ticket=ticket, answer=reply)
            HistoryAction.objects.create(
                user=reply.author,
                change='added %scomment and set state to <i>%s</i>' % (
                    'internal ' if reply.internal else '',
                    reply.ticket.state),
                ticket=reply.ticket
            )

            return HttpResponseRedirect(reverse('helpdesk_home'))
        elif 'ticket' in request.POST and self.ticket_form.is_valid():
            changes = []
            for fieldname in self.ticket_form.changed_data:
                old_value = self._get_display_value(fieldname)
                setattr(self.object, fieldname, self.ticket_form.cleaned_data[fieldname])
                new_value = self._get_display_value(fieldname)
                changes.append('%s: %s → %s' % (fieldname, old_value, new_value))
            self.object.save(update_fields=self.ticket_form.changed_data)
            if changes:
                HistoryAction.objects.create(
                    user=request.user,
                    change='\n'.join(changes),
                    ticket=self.object
                )
                ticket_updated.send(sender=Ticket,
                                    changed_data=self.ticket_form.changed_data,
                                    changes=changes,
                                    ticket=self.object,
                                    updater=request.user)
            return HttpResponseRedirect(reverse('helpdesk_home'))
        return self.render_to_response(self.get_context_data())

    def _get_display_value(self, fieldname):
        try:
            return getattr(self.object, 'get_%s_display' % fieldname)()
        except:
            return getattr(self.object, fieldname)

    def get_comments(self):
        return self.object.comment_set.all().order_by('created')

    def get_context_data(self, **kwargs):
        context = super(TicketView, self).get_context_data(**kwargs)
        context['comments'] = self.get_comments()
        context['reply_form'] = self.reply_form
        context['ticket_form'] = self.ticket_form
        context['history'] = self.object.historyaction_set.all().order_by('-created')
        context['attachments'] = self.object.attachments.all()
        context['attachment_formset'] = self.attachment_formset
        return context
Exemplo n.º 13
0
class TicketView(DetailView):
    template_name = 'helpdesk/ticket.html'
    model = Ticket
    reply_form = None
    ticket_form = None
    attachment_formset = None

    def dispatch(self, request, *args, **kwargs):
        self.object = self.get_object()
        self.reply_form = CommentForm(request.POST or None if 'reply' in
                                      request.POST else None)
        self.ticket_form = TicketForm(
            request.POST or None if 'ticket' in request.POST else None,
            instance=self.object)
        self.attachment_formset = AttachmentFormset(
            data=request.POST or None if 'reply' in request.POST else None,
            files=request.FILES or None)
        return super(TicketView, self).dispatch(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        ticket = self.get_object()
        self.object = ticket
        if 'reply' in request.POST and self.reply_form.is_valid(
        ) and self.attachment_formset.is_valid():
            reply = self.reply_form.save(commit=False)
            reply.author = request.user
            reply.ticket = ticket
            reply.save()

            self.attachment_formset.instance = reply
            self.attachment_formset.save()

            ticket.state = self.reply_form.cleaned_data['state']
            ticket.save()

            new_answer.send(sender=Comment, ticket=ticket, answer=reply)
            HistoryAction.objects.create(
                user=reply.author,
                change='added %scomment and set state to <i>%s</i>' %
                ('internal ' if reply.internal else '', reply.ticket.state),
                ticket=reply.ticket)

            return HttpResponseRedirect(reverse('helpdesk_home'))
        elif 'ticket' in request.POST and self.ticket_form.is_valid():
            changes = []
            for fieldname in self.ticket_form.changed_data:
                old_value = self._get_display_value(fieldname)
                setattr(self.object, fieldname,
                        self.ticket_form.cleaned_data[fieldname])
                new_value = self._get_display_value(fieldname)
                changes.append('%s: %s → %s' %
                               (fieldname, old_value, new_value))
            self.object.save(update_fields=self.ticket_form.changed_data)
            if changes:
                HistoryAction.objects.create(user=request.user,
                                             change='\n'.join(changes),
                                             ticket=self.object)
                ticket_updated.send(sender=Ticket,
                                    changed_data=self.ticket_form.changed_data,
                                    changes=changes,
                                    ticket=self.object,
                                    updater=request.user)
            return HttpResponseRedirect(reverse('helpdesk_home'))
        return self.render_to_response(self.get_context_data())

    def _get_display_value(self, fieldname):
        try:
            return getattr(self.object, 'get_%s_display' % fieldname)()
        except:
            return getattr(self.object, fieldname)

    def get_comments(self):
        return self.object.comment_set.all().order_by('created')

    def get_context_data(self, **kwargs):
        context = super(TicketView, self).get_context_data(**kwargs)
        context['comments'] = self.get_comments()
        context['reply_form'] = self.reply_form
        context['ticket_form'] = self.ticket_form
        context['history'] = self.object.historyaction_set.all().order_by(
            '-created')
        context['attachments'] = self.object.attachments.all()
        context['attachment_formset'] = self.attachment_formset
        return context