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, }))
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, }))
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} ), )
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())
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())
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
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