Beispiel #1
0
def add(request):
    if request.method =='POST':
        form = TicketForm(request.POST)
        #print repr(form.cleaned_data)
        print request.POST
        if form.is_valid():
            d = form.cleaned_data
            t = Ticket()
            t.priority = d['priority']
            t.category = d['category']
            t.summary = d['summary']
            t.filedtime = datetime.datetime.now()
            t.lasttouched = t.filedtime
            t.filedby = request.user.member
            t.origin = d['origin']
            t.status = d['status']
            t.save()
            t.punts = d['punts']
            fs = d['autofiles']
            fs = fs.split(',')
            for f in fs:
                try:
                    f = int(f)
                    af = File.objects.get(id=f)
                    t.files.add(af)
                except:
                    pass
                    
            
            t.files.add(*d['files'])
            t.assignedto.add(*d['assignedto'])
            t.save()
            #print repr(form.cleaned_data)
            return HttpResponseRedirect(('/tickets/'+str(t.id)+'/'))
            return detail(request, t.id)
    else:
        form = TicketForm()
    return newticket(request,form)
Beispiel #2
0
def email2ticket(string):
    """ Parse un mail et crée ou modifie le ticket concerné """
    errors = []

    mail = email.message_from_string(string)
    cur = None

    match = pattern_from.search(mail.get('From', ''))

    mail_from = mail.get('Return-Path',
        mail.get('Reply-To', match.groups()[0] if match else None))

    references = mail.get('References', '').split()

    if not references:
        references = mail.get('In-Reply-To', '').split()

    if references:
        ticket = Ticket.objects.get(message_id__in=references)
    else:
        ticket = Ticket()

    # Get first part
    for part in mail.walk():
        if part.get_content_type() in ('text/html', 'text/plain'):
            cur = part
            break

    if cur is None:
        return send_error(mail_from, ['Impossible de parser le message'])

    content = cur.get_payload(decode=True)

    if cur.get_content_type() == 'text/html':
        enc = cur.get_charsets()[0]
        content = content.decode(enc, 'ignore')
        content = html2text(content)

    match = pattern_body.search(content)

    if not match:
        errors.append('Contenu vide ou non encadré par [contenu][/contenu]')
        content = None
    else:
        content = match.groups()[0]

    user = User.objects.get(pk=settings.EMAIL_USER_PK)

    if references and content:  # New comment
        form = type("", (), {})()
        form.cleaned_data = {'comment': content, 'internal': False}
        form.instance = ticket
        request = type("", (), {})()
        request.user = user
        post_comment(form, request)
        print "Ticket commenté ", ticket.pk
    elif not references:  # New ticket
        try:
            subject = mail.get('Subject', '')
            match = pattern_subject.search(subject)
            ticket.client = Client.objects.get(pk=match.groups()[0])
            subject = subject[match.span()[1]:]
            ticket.title = " ".join([part[0].decode(part[1] or 'utf8') for part in email.header.decode_header(subject)])
        except:
            errors.append('Impossible de parser le sujet, client invalide ou sujet mal formé')

        if errors:
            send_error(mail_from, errors)
        else:
            ticket.message_id = mail.get('Message-ID', None)
            ticket.opened_by = user
            ticket.state = State.objects.get(pk=settings.TICKET_STATE_NEW)
            ticket.category = Category.objects.get(pk=settings.EMAIL_TICKET_CATEGORY_DEFAULT)
            ticket.text = content
            ticket.save()
            print "Ticket crée : ", ticket.pk
    elif errors:
        send_error(mail_from, errors)

    # Get attachements
    for part in mail.walk():
        filename = part.get_filename()
        content_type = part.get_content_type()
        if filename and content_type in settings.IMAP_ALLOWED_CONTENT_TYPES:
            ticket_file = TicketFile(ticket=ticket,
                                     filename=filename,
                                     content_type=content_type,
                                     data=part.get_payload(decode=True))
            ticket_file.save()