diff --git a/docs/install.rst b/docs/install.rst index 82a55c78..da306c6c 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -56,11 +56,7 @@ Adding To Your Django Project ./manage.py syncdb - If you're wise enough to use South, the first migration will need to be a fake:: - - ./manage.py migrate helpdesk 0001 --fake - - After the initial migration, all others are done in the usual way:: + Then migrate using South ./manage.py migrate helpdesk diff --git a/docs/settings.rst b/docs/settings.rst index 6e9d250a..c1e89089 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -1,6 +1,14 @@ Settings ======== +First, django-helpdesk needs ``django.core.context_processors.request`` activated, so in your ``settings.py`` add:: + + from django.conf import global_settings + TEMPLATE_CONTEXT_PROCESSORS = ( + global_settings.TEMPLATE_CONTEXT_PROCESSORS + + ('django.core.context_processors.request',) + ) + The following settings can be changed in your ``settings.py`` file to help change the way django-helpdesk operates. HELPDESK_DEFAULT_SETTINGS diff --git a/helpdesk/fixtures/initial_data.json b/helpdesk/fixtures/initial_data.json index 1ecb3262..18a97d24 100644 --- a/helpdesk/fixtures/initial_data.json +++ b/helpdesk/fixtures/initial_data.json @@ -574,5 +574,389 @@ "subject": "(Aktualisiert)", "locale": "de" } + }, + { + "pk": 49, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Assign\u00e9", + "html": "
Bonjour,
\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} ({{ ticket.title }}) par {{ ticket.submitter_email }} {% if ticket.assigned_to %}a \u00e9t\u00e9 assign\u00e9 \u00e0 {{ ticket.assigned_to }}{% else %} n'est plus assign\u00e9 \u00e0 personne{% endif %}.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} {% if ticket.assigned_to %} a \u00e9t\u00e9 assign\u00e9 \u00e0 {{ ticket.assigned_to }}{% else %} n'est plus assign\u00e9 \u00e0 personne{% endif %}.\r\n\r\nIdentifiant\u00a0: {{ ticket.ticket }}\r\nFile d'attente\u00a0: {{ queue.title }}\r\nTitre\u00a0: {{ ticket.title }}\r\nOuvert le\u00a0: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par\u00a0: {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9\u00a0: {{ ticket.get_priority_display }}\r\nStatut\u00a0: {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0\u00a0: {{ ticket.get_assigned_to }}\r\nAdresse\u00a0: {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait\u00a0:\r\n\r\n{{ ticket.description }}\r\n\r\n", + "subject": "(Assign\u00e9)", + "template_name": "assigned_cc" + } + }, + { + "pk": 50, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Le ticket vous est assign\u00e9", + "html": "
Bonjour,
\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} ({{ ticket.title }}) pour {{ ticket.submitter_email }} vous a \u00e9t\u00e9 assign\u00e9.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") pour {{ ticket.submitter_email }} vous a \u00e9t\u00e9 assign\u00e9.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}", + "subject": "(Pour vous)", + "template_name": "assigned_owner" + } + }, + { + "pk": 51, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Ferm\u00e9", + "html": "
Bonjour,
\r\n\r\nLe ticket {{ ticket.title }} ('{{ ticket.title }}'){% if ticket.assigned_to %}, assign\u00e9 \u00e0 {{ ticket.get_assigned_to }}{% endif %} a \u00e9t\u00e9 ferm\u00e9.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n
La motivation de r\u00e9solution est:
\r\n\r\n{{ resolution }}", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nLe ticket {{ ticket.title }} (\"{{ ticket.title }}\"){% if ticket.assigned_to %}, assign\u00e9 \u00e0 {{ ticket.assigned_to }}{% endif %} a \u00e9t\u00e9 ferm\u00e9.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}\r\n\r\n", + "subject": "(Ferm\u00e9)", + "template_name": "closed_cc" + } + }, + { + "pk": 52, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Ferm\u00e9", + "html": "
Bonjour,
\r\n\r\n\r\nLe ticket suivant qui vous est actuellement assign\u00e9 a \u00e9t\u00e9 ferm\u00e9.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n
La motivation de r\u00e9solution est:
\r\n\r\n{{ resolution }}\r\n", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nLe ticket suivant qui vous est actuellement assign\u00e9 a \u00e9t\u00e9 ferm\u00e9.\r\n\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }} (authentification obligatoire)\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}", + "subject": "(Ferm\u00e9 - \u00e0 vous)", + "template_name": "closed_owner" + } + }, + { + "pk": 53, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Ferm\u00e9", + "html": "
Bonjour,
\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }}. Ce courriel vous confirme que ce ticket a \u00e9t\u00e9 ferm\u00e9.
\r\n\r\n\"La r\u00e9solution a \u00e9t\u00e9 motiv\u00e9e ainsi :
\r\n\r\n{{ ticket.resolution }}\r\n\r\n
Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.
\r\n\r\nSi vous pensez que nous devons encore travailler sur ce probl\u00e8me, faites le nous savoir en r\u00e9pondant \u00e0 ce courriel en conservant le sujet tel-quel..
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\". Ce courriel vous confirme que ce ticket a \u00e9t\u00e9 ferm\u00e9.\r\n\r\nSi vous pensez que nous devons encore travailler sur ce probl\u00e8me, faites le nous savoir en r\u00e9pondant \u00e0 ce courriel en conservant le sujet tel-quel.\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\nLa r\u00e9solution a \u00e9t\u00e9 motiv\u00e9e ainsi\u00a0:\r\n\r\n{{ ticket.resolution }}\r\n\r\n", + "subject": "(Ferm\u00e9)", + "template_name": "closed_submitter" + } + }, + { + "pk": 54, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Priorit\u00e9 du ticket augment\u00e9e", + "html": "Bonjour,
\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} ('{{ ticket.title }}') a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique.
\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n", + "subject": "(Priorit\u00e9 augment\u00e9e)", + "template_name": "escalated_cc" + } + }, + { + "pk": 55, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Votre ticket a vu sa priorit\u00e9 augment\u00e9e", + "html": "
Bonjour,
\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }} . Ce courriel vous informe que ce ticket a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique, vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.
\r\n\r\nNous allons reprendre rapidement ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.
\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\". Ce courriel vous informe que ce ticket a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique, vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.\r\n\r\nNous allons reprendre rapidement ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\n", + "subject": "(Priorit\u00e9 augment\u00e9e)", + "template_name": "escalated_submitter" + } + }, + { + "pk": 56, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Priorit\u00e9 de votre ticket augment\u00e9e", + "html": "Bonjour,
\r\n\r\nUn ticket qui vous est assign\u00e9 a vu sa priorit\u00e9 augment\u00e9 vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n\r\n
Merci de reprendre ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible..
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nUn ticket qui vous est assign\u00e9 a vu sa priorit\u00e9 augment\u00e9 vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nMerci de reprendre ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.\r\n", + "subject": "(Priorit\u00e9 augment\u00e9e - \u00e0 vous)", + "template_name": "escalated_owner" + } + }, + { + "pk": 57, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Nouveau ticket ouvert", + "html": "Bonjour,
\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir qu'un nouveau ticket a \u00e9t\u00e9 ouvert.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Description :
\r\n\r\n{{ ticket.description }}", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir qu'un nouveau ticket a \u00e9t\u00e9 ouvert.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nDescription\u00a0:\r\n{{ ticket.description }}\r\n\r\n", + "subject": "(Ouvert)", + "template_name": "newticket_cc" + } + }, + { + "pk": 58, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Votre ticket est d\u00e9sormais ouvert", + "html": "
Bonjour,
\r\n\r\nCe courriel permet de vous informer que nous avons re\u00e7u votre demande de support dont le sujet est {{ ticket.title }}.
\r\n\r\n\"Vous n'avez rien de plus \u00e0 faire pour le moment. Votre ticket porte l'identifiant {{ ticket.ticket }} et sera trait\u00e9 rapidement.
\r\n\r\nSi vous voulez nous donner plus de d\u00e9tails ou si vous avez une question concernant ce ticket, merci d'inclure la r\u00e9f\u00e9rence {{ ticket.ticket }} dans le sujet du message. Le plus simple \u00e9tant d'utiliser la fonction 'r\u00e9pondre' de votre logiciel de messagerie.
\r\n\r\nVous pouvez visualiser ce ticket en ligne et y ajouter des informations ou des pi\u00e8ces jointes ainsi que voir les derni\u00e8res mies \u00e0 jour en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.
\r\n\r\nNous allons traiter votre demande afin, si possible, de la r\u00e9soudre au plus vite. Vous recevrez des mise \u00e0 jour ou la r\u00e9ponse au ticket \u00e0 cette adresse mail.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel permet de vous informer que nous avons re\u00e7u votre demande de support dont le sujet est \"{{ ticket.title }}\".\r\n\r\nVous n'avez rien de plus \u00e0 faire pour le moment. Votre ticket porte l'identifiant {{ ticket.ticket }} et sera trait\u00e9 rapidement.\r\n\r\nSi vous voulez nous donner plus de d\u00e9tails ou si vous avez une question concernant ce ticket, merci d'inclure la r\u00e9f\u00e9rence '{{ ticket.ticket }}' dans le sujet du message. Le plus simple \u00e9tant d'utiliser la fonction 'r\u00e9pondre' de votre logiciel de messagerie.\r\n\r\nVous pouvez visualiser ce ticket en ligne et y ajouter des informations ou des pi\u00e8ces jointes ainsi que voir les derni\u00e8res mies \u00e0 jour en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\nNous allons traiter votre demande afin, si possible, de la r\u00e9soudre au plus vite. Vous recevrez des mise \u00e0 jour ou la r\u00e9ponse au ticket \u00e0 cette adresse mail.", + "subject": "(Ouvert)", + "template_name": "newticket_submitter" + } + }, + { + "pk": 59, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket r\u00e9solu", + "html": "Bonjour,
\r\n\r\nLe ticket suivant a \u00e9t\u00e9 r\u00e9solu.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n
La motivation de r\u00e9solution est:
\r\n\r\n{{ resolution }}\r\n\r\n
\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nLe ticket suivant a \u00e9t\u00e9 r\u00e9solu.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}\r\n\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.\r\n\r\n", + "subject": "(R\u00e9solu)", + "template_name": "resolved_cc" + } + }, + { + "pk": 60, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket r\u00e9solu", + "html": "Bonjour,
\r\n\r\nUn ticket qui vous est assign\u00e9 a \u00e9t\u00e9 r\u00e9solu.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n
La motivation de r\u00e9solution est:
\r\n\r\n{{ resolution }}\r\n\r\n
\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nUn ticket qui vous est assign\u00e9 a \u00e9t\u00e9 r\u00e9solu.\r\n\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}\r\n\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.\r\n\r\n", + "subject": "(R\u00e9solu - \u00e0 vous)", + "template_name": "resolved_owner" + } + }, + { + "pk": 61, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Votre ticket a \u00e9t\u00e9 r\u00e9solu", + "html": "Bonjour,
\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }}. Ce message vous informe d'une r\u00e9solution de la demande.
\r\n\r\nLa solution suivante a \u00e9t\u00e9 donn\u00e9e au ticket {{ ticket.ticket }}:
\r\n\r\n{{ resolution }}\r\n\r\n
Merci de confirmer que cette solution vous convient afin que nous puissions clore le ticket. Si vous avez d'autre demandes, o\u00f9 si vous pensez que cette solution n'est pas adapt\u00e9e, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel.
\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\" . Ce message vous informe d'une r\u00e9solution de la demande.\r\n\r\nLa solution suivante a \u00e9t\u00e9 donn\u00e9e au ticket {{ ticket.ticket }}:\r\n\r\n{{ resolution }}\r\n\r\nMerci de confirmer que cette solution vous convient afin que nous puissions clore le ticket. Si vous avez d'autre demandes, o\u00f9 si vous pensez que cette solution n'est pas adapt\u00e9e, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel.\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\n", + "subject": "(R\u00e9solu)", + "template_name": "resolved_submitter" + } + }, + { + "pk": 62, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket mis \u00e0 jour", + "html": "Bonjour,
\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} a \u00e9t\u00e9 mis \u00e0 jour.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n\r\n
Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :
\r\n\r\n{{ comment }}\r\n\r\n
Cette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} a \u00e9t\u00e9 mis \u00e0 jour.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nDescription originelle :\r\n\r\n{{ ticket.description }}\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9\u00a0:\r\n\r\n{{ comment }}\r\n\r\nCette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.\r\n\r\n", + "subject": "(Mis \u00e0 jour)", + "template_name": "updated_cc" + } + }, + { + "pk": 63, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket mis \u00e0 jour", + "html": "Bonjour,
\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }}, qui vous est assign\u00e9, a \u00e9t\u00e9 mis \u00e0 jour.
\r\n\r\n\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)
Pour m\u00e9moire, la description originelle \u00e9tait :
\r\n\r\n{{ ticket.description }}\r\n\r\n
Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :
\r\n\r\n{{ comment }}\r\n\r\n
Cette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.
", + "locale": "fr", + "plain_text": "Hello,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }}, qui vous est assign\u00e9, a \u00e9t\u00e9 mis \u00e0 jour.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nDescription originelle :\r\n\r\n{{ ticket.description }}\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :\r\n\r\n{{ comment }}\r\n\r\nCette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.\r\n\r\n", + "subject": "(Mis \u00e0 jour - \u00e0 vous)", + "template_name": "updated_owner" + } + }, + { + "model": "helpdesk.emailtemplate", + "pk": 64, + "fields": { + "heading": "Votre ticket a \u00e9t\u00e9 mis \u00e0 jour", + "html": "Bonjour,
\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }} . Ce message vous informe d'une mise \u00e0 jour du ticket.
\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9 au ticket {{ ticket.ticket }}:
\r\n\r\n{{ comment }}\r\n\r\n
\"Si vous voulez nous fournir d'autres informations, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel. Vous pouvez \u00e9galement voir et mettre \u00e0 jour ce ticket en ligne \u00e0 l'adresse {{ ticket.ticket_url }}.
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\". Ce message vous informe d'une mise \u00e0 jour du ticket.\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9 au ticket {{ ticket.ticket }}\u00a0:\r\n\r\n{{ comment }}\r\n\r\nSi vous voulez nous fournir d'autres informations, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel. Vous pouvez \u00e9galement voir et mettre \u00e0 jour ce ticket en ligne \u00e0 l'adresse {{ ticket.ticket_url }}", + "subject": "(Mis \u00e0 jour)", + "template_name": "updated_submitter" + } + }, + { + "pk": 65, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "assigned_cc", + "plain_text": "Salve,\r\n\r\nTi \u00e8 stata inviata questa email per informarti che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }} {% if ticket.assigned_to %}\u00e8 stato assegnato a {{ ticket.assigned_to }}{% else %}non \u00e8 pi\u00f9 assegnato{% endif %}.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione del ticket era:\r\n\r\n{{ ticket.description }}", + "html": "Salve,
\r\n\r\nTi \u00e8 stata inviata questa email per informarti che il ticket {{ ticket.ticket }} ({{ ticket.title }}) per {{ ticket.submitter_email }} {% if ticket.assigned_to %}\u00e8 stato assegnato a {{ ticket.assigned_to }}{% else %}non \u00e8 pi\u00f9 assegnato{% endif %}.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Per riferimento, la descrizione del ticket era:
\r\n\r\n{{ ticket.description }}", + "heading": "Ticket Assegnato", + "subject": "(Assegnato)" + } + }, + { + "pk": 66, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "assigned_owner", + "plain_text": "Salve,\r\n\r\nTi \u00e8 stata inviata questa email per informarti che ti \u00e8 stato assegnato il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }}.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione del ticket \u00e8:\r\n\r\n{{ ticket.description }}", + "html": "
Salve,
\r\n\r\nTi \u00e8 stata inviata questa email per informarti che ti \u00e8 stato assegnato il ticket {{ ticket.ticket }} ({{ ticket.title }}) per {{ ticket.submitter_email }}.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
La descrizione del ticket \u00e8:
\r\n\r\n{{ ticket.description }}", + "heading": "Ticket Assegnato A Te", + "subject": "(Assegnato a Te)" + } + }, + { + "pk": 67, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "closed_cc", + "plain_text": "Salve,\r\n\r\nIl ticket {{ ticket.title }} (\"{{ ticket.title }}\"){% if ticket.assigned_to %}, assegnato a {{ ticket.assigned_to }}{% endif %} \u00e8 stato chiuso.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione del ticket \u00e8:\r\n\r\n{{ ticket.description }}\r\n\r\nLa risoluzione fornita \u00e8:\r\n\r\n{{ resolution }}", + "html": "
Salve,
\r\n\r\nIl ticket {{ ticket.title }} ('{{ ticket.title }}'){% if ticket.assigned_to %}, assegnato a {{ ticket.get_assigned_to }}{% endif %} \u00e8 stato chiuso.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
La descrizione del ticket \u00e8:
\r\n\r\n{{ ticket.description }}\r\n\r\n
La risoluzione fornita \u00e8:
\r\n\r\n{{ resolution }}\r\n\r\n
Se vuoi vedere questo ticket online, puoi visitare l'indirizzo {{ ticket.staff_url }}.
", + "heading": "Ticket Chiuso", + "subject": "(Closed)" + } + }, + { + "pk": 68, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "closed_owner", + "plain_text": "Salve,\r\n\r\nIl ticket seguente, correntemente a te assegnato, \u00e8 stato chiuso.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nSe vuoi vedere il ticket online, puoi visitare l'indirizzo {{ ticket.staff_url }}.", + "html": "Salve,
\r\n\r\nIl ticket seguente, correntemente a te assegnato, \u00e8 stato chiuso.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
La descrizione del ticket \u00e8:
\r\n\r\n{{ ticket.description }}\r\n\r\n
La risoluzione fornita \u00e8:
\r\n\r\n{{ ticket.resolution }}", + "heading": "Ticket Chiuso", + "subject": "(Chiuso)" + } + }, + { + "pk": 69, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "closed_submitter", + "plain_text": "Salve,\r\n\r\nHai recentemente inserito un ticket dall'oggetto \"{{ ticket.title }}\". Questa email ti \u00e8 inviata come conferma della chiusura del ticket.\r\n\r\nSe credi che ci sia bisogno di ulteriore lavoro per questo ticket, per cortesia faccelo sapere rispondendo a questa email mantenendone invariato l'oggetto.\r\n\r\nSe vuoi vedere il ticket online, puoi visitare l'indirizzo {{ ticket.ticket_url }}.\r\n\r\nLa risoluzione fornita \u00e8:\r\n\r\n{{ ticket.resolution }}", + "html": "
Salve,
\r\n\r\nHai recentemente inserito un ticket dall'oggetto {{ ticket.title }}. Questa email ti \u00e8 inviata come conferma della chiusura del ticket..
\r\n\r\nLa risoluzione fornita \u00e8:
\r\n\r\n{{ ticket.resolution }}\r\n\r\n
Se vuoi vedere il ticket online, puoi visitare l'indirizzo {{ ticket.ticket_url }}. Se credi che ci sia bisogno di ulteriore lavoro per questo ticket, per cortesia faccelo sapere rispondendo a questa email mantenendone invariato l'oggetto.\r\n
", + "heading": "Ticket Chiuso", + "subject": "(Closed)" + } + }, + { + "pk": 70, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "escalated_cc", + "plain_text": "Salve,\r\n\r\nTi \u00e8 stata inviata questa email per informarti che la priorit\u00e0 del ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") \u00e8 stata aumentata automaticamente.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione originale del ticket era:\r\n\r\n{{ ticket.description }}", + "html": "Salve,
\r\n\r\nTi \u00e8 stata inviata questa email per informarti che la priorit\u00e0 del ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") \u00e8 stata aumentata automaticamente.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Per riferimento, la descrizione originale del ticket era:
\r\n\r\n{{ ticket.description }}", + "heading": "Priorit\u00e0 Aumentata", + "subject": "(Priorit\u00e0)" + } + }, + { + "pk": 71, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "escalated_owner", + "plain_text": "Salve,\r\n\r\nLa priorit\u00e0 di un ticket a te assegnato \u00e8 stata automaticamente aumentata in quanto questo \u00e8 stato aperto pi\u00f9 del previsto.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione originale del ticket era:\r\n\r\n{{ ticket.description }}\r\n\r\nEsamina questo ticket e cerca di fornire una soluzione al pi\u00f9 presto.", + "html": "
Salve,
\r\n\r\nLa priorit\u00e0 di un ticket a te assegnato \u00e8 stata automaticamente aumentata in quanto questo \u00e8 stato aperto pi\u00f9 del previsto.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Per riferimento, la descrizione originale del ticket era:
\r\n\r\n{{ ticket.description }}", + "heading": "La Priorit\u00e0 Di Un Ticket A Te Assegnato \u00e8 Stata Aumentata", + "subject": "(Priorit\u00e0)" + } + }, + { + "pk": 72, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "escalated_submitter", + "plain_text": "Salve,\r\n\r\nHai recentemente inserito un ticket dall'oggetto \"{{ ticket.title }}\". Questa email ti \u00e8 inviata per informarti che la priorit\u00e0 del ticket \u00e8 stata automaticamente alzata in quanto questo \u00e8 stato aperto pi\u00f9 a lungo del previsto.\r\n\r\nEsamineremo a breve il ticket e cercheremo di fornire una risoluzione quanto prima.\r\n\r\nSe vuoi visitare il ticket online, puoi visitare l'indirizzo {{ ticket.ticket_url }}.", + "html": "
Salve,
\r\n\r\nHai recentemente inserito un ticket dall'oggetto {{ ticket.title }}. Questa email ti \u00e8 inviata per informarti che la priorit\u00e0 del ticket \u00e8 stata automaticamente alzata in quanto questo \u00e8 stato aperto pi\u00f9 a lungo del previsto.
\r\n\r\nEsamineremo a breve il ticket e cercheremo di fornire una risoluzione quanto prima.
\r\n\r\nSe vuoi visitare il ticket online, puoi visitare l'indirizzo {{ ticket.ticket_url }}.
", + "heading": "La Priorit\u00e0 Del Tuo Ticket \u00e8 Stata Aumentata", + "subject": "(Priorit\u00e0)" + } + }, + { + "pk": 73, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "newticket_cc", + "plain_text": "Salve,\r\n\r\nQuesta email ti \u00e8 stata inviata per informarti che un nuovo ticket \u00e8 stato aperto.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nDescrizione:\r\n{{ ticket.description }}", + "html": "Salve,
\r\n\r\nQuesta email ti \u00e8 stata inviata per informarti che un nuovo ticket \u00e8 stato aperto.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Descrizione:
\r\n\r\n{{ ticket.description }}", + "heading": "Nuovo Ticket Aperto", + "subject": "(Aperto)" + } + }, + { + "pk": 74, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "newticket_submitter", + "plain_text": "Salve,\r\n\r\nQuesta email ti \u00e8 stata inviata per informarti che abbiamo ricevuto la tua richiesta di helpdesk dall'oggetto \"{{ ticket.title }}\". \r\n\r\nNon \u00e8 necessario fare altro al momento. Al tuo ticket \u00e8 stato assegnato l'identificativo {{ ticket.ticket }} e verr\u00e0 presto esaminato.\r\n\r\nSe vuoi aggiungere ulteriori dettagli o hai domande sul ticket, rispondi a questa email includendo l'id \"{{ ticket.ticket }}\" del ticket nell'oggetto. Il modo pi\u00f9 semplice per farlo \u00e8 di premere il pulsante \"rispondi\" del tuo client di posta.\r\n\r\nSe vuoi vedere questo ticket online per aggiungere ulteriori informazioni, allegare file o vedere gli aggiornamenti, puoi visitare l'indirizzo {{ ticket.ticket_url }}.\r\n\r\nAnalizzeremo la tua richiesta e cercheremo di risolverla quanto prima. Riceverai successivi aggiornamenti e la notifica di risoluzione a questo indirizzo email.", + "html": "
Salve,
\r\n\r\nQuesta email ti \u00e8 stata inviata per informarti che abbiamo ricevuto la tua richiesta di helpdesk dall'oggetto {{ ticket.title }}.
\r\n\r\nNon \u00e8 necessario fare altro al momento. Al tuo ticket \u00e8 stato assegnato l'identificativo {{ ticket.ticket }} e verr\u00e0 presto esaminato.
\r\n\r\nSe vuoi aggiungere ulteriori dettagli o hai domande sul ticket, rispondi a questa email includendo l'id {{ ticket.ticket}} del ticket nell'oggetto. Il modo pi\u00f9 semplice per farlo \u00e8 di premere il pulsante \"rispondi\" del tuo client di posta.
\r\n\r\nSe vuoi vedere questo ticket online per aggiungere ulteriori informazioni, allegare file o vedere gli aggiornamenti, puoi visitare l'indirizzo {{ ticket.ticket_url }}.
\r\n\r\nAnalizzeremo la tua richiesta e cercheremo di risolverla quanto prima. Riceverai successivi aggiornamenti e la notifica di risoluzione a questo indirizzo email.
", + "heading": "Il Tuo Ticket \u00e8 Stato Aperto", + "subject": "(Aperto)" + } + }, + { + "pk": 75, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "resolved_cc", + "plain_text": "Salve,\r\n\r\nIl seguente ticket \u00e8 stato risolto:\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione del ticket \u00e8:\r\n\r\n{{ ticket.description }}\r\n\r\nLa risoluzione fornita \u00e8:\r\n\r\n{{ ticket.resolution }}\r\n\r\nLa risoluzione \u00e8 stata inviata al proprietario del ticket, che dovr\u00e0 verificarla prima che il ticket possa essere chiuso.", + "html": "Salve,
\r\n\r\nIl seguente ticket \u00e8 stato risolto:
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Per riferimento, la descrizione originale del ticket era:
\r\n\r\n{{ ticket.description }}\r\n\r\n
La risoluzione aggiunta era:
\r\n\r\n{{ ticket.resolution }}\r\n\r\n
La risoluzione \u00e8 stata inviata al proprietario del ticket, che dovr\u00e0 verificarla prima che il ticket possa essere chiuso.
", + "heading": "Ticket Risolto", + "subject": "(Risolto)" + } + }, + { + "pk": 76, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "resolved_owner", + "plain_text": "Salve,\r\n\r\nun ticket a te assegnato \u00e8 stato risolto.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nLa descrizione del ticket \u00e8:\r\n\r\n{{ ticket.description }}\r\n\r\nLa risoluzione fornita \u00e8:\r\n\r\n{{ ticket.resolution }}\r\n\r\nLa risoluzione \u00e8 stata inviata al proprietario del ticket, che dovr\u00e0 verificarla prima che il ticket possa essere chiuso.", + "html": "Salve,
\r\n\r\nUn ticket a te assegnato \u00e8 stato risolto.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
La descrizione del ticket \u00e8:
\r\n\r\n{{ ticket.description }}\r\n\r\n
La risoluzione fornita \u00e8:
\r\n\r\n{{ ticket.resolution }}\r\n\r\n
La risoluzione \u00e8 stata inviata al proprietario del ticket, che dovr\u00e0 verificarla prima che il ticket possa essere chiuso.
", + "heading": "Ticket Risolto", + "subject": "(Risolto)" + } + }, + { + "pk": 77, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "resolved_submitter", + "plain_text": "Salve,\r\n\r\nHai recentemente inserito un ticket dall'oggetto \"{{ ticket.title }}\". Questa email vi \u00e8 stata inviata per informarvi della risoluzione del ticket.\r\n\r\nLa seguente risoluzione \u00e8 stata inserita al ticket {{ ticket.ticket }}:\r\n\r\n{{ resolution }}\r\n\r\nPu\u00f2 per cortesia confermare che questa risoluzione risolve i vostri problemi in modo tale da poter chiudere il ticket? Se ha ulteriori domande, o non crede che la risoluzione adottata \u00e8 adeguata, risponda a questa email mantenendo invariato l'oggetto.\r\n\r\nSe vuole vedere il ticket online, pu\u00f2 visitare l'indirizzo {{ ticket.ticket_url }}", + "html": "Hello,
\r\n\r\nHai recentemente inserito un ticket dall'oggetto {{ ticket.title }}. Questa email vi \u00e8 stata inviata per informarvi della risoluzione del ticket.
\r\n\r\nLa seguente risoluzione \u00e8 stata inserita al ticket {{ ticket.ticket }}:
\r\n\r\n{{ resolution }}\r\n\r\n
Pu\u00f2 per cortesia confermare che questa risoluzione risolve i vostri problemi in modo tale da poter chiudere il ticket? Se ha ulteriori domande, o non crede che la risoluzione adottata \u00e8 adeguata, risponda a questa email mantenendo invariato l'oggetto.
\r\n\r\nSe vuole vedere il ticket online, pu\u00f2 visitare l'indirizzo {{ ticket.ticket_url }}.
", + "heading": "Il Tuo Ticket \u00e8 Stato Risolto", + "subject": "(Risolto)" + } + }, + { + "pk": 78, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "updated_cc", + "plain_text": "Salve,\r\n\r\nQuesta email ti \u00e8 stata inviata per informarti che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }} \u00e8 stato aggiornato.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nDescrizione originale:\r\n\r\n{{ ticket.description }}\r\n\r\nIl seguente commento \u00e8 stato aggiunto:\r\n\r\n{{ comment }}\r\n\r\nQuesta informazione{% if private %} non{% endif %} \u00e8 stata inviata al proprietario del ticket.\r\n\r\nSe vuoi vedere il ticket online, puoi visitare l'indirizzo {{ ticket.staff_url }}.", + "html": "Salve,
\r\n\r\nQuesta email ti \u00e8 stata inviata per informarti che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }} \u00e8 stato aggiornato.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Per riferimento, la descrizione originale era:
\r\n\r\n{{ ticket.description }}\r\n\r\n
Il seguente commento \u00e8 stato aggiunto:
\r\n\r\n{{ comment }}\r\n\r\n
Questa informazione{% if private %} non{% endif %} \u00e8 stata inviata al proprietario del ticket.
", + "heading": "Ticket Aggiornato", + "subject": "(Aggiornato)" + } + }, + { + "pk": 79, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "updated_owner", + "plain_text": "Salve,\r\n\r\nTi \u00e8 stata inviata questa email per informavi che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }}, a te assegnato, \u00e8 stato aggiornato.\r\n\r\nID Ticket: {{ ticket.ticket }}\r\nCoda: {{ queue.title }}\r\nTitolo: {{ ticket.title }}\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}\r\nPriorit\u00e0: {{ ticket.get_priority_display }}\r\nStato: {{ ticket.get_status }}\r\nAssegnato a: {{ ticket.get_assigned_to }}\r\nVedi Online: {{ ticket.staff_url }} (richiesto login)\r\n\r\nDescrizione originale:\r\n\r\n{{ ticket.description }}\r\n\r\nIl seguente commento \u00e8 stato aggiunto:\r\n\r\n{{ comment }}\r\n\r\nQuesta informazione{% if private %} non{% endif %} \u00e8 stata inviata al proprietario del ticket.\r\n\r\nSe vuoi vedere il ticket online, puoi visitare l'indirizzo {{ ticket.staff_url }}.", + "html": "Salve,
\r\n\r\nTi \u00e8 stata inviata questa email per informavi che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }}, a te assegnato, \u00e8 stato aggiornato.
\r\n\r\n\r\nTicket ID: {{ ticket.ticket }}
\r\nCoda: {{ queue.title }}
\r\nTitolo: {{ ticket.title }}
\r\nAperto: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nInserito da: {{ ticket.submitter_email|default:\"Sconosciuto\" }}
\r\nPriorit\u00e0: {{ ticket.get_priority_display }}
\r\nStato: {{ ticket.get_status }}
\r\nAssegnato a: {{ ticket.get_assigned_to }}
\r\nVedi Online per aggiornare questo ticket (richiesto login)
Per riferimento, la descrizione originale del ticket era:
\r\n\r\n{{ ticket.description }}\r\n\r\n
Il seguente commento \u00e8 stato aggiunto:
\r\n\r\n{{ comment }}\r\n\r\n
Questa informazione{% if private %} non{% endif %} \u00e8 stata inviata al proprietario del ticket.
", + "heading": "Ticket Aggiornato", + "subject": "(Updated)" + } + }, + { + "pk": 80, + "model": "helpdesk.emailtemplate", + "fields": { + "locale": "it", + "template_name": "updated_submitter", + "plain_text": "Salve,\r\n\r\nHai recentemente inserito un ticket dall'oggetto \"{{ ticket.title }}\". Questa email ti \u00e8 stata inviata per informarti di un aggiornamento riguardo il ticket suddetto.\r\n\r\nIl seguente commento \u00e8 stato aggiunto al ticket {{ ticket.ticket }}:\r\n\r\n{{ comment }}\r\n\r\nSe c'\u00e8 bisogno di fornire informazioni aggiuntive, risponda a questa email mantenendone l'oggetto invariato. In alternativa, \u00e8 possibile vedere ed aggiornare il ticket online visitando l'indirizzo {{ ticket.ticket_url }}\r\n", + "html": "Salve,
\r\n\r\nHai recentemente inserito un ticket dall'oggetto {{ ticket.title }}. Questa email ti \u00e8 stata inviata per informarti di un aggiornamento riguardo il ticket suddetto.
\r\n\r\nIl seguente commento \u00e8 stato aggiunto al ticket {{ ticket.ticket }}:
\r\n\r\n{{ comment }}\r\n\r\n
Se c'\u00e8 bisogno di fornire informazioni aggiuntive, risponda a questa email mantenendone l'oggetto invariato. In alternativa, \u00e8 possibile vedere ed aggiornare il ticket online visitando l'indirizzo {{ ticket.ticket_url }}.
", + "heading": "Il Tuo Ticket \u00e8 Stato Aggiornato", + "subject": "(Aggiornato)" + } } -] + ] diff --git a/helpdesk/forms.py b/helpdesk/forms.py index 502a90bb..9951a6fd 100644 --- a/helpdesk/forms.py +++ b/helpdesk/forms.py @@ -11,13 +11,15 @@ from datetime import datetime from StringIO import StringIO from django import forms +from django.forms import extras from django.conf import settings from django.contrib.auth.models import User from django.utils.translation import ugettext as _ -from helpdesk.lib import send_templated_mail +from helpdesk.lib import send_templated_mail, safe_template_context from helpdesk.models import Ticket, Queue, FollowUp, Attachment, IgnoreEmail, TicketCC, CustomField, TicketCustomFieldValue, TicketDependency from helpdesk.settings import HAS_TAG_SUPPORT +from helpdesk import settings as helpdesk_settings class EditTicketForm(forms.ModelForm): class Meta: @@ -57,7 +59,10 @@ class EditTicketForm(forms.ModelForm): instanceargs['max_digits'] = field.max_length elif field.data_type == 'list': fieldclass = forms.ChoiceField - instanceargs['choices'] = field.choices_as_array + choices = field.choices_as_array + if field.empty_selection_list: + choices.insert(0, ('','---------' ) ) + instanceargs['choices'] = choices elif field.data_type == 'boolean': fieldclass = forms.BooleanField elif field.data_type == 'date': @@ -113,19 +118,20 @@ class TicketForm(forms.Form): title = forms.CharField( max_length=100, required=True, - widget=forms.TextInput(), + widget=forms.TextInput(attrs={'size':'60'}), label=_('Summary of the problem'), ) submitter_email = forms.EmailField( required=False, label=_('Submitter E-Mail Address'), + widget=forms.TextInput(attrs={'size':'60'}), help_text=_('This e-mail address will receive copies of all public ' 'updates to this ticket.'), ) body = forms.CharField( - widget=forms.Textarea(), + widget=forms.Textarea(attrs={'cols': 47, 'rows': 15}), label=_('Description of Issue'), required=True, ) @@ -147,6 +153,19 @@ class TicketForm(forms.Form): 'as \'3\'.'), ) + due_date = forms.DateTimeField( + widget=extras.SelectDateWidget, + required=False, + label=_('Due on'), + ) + + def clean_due_date(self): + data = self.cleaned_data['due_date'] + #TODO: add Google calendar update hook + #if not hasattr(self, 'instance') or self.instance.due_date != new_data: + # print "you changed!" + return data + attachment = forms.FileField( required=False, label=_('Attach File'), @@ -190,11 +209,15 @@ class TicketForm(forms.Form): instanceargs['max_digits'] = field.max_length elif field.data_type == 'list': fieldclass = forms.ChoiceField - instanceargs['choices'] = field.choices_as_array + choices = field.choices_as_array + if field.empty_selection_list: + choices.insert(0, ('','---------' ) ) + instanceargs['choices'] = choices elif field.data_type == 'boolean': fieldclass = forms.BooleanField elif field.data_type == 'date': fieldclass = forms.DateField + instanceargs['widget'] = extras.SelectDateWidget elif field.data_type == 'time': fieldclass = forms.TimeField elif field.data_type == 'datetime': @@ -225,6 +248,7 @@ class TicketForm(forms.Form): queue = q, description = self.cleaned_data['body'], priority = self.cleaned_data['priority'], + due_date = self.cleaned_data['due_date'], ) if HAS_TAG_SUPPORT: @@ -280,11 +304,8 @@ class TicketForm(forms.Form): # settings.MAX_EMAIL_ATTACHMENT_SIZE) are sent via email. files.append(a.file.path) - context = { - 'ticket': t, - 'queue': q, - 'comment': f.comment, - } + context = safe_template_context(t) + context['comment'] = f.comment messages_sent_to = [] @@ -370,6 +391,12 @@ class PublicTicketForm(forms.Form): help_text=_('Please select a priority carefully.'), ) + due_date = forms.DateTimeField( + widget=extras.SelectDateWidget, + required=False, + label=_('Due on'), + ) + attachment = forms.FileField( required=False, label=_('Attach File'), @@ -402,9 +429,9 @@ class PublicTicketForm(forms.Form): instanceargs['max_digits'] = field.max_length elif field.data_type == 'list': fieldclass = forms.ChoiceField - choices = [] - for line in field.list_values.split("\n"): - choices.append((line, line)) + choices = field.choices_as_array + if field.empty_selection_list: + choices.insert(0, ('','---------' ) ) instanceargs['choices'] = choices elif field.data_type == 'boolean': fieldclass = forms.BooleanField @@ -440,6 +467,7 @@ class PublicTicketForm(forms.Form): queue = q, description = self.cleaned_data['body'], priority = self.cleaned_data['priority'], + due_date = self.cleaned_data['due_date'], ) t.save() @@ -482,10 +510,7 @@ class PublicTicketForm(forms.Form): # settings.MAX_EMAIL_ATTACHMENT_SIZE) are sent via email. files.append(a.file.path) - context = { - 'ticket': t, - 'queue': q, - } + context = safe_template_context(t) messages_sent_to = [] @@ -569,7 +594,11 @@ class EmailIgnoreForm(forms.ModelForm): class TicketCCForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(TicketCCForm, self).__init__(*args, **kwargs) - self.fields['user'].queryset = User.objects.filter(is_active=True).order_by('username') + if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_CC: + users = User.objects.filter(is_active=True, is_staff=True).order_by('username') + else: + users = User.objects.filter(is_active=True).order_by('username') + self.fields['user'].queryset = users class Meta: model = TicketCC exclude = ('ticket',) diff --git a/helpdesk/lib.py b/helpdesk/lib.py index 64999653..b7972633 100644 --- a/helpdesk/lib.py +++ b/helpdesk/lib.py @@ -17,6 +17,9 @@ try: except ImportError: from base64 import decodestring as b64decode +import logging +logger = logging.getLogger('helpdesk') + from django.utils.encoding import smart_str def send_templated_mail(template_name, email_context, recipients, sender=None, bcc=None, fail_silently=False, files=None): @@ -55,13 +58,11 @@ def send_templated_mail(template_name, email_context, recipients, sender=None, b context = Context(email_context) - # XXX: context['queue'] seems to able to be provided as either - # a dict or a Queue object, handle both & fallback to 'en' - if isinstance(context['queue'], dict): - locale = context['queue'].get('locale', 'en') - elif hasattr(context['queue'], 'locale'): - locale = context['queue'].locale + if hasattr(context['queue'], 'locale'): + locale = getattr(context['queue'], 'locale', '') else: + locale = context['queue'].get('locale', 'en') + if not locale: locale = 'en' t = None @@ -74,6 +75,8 @@ def send_templated_mail(template_name, email_context, recipients, sender=None, b try: t = EmailTemplate.objects.get(template_name__iexact=template_name, locale__isnull=True) except EmailTemplate.DoesNotExist: + logger.warning('template "%s" does not exist, no mail sent' % + template_name) return # just ignore if template doesn't exist if not sender: @@ -104,7 +107,7 @@ def send_templated_mail(template_name, email_context, recipients, sender=None, b "{{ ticket.ticket }} {{ ticket.title|safe }} %s" % t.subject ).render(context) - if type(recipients) == str: + if isinstance(recipients,(str,unicode)): if recipients.find(','): recipients = recipients.split(',') elif type(recipients) != list: @@ -170,10 +173,12 @@ def apply_query(queryset, params): # eg a Q() set queryset = queryset.filter(params['other_filter']) - if params.get('sorting', None): - if params.get('sortreverse', None): - params['sorting'] = "-%s" % params['sorting'] - queryset = queryset.order_by(params['sorting']) + sorting = params.get('sorting', None) + if not sorting: + sortreverse = params.get('sortreverse', None) + if sortreverse: + sorting = "-%s" % sorting + queryset = queryset.order_by(sorting) return queryset diff --git a/helpdesk/locale/de/LC_MESSAGES/django.mo b/helpdesk/locale/de/LC_MESSAGES/django.mo index d7405ae6..130db154 100644 Binary files a/helpdesk/locale/de/LC_MESSAGES/django.mo and b/helpdesk/locale/de/LC_MESSAGES/django.mo differ diff --git a/helpdesk/locale/de/LC_MESSAGES/django.po b/helpdesk/locale/de/LC_MESSAGES/django.po index b57ea248..70b228bf 100644 --- a/helpdesk/locale/de/LC_MESSAGES/django.po +++ b/helpdesk/locale/de/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # django-helpdesk English language translation # Copyright (C) 2011 Ross Poulton # This file is distributed under the same license as the django-helpdesk package. -# +# # Translators: # Jannis LeidelAre you sure you want to delete this saved filter (%(query_title)s)? To re-create it, you will need to manually re-filter your ticket listing.
\n" +"Are you sure you want to delete this saved filter (%(query_title)s" +"em>)? To re-create it, you will need to manually re-filter your ticket " +"listing.
\n" msgstr "" "\n" "Sind Sie sicher, dass Sie diesen gespeicherten Filter löschen wollen: (%(query_title)s)? Er lässt sich nur manuell wieder herstellen.
\n" +"Sind Sie sicher, dass Sie diesen gespeicherten Filter löschen wollen: " +"(%(query_title)s)? Er lässt sich nur manuell wieder herstellen." +"p>\n" #: templates/helpdesk/confirm_delete_saved_query.html:11 msgid "" "\n" -"
You have shared this query, so other users may be using it. If you delete it, they will have to manually create their own query.
\n" +"You have shared this query, so other users may be using it. If you delete " +"it, they will have to manually create their own query.
\n" msgstr "" "\n" -"Sie haben diese Abfrage anderen Benutzern zur verfügung gestellt. Wenn Sie sie löschen, müssen diese manuell ihre eigene Abfrage erstellen.
\n" +"Sie haben diese Abfrage anderen Benutzern zur verfügung gestellt. Wenn " +"Sie sie löschen, müssen diese manuell ihre eigene Abfrage erstellen.
\n" #: templates/helpdesk/confirm_delete_saved_query.html:15 #: templates/helpdesk/delete_ticket.html:11 @@ -1142,20 +1156,22 @@ msgstr "Ticket erstellen" msgid "" "Unless otherwise stated, all fields are required. Please provide as descriptive a title and description as possible.
" +"Unless otherwise stated, all fields are required. Please provide as " +"descriptive a title and description as possible.
" msgstr "" "Alle Felder sind Pflichtfelder, solange nicht anders vermerkt. Bitte geben Sie einen aussagekräftigen Titel und eine präzise Beschreibung.
" +"Alle Felder sind Pflichtfelder, solange nicht anders vermerkt. Bitte " +"geben Sie einen aussagekräftigen Titel und eine präzise Beschreibung.
" #: templates/helpdesk/create_ticket.html:17 #: templates/helpdesk/edit_ticket.html:19 -#: templates/helpdesk/public_homepage.html:31 +#: templates/helpdesk/public_homepage.html:34 msgid "(Optional)" msgstr "(Optional)" #: templates/helpdesk/create_ticket.html:26 -#: templates/helpdesk/public_homepage.html:40 +#: templates/helpdesk/public_homepage.html:43 msgid "Submit Ticket" msgstr "Ticket erstellen" @@ -1163,54 +1179,79 @@ msgstr "Ticket erstellen" msgid "Helpdesk Dashboard" msgstr "Helpdesk Übersicht" -#: templates/helpdesk/dashboard.html:9 +#: templates/helpdesk/dashboard.html:10 msgid "Helpdesk Summary" msgstr "Helpdesk Zusammenfassung" -#: templates/helpdesk/dashboard.html:20 +#: templates/helpdesk/dashboard.html:25 +msgid "" +"Welcome to your Helpdesk Dashboard! From here you can quickly see tickets " +"submitted by you, tickets you are working on, and those tickets that have no " +"owner." +msgstr "" +"Willkommen auf dem Helpdesk Dashboard! Hier sehen Sie die von Ihnen " +"übermittelten und die Ihnen zugewiesenen " +"Tickets und außerdem solche, die noch niemandem zugewiesen worden sind." + +#: templates/helpdesk/dashboard.html:27 msgid "" "Welcome to your Helpdesk Dashboard! From here you can quickly see your own " "tickets, and those tickets that have no owner. Why not pick up an orphan " "ticket and sort it out for a customer?" msgstr "" -"Willkommen auf dem Helpdesk Dashboard! Hier sehen Sie die Ihnen zugewiesenen" -" Tickets und außerdem solche, die noch niemandem zugewiesen wurden. Wieso " +"Willkommen auf dem Helpdesk Dashboard! Hier sehen Sie die Ihnen zugewiesenen " +"Tickets und außerdem solche, die noch niemandem zugewiesen wurden. Wieso " "fangen Sie nicht bei einem der noch offenen Tickets an und lösen es?" -#: templates/helpdesk/dashboard.html:25 -msgid "Your Tickets" -msgstr "Ihre Tickets" +#: templates/helpdesk/dashboard.html:36 +msgid "All Tickets submitted by you" +msgstr "Alle von Ihnen übermittelten Tickets." -#: templates/helpdesk/dashboard.html:26 templates/helpdesk/dashboard.html:44 -#: templates/helpdesk/ticket_list.html:186 +#: templates/helpdesk/dashboard.html:37 templates/helpdesk/dashboard.html:57 +#: templates/helpdesk/dashboard.html:77 templates/helpdesk/dashboard.html:99 +#: templates/helpdesk/ticket_list.html:199 msgid "Pr" msgstr "Pr" -#: templates/helpdesk/dashboard.html:26 +#: templates/helpdesk/dashboard.html:37 templates/helpdesk/dashboard.html:57 +#: templates/helpdesk/dashboard.html:99 msgid "Last Update" msgstr "Letzte Aktualisierung" -#: templates/helpdesk/dashboard.html:38 +#: templates/helpdesk/dashboard.html:56 +msgid "Open Tickets assigned to you (you are working on this ticket)" +msgstr "Alle Ihnen zugeordneten Tickets (an denen Sie arbeiten)." + +#: templates/helpdesk/dashboard.html:69 msgid "You have no tickets assigned to you." msgstr "Sie haben keine Ihnen zugeordneten Tickets." -#: templates/helpdesk/dashboard.html:52 -#: templates/helpdesk/ticket_desc_table.html:13 +#: templates/helpdesk/dashboard.html:76 +msgid "(pick up a ticket if you start to work on it)" +msgstr "(nehmen Sie ein Ticket sobald Sie daran arbeiten)" + +#: templates/helpdesk/dashboard.html:85 +#: templates/helpdesk/ticket_desc_table.html:22 msgid "Take" msgstr "Nehmen" -#: templates/helpdesk/dashboard.html:52 +#: templates/helpdesk/dashboard.html:85 #: templates/helpdesk/email_ignore_list.html:13 #: templates/helpdesk/email_ignore_list.html:23 #: templates/helpdesk/ticket_cc_list.html:15 #: templates/helpdesk/ticket_cc_list.html:23 +#: templates/helpdesk/ticket_list.html:234 msgid "Delete" msgstr "Löschen" -#: templates/helpdesk/dashboard.html:56 +#: templates/helpdesk/dashboard.html:89 msgid "There are no unassigned tickets." msgstr "Es gibt keine nicht zugeordneten Tickets." +#: templates/helpdesk/dashboard.html:98 +msgid "Closed & resolved Tickets you used to work on" +msgstr "Geschlossene & gelöste Tickets and denen Sie gearbeitet haben." + #: templates/helpdesk/delete_ticket.html:3 msgid "Delete Ticket" msgstr "Ticket löschen" @@ -1221,12 +1262,16 @@ msgid "" "\n" "Are you sure you want to delete this ticket (%(ticket_title)s)? All traces of the ticket, including followups, attachments, and updates will be irreversably removed.
\n" +"Are you sure you want to delete this ticket (%(ticket_title)s)? " +"All traces of the ticket, including followups, attachments, and updates will " +"be irreversably removed.
\n" msgstr "" "\n" "Sind Sie sicher, dass Sie dieses Ticket löschen wollen: (%(ticket_title)s)? Sämtliche Details des Tickets, inklusive Nachfragen, Anhänge und Aktualisierungen werden endgültig gelöscht.
\n" +"Sind Sie sicher, dass Sie dieses Ticket löschen wollen: (" +"%(ticket_title)s)? Sämtliche Details des Tickets, inklusive Nachfragen, " +"Anhänge und Aktualisierungen werden endgültig gelöscht.
\n" #: templates/helpdesk/edit_ticket.html:3 msgid "Edit Ticket" @@ -1236,14 +1281,22 @@ msgstr "Ticket bearbeiten" msgid "" "Unless otherwise stated, all fields are required. Please provide as descriptive a title and description as possible.
\n" +"Unless otherwise stated, all fields are required. Please provide as " +"descriptive a title and description as possible.
\n" "\n" -"Note: Editing a ticket does not send an e-mail to the ticket owner or submitter. No new details should be entered, this form should only be used to fix incorrect details or clean up the submission.
" +"Note: Editing a ticket does not send an e-mail " +"to the ticket owner or submitter. No new details should be entered, this " +"form should only be used to fix incorrect details or clean up the submission." +"
" msgstr "" "Alle Felder sind Pflichtfelder, solange nicht anders vermerkt. Bitte geben Sie einen aussagekräftigen Titel und eine präzise Beschreibung.
\n" -"Achtung: Das Bearbeiten eines Tickets schickt keine E-Mail an den Ersteller und den Verantwortlichen. Dieses Formular sollte daher nur zur Korrektur von Fehlern oder zur saubereren Darstellung benutzt werden, es sollten keinen neuen Details hinzugefügt werden.
" +"Alle Felder sind Pflichtfelder, solange nicht anders vermerkt. Bitte " +"geben Sie einen aussagekräftigen Titel und eine präzise Beschreibung.
\n" +"Achtung: Das Bearbeiten eines Tickets schickt " +"keine E-Mail an den Ersteller und den Verantwortlichen. Dieses Formular " +"sollte daher nur zur Korrektur von Fehlern oder zur saubereren Darstellung " +"benutzt werden, es sollten keinen neuen Details hinzugefügt werden.
" #: templates/helpdesk/edit_ticket.html:28 msgid "Save Changes" @@ -1259,16 +1312,22 @@ msgid "" "\n" "To ignore an e-mail address and prevent any emails from that address creating tickets automatically, enter the e-mail address below.
\n" +"To ignore an e-mail address and prevent any emails from that address " +"creating tickets automatically, enter the e-mail address below.
\n" "\n" -"You can either enter a whole e-mail address such as email@domain.com or a portion of an e-mail address with a wildcard, such as *@domain.com or user@*.
" +"You can either enter a whole e-mail address such as email@domain.com" +"em> or a portion of an e-mail address with a wildcard, such as *@domain." +"com or user@*.
" msgstr "" "\n" "Um eine E-Mail-Adresse ignorieren und zu verhindern dass Tickets von ihr erstellt werden, geben sie die entsprechende E-Mail-Adresse hier an.
\n" +"Um eine E-Mail-Adresse ignorieren und zu verhindern dass Tickets von ihr " +"erstellt werden, geben sie die entsprechende E-Mail-Adresse hier an.
\n" "\n" -"Sie können entweder eine vollständige E-Mail-Adresse wie email@domain.com oder einen Teil mit Platzhaltern, wie z.B. *@domain.com oder user@* angeben." +"Sie können entweder eine vollständige E-Mail-Adresse wie email@domain." +"com oder einen Teil mit Platzhaltern, wie z.B. *@domain.com " +"oder user@* angeben." #: templates/helpdesk/email_ignore_del.html:3 msgid "Delete Ignored E-Mail Address" @@ -1280,12 +1339,16 @@ msgid "" "\n" "Are you sure you wish to stop removing this email address (%(email_address)s) and allow their e-mails to automatically create tickets in your system? You can re-add this e-mail address at any time.
\n" +"Are you sure you wish to stop removing this email address (" +"%(email_address)s) and allow their e-mails to automatically create " +"tickets in your system? You can re-add this e-mail address at any time.
\n" msgstr "" "\n" "Sind Sie sicher, dass Sie diese E-Mail-Adresse nicht mehr entfernen wollen (%(email_address)s) und ihr erlauben wollen, Tickets im System zu erstellen? Sie können sie jederzeit wieder hinzufügen.
\n" +"Sind Sie sicher, dass Sie diese E-Mail-Adresse nicht mehr entfernen " +"wollen (%(email_address)s) und ihr erlauben wollen, Tickets im " +"System zu erstellen? Sie können sie jederzeit wieder hinzufügen.
\n" #: templates/helpdesk/email_ignore_del.html:11 msgid "Keep Ignoring It" @@ -1305,12 +1368,16 @@ msgid "" "\n" "The following e-mail addresses are currently being ignored by the incoming e-mail processor. You can add a new e-mail address to the list or delete any of the items below as required.
" +"The following e-mail addresses are currently being ignored by the " +"incoming e-mail processor. You can add a new e-mail address " +"to the list or delete any of the items below as required.
" msgstr "" "\n" "Folgende E-Mail-Adressen werden zur Zeit ignoriert. Sie können eine neue E-Mail zur Liste hinzufügen oder aber eine der aufgelisteten Adressen löschen.
" +"Folgende E-Mail-Adressen werden zur Zeit ignoriert. Sie können eine neue E-Mail zur Liste hinzufügen oder aber eine der " +"aufgelisteten Adressen löschen.
" #: templates/helpdesk/email_ignore_list.html:13 msgid "Date Added" @@ -1325,6 +1392,7 @@ msgid "Keep in mailbox?" msgstr "Im Postfach aufbewahren" #: templates/helpdesk/email_ignore_list.html:21 +#: templates/helpdesk/ticket_list.html:232 msgid "All" msgstr "Alle" @@ -1375,7 +1443,7 @@ msgstr "Sie sehen alle Einträge der Kategorie %(kbcat)s." msgid "Article" msgstr "Artikel" -#: templates/helpdesk/kb_index.html:4 templates/helpdesk/navigation.html:26 +#: templates/helpdesk/kb_index.html:4 templates/helpdesk/navigation.html:30 msgid "Knowledgebase" msgstr "Wissendatenbank" @@ -1401,9 +1469,8 @@ msgstr "Wissensdatenbank: %(item)s" #: templates/helpdesk/kb_item.html:13 #, python-format msgid "" -"View other %(category_title)s " -"articles, or continue viewing other knowledgebase " -"articles." +"View other %(category_title)s articles" +"a>, or continue viewing other knowledgebase articles." msgstr "" "Andere Artikel aus %(category_title)s " "ansehen, oder Artikel aus anderen Kategorien ansehen." @@ -1454,7 +1521,7 @@ msgid "Dashboard" msgstr "Übersicht" #: templates/helpdesk/navigation.html:5 -#: templates/helpdesk/ticket_list.html:185 +#: templates/helpdesk/ticket_list.html:198 msgid "Tickets" msgstr "Tickets" @@ -1462,67 +1529,68 @@ msgstr "Tickets" msgid "New Ticket" msgstr "Neues Ticket" -#: templates/helpdesk/navigation.html:7 +#: templates/helpdesk/navigation.html:8 msgid "Stats" msgstr "Statistiken" -#: templates/helpdesk/navigation.html:20 +#: templates/helpdesk/navigation.html:22 templates/helpdesk/navigation.html:32 msgid "Logout" msgstr "Abmelden" -#: templates/helpdesk/navigation.html:21 +#: templates/helpdesk/navigation.html:23 msgid "Search..." msgstr "Suche..." -#: templates/helpdesk/navigation.html:21 +#: templates/helpdesk/navigation.html:23 msgid "Enter a keyword, or a ticket number to jump straight to that ticket." msgstr "" -"Geben Sie einen Suchbegriff oder eine Ticketnummer ein, um direkt zum Ticket" -" zu springen." +"Geben Sie einen Suchbegriff oder eine Ticketnummer ein, um direkt zum Ticket " +"zu springen." -#: templates/helpdesk/navigation.html:25 +#: templates/helpdesk/navigation.html:28 msgid "Submit A Ticket" msgstr "Ein Ticket erstellen" -#: templates/helpdesk/navigation.html:27 +#: templates/helpdesk/navigation.html:32 msgid "Log In" msgstr "Anmelden" -#: templates/helpdesk/public_base.html:18 -msgid "" -"Powered by django-" -"helpdesk." -msgstr "" -"Powered by django-" -"helpdesk." - -#: templates/helpdesk/public_homepage.html:4 +#: templates/helpdesk/public_change_language.html:2 +#: templates/helpdesk/public_homepage.html:5 #: templates/helpdesk/public_view_form.html:4 #: templates/helpdesk/public_view_ticket.html:2 msgid "View a Ticket" msgstr "Ein Ticket anschauen" -#: templates/helpdesk/public_homepage.html:12 +#: templates/helpdesk/public_change_language.html:5 +msgid "Change the display language" +msgstr "Anzeigesprache ändern" + +#: templates/helpdesk/public_homepage.html:13 #: templates/helpdesk/public_view_form.html:15 msgid "Your E-mail Address" msgstr "Ihre E-Mail-Adresse" -#: templates/helpdesk/public_homepage.html:16 +#: templates/helpdesk/public_homepage.html:17 #: templates/helpdesk/public_view_form.html:19 msgid "View Ticket" msgstr "Ticket anschauen" -#: templates/helpdesk/public_homepage.html:20 +#: templates/helpdesk/public_homepage.html:23 msgid "Submit a Ticket" msgstr "Ein Ticket erstellen" -#: templates/helpdesk/public_homepage.html:22 +#: templates/helpdesk/public_homepage.html:25 msgid "" "All fields are required. Please provide as descriptive a title and " "description as possible." msgstr "" -"Alle Felder sind Pflichtfelder. Bitte geben Sie einen aussagekräftigen Titel" -" und eine präzise Beschreibung." +"Alle Felder sind Pflichtfelder. Bitte geben Sie einen aussagekräftigen Titel " +"und eine präzise Beschreibung." + +#: templates/helpdesk/public_homepage.html:51 +msgid "Please use button at upper right to login first." +msgstr "" #: templates/helpdesk/public_spam.html:4 msgid "Unable To Open Ticket" @@ -1532,15 +1600,25 @@ msgstr "Ticket kann nicht geöffnet werden" msgid "" "Sorry, but there has been an error trying to submit your ticket.
\n" "\n" -"Our system has marked your submission as spam, so we are unable to save it. If this is not spam, please press back and re-type your message. Be careful to avoid sounding 'spammy', and if you have heaps of links please try removing them if possible.
\n" +"Our system has marked your submission as spam, so we are " +"unable to save it. If this is not spam, please press back and re-type your " +"message. Be careful to avoid sounding 'spammy', and if you have heaps of " +"links please try removing them if possible.
\n" "\n" -"We are sorry for any inconvenience, however this check is required to avoid our helpdesk resources being overloaded by spammers.
\n" +"We are sorry for any inconvenience, however this check is required to " +"avoid our helpdesk resources being overloaded by spammers.
\n" msgstr "" "Leider ist ein Fehler bei der Erstellung Ihres Tickets aufgetreten.
\n" "\n" -"Das System hat Ihre Anfrage als
Das System hat Ihre Anfrage als
Wir entschuldigen uns für die Unanehmlichkeiten, leider ist die Prüfung auf Spam notwendig um zu verhindern, dass der Helpdesk überlastet wird.
\n" +"Wir entschuldigen uns für die Unanehmlichkeiten, leider ist die Prüfung " +"auf Spam notwendig um zu verhindern, dass der Helpdesk überlastet wird.
\n" #: templates/helpdesk/public_view_form.html:8 msgid "Error:" @@ -1552,27 +1630,27 @@ msgid "Queue: %(queue_name)s" msgstr "Ticketsammlung: %(queue_name)s" #: templates/helpdesk/public_view_ticket.html:11 -#: templates/helpdesk/ticket_desc_table.html:7 +#: templates/helpdesk/ticket_desc_table.html:16 msgid "Submitted On" msgstr "Erstellt am" #: templates/helpdesk/public_view_ticket.html:46 -#: templates/helpdesk/ticket_desc_table.html:65 +#: templates/helpdesk/ticket_desc_table.html:74 msgid "Accept" msgstr "Akzeptiert" #: templates/helpdesk/public_view_ticket.html:46 -#: templates/helpdesk/ticket_desc_table.html:65 +#: templates/helpdesk/ticket_desc_table.html:74 msgid "Accept and Close" msgstr "Akzeptiert und geschlossen" #: templates/helpdesk/public_view_ticket.html:55 -#: templates/helpdesk/ticket.html:48 +#: templates/helpdesk/ticket.html:52 msgid "Follow-Ups" msgstr "Weiterbearbeitungen" #: templates/helpdesk/public_view_ticket.html:63 -#: templates/helpdesk/ticket.html:59 +#: templates/helpdesk/ticket.html:80 #, python-format msgid "Changed %(field)s from %(old_value)s to %(new_value)s." msgstr "%(field)s von %(old_value)s zu %(new_value)s geändert." @@ -1617,6 +1695,25 @@ msgstr "nach Monat" msgid "Reports By Queue" msgstr "Berichte nach Sammlung" +#: templates/helpdesk/report_output.html:19 +msgid "" +"You can run this query on filtered data by using one of your saved queries." +msgstr "" + +#: templates/helpdesk/report_output.html:21 +msgid "Select Query:" +msgstr "Abfrage auswählen" + +#: templates/helpdesk/report_output.html:26 +msgid "Filter Report" +msgstr "" + +#: templates/helpdesk/report_output.html:29 +msgid "" +"Want to filter this report to just show a subset of data? Go to the Ticket " +"List, filter your query, and save your query." +msgstr "" + #: templates/helpdesk/rss_list.html:6 msgid "" "The following RSS feeds are available for you to monitor using your " @@ -1624,8 +1721,8 @@ msgid "" "all feeds provide information only on Open and Reopened cases. This ensures " "your RSS reader isn't full of information about closed or historical tasks." msgstr "" -"Folgende RSS Feeds stehen zur Überwachung für Sie zur Verfügung. Alle Feeds," -" mit Ausnahme des 'Letzte Aktivitäten' Feeds, enthalten nur Nachrichtenzu " +"Folgende RSS Feeds stehen zur Überwachung für Sie zur Verfügung. Alle Feeds, " +"mit Ausnahme des 'Letzte Aktivitäten' Feeds, enthalten nur Nachrichtenzu " "offenen oder wiedergeöffneten Tickets. So wird sichergestellt, dass Ihr RSS " "Aggregatornicht voller Mitteilungen zu alten oder geschlossenen Tickets ist." @@ -1646,8 +1743,8 @@ msgid "" "A summary of all helpdesk activity - including comments, emails, " "attachments, and more" msgstr "" -"Eine Übersicht sämtlicher Helpdesk-Aktivitäten - inklusive Kommentare, " -"E-Mails, Anhänge und mehr" +"Eine Übersicht sämtlicher Helpdesk-Aktivitäten - inklusive Kommentare, E-" +"Mails, Anhänge und mehr" #: templates/helpdesk/rss_list.html:16 msgid "" @@ -1695,7 +1792,8 @@ msgstr "" "\n" "Die folgenden Dinge können von Ihnen oder anderen Administratoren gepflegt werden:
" +"Die folgenden Dinge können von Ihnen oder anderen Administratoren " +"gepflegt werden:
" #: templates/helpdesk/system_settings.html:11 msgid "E-Mail Ignore list" @@ -1733,23 +1831,27 @@ msgstr "Ticketdetails ansehen" msgid "Attach another File" msgstr "Weitere Datei anhängen" -#: templates/helpdesk/ticket.html:34 templates/helpdesk/ticket.html.py:147 +#: templates/helpdesk/ticket.html:34 templates/helpdesk/ticket.html.py:181 msgid "Add Another File" msgstr "Weitere Datei hinzufügen" -#: templates/helpdesk/ticket.html:53 +#: templates/helpdesk/ticket.html:45 +msgid "Translate ticket comments into" +msgstr "Ticket Kommentare übersetzen nach" + +#: templates/helpdesk/ticket.html:59 templates/helpdesk/ticket.html.py:69 msgid "Private" msgstr "Privat" -#: templates/helpdesk/ticket.html:70 +#: templates/helpdesk/ticket.html:98 msgid "Respond to this ticket" msgstr "Auf dieses Ticket antworten" -#: templates/helpdesk/ticket.html:76 +#: templates/helpdesk/ticket.html:105 msgid "Use a Pre-set Reply" msgstr "Vorgefertigte Antwort benutzen" -#: templates/helpdesk/ticket.html:78 +#: templates/helpdesk/ticket.html:107 msgid "" "Selecting a pre-set reply will over-write your comment below. You can then " "modify the pre-set reply to your liking before saving this update." @@ -1758,11 +1860,11 @@ msgstr "" "überschrieben. Sie können aber die vorgefertigte Antwort dann an Ihre " "Bedürfnisse anpassen, bevor Sie die Änderung speichern." -#: templates/helpdesk/ticket.html:80 +#: templates/helpdesk/ticket.html:110 msgid "Comment / Resolution" msgstr "Kommentar / Lösung" -#: templates/helpdesk/ticket.html:82 +#: templates/helpdesk/ticket.html:112 msgid "" "You can insert ticket and queue details in your message. For more " "information, see the context help page." @@ -1771,49 +1873,48 @@ msgstr "" "angeben. Weitere Informationen finden Sie auf " "der Kontext-Hilfeseite." -#: templates/helpdesk/ticket.html:85 +#: templates/helpdesk/ticket.html:115 msgid "" -"This ticket cannot be resolved or closed until the tickets it depends on are" -" resolved." +"This ticket cannot be resolved or closed until the tickets it depends on are " +"resolved." msgstr "" "Dieses Ticket kann gelöst oder geschlossen werden, bis die Tickets, von " "denen dieses abhängt, gelöst werden." -#: templates/helpdesk/ticket.html:112 +#: templates/helpdesk/ticket.html:145 msgid "Is this update public?" msgstr "Ist diese Änderung öffentlich?" -#: templates/helpdesk/ticket.html:114 +#: templates/helpdesk/ticket.html:147 msgid "" -"If this is public, the submitter will be e-mailed your comment or " -"resolution." +"If this is public, the submitter will be e-mailed your comment or resolution." msgstr "" "Wenn die Änderung öffentlich ist, wird der Ersteller per E-Mail über Ihren " "Kommentar oder Ihre Lösung informiert werden." -#: templates/helpdesk/ticket.html:117 +#: templates/helpdesk/ticket.html:151 msgid "Change Further Details »" msgstr "Weitere Details anpassen »" -#: templates/helpdesk/ticket.html:126 templates/helpdesk/ticket_list.html:53 -#: templates/helpdesk/ticket_list.html:84 -#: templates/helpdesk/ticket_list.html:186 +#: templates/helpdesk/ticket.html:160 templates/helpdesk/ticket_list.html:55 +#: templates/helpdesk/ticket_list.html:87 +#: templates/helpdesk/ticket_list.html:199 msgid "Owner" msgstr "Verantwortlicher" -#: templates/helpdesk/ticket.html:127 +#: templates/helpdesk/ticket.html:161 msgid "Unassign" msgstr "Zuordnung aufheben" -#: templates/helpdesk/ticket.html:140 +#: templates/helpdesk/ticket.html:174 msgid "Attach File(s) »" msgstr "Datei(en) anhängen »" -#: templates/helpdesk/ticket.html:146 +#: templates/helpdesk/ticket.html:180 msgid "Attach a File" msgstr "Eine Datei anhängen" -#: templates/helpdesk/ticket.html:154 +#: templates/helpdesk/ticket.html:188 msgid "Update This Ticket" msgstr "Dieses Ticket aktualisieren" @@ -1826,12 +1927,15 @@ msgid "" "\n" "To automatically send an email to a user or e-mail address when this ticket is updated, select the user or enter an e-mail address below.
" +"To automatically send an email to a user or e-mail address when this " +"ticket is updated, select the user or enter an e-mail address below.
" msgstr "" "\n" "Wählen Sie einen Benutzer oder geben Sie eine E-Mail-Adresse ein, die bei Aktualisierungen dieses Tickets automatisch per Mail benachrichtig werden sollen.
" +"Wählen Sie einen Benutzer oder geben Sie eine E-Mail-Adresse ein, die bei " +"Aktualisierungen dieses Tickets automatisch per Mail benachrichtig werden " +"sollen.
" #: templates/helpdesk/ticket_cc_add.html:21 msgid "Save Ticket CC" @@ -1847,12 +1951,16 @@ msgid "" "\n" "Are you sure you wish to delete this email address (%(email_address)s) from the CC list for this ticket? They will stop receiving updates.
\n" +"Are you sure you wish to delete this email address (" +"%(email_address)s) from the CC list for this ticket? They will stop " +"receiving updates.
\n" msgstr "" "\n" "Sind Sie sicher, dass Sie diese E-Mail-Adresse (%(email_address)s) von der CC Liste löschen wollen? Sie wird keine Aktualisierungsbenachrichtigungen mehr erhalten.
\n" +"Sind Sie sicher, dass Sie diese E-Mail-Adresse (%(email_address)s" +"em>) von der CC Liste löschen wollen? Sie wird keine " +"Aktualisierungsbenachrichtigungen mehr erhalten.
\n" #: templates/helpdesk/ticket_cc_del.html:11 #: templates/helpdesk/ticket_dependency_del.html:11 @@ -1874,16 +1982,23 @@ msgid "" "\n" "The following people will receive an e-mail whenever %(ticket_title)s is updated. Some people can also view or edit the ticket via the public ticket views.
\n" +"The following people will receive an e-mail whenever " +"%(ticket_title)s is updated. Some people can also view or edit the " +"ticket via the public ticket views.
\n" "\n" -"You can add a new e-mail address to the list or delete any of the items below as required.
" +"You can add a new e-mail address to the list or delete " +"any of the items below as required.
" msgstr "" "\n" "Die folgenden Personen erhalten eine E-Mail, wenn das Ticket %(ticket_title)s aktualisiert wird. Manche Personen können das Ticket auch die öffentliche Ticketanzeige ansehen oder bearbeiten.
\n" +"Die folgenden Personen erhalten eine E-Mail, wenn das Ticket %(ticket_title)s aktualisiert wird. Manche Personen " +"können das Ticket auch die öffentliche Ticketanzeige ansehen oder bearbeiten." +"
\n" "\n" -"Sie können der Liste neue E-Mail-Adressen hinzufügen oder jede der unten aufgeführten Adressen löschen.
" +"Sie können der Liste neue E-Mail-Adressen hinzufügen " +"oder jede der unten aufgeführten Adressen löschen.
" #: templates/helpdesk/ticket_cc_list.html:14 msgid "Ticket CC List" @@ -1911,12 +2026,14 @@ msgid "" "\n" "Adding a dependency will stop you resolving this ticket until the dependent ticket has been resolved or closed.
" +"Adding a dependency will stop you resolving this ticket until the " +"dependent ticket has been resolved or closed.
" msgstr "" "\n" "Das Hinzufügen einer Abhängigkeit verhindert die Lösung dieses Tickets bis alle abhängigen Tickets gelöst oder geschlossen wurden.
" +"Das Hinzufügen einer Abhängigkeit verhindert die Lösung dieses Tickets " +"bis alle abhängigen Tickets gelöst oder geschlossen wurden.
" #: templates/helpdesk/ticket_dependency_add.html:21 msgid "Save Ticket Dependency" @@ -1936,126 +2053,209 @@ msgstr "" "\n" "Sind Sie sicher, dass Sie die Abhängigkeit von diesem Ticket entfernen möchten?
\n" +"Sind Sie sicher, dass Sie die Abhängigkeit von diesem Ticket entfernen " +"möchten?
\n" -#: templates/helpdesk/ticket_desc_table.html:3 +#: templates/helpdesk/ticket_desc_table.html:11 msgid "Unhold" msgstr "Wieder freigeben" -#: templates/helpdesk/ticket_desc_table.html:3 +#: templates/helpdesk/ticket_desc_table.html:11 msgid "Hold" msgstr "Zurückhalten" -#: templates/helpdesk/ticket_desc_table.html:4 +#: templates/helpdesk/ticket_desc_table.html:13 #, python-format msgid "Queue: %(queue)s" msgstr "Ticketsammlung: %(queue)s" -#: templates/helpdesk/ticket_desc_table.html:12 +#: templates/helpdesk/ticket_desc_table.html:21 msgid "Assigned To" msgstr "Zugeordnet " -#: templates/helpdesk/ticket_desc_table.html:18 +#: templates/helpdesk/ticket_desc_table.html:27 msgid "Ignore" msgstr "Ignorieren" -#: templates/helpdesk/ticket_desc_table.html:27 +#: templates/helpdesk/ticket_desc_table.html:36 msgid "Copies To" msgstr "Kopie an" -#: templates/helpdesk/ticket_desc_table.html:28 +#: templates/helpdesk/ticket_desc_table.html:37 msgid "Manage" msgstr "Verwalten" -#: templates/helpdesk/ticket_desc_table.html:39 +#: templates/helpdesk/ticket_desc_table.html:37 +msgid "" +"Click here to add / remove people who should receive an e-mail whenever this " +"ticket is updated." +msgstr "" +"Klicken Sie hier um zusätzliche Email Empfänger zu verwalten, welche benachrichtigt werden, " +"wenn das Ticket aktualisiert wird." + +#: templates/helpdesk/ticket_desc_table.html:48 msgid "Dependencies" msgstr "Abhängigkeiten" -#: templates/helpdesk/ticket_desc_table.html:41 +#: templates/helpdesk/ticket_desc_table.html:50 msgid "" "This ticket cannot be resolved until the following ticket(s) are resolved" msgstr "" "Dieses Ticket kann nicht gelöst werden, bis die folgenden Ticket(s) gelöst " "werden" -#: templates/helpdesk/ticket_desc_table.html:42 +#: templates/helpdesk/ticket_desc_table.html:51 msgid "Remove Dependency" msgstr "Abhängigkeit entfernen" -#: templates/helpdesk/ticket_desc_table.html:45 +#: templates/helpdesk/ticket_desc_table.html:54 msgid "This ticket has no dependencies." msgstr "Dieses Ticket hat keine Abhängigkeiten." -#: templates/helpdesk/ticket_desc_table.html:47 +#: templates/helpdesk/ticket_desc_table.html:56 msgid "Add Dependency" msgstr "Abhängigkeit hinzufügen" +#: templates/helpdesk/ticket_desc_table.html:56 +msgid "" +"Click on 'Add Dependency', if you want to make this ticket dependent on " +"another ticket. A ticket may not be closed until all tickets it depends on " +"are closed." +msgstr "" +"Klicken Sie auf 'Abhängigkeit hinzufügen', wenn Sie dieses Ticket abhängig von einem " +"anderen Ticket machen wollen. Tickets können nur geschlossen werden, wenn alle " +"Tickets von denen es abhängt, geschlossen worden sind." + #: templates/helpdesk/ticket_list.html:2 msgid "Ticket Listing" msgstr "Ticket Aufzählung" -#: templates/helpdesk/ticket_list.html:49 +#: templates/helpdesk/ticket_list.html:41 +msgid "Query Options" +msgstr "Abfrage Optionen" + +#: templates/helpdesk/ticket_list.html:43 +msgid "Save This Query" +msgstr "Abfrage speichern" + +#: templates/helpdesk/ticket_list.html:46 +msgid "Load Saved Query" +msgstr "Abfrage laden" + +#: templates/helpdesk/ticket_list.html:51 msgid "Change Query" msgstr "Abfrage ändern" -#: templates/helpdesk/ticket_list.html:52 +#: templates/helpdesk/ticket_list.html:54 +#: templates/helpdesk/ticket_list.html:69 msgid "Sorting" msgstr "Sortierung" -#: templates/helpdesk/ticket_list.html:56 -#: templates/helpdesk/ticket_list.html:127 +#: templates/helpdesk/ticket_list.html:58 +#: templates/helpdesk/ticket_list.html:137 msgid "Keywords" msgstr "Schlagworte" -#: templates/helpdesk/ticket_list.html:94 +#: templates/helpdesk/ticket_list.html:59 +msgid "Date Range" +msgstr "Zeitspanne" + +#: templates/helpdesk/ticket_list.html:90 +msgid "Reverse" +msgstr "" + +#: templates/helpdesk/ticket_list.html:92 +msgid "Ordering applied to tickets" +msgstr "" + +#: templates/helpdesk/ticket_list.html:97 msgid "Owner(s)" msgstr "Verantwortlich" -#: templates/helpdesk/ticket_list.html:107 +#: templates/helpdesk/ticket_list.html:101 +msgid "(ME)" +msgstr "" + +#: templates/helpdesk/ticket_list.html:105 +msgid "Ctrl-Click to select multiple options" +msgstr "" + +#: templates/helpdesk/ticket_list.html:110 msgid "Queue(s)" msgstr "Ticketsammlung(en)" -#: templates/helpdesk/ticket_list.html:113 +#: templates/helpdesk/ticket_list.html:111 +#: templates/helpdesk/ticket_list.html:117 +#: templates/helpdesk/ticket_list.html:131 +msgid "Ctrl-click to select multiple options" +msgstr "" + +#: templates/helpdesk/ticket_list.html:116 msgid "Status(es)" msgstr "Status" -#: templates/helpdesk/ticket_list.html:120 +#: templates/helpdesk/ticket_list.html:122 +msgid "Date (From)" +msgstr "Datum (von)" + +#: templates/helpdesk/ticket_list.html:123 +msgid "Date (To)" +msgstr "Datum (bis)" + +#: templates/helpdesk/ticket_list.html:124 +msgid "Use YYYY-MM-DD date format, eg 2011-05-29" +msgstr "" + +#: templates/helpdesk/ticket_list.html:130 msgid "Tag(s)" msgstr "Tag(s)" -#: templates/helpdesk/ticket_list.html:132 +#: templates/helpdesk/ticket_list.html:138 +msgid "" +"Keywords are case-insensitive, and will be looked for in the title, body and " +"submitter fields." +msgstr "" + +#: templates/helpdesk/ticket_list.html:142 msgid "Apply Filter" msgstr "Filter anwenden" -#: templates/helpdesk/ticket_list.html:134 +#: templates/helpdesk/ticket_list.html:144 #, python-format msgid "You are currently viewing saved query %(query_name)s." msgstr "Sie sehen die gespeicherte Abfrage %(query_name)s." -#: templates/helpdesk/ticket_list.html:141 -#: templates/helpdesk/ticket_list.html:156 +#: templates/helpdesk/ticket_list.html:147 +#, python-format +msgid "" +"Run a report on this " +"query to see stats and charts for the data listed below." +msgstr "" + +#: templates/helpdesk/ticket_list.html:154 +#: templates/helpdesk/ticket_list.html:169 msgid "Save Query" msgstr "Abfrage speichern" -#: templates/helpdesk/ticket_list.html:147 +#: templates/helpdesk/ticket_list.html:160 msgid "" "This name appears in the drop-down list of saved queries. If you share your " "query, other users will see this name, so choose something clear and " "descriptive!" msgstr "" -"Dieser Name erscheint in der Liste der gespeicherten Abfragen. Wenn Sie Ihre" -" Abfrage teilen, sehen andere Benutzer diesen Namen und können Ihre Abfrage " +"Dieser Name erscheint in der Liste der gespeicherten Abfragen. Wenn Sie Ihre " +"Abfrage teilen, sehen andere Benutzer diesen Namen und können Ihre Abfrage " "benutzen. Wählen Sie also einen aussagekräftigen Namen!" -#: templates/helpdesk/ticket_list.html:149 +#: templates/helpdesk/ticket_list.html:162 msgid "Shared?" msgstr "Geteilt?" -#: templates/helpdesk/ticket_list.html:150 +#: templates/helpdesk/ticket_list.html:163 msgid "Yes, share this query with other users." msgstr "Ja, diese Abfrage mit anderen Benutzern teilen." -#: templates/helpdesk/ticket_list.html:151 +#: templates/helpdesk/ticket_list.html:164 msgid "" "If you share this query, it will be visible by all other logged-in " "users." @@ -2063,52 +2263,95 @@ msgstr "" "Wenn Sie diese Abfrage teilen, wird Sie für alle anderen " "angemeldeten Benutzer sichtbar sein." -#: templates/helpdesk/ticket_list.html:163 +#: templates/helpdesk/ticket_list.html:176 msgid "Use Saved Query" msgstr "Gespeicherte Abfrage benutzen" -#: templates/helpdesk/ticket_list.html:165 +#: templates/helpdesk/ticket_list.html:178 msgid "Query" msgstr "Abfrage" -#: templates/helpdesk/ticket_list.html:170 +#: templates/helpdesk/ticket_list.html:183 msgid "Run Query" msgstr "Abfrage starten" -#: templates/helpdesk/ticket_list.html:200 +#: templates/helpdesk/ticket_list.html:213 msgid "No Tickets Match Your Selection" msgstr "Ihrer Auswahl entsprechen keine Tickets" -#: templates/helpdesk/ticket_list.html:206 +#: templates/helpdesk/ticket_list.html:219 msgid "Previous" msgstr "Vorherige" -#: templates/helpdesk/ticket_list.html:210 +#: templates/helpdesk/ticket_list.html:223 #, python-format msgid "Page %(ticket_num)s of %(num_pages)s." msgstr "Seite %(ticket_num)s von %(num_pages)s." -#: templates/helpdesk/ticket_list.html:214 +#: templates/helpdesk/ticket_list.html:227 msgid "Next" msgstr "Nächste" +#: templates/helpdesk/ticket_list.html:232 +msgid "Select:" +msgstr "Auswahl:" + +#: templates/helpdesk/ticket_list.html:232 +msgid "None" +msgstr "Keine" + +#: templates/helpdesk/ticket_list.html:232 +msgid "Inverse" +msgstr "Invertiert" + +#: templates/helpdesk/ticket_list.html:234 +msgid "With Selected Tickets:" +msgstr "Ausgewählte Tickets:" + +#: templates/helpdesk/ticket_list.html:234 +msgid "Take (Assign to me)" +msgstr "Nehmen (und mir zuweisen)" + +#: templates/helpdesk/ticket_list.html:234 +msgid "Close" +msgstr "Schliessen" + +#: templates/helpdesk/ticket_list.html:234 +msgid "Close (Don't Send E-Mail)" +msgstr "Schliessen (keine Email verschicken)" + +#: templates/helpdesk/ticket_list.html:234 +msgid "Close (Send E-Mail)" +msgstr "Schliessen (Email verschicken)" + +#: templates/helpdesk/ticket_list.html:234 +msgid "Assign To" +msgstr "Zuordnen" + +#: templates/helpdesk/ticket_list.html:234 +msgid "Nobody (Unassign)" +msgstr "Zuordnung aufheben" + #: templates/helpdesk/user_settings.html:3 msgid "Change User Settings" msgstr "Benutzereinstellungen ändern" -#: templates/helpdesk/user_settings.html:5 +#: templates/helpdesk/user_settings.html:14 msgid "" "\n" "Use the following options to change the way your helpdesk system works for you. These settings do not impact any other user.
" +"Use the following options to change the way your helpdesk system works " +"for you. These settings do not impact any other user.
\n" msgstr "" "\n" "Mit den folgenden Einstellungen können Sie den Helpdesk an Ihre Bedürfnisse anpassen. Die Einstellungen haben keine Auswirkung auf andere Benutzer.
" +"Mit den folgenden Einstellungen können Sie den Helpdesk an Ihre " +"Bedürfnisse anpassen. Die Einstellungen haben keine Auswirkung auf andere " +"Benutzer.
\n" -#: templates/helpdesk/user_settings.html:19 +#: templates/helpdesk/user_settings.html:29 msgid "Save Options" msgstr "Einstellungen speichern" @@ -2121,25 +2364,27 @@ msgid "" "\n" "Thanks for being here. Hopefully you've helped resolve a few tickets and make the world a better place.
\n" +"Thanks for being here. Hopefully you've helped resolve a few tickets and " +"make the world a better place.
\n" "\n" msgstr "" "\n" "Vielen Dank für den Besuch! Hoffentlich konnten Sie einige Tickets beantworten und so einige Benutzer glücklich machen.
\n" +"Vielen Dank für den Besuch! Hoffentlich konnten Sie einige Tickets " +"beantworten und so einige Benutzer glücklich machen.
\n" "\n" #: templates/helpdesk/registration/login.html:2 msgid "Helpdesk Login" msgstr "Helpdesk Anmeldung" -#: templates/helpdesk/registration/login.html:5 -#: templates/helpdesk/registration/login.html:17 +#: templates/helpdesk/registration/login.html:9 +#: templates/helpdesk/registration/login.html:21 msgid "Login" msgstr "Anmeldung" -#: templates/helpdesk/registration/login.html:7 +#: templates/helpdesk/registration/login.html:11 msgid "" "To log in and begin responding to cases, simply enter your username and " "password below." @@ -2147,17 +2392,17 @@ msgstr "" "Um sich anzumelden und Tickets zu bearbeiten, geben Sie einfach Ihren " "Benutzernamen und Ihr Passwort ein." -#: templates/helpdesk/registration/login.html:10 +#: templates/helpdesk/registration/login.html:14 msgid "Your username and password didn't match. Please try again." msgstr "" -"Benutzername und Passwort passen nicht zusammen. Bitte versuchen Sie es noch" -" einmal." +"Benutzername und Passwort passen nicht zusammen. Bitte versuchen Sie es noch " +"einmal." -#: templates/helpdesk/registration/login.html:12 +#: templates/helpdesk/registration/login.html:16 msgid "Username" msgstr "Benutzername" -#: templates/helpdesk/registration/login.html:14 +#: templates/helpdesk/registration/login.html:18 msgid "Password" msgstr "Passwort" @@ -2200,8 +2445,8 @@ msgid "" "Recent FollowUps, such as e-mail replies, comments, attachments and " "resolutions" msgstr "" -"Kürzliche Weiterbearbeitungen wie E-Mail-Antworten, Kommentare, Anhänge oder" -" Lösungen" +"Kürzliche Weiterbearbeitungen wie E-Mail-Antworten, Kommentare, Anhänge oder " +"Lösungen" #: views/feeds.py:142 #, python-format @@ -2213,144 +2458,152 @@ msgstr "Helpdesk: Offene Tickets in Ticketsammlung %(queue)s" msgid "Open and Reopened Tickets in queue %(queue)s" msgstr "Offene und wiedergeöffnete Tickets in Ticketsammlung %(queue)s" -#: views/public.py:83 +#: views/public.py:88 msgid "Invalid ticket ID or e-mail address. Please try again." msgstr "" "Ungültige Ticket-ID oder E-Mail-Adresse. Bitte versuchen Sie es erneut." -#: views/public.py:101 +#: views/public.py:106 msgid "Submitter accepted resolution and closed ticket" msgstr "Ersteller akzeptiert die Lösung und hat das Ticket geschlossen." -#: views/staff.py:155 +#: views/staff.py:198 msgid "Accepted resolution and closed ticket" msgstr "Lösung akzeptiert und Ticket geschlossen" -#: views/staff.py:173 +#: views/staff.py:216 msgid "Sorry, you need to login to do that." msgstr "Dafür müssen Sie sich leider anmelden." -#: views/staff.py:206 +#: views/staff.py:256 #, python-format msgid "Assigned to %(username)s" msgstr "%(username)s zugeordnet" -#: views/staff.py:228 +#: views/staff.py:279 msgid "Updated" msgstr "Aktualisiert" -#: views/staff.py:395 +#: views/staff.py:446 #, python-format msgid "Assigned to %(username)s in bulk update" msgstr "%(username)s zugeordnet in Massenaktualisierung" -#: views/staff.py:400 +#: views/staff.py:451 msgid "Unassigned in bulk update" msgstr "Zuordnung in Massenaktualisierung aufgehoben" -#: views/staff.py:405 views/staff.py:410 +#: views/staff.py:456 views/staff.py:461 msgid "Closed in bulk update" msgstr "In Massenaktualisierung geschlossen" -#: views/staff.py:606 +#: views/staff.py:666 msgid "" "Note: Your keyword search is case sensitive because of " "your database. This means the search will not be accurate. " "By switching to a different database system you will gain better searching! " -"For more information, read the Django Documentation on string matching in SQLite." +"For more information, read the Django Documentation on string " +"matching in SQLite." msgstr "" "
Achtung: Ihre Schlagwortsuche achtet wegen Ihrer "
"Datenbank auf Groß- und Kleinschreibung. Das bedeutet, dass die Suche "
"nicht genau ist. Durch den Wechsel auf eine andere "
"Datenbank werden Sie eine bessere Suche erhalten. Weitere Informationen "
-"finden Sie in der Django Dokumentation zur Stringerkennung in SQLite."
+"finden Sie in der Django Dokumentation zur Stringerkennung "
+"in SQLite."
-#: views/staff.py:713
+#: views/staff.py:775
msgid "Ticket taken off hold"
msgstr "Ticket wieder freigegeben"
-#: views/staff.py:716
+#: views/staff.py:778
msgid "Ticket placed on hold"
msgstr "Ticket zurückgehalten"
-#: views/staff.py:784
+#: views/staff.py:846
msgid "Jan"
msgstr "Jan"
-#: views/staff.py:785
+#: views/staff.py:847
msgid "Feb"
msgstr "Feb"
-#: views/staff.py:786
+#: views/staff.py:848
msgid "Mar"
msgstr "Mär"
-#: views/staff.py:787
+#: views/staff.py:849
msgid "Apr"
msgstr "Apr"
-#: views/staff.py:788
+#: views/staff.py:850
msgid "May"
msgstr "Mai"
-#: views/staff.py:789
+#: views/staff.py:851
msgid "Jun"
msgstr "Jun"
-#: views/staff.py:790
+#: views/staff.py:852
msgid "Jul"
msgstr "Jul"
-#: views/staff.py:791
+#: views/staff.py:853
msgid "Aug"
msgstr "Aug"
-#: views/staff.py:792
+#: views/staff.py:854
msgid "Sep"
msgstr "Sep"
-#: views/staff.py:793
+#: views/staff.py:855
msgid "Oct"
msgstr "Okt"
-#: views/staff.py:794
+#: views/staff.py:856
msgid "Nov"
msgstr "Nov"
-#: views/staff.py:795
+#: views/staff.py:857
msgid "Dec"
msgstr "Dez"
-#: views/staff.py:821
+#: views/staff.py:883
msgid "User by Priority"
msgstr "Benutzer je Priorität"
-#: views/staff.py:827
+#: views/staff.py:889
msgid "User by Queue"
msgstr "Benutzer je Sammlung"
-#: views/staff.py:833
+#: views/staff.py:895
msgid "User by Status"
msgstr "Benutzer je Status"
-#: views/staff.py:839
+#: views/staff.py:901
msgid "User by Month"
msgstr "Benutzer je Monat"
-#: views/staff.py:845
+#: views/staff.py:907
msgid "Queue by Priority"
msgstr "Sammlung je Priorität"
-#: views/staff.py:851
+#: views/staff.py:913
msgid "Queue by Status"
msgstr "Sammlung je Status"
-#: views/staff.py:857
+#: views/staff.py:919
msgid "Queue by Month"
msgstr "Sammlung je Monat"
+#~ msgid "Your Tickets"
+#~ msgstr "Ihre Tickets"
+#~ msgid ""
+#~ "Powered by django-"
+#~ "helpdesk."
+#~ msgstr ""
+#~ "Powered by django-"
+#~ "helpdesk."
diff --git a/helpdesk/locale/en/LC_MESSAGES/django.mo b/helpdesk/locale/en/LC_MESSAGES/django.mo
index c0af75e3..25efc87f 100644
Binary files a/helpdesk/locale/en/LC_MESSAGES/django.mo and b/helpdesk/locale/en/LC_MESSAGES/django.mo differ
diff --git a/helpdesk/locale/en/LC_MESSAGES/django.po b/helpdesk/locale/en/LC_MESSAGES/django.po
index 4f8606ed..3299ef1c 100644
--- a/helpdesk/locale/en/LC_MESSAGES/django.po
+++ b/helpdesk/locale/en/LC_MESSAGES/django.po
@@ -8,175 +8,167 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-05-11 15:05+1000\n"
+"POT-Creation-Date: 2012-01-20 11:41-0800\n"
"PO-Revision-Date: 2011-07-02 07:12+10Last-Translator: Ross Poulton "
" Are you sure you want to delete this saved filter (%(query_title)s"
-"em>)? To re-create it, you will need to manually re-filter your ticket "
-"listing. You have shared this query, so other users may be using it. If you delete "
-"it, they will have to manually create their own query. Unless otherwise stated, all fields are required. Please provide as "
-"descriptive a title and description as possible. Are you sure you want to delete this ticket (%(ticket_title)s)? "
-"All traces of the ticket, including followups, attachments, and updates will "
-"be irreversably removed. Unless otherwise stated, all fields are required. Please provide as "
-"descriptive a title and description as possible. Note: Editing a ticket does not send an e-mail "
-"to the ticket owner or submitter. No new details should be entered, this "
-"form should only be used to fix incorrect details or clean up the submission."
-" To ignore an e-mail address and prevent any emails from that address "
-"creating tickets automatically, enter the e-mail address below. You can either enter a whole e-mail address such as email@domain.com"
-"em> or a portion of an e-mail address with a wildcard, such as *@domain."
-"com or user@*. Are you sure you wish to stop removing this email address (%"
-"(email_address)s) and allow their e-mails to automatically create "
-"tickets in your system? You can re-add this e-mail address at any time. The following e-mail addresses are currently being ignored by the "
-"incoming e-mail processor. You can add a new e-mail address "
-"to the list or delete any of the items below as required. Sorry, but there has been an error trying to submit your ticket. Our system has marked your submission as spam, so we are "
-"unable to save it. If this is not spam, please press back and re-type your "
-"message. Be careful to avoid sounding 'spammy', and if you have heaps of "
-"links please try removing them if possible. We are sorry for any inconvenience, however this check is required to "
-"avoid our helpdesk resources being overloaded by spammers. The following items can be maintained by you or other superusers: To automatically send an email to a user or e-mail address when this "
-"ticket is updated, select the user or enter an e-mail address below. Are you sure you wish to delete this email address (%(email_address)"
-"s) from the CC list for this ticket? They will stop receiving updates."
-"p>\n"
-msgstr ""
-
-#: templates/helpdesk/ticket_cc_del.html:11
-#: templates/helpdesk/ticket_dependency_del.html:11
-msgid "Don't Delete"
-msgstr ""
-
-#: templates/helpdesk/ticket_cc_del.html:13
-#: templates/helpdesk/ticket_dependency_del.html:13
-msgid "Yes, Delete"
-msgstr ""
-
-#: templates/helpdesk/ticket_cc_list.html:3
-msgid "Ticket CC Settings"
-msgstr ""
-
-#: templates/helpdesk/ticket_cc_list.html:5
-#, python-format
-msgid ""
-"\n"
-" The following people will receive an e-mail whenever %"
-"(ticket_title)s is updated. Some people can also view or edit the "
-"ticket via the public ticket views. You can add a new e-mail address to the list or delete "
-"any of the items below as required. Adding a dependency will stop you resolving this ticket until the "
-"dependent ticket has been resolved or closed. Are you sure you wish to remove the dependency on this ticket? Use the following options to change the way your helpdesk system works "
-"for you. These settings do not impact any other user. Thanks for being here. Hopefully you've helped resolve a few tickets and "
-"make the world a better place. Note: Your keyword search is case sensitive because of "
"your database. This means the search will not be accurate. "
@@ -2056,86 +1027,86 @@ msgid ""
"matching in SQLite."
msgstr ""
-#: views/staff.py:713
+#: views/staff.py:797
msgid "Ticket taken off hold"
msgstr ""
-#: views/staff.py:716
+#: views/staff.py:800
msgid "Ticket placed on hold"
msgstr ""
-#: views/staff.py:784
+#: views/staff.py:868
msgid "Jan"
msgstr ""
-#: views/staff.py:785
+#: views/staff.py:869
msgid "Feb"
msgstr ""
-#: views/staff.py:786
+#: views/staff.py:870
msgid "Mar"
msgstr ""
-#: views/staff.py:787
+#: views/staff.py:871
msgid "Apr"
msgstr ""
-#: views/staff.py:788
+#: views/staff.py:872
msgid "May"
msgstr ""
-#: views/staff.py:789
+#: views/staff.py:873
msgid "Jun"
msgstr ""
-#: views/staff.py:790
+#: views/staff.py:874
msgid "Jul"
msgstr ""
-#: views/staff.py:791
+#: views/staff.py:875
msgid "Aug"
msgstr ""
-#: views/staff.py:792
+#: views/staff.py:876
msgid "Sep"
msgstr ""
-#: views/staff.py:793
+#: views/staff.py:877
msgid "Oct"
msgstr ""
-#: views/staff.py:794
+#: views/staff.py:878
msgid "Nov"
msgstr ""
-#: views/staff.py:795
+#: views/staff.py:879
msgid "Dec"
msgstr ""
-#: views/staff.py:821
+#: views/staff.py:905
msgid "User by Priority"
msgstr ""
-#: views/staff.py:827
+#: views/staff.py:911
msgid "User by Queue"
msgstr ""
-#: views/staff.py:833
+#: views/staff.py:917
msgid "User by Status"
msgstr ""
-#: views/staff.py:839
+#: views/staff.py:923
msgid "User by Month"
msgstr ""
-#: views/staff.py:845
+#: views/staff.py:929
msgid "Queue by Priority"
msgstr ""
-#: views/staff.py:851
+#: views/staff.py:935
msgid "Queue by Status"
msgstr ""
-#: views/staff.py:857
+#: views/staff.py:941
msgid "Queue by Month"
msgstr ""
diff --git a/helpdesk/management/commands/escalate_tickets.py b/helpdesk/management/commands/escalate_tickets.py
index 13f6b712..b6050061 100644
--- a/helpdesk/management/commands/escalate_tickets.py
+++ b/helpdesk/management/commands/escalate_tickets.py
@@ -13,12 +13,12 @@ import getopt
from optparse import make_option
import sys
-from django.core.management.base import BaseCommand
+from django.core.management.base import BaseCommand, CommandError
from django.db.models import Q
from django.utils.translation import ugettext as _
from helpdesk.models import Queue, Ticket, FollowUp, EscalationExclusion, TicketChange
-from helpdesk.lib import send_templated_mail
+from helpdesk.lib import send_templated_mail, safe_template_context
class Command(BaseCommand):
@@ -99,10 +99,7 @@ def escalate_tickets(queues, verbose):
t.priority -= 1
t.save()
- context = {
- 'ticket': t,
- 'queue': q,
- }
+ context = safe_template_context(t)
if t.submitter_email:
send_templated_mail(
diff --git a/helpdesk/management/commands/get_email.py b/helpdesk/management/commands/get_email.py
index 1b22c0b0..f9d69a09 100644
--- a/helpdesk/management/commands/get_email.py
+++ b/helpdesk/management/commands/get_email.py
@@ -25,8 +25,9 @@ from django.core.files.base import ContentFile
from django.core.management.base import BaseCommand
from django.db.models import Q
from django.utils.translation import ugettext as _
+from django.conf import settings
-from helpdesk.lib import send_templated_mail
+from helpdesk.lib import send_templated_mail, safe_template_context
from helpdesk.models import Queue, Ticket, FollowUp, Attachment, IgnoreEmail
@@ -75,18 +76,22 @@ def process_email(quiet=False):
def process_queue(q, quiet=False):
if not quiet:
print "Processing: %s" % q
- if q.email_box_type == 'pop3':
- if q.email_box_ssl:
+ email_box_type = settings.QUEUE_EMAIL_BOX_TYPE if settings.QUEUE_EMAIL_BOX_TYPE else q.email_box_type
+
+ if email_box_type == 'pop3':
+
+ if q.email_box_ssl or settings.QUEUE_EMAIL_BOX_SSL:
if not q.email_box_port: q.email_box_port = 995
- server = poplib.POP3_SSL(q.email_box_host, int(q.email_box_port))
+ server = poplib.POP3_SSL(q.email_box_host or settings.QUEUE_EMAIL_BOX_HOST, int(q.email_box_port))
else:
if not q.email_box_port: q.email_box_port = 110
- server = poplib.POP3(q.email_box_host, int(q.email_box_port))
+ server = poplib.POP3(q.email_box_host or settings.QUEUE_EMAIL_BOX_HOST, int(q.email_box_port))
server.getwelcome()
- server.user(q.email_box_user)
- server.pass_(q.email_box_pass)
+ server.user(q.email_box_user or settings.QUEUE_EMAIL_BOX_USER)
+ server.pass_(q.email_box_pass or settings.QUEUE_EMAIL_BOX_PASSWORD)
+
messagesInfo = server.list()[1]
@@ -102,15 +107,15 @@ def process_queue(q, quiet=False):
server.quit()
- elif q.email_box_type == 'imap':
- if q.email_box_ssl:
+ elif email_box_type == 'imap':
+ if q.email_box_ssl or settings.QUEUE_EMAIL_BOX_SSL:
if not q.email_box_port: q.email_box_port = 993
- server = imaplib.IMAP4_SSL(q.email_box_host, int(q.email_box_port))
+ server = imaplib.IMAP4_SSL(q.email_box_host or settings.QUEUE_EMAIL_BOX_HOST, int(q.email_box_port))
else:
if not q.email_box_port: q.email_box_port = 143
- server = imaplib.IMAP4(q.email_box_host, int(q.email_box_port))
+ server = imaplib.IMAP4(q.email_box_host or settings.QUEUE_EMAIL_BOX_HOST, int(q.email_box_port))
- server.login(q.email_box_user, q.email_box_pass)
+ server.login(q.email_box_user or settings.QUEUE_EMAIL_BOX_USER, q.email_box_pass or settings.QUEUE_EMAIL_BOX_PASSWORD)
server.select(q.email_box_imap_folder)
status, data = server.search(None, 'NOT', 'DELETED')
@@ -246,6 +251,61 @@ def ticket_from_message(message, queue, quiet):
t.status = Ticket.REOPENED_STATUS
t.save()
+ context = safe_template_context(t)
+
+ if new:
+
+ if sender_email:
+ send_templated_mail(
+ 'newticket_submitter',
+ context,
+ recipients=sender_email,
+ sender=queue.from_address,
+ fail_silently=True,
+ )
+
+ if queue.new_ticket_cc:
+ send_templated_mail(
+ 'newticket_cc',
+ context,
+ recipients=queue.new_ticket_cc,
+ sender=queue.from_address,
+ fail_silently=True,
+ )
+
+ if queue.updated_ticket_cc and queue.updated_ticket_cc != queue.new_ticket_cc:
+ send_templated_mail(
+ 'newticket_cc',
+ context,
+ recipients=queue.updated_ticket_cc,
+ sender=queue.from_address,
+ fail_silently=True,
+ )
+
+ else:
+ if t.status == Ticket.REOPENED_STATUS:
+ update = _(' (Reopened)')
+ else:
+ update = _(' (Updated)')
+
+ if t.assigned_to:
+ send_templated_mail(
+ 'updated_owner',
+ context,
+ recipients=t.assigned_to.email,
+ sender=queue.from_address,
+ fail_silently=True,
+ )
+
+ if queue.updated_ticket_cc:
+ send_templated_mail(
+ 'updated_cc',
+ context,
+ recipients=queue.updated_ticket_cc,
+ sender=queue.from_address,
+ fail_silently=True,
+ )
+
f = FollowUp(
ticket = t,
title = _('E-Mail Received from %(sender_email)s' % {'sender_email': sender_email}),
@@ -278,68 +338,6 @@ def ticket_from_message(message, queue, quiet):
if not quiet:
print " - %s" % filename
-
- context = {
- 'ticket': t,
- 'queue': queue,
- }
-
- if new:
-
- if sender_email:
- send_templated_mail(
- 'newticket_submitter',
- context,
- recipients=sender_email,
- sender=queue.from_address,
- fail_silently=True,
- )
-
- if queue.new_ticket_cc:
- send_templated_mail(
- 'newticket_cc',
- context,
- recipients=queue.new_ticket_cc,
- sender=queue.from_address,
- fail_silently=True,
- )
-
- if queue.updated_ticket_cc and queue.updated_ticket_cc != queue.new_ticket_cc:
- send_templated_mail(
- 'newticket_cc',
- context,
- recipients=queue.updated_ticket_cc,
- sender=queue.from_address,
- fail_silently=True,
- )
-
- else:
-
- context.update(comment=f.comment)
-
- if t.status == Ticket.REOPENED_STATUS:
- update = _(' (Reopened)')
- else:
- update = _(' (Updated)')
-
- if t.assigned_to:
- send_templated_mail(
- 'updated_owner',
- context,
- recipients=t.assigned_to.email,
- sender=queue.from_address,
- fail_silently=True,
- )
-
- if queue.updated_ticket_cc:
- send_templated_mail(
- 'updated_cc',
- context,
- recipients=queue.updated_ticket_cc,
- sender=queue.from_address,
- fail_silently=True,
- )
-
return t
diff --git a/helpdesk/migrations/0004_auto__add_field_ticket_due_date.py b/helpdesk/migrations/0004_auto__add_field_ticket_due_date.py
new file mode 100644
index 00000000..0b38e6ee
--- /dev/null
+++ b/helpdesk/migrations/0004_auto__add_field_ticket_due_date.py
@@ -0,0 +1,228 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Ticket.due_date'
+ db.add_column('helpdesk_ticket', 'due_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Ticket.due_date'
+ db.delete_column('helpdesk_ticket', 'due_date')
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'helpdesk.attachment': {
+ 'Meta': {'ordering': "['filename']", 'object_name': 'Attachment'},
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'filename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'followup': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.FollowUp']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'size': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'helpdesk.customfield': {
+ 'Meta': {'object_name': 'CustomField'},
+ 'data_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'decimal_places': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'empty_selection_list': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'help_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': "'30'"}),
+ 'list_values': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'max_length': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
+ 'ordering': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'staff_only': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'helpdesk.emailtemplate': {
+ 'Meta': {'ordering': "['template_name', 'locale']", 'object_name': 'EmailTemplate'},
+ 'heading': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'html': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'locale': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'plain_text': ('django.db.models.fields.TextField', [], {}),
+ 'subject': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template_name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'helpdesk.escalationexclusion': {
+ 'Meta': {'object_name': 'EscalationExclusion'},
+ 'date': ('django.db.models.fields.DateField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'queues': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['helpdesk.Queue']", 'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.followup': {
+ 'Meta': {'ordering': "['date']", 'object_name': 'FollowUp'},
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 1, 20, 12, 19, 46, 778593)'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'new_status': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'ticket': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.Ticket']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.ignoreemail': {
+ 'Meta': {'object_name': 'IgnoreEmail'},
+ 'date': ('django.db.models.fields.DateField', [], {'blank': 'True'}),
+ 'email_address': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keep_in_mailbox': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'queues': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['helpdesk.Queue']", 'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.kbcategory': {
+ 'Meta': {'ordering': "['title']", 'object_name': 'KBCategory'},
+ 'description': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'helpdesk.kbitem': {
+ 'Meta': {'ordering': "['title']", 'object_name': 'KBItem'},
+ 'answer': ('django.db.models.fields.TextField', [], {}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.KBCategory']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_updated': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
+ 'question': ('django.db.models.fields.TextField', [], {}),
+ 'recommendations': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'votes': ('django.db.models.fields.IntegerField', [], {'default': '0'})
+ },
+ 'helpdesk.presetreply': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'PreSetReply'},
+ 'body': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'queues': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['helpdesk.Queue']", 'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.queue': {
+ 'Meta': {'ordering': "('title',)", 'object_name': 'Queue'},
+ 'allow_email_submission': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'allow_public_submission': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_address': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'email_box_host': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'email_box_imap_folder': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'email_box_interval': ('django.db.models.fields.IntegerField', [], {'default': "'5'", 'null': 'True', 'blank': 'True'}),
+ 'email_box_last_check': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'email_box_pass': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'email_box_port': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'email_box_ssl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_box_type': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'email_box_user': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'escalate_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'locale': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'new_ticket_cc': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'updated_ticket_cc': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.savedsearch': {
+ 'Meta': {'object_name': 'SavedSearch'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'query': ('django.db.models.fields.TextField', [], {}),
+ 'shared': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'helpdesk.ticket': {
+ 'Meta': {'object_name': 'Ticket'},
+ 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'assigned_to'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'due_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_escalation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
+ 'on_hold': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'priority': ('django.db.models.fields.IntegerField', [], {'default': '3', 'blank': '3'}),
+ 'queue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.Queue']"}),
+ 'resolution': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'submitter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'helpdesk.ticketcc': {
+ 'Meta': {'object_name': 'TicketCC'},
+ 'can_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'can_view': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ticket': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.Ticket']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.ticketchange': {
+ 'Meta': {'object_name': 'TicketChange'},
+ 'field': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'followup': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.FollowUp']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'new_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'old_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.ticketcustomfieldvalue': {
+ 'Meta': {'unique_together': "(('ticket', 'field'),)", 'object_name': 'TicketCustomFieldValue'},
+ 'field': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.CustomField']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ticket': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helpdesk.Ticket']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'helpdesk.ticketdependency': {
+ 'Meta': {'unique_together': "(('ticket', 'depends_on'),)", 'object_name': 'TicketDependency'},
+ 'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'depends_on'", 'to': "orm['helpdesk.Ticket']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ticket': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ticketdependency'", 'to': "orm['helpdesk.Ticket']"})
+ },
+ 'helpdesk.usersettings': {
+ 'Meta': {'object_name': 'UserSettings'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'settings_pickled': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
+ }
+ }
+
+ complete_apps = ['helpdesk']
diff --git a/helpdesk/models.py b/helpdesk/models.py
index d10afc8b..6ad543f7 100644
--- a/helpdesk/models.py
+++ b/helpdesk/models.py
@@ -197,7 +197,7 @@ class Queue(models.Model):
return u'%s <%s>' % (self.title, self.email_address)
from_address = property(_from_address)
- def save(self, force_insert=False, force_update=False):
+ def save(self, *args, **kwargs):
if self.email_box_type == 'imap' and not self.email_box_imap_folder:
self.email_box_imap_folder = 'INBOX'
@@ -210,7 +210,7 @@ class Queue(models.Model):
self.email_box_port = 995
elif self.email_box_type == 'pop3' and not self.email_box_ssl:
self.email_box_port = 110
- super(Queue, self).save(force_insert, force_update)
+ super(Queue, self).save(*args, **kwargs)
class Ticket(models.Model):
@@ -326,6 +326,12 @@ class Ticket(models.Model):
help_text=_('1 = Highest Priority, 5 = Low Priority'),
)
+ due_date = models.DateTimeField(
+ _('Due on'),
+ blank=True,
+ null=True,
+ )
+
last_escalation = models.DateTimeField(
blank=True,
null=True,
@@ -436,7 +442,7 @@ class Ticket(models.Model):
return ('helpdesk_view', (self.id,))
get_absolute_url = models.permalink(get_absolute_url)
- def save(self, force_insert=False, force_update=False):
+ def save(self, *args, **kwargs):
if not self.id:
# This is a new ticket as no ID yet exists.
self.created = datetime.now()
@@ -446,7 +452,7 @@ class Ticket(models.Model):
self.modified = datetime.now()
- super(Ticket, self).save(force_insert, force_update)
+ super(Ticket, self).save(*args, **kwargs)
class FollowUpManager(models.Manager):
@@ -527,11 +533,11 @@ class FollowUp(models.Model):
def get_absolute_url(self):
return u"%s#followup%s" % (self.ticket.get_absolute_url(), self.id)
- def save(self, force_insert=False, force_update=False):
+ def save(self, *args, **kwargs):
t = self.ticket
t.modified = datetime.now()
t.save()
- super(FollowUp, self).save(force_insert, force_update)
+ super(FollowUp, self).save(*args, **kwargs)
class TicketChange(models.Model):
@@ -843,10 +849,10 @@ class KBItem(models.Model):
blank=True,
)
- def save(self, force_insert=False, force_update=False):
+ def save(self, *args, **kwargs):
if not self.last_updated:
self.last_updated = datetime.now()
- return super(KBItem, self).save(force_insert, force_update)
+ return super(KBItem, self).save(*args, **kwargs)
def _score(self):
if self.votes > 0:
@@ -1024,10 +1030,10 @@ class IgnoreEmail(models.Model):
def __unicode__(self):
return u'%s' % self.name
- def save(self):
+ def save(self, *args, **kwargs):
if not self.date:
self.date = datetime.now()
- return super(IgnoreEmail, self).save()
+ return super(IgnoreEmail, self).save(*args, **kwargs)
def test(self, email):
"""
@@ -1175,6 +1181,11 @@ class CustomField(models.Model):
blank=True,
null=True,
)
+
+ empty_selection_list = models.BooleanField(
+ _('Add empty first choice to List?'),
+ help_text=_('Only for List: adds an empty first entry to the choices list, which enforces that the user makes an active choice.'),
+ )
list_values = models.TextField(
_('List Values'),
diff --git a/helpdesk/settings.py b/helpdesk/settings.py
index 92e255ef..e712ad37 100644
--- a/helpdesk/settings.py
+++ b/helpdesk/settings.py
@@ -28,5 +28,112 @@ if type(DEFAULT_USER_SETTINGS) != type(dict()):
'tickets_per_page': 25
}
+
+
+''' generic options - visible on all pages '''
+# redirect to login page instead of the default homepage when users visits "/"?
+HELPDESK_REDIRECT_TO_LOGIN_BY_DEFAULT = getattr(settings, 'HELPDESK_REDIRECT_TO_LOGIN_BY_DEFAULT', False)
+
+# customize helpdesk name on a few pages, i.e., your organization.
+HELPDESK_PREPEND_ORG_NAME = getattr(settings, 'HELPDESK_PREPEND_ORG_NAME', False)
+
# show knowledgebase links?
HELPDESK_KB_ENABLED = getattr(settings, 'HELPDESK_KB_ENABLED', True)
+
+# show knowledgebase links on staff view?
+HELPDESK_KB_ENABLED_STAFF = getattr(settings, 'HELPDESK_KB_ENABLED_STAFF', False)
+
+# show extended navigation by default, to all users, irrespective of staff status?
+HELPDESK_NAVIGATION_ENABLED = getattr(settings, 'HELPDESK_NAVIGATION_ENABLED', False)
+
+# show 'stats' link in navigation bar?
+HELPDESK_NAVIGATION_STATS_ENABLED = getattr(settings, 'HELPDESK_NAVIGATION_STATS_ENABLED', True)
+
+# set this to an email address inside your organization and a footer below
+# the 'Powered by django-helpdesk' will be shown, telling the user whom to contact
+# in case they have technical problems.
+HELPDESK_SUPPORT_PERSON = getattr(settings, 'HELPDESK_SUPPORT_PERSON', False)
+
+# show dropdown list of languages that ticket comments can be translated into?
+HELPDESK_TRANSLATE_TICKET_COMMENTS = getattr(settings, 'HELPDESK_TRANSLATE_TICKET_COMMENTS', False)
+
+# list of languages to offer. if set to false, all default google translate languages will be shown.
+HELPDESK_TRANSLATE_TICKET_COMMENTS_LANG = getattr(settings, 'HELPDESK_TRANSLATE_TICKET_COMMENTS_LANG', ["en", "de", "fr", "it", "ru"])
+
+# show link to 'change password' on 'User Settings' page?
+HELPDESK_SHOW_CHANGE_PASSWORD = getattr(settings, 'HELPDESK_SHOW_CHANGE_PASSWORD', False)
+
+# allow user to override default layout for 'followups' - work in progress.
+HELPDESK_FOLLOWUP_MOD = getattr(settings, 'HELPDESK_FOLLOWUP_MOD', False)
+
+# show custom welcome message in dashboard?
+HELPDESK_CUSTOM_WELCOME = getattr(settings, 'HELPDESK_CUSTOM_WELCOME', False)
+
+
+
+''' options for public pages '''
+# show 'view a ticket' section on public page?
+HELPDESK_VIEW_A_TICKET_PUBLIC = getattr(settings, 'HELPDESK_VIEW_A_TICKET_PUBLIC', True)
+
+# show 'submit a ticket' section on public page?
+HELPDESK_SUBMIT_A_TICKET_PUBLIC = getattr(settings, 'HELPDESK_SUBMIT_A_TICKET_PUBLIC', True)
+
+
+
+''' options for update_ticket views '''
+# allow non-staff users to interact with tickets? this will also change how 'staff_member_required'
+# in staff.py will be defined.
+HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE = getattr(settings, 'HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE', False)
+
+# show edit buttons in ticket follow ups.
+HELPDESK_SHOW_EDIT_BUTTON_FOLLOW_UP = getattr(settings, 'HELPDESK_HIDE_EDIT_BUTTON_FOLLOW_UP', True)
+
+# show ticket edit button on top of ticket description.
+HELPDESK_SHOW_EDIT_BUTTON_TICKET_TOP = getattr(settings, 'HELPDESK_SHOW_EDIT_BUTTON_TICKET_TOP', True)
+
+# show ticket delete button on top of ticket description.
+HELPDESK_SHOW_DELETE_BUTTON_TICKET_TOP = getattr(settings, 'HELPDESK_SHOW_DELETE_BUTTON_TICKET_TOP', True)
+
+# show hold / unhold button on top of ticket description.
+HELPDESK_SHOW_HOLD_BUTTON_TICKET_TOP = getattr(settings, 'HELPDESK_SHOW_HOLD_BUTTON_TICKET_TOP', True)
+
+# make all updates public by default? this will hide the 'is this update public' checkbox
+HELPDESK_UPDATE_PUBLIC_DEFAULT = getattr(settings, 'HELPDESK_UPDATE_PUBLIC_DEFAULT', True)
+
+# only show staff users in ticket owner drop-downs
+HELPDESK_STAFF_ONLY_TICKET_OWNERS = getattr(settings, 'HELPDESK_STAFF_ONLY_TICKET_OWNERS', False)
+
+# only show staff users in ticket cc drop-down
+HELPDESK_STAFF_ONLY_TICKET_CC = getattr(settings, 'HELPDESK_STAFF_ONLY_TICKET_CC', False)
+
+
+
+''' options for staff.create_ticket view '''
+# hide the 'assigned to' / 'Case owner' field from the 'create_ticket' view?
+HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = getattr(settings, 'HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO', False)
+
+
+
+''' options for dashboard '''
+# show delete button next to unassigned tickets
+HELPDESK_DASHBOARD_SHOW_DELETE_UNASSIGNED = getattr(settings, 'HELPDESK_DASHBOARD_SHOW_DELETE_UNASSIGNED', True)
+
+# hide empty queues in dashboard overview?
+HELPDESK_DASHBOARD_HIDE_EMPTY_QUEUES = getattr(settings, 'HELPDESK_DASHBOARD_HIDE_EMPTY_QUEUES', True)
+
+
+
+''' options for footer '''
+# show 'API' link at bottom of page
+HELPDESK_FOOTER_SHOW_API_LINK = getattr(settings, 'HELPDESK_FOOTER_SHOW_API_LINK', True)
+
+# show / hide 'change language' link at bottom of page
+HELPDESK_FOOTER_SHOW_CHANGE_LANGUAGE_LINK = getattr(settings, 'HELPDESK_FOOTER_SHOW_CHANGE_LANGUAGE_LINK', False)
+
+''' email options '''
+# default Queue email submission settings
+QUEUE_EMAIL_BOX_TYPE = getattr(settings, 'QUEUE_EMAIL_BOX_TYPE', None)
+QUEUE_EMAIL_BOX_SSL = getattr(settings, 'QUEUE_EMAIL_BOX_SSL', None)
+QUEUE_EMAIL_BOX_HOST = getattr(settings, 'QUEUE_EMAIL_BOX_HOST', None)
+QUEUE_EMAIL_BOX_USER = getattr(settings, 'QUEUE_EMAIL_BOX_USER', None)
+QUEUE_EMAIL_BOX_PASSWORD = getattr(settings, 'QUEUE_EMAIL_BOX_PASSWORD', None)
diff --git a/helpdesk/static/helpdesk/helpdesk-print.css b/helpdesk/static/helpdesk/helpdesk-print.css
new file mode 100644
index 00000000..e69de29b
diff --git a/helpdesk/static/helpdesk/helpdesk.css b/helpdesk/static/helpdesk/helpdesk.css
index 638ee98d..85034e9d 100644
--- a/helpdesk/static/helpdesk/helpdesk.css
+++ b/helpdesk/static/helpdesk/helpdesk.css
@@ -43,7 +43,7 @@ table {
border: solid #444 1px;
background-color: #fff;
color: #ccc;
- padding: 2px 3px;
+ padding: 0px 3px;
margin: 0px 2px;
font-size: 10pt;
line-height: 12pt;
@@ -159,16 +159,29 @@ div.followup {
padding:0 0 2px;
}
-div.followup .title {
+div.followup_mod {
+ width: auto;
+ border: solid #666 1px;
+ padding: 5px;
+ margin: 0px 0px 10px;
+}
+
+div.followup .title, div.followup_mod .title {
font-weight: bold;
font-size: 10pt;
}
-div.followup .title span {
+div.followup .title span, div.followup_mod .title span {
color: #aaa;
font-weight: normal;
}
+div.followup_mod small {
+ float: right;
+ font-weight: bold;
+ font-style: italic;
+}
+
span.private {
color: #aaa;
font-style: italic;
@@ -267,3 +280,34 @@ span.priority5 {
a.followup-edit {
float:right;
}
+
+/* tooltips for link hover */
+a.tooltip, a.tooltip:link, a.tooltip:visited, a.tooltip:active {
+ position: relative;
+ text-decoration: none;
+ font-style: italic;
+}
+
+a.tooltip:hover {
+ background: transparent;
+}
+
+a.tooltip span {
+ display: none;
+ text-decoration: none;
+}
+
+a.tooltip:hover span {
+ display: block;
+ position: absolute;
+ top: 25px;
+ left: 0;
+ width: 250px;
+ z-index: 10;
+ color: #000000;
+ border:1px solid #000000;
+ background: #FFFFCC;
+ font: 12px Verdana, sans-serif;
+ text-align: left;
+}
+
diff --git a/helpdesk/static/helpdesk/jquery.translate-debug-all.js b/helpdesk/static/helpdesk/jquery.translate-debug-all.js
new file mode 100644
index 00000000..db922995
--- /dev/null
+++ b/helpdesk/static/helpdesk/jquery.translate-debug-all.js
@@ -0,0 +1,1546 @@
+/*!
+ * jQuery nodesContainingText plugin
+ *
+ * Version: 1.1.2
+ *
+ * http://code.google.com/p/jquery-translate/
+ *
+ * Copyright (c) 2009 Balazs Endresz (balazs.endresz@gmail.com)
+ * Dual licensed under the MIT and GPL licenses.
+ *
+ */
+
+;(function($){
+
+function Nct(){}
+
+Nct.prototype = {
+ init: function(jq, o){
+ this.textArray = [];
+ this.elements = [];
+ this.options = o;
+ this.jquery = jq;
+ this.n = -1;
+ if(o.async === true)
+ o.async = 2;
+
+ if(o.not){
+ jq = jq.not(o.not);
+ jq = jq.add( jq.find("*").not(o.not) ).not( $(o.not).find("*") );
+ }else
+ jq = jq.add( jq.find("*") );
+
+ this.jq = jq;
+ this.jql = this.jq.length;
+ return this.process();
+
+ },
+
+ process: function(){
+ this.n++;
+ var that = this, o = this.options, text = "", hasTextNode = false,
+ hasChildNode = false, el = this.jq[this.n], e, c, ret;
+
+ if(this.n === this.jql){
+ ret = this.jquery.pushStack(this.elements, "nodesContainingText");
+ o.complete.call(ret, ret, this.textArray);
+
+ if(o.returnAll === false && o.walk === false)
+ return this.jquery;
+ return ret;
+ }
+
+ if(!el)
+ return this.process();
+ e=$(el);
+
+ var nodeName = el.nodeName.toUpperCase(),
+ type = nodeName === "INPUT" && $.attr(el, "type").toLowerCase();
+
+ if( ({SCRIPT:1, NOSCRIPT:1, STYLE:1, OBJECT:1, IFRAME:1})[ nodeName ] )
+ return this.process();
+
+ if(typeof o.subject === "string"){
+ text=e.attr(o.subject);
+ }else{
+ if(o.altAndVal && (nodeName === "IMG" || type === "image" ) )
+ text = e.attr("alt");
+ else if( o.altAndVal && ({text:1, button:1, submit:1})[ type ] )
+ text = e.val();
+ else if(nodeName === "TEXTAREA")
+ text = e.val();
+ else{
+ //check childNodes:
+ c = el.firstChild;
+ if(o.walk !== true)
+ hasChildNode = true;
+ else{
+ while(c){
+ if(c.nodeType == 1){
+ hasChildNode = true;
+ break;
+ }
+ c=c.nextSibling;
+ }
+ }
+
+ if(!hasChildNode)
+ text = e.text();
+ else{//check textNodes:
+ if(o.walk !== true)
+ hasTextNode = true;
+
+ c=el.firstChild;
+ while(c){
+ if(c.nodeType == 3 && c.nodeValue.match(/\S/) !== null){//textnodes with text
+ /*jslint skipLines*/
+ if(c.nodeValue.match(//) !== null){
+ if(c.nodeValue.match(/(\S+(?=.*<))|(>(?=.*\S+))/) !== null){
+ hasTextNode = true;
+ break;
+ }
+ }else{
+ hasTextNode = true;
+ break;
+ }
+ /*jslint skipLinesEnd*/
+ }
+ c = c.nextSibling;
+ }
+
+ if(hasTextNode){//remove child nodes from jq
+ //remove scripts:
+ text = e.html();
+ /*jslint skipLines*/
+ text = o.stripScripts ? text.replace(/
-
+ {% comment %}
+
+ {% endcomment %}
+
+
+ {% comment %}
+ {% endcomment %}
+
+
Delete Query
\n"
-"\n"
-"Submit a Ticket
\n"
-"\n"
-"Delete Ticket
\n"
-"\n"
-"Edit a Ticket
\n"
-"\n"
-"Ignore E-Mail Address
\n"
-"\n"
-"Un-Ignore E-Mail Address
\n"
-"\n"
-"Ignored E-Mail Addresses
\n"
-"\n"
-"System Settings
\n"
-"\n"
-"Add Ticket CC
\n"
-"\n"
-"Delete Ticket CC
\n"
-"\n"
-"Ticket CC Settings
\n"
-"\n"
-"Add Ticket Dependency
\n"
-"\n"
-"Delete Ticket Dependency
\n"
-"\n"
-"User Settings
\n"
-"\n"
-"Logged Out
\n"
-"\n"
-"