示例#1
0
文件: cron.py 项目: tovmeod/anaf
def tickets_escalate():
    "Automatically move tickets to upper queues when no action taken"

    # Collect queues which have waiting time and next queue specified
    queues = TicketQueue.objects.filter(
        waiting_time__isnull=False, next_queue__isnull=False)
    now = datetime.datetime.now()

    for queue in queues:
        if queue.waiting_time and queue.next_queue:
            # Calculate the timeframe outside of which idle tickets should be
            # escalated
            delta = datetime.timedelta(seconds=int(queue.waiting_time))
            timeframe = now - delta

            # Collect tickets ourside the timeframe
            tickets = queue.ticket_set.filter(
                date_created__lt=timeframe, status__active=True)
            for ticket in tickets:
                # Identify if any recent updates have been made on the ticket
                updates = ticket.updates.filter(
                    date_created__gte=timeframe).exists()
                if not updates:
                    ticket.queue = queue.next_queue
                    ticket.auto_notify = False
                    ticket.save()
                    record = TicketRecord(record_type='update')
                    record.format_message = 'Ticket automatically escalated from <a href="' + \
                        reverse('services_queue_view', args=[queue.id]) + \
                        '">' + unicode(queue) + '</a> to <a href="' + \
                        reverse('services_queue_view', args=[queue.next_queue.id]) + \
                        '">' + \
                        unicode(queue.next_queue) + '</a>.'
                    record.author = ticket.creator
                    record.save()
                    record.about.add(ticket)
                    ticket.set_last_updated()
示例#2
0
def ticket_view(request, ticket_id, response_format='html'):
    "Ticket view"

    context = _get_default_context(request)
    agent = context['agent']
    profile = request.user.profile

    ticket = get_object_or_404(Ticket, pk=ticket_id)
    if not profile.has_permission(ticket):
        return user_denied(request,
                           message="You don't have access to this Ticket")

    if ticket.message:
        ticket.message.read_by.add(profile)

    if profile.has_permission(ticket, mode='x'):
        if request.POST:
            record = TicketRecord(sender=profile.get_contact())
            record.record_type = 'manual'
            if ticket.message:
                record.message = ticket.message
            form = TicketRecordForm(agent,
                                    ticket,
                                    request.POST,
                                    instance=record)
            if form.is_valid():
                record = form.save()
                record.save()
                record.set_user_from_request(request)
                record.about.add(ticket)
                ticket.set_last_updated()
                return HttpResponseRedirect(
                    reverse('services_ticket_view', args=[ticket.id]))

        else:
            form = TicketRecordForm(agent, ticket)
    else:
        form = None

    context.update({'ticket': ticket, 'record_form': form})

    return render_to_response('services/ticket_view',
                              context,
                              context_instance=RequestContext(request),
                              response_format=response_format)
示例#3
0
文件: views.py 项目: tovmeod/anaf
def ticket_view(request, ticket_id, response_format='html'):
    "Ticket view"

    context = _get_default_context(request)
    agent = context['agent']
    profile = request.user.profile

    ticket = get_object_or_404(Ticket, pk=ticket_id)
    if not profile.has_permission(ticket):
        return user_denied(request, message="You don't have access to this Ticket")

    if ticket.message:
        ticket.message.read_by.add(profile)

    if profile.has_permission(ticket, mode='x'):
        if request.POST:
            record = TicketRecord(sender=profile.get_contact())
            record.record_type = 'manual'
            if ticket.message:
                record.message = ticket.message
            form = TicketRecordForm(
                agent, ticket, request.POST, instance=record)
            if form.is_valid():
                record = form.save()
                record.save()
                record.set_user_from_request(request)
                record.about.add(ticket)
                ticket.set_last_updated()
                return HttpResponseRedirect(reverse('services_ticket_view', args=[ticket.id]))

        else:
            form = TicketRecordForm(agent, ticket)
    else:
        form = None

    context.update({'ticket': ticket, 'record_form': form})

    return render_to_response('services/ticket_view', context,
                              context_instance=RequestContext(request), response_format=response_format)
示例#4
0
def tickets_escalate():
    "Automatically move tickets to upper queues when no action taken"

    # Collect queues which have waiting time and next queue specified
    queues = TicketQueue.objects.filter(waiting_time__isnull=False,
                                        next_queue__isnull=False)
    now = datetime.datetime.now()

    for queue in queues:
        if queue.waiting_time and queue.next_queue:
            # Calculate the timeframe outside of which idle tickets should be
            # escalated
            delta = datetime.timedelta(seconds=int(queue.waiting_time))
            timeframe = now - delta

            # Collect tickets ourside the timeframe
            tickets = queue.ticket_set.filter(date_created__lt=timeframe,
                                              status__active=True)
            for ticket in tickets:
                # Identify if any recent updates have been made on the ticket
                updates = ticket.updates.filter(
                    date_created__gte=timeframe).exists()
                if not updates:
                    ticket.queue = queue.next_queue
                    ticket.auto_notify = False
                    ticket.save()
                    record = TicketRecord(record_type='update')
                    record.format_message = 'Ticket automatically escalated from <a href="' + \
                        reverse('services_queue_view', args=[queue.id]) + \
                        '">' + unicode(queue) + '</a> to <a href="' + \
                        reverse('services_queue_view', args=[queue.next_queue.id]) + \
                        '">' + \
                        unicode(queue.next_queue) + '</a>.'
                    record.author = ticket.creator
                    record.save()
                    record.about.add(ticket)
                    ticket.set_last_updated()