forked from extern/django-helpdesk
Merge branch 'master' into add-migration
This commit is contained in:
commit
e138fa108f
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -574,5 +574,389 @@
|
||||
"subject": "(Aktualisiert)",
|
||||
"locale": "de"
|
||||
}
|
||||
},
|
||||
{
|
||||
"pk": 49,
|
||||
"model": "helpdesk.emailtemplate",
|
||||
"fields": {
|
||||
"heading": "Ticket Assign\u00e9",
|
||||
"html": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce courriel indicatif permet de vous pr\u00e9venir que le ticket <a href=\"{{ ticket.staff_url }}\"><b>{{ ticket.ticket }}</b></a> (<em>{{ ticket.title }}</em>) 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 %}.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce courriel indicatif permet de vous pr\u00e9venir que le ticket <a href=\"{{ ticket.staff_url }}\"><b>{{ ticket.ticket }}</b></a> (<em>{{ ticket.title }}</em>) pour {{ ticket.submitter_email }} <b>vous</b> a \u00e9t\u00e9 assign\u00e9.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Le ticket <i>{{ ticket.title }}</i> ('{{ ticket.title }}'){% if ticket.assigned_to %}, assign\u00e9 \u00e0 {{ ticket.get_assigned_to }}{% endif %} a \u00e9t\u00e9 ferm\u00e9.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La motivation de r\u00e9solution est:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\nLe ticket suivant qui vous est actuellement assign\u00e9 a \u00e9t\u00e9 ferm\u00e9.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La motivation de r\u00e9solution est:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>\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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est <i>{{ ticket.title }}</i>. Ce courriel vous confirme que ce ticket a \u00e9t\u00e9 ferm\u00e9.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;>\"La r\u00e9solution a \u00e9t\u00e9 motiv\u00e9e ainsi :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Si 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..</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce courriel indicatif permet de vous pr\u00e9venir que le ticket <i>{{ ticket.ticket }}</i> ('{{ ticket.title }}') a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique.</p>\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 11pt;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 11pt;\">Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est <i>{{ ticket.title }}</i> . 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.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 11pt;\">Nous allons reprendre rapidement ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 11pt;\">Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Un 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.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Merci de reprendre ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible..</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce courriel indicatif permet de vous pr\u00e9venir qu'un nouveau ticket a \u00e9t\u00e9 ouvert.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Description :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce courriel permet de vous informer que nous avons re\u00e7u votre demande de support dont le sujet est <i>{{ ticket.title }}</i>.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;>\"Vous n'avez rien de plus \u00e0 faire pour le moment. Votre ticket porte l'identifiant <b>{{ ticket.ticket }}</b> et sera trait\u00e9 rapidement.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Si vous voulez nous donner plus de d\u00e9tails ou si vous avez une question concernant ce ticket, merci d'inclure la r\u00e9f\u00e9rence <b>{{ ticket.ticket }}</b> dans le sujet du message. Le plus simple \u00e9tant d'utiliser la fonction 'r\u00e9pondre' de votre logiciel de messagerie.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Vous 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 <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Nous 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.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Le ticket suivant a \u00e9t\u00e9 r\u00e9solu.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La motivation de r\u00e9solution est:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Un ticket qui vous est assign\u00e9 a \u00e9t\u00e9 r\u00e9solu.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La motivation de r\u00e9solution est:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est <i>{{ ticket.title }}</i>. Ce message vous informe d'une r\u00e9solution de la demande.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La solution suivante a \u00e9t\u00e9 donn\u00e9e au ticket <b>{{ ticket.ticket }}</b>:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">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.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} a \u00e9t\u00e9 mis \u00e0 jour.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ comment }}</blockquote>\r\n\r\n<p style=\"font-family: Tahoma, Arial, sans-serif; font-size: 11pt;\">Cette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ce 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.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>File d'attente</b> : {{ ticket.ticket }}<br>\r\n<b>Queue</b> : {{ queue.title }}<br>\r\n<b>Titre</b> : {{ ticket.title }}<br>\r\n<b>Ouvert le</b> : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Soumis par</b> : {{ ticket.submitter_email|default:\"Unknown\" }}<br>\r\n<b>Priorit\u00e9</b> : {{ ticket.get_priority_display }}<br>\r\n<b>Statut</b> : {{ ticket.get_status }}<br>\r\n<b>Assign\u00e9 \u00e0</b> : {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Voir le ticket en ligne</a></b> pour le mettre \u00e0 jour (apr\u00e8s authentification)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Pour m\u00e9moire, la description originelle \u00e9tait :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ comment }}</blockquote>\r\n\r\n<p style=\"font-family: Tahoma, Arial, sans-serif; font-size: 11pt;\">Cette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Bonjour,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est <i>{{ ticket.title }}</i> . Ce message vous informe d'une mise \u00e0 jour du ticket.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 au ticket <b>{{ ticket.ticket }}</b>:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ comment }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;>\"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 <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ti \u00e8 stata inviata questa email per informarti che il ticket <a href=\"{{ ticket.staff_url }}\"><b>{{ ticket.ticket }}</b></a> (<em>{{ ticket.title }}</em>) per {{ ticket.submitter_email }} {% if ticket.assigned_to %}\u00e8 stato assegnato a {{ ticket.assigned_to }}{% else %}non \u00e8 pi\u00f9 assegnato{% endif %}.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Per riferimento, la descrizione del ticket era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ti \u00e8 stata inviata questa email per informarti che ti \u00e8 stato assegnato il ticket <a href=\"{{ ticket.staff_url }}\"><b>{{ ticket.ticket }}</b></a> (<em>{{ ticket.title }}</em>) per {{ ticket.submitter_email }}.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La descrizione del ticket \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Il ticket <i>{{ ticket.title }}</i> ('{{ ticket.title }}'){% if ticket.assigned_to %}, assegnato a {{ ticket.get_assigned_to }}{% endif %} \u00e8 stato chiuso.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La descrizione del ticket \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione fornita \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Se vuoi vedere questo ticket online, puoi visitare l'indirizzo <a href='{{ ticket.staff_url }}'>{{ ticket.staff_url }}</a>.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Il ticket seguente, correntemente a te assegnato, \u00e8 stato chiuso.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La descrizione del ticket \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione fornita \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.resolution }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Hai recentemente inserito un ticket dall'oggetto <i>{{ ticket.title }}</i>. Questa email ti \u00e8 inviata come conferma della chiusura del ticket..</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione fornita \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Se vuoi vedere il ticket online, puoi visitare l'indirizzo <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>. 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</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ti \u00e8 stata inviata questa email per informarti che la priorit\u00e0 del ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") \u00e8 stata aumentata automaticamente.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Per riferimento, la descrizione originale del ticket era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La priorit\u00e0 di un ticket a te assegnato \u00e8 stata automaticamente aumentata in quanto questo \u00e8 stato aperto pi\u00f9 del previsto.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Per riferimento, la descrizione originale del ticket era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 11pt;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 11pt;\">Hai recentemente inserito un ticket dall'oggetto <i>{{ ticket.title }}</i>. 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.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 11pt;\">Esamineremo a breve il ticket e cercheremo di fornire una risoluzione quanto prima.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 11pt;\">Se vuoi visitare il ticket online, puoi visitare l'indirizzo <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Questa email ti \u00e8 stata inviata per informarti che un nuovo ticket \u00e8 stato aperto.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Descrizione:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Questa email ti \u00e8 stata inviata per informarti che abbiamo ricevuto la tua richiesta di helpdesk dall'oggetto <i>{{ ticket.title }}</i>.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Non \u00e8 necessario fare altro al momento. Al tuo ticket \u00e8 stato assegnato l'identificativo <b>{{ ticket.ticket }}</b> e verr\u00e0 presto esaminato.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Se vuoi aggiungere ulteriori dettagli o hai domande sul ticket, rispondi a questa email includendo l'id <b>{{ ticket.ticket}}</b> del ticket nell'oggetto. Il modo pi\u00f9 semplice per farlo \u00e8 di premere il pulsante \"rispondi\" del tuo client di posta.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Se vuoi vedere questo ticket online per aggiungere ulteriori informazioni, allegare file o vedere gli aggiornamenti, puoi visitare l'indirizzo <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Analizzeremo la tua richiesta e cercheremo di risolverla quanto prima. Riceverai successivi aggiornamenti e la notifica di risoluzione a questo indirizzo email.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Il seguente ticket \u00e8 stato risolto:</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Per riferimento, la descrizione originale del ticket era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione aggiunta era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione \u00e8 stata inviata al proprietario del ticket, che dovr\u00e0 verificarla prima che il ticket possa essere chiuso.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Un ticket a te assegnato \u00e8 stato risolto.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La descrizione del ticket \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione fornita \u00e8:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La risoluzione \u00e8 stata inviata al proprietario del ticket, che dovr\u00e0 verificarla prima che il ticket possa essere chiuso.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Hello,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Hai recentemente inserito un ticket dall'oggetto <i>{{ ticket.title }}</i>. Questa email vi \u00e8 stata inviata per informarvi della risoluzione del ticket.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">La seguente risoluzione \u00e8 stata inserita al ticket <b>{{ ticket.ticket }}</b>:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ resolution }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">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.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Se vuole vedere il ticket online, pu\u00f2 visitare l'indirizzo <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Questa email ti \u00e8 stata inviata per informarti che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }} \u00e8 stato aggiornato.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Per riferimento, la descrizione originale era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Il seguente commento \u00e8 stato aggiunto:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ comment }}</blockquote>\r\n\r\n<p style=\"font-family: Tahoma, Arial, sans-serif; font-size: 11pt;\">Questa informazione{% if private %} non{% endif %} \u00e8 stata inviata al proprietario del ticket.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Ti \u00e8 stata inviata questa email per informavi che il ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") per {{ ticket.submitter_email }}, a te assegnato, \u00e8 stato aggiornato.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">\r\n<b>Ticket ID</b>: {{ ticket.ticket }}<br>\r\n<b>Coda</b>: {{ queue.title }}<br>\r\n<b>Titolo</b>: {{ ticket.title }}<br>\r\n<b>Aperto</b>: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}<br>\r\n<b>Inserito da</b>: {{ ticket.submitter_email|default:\"Sconosciuto\" }}<br>\r\n<b>Priorit\u00e0</b>: {{ ticket.get_priority_display }}<br>\r\n<b>Stato</b>: {{ ticket.get_status }}<br>\r\n<b>Assegnato a</b>: {{ ticket.get_assigned_to }}<br>\r\n<b><a href='{{ ticket.staff_url }}'>Vedi Online</a></b> per aggiornare questo ticket (richiesto login)</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Per riferimento, la descrizione originale del ticket era:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ ticket.description }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Il seguente commento \u00e8 stato aggiunto:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ comment }}</blockquote>\r\n\r\n<p style=\"font-family: Tahoma, Arial, sans-serif; font-size: 11pt;\">Questa informazione{% if private %} non{% endif %} \u00e8 stata inviata al proprietario del ticket.</p>",
|
||||
"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": "<p style=\"font-family: sans-serif; font-size: 1em;\">Salve,</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Hai recentemente inserito un ticket dall'oggetto <i>{{ ticket.title }}</i>. Questa email ti \u00e8 stata inviata per informarti di un aggiornamento riguardo il ticket suddetto.</p>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">Il seguente commento \u00e8 stato aggiunto al ticket <b>{{ ticket.ticket }}</b>:</p>\r\n\r\n<blockquote style=\"font-family: sans-serif; font-size: 1em;\">{{ comment }}</blockquote>\r\n\r\n<p style=\"font-family: sans-serif; font-size: 1em;\">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 <a href=\"{{ ticket.ticket_url }}\">{{ ticket.ticket_url }}</a>.</p>",
|
||||
"heading": "Il Tuo Ticket \u00e8 Stato Aggiornato",
|
||||
"subject": "(Aggiornato)"
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
|
@ -16,9 +16,10 @@ 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:
|
||||
@ -58,8 +59,8 @@ class EditTicketForm(forms.ModelForm):
|
||||
instanceargs['max_digits'] = field.max_length
|
||||
elif field.data_type == 'list':
|
||||
fieldclass = forms.ChoiceField
|
||||
choices = field.choices_as_array
|
||||
if field.empty_selection_list:
|
||||
choices = field.choices_as_array
|
||||
choices.insert(0, ('','---------' ) )
|
||||
instanceargs['choices'] = choices
|
||||
elif field.data_type == 'boolean':
|
||||
@ -152,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'),
|
||||
@ -195,8 +209,8 @@ class TicketForm(forms.Form):
|
||||
instanceargs['max_digits'] = field.max_length
|
||||
elif field.data_type == 'list':
|
||||
fieldclass = forms.ChoiceField
|
||||
choices = field.choices_as_array
|
||||
if field.empty_selection_list:
|
||||
choices = field.choices_as_array
|
||||
choices.insert(0, ('','---------' ) )
|
||||
instanceargs['choices'] = choices
|
||||
elif field.data_type == 'boolean':
|
||||
@ -234,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:
|
||||
@ -289,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 = []
|
||||
|
||||
@ -379,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'),
|
||||
@ -411,8 +429,8 @@ class PublicTicketForm(forms.Form):
|
||||
instanceargs['max_digits'] = field.max_length
|
||||
elif field.data_type == 'list':
|
||||
fieldclass = forms.ChoiceField
|
||||
choices = field.choices_as_array
|
||||
if field.empty_selection_list:
|
||||
choices = field.choices_as_array
|
||||
choices.insert(0, ('','---------' ) )
|
||||
instanceargs['choices'] = choices
|
||||
elif field.data_type == 'boolean':
|
||||
@ -449,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()
|
||||
@ -491,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 = []
|
||||
|
||||
@ -578,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',)
|
||||
|
@ -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):
|
||||
@ -72,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:
|
||||
@ -102,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:
|
||||
@ -168,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
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -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(
|
||||
|
@ -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,64 +251,6 @@ def ticket_from_message(message, queue, quiet):
|
||||
t.status = Ticket.REOPENED_STATUS
|
||||
t.save()
|
||||
|
||||
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:
|
||||
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}),
|
||||
@ -336,6 +283,64 @@ def ticket_from_message(message, queue, quiet):
|
||||
if not quiet:
|
||||
print " - %s" % filename
|
||||
|
||||
|
||||
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:
|
||||
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
|
||||
|
||||
|
||||
|
228
helpdesk/migrations/0004_auto__add_field_ticket_due_date.py
Normal file
228
helpdesk/migrations/0004_auto__add_field_ticket_due_date.py
Normal file
@ -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']
|
@ -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):
|
||||
"""
|
||||
|
@ -40,6 +40,9 @@ 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)
|
||||
|
||||
@ -55,7 +58,7 @@ HELPDESK_SUPPORT_PERSON = getattr(settings, 'HELPDESK_SUPPORT_PERSON', False)
|
||||
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", "ru"])
|
||||
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)
|
||||
@ -75,6 +78,9 @@ HELPDESK_VIEW_A_TICKET_PUBLIC = getattr(settings, 'HELPDESK_VIEW_A_TICKET_PUBLIC
|
||||
# show 'submit a ticket' section on public page?
|
||||
HELPDESK_SUBMIT_A_TICKET_PUBLIC = getattr(settings, 'HELPDESK_SUBMIT_A_TICKET_PUBLIC', True)
|
||||
|
||||
# Should we should the KB categories on the homepage?
|
||||
HELPDESK_SHOW_KB_ON_HOMEPAGE = getattr(settings, 'HELPDESK_SHOW_KB_ON_HOMEPAGE', False)
|
||||
|
||||
|
||||
|
||||
''' options for update_ticket views '''
|
||||
@ -97,6 +103,12 @@ HELPDESK_SHOW_HOLD_BUTTON_TICKET_TOP = getattr(settings, 'HELPDESK_SHOW_HOLD_BUT
|
||||
# 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 '''
|
||||
@ -109,6 +121,9 @@ HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = getattr(settings, 'HELPDESK_CREATE_TIC
|
||||
# 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 '''
|
||||
@ -118,3 +133,10 @@ HELPDESK_FOOTER_SHOW_API_LINK = getattr(settings, 'HELPDESK_FOOTER_SHOW_API_LINK
|
||||
# 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)
|
||||
|
0
helpdesk/static/helpdesk/helpdesk-print.css
Normal file
0
helpdesk/static/helpdesk/helpdesk-print.css
Normal file
@ -1,43 +0,0 @@
|
||||
//jQuery Translate plugin and related components
|
||||
|
||||
/*
|
||||
* 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(b){function a(){}a.prototype={init:function(e,d){this.textArray=[];this.elements=[];this.options=d;this.jquery=e;this.n=-1;if(d.async===true){d.async=2}if(d.not){e=e.not(d.not);e=e.add(e.find("*").not(d.not)).not(b(d.not).find("*"))}else{e=e.add(e.find("*"))}this.jq=e;this.jql=this.jq.length;return this.process()},process:function(){this.n++;var i=this,d=this.options,p="",h=false,g=false,f=this.jq[this.n],k,m,j;if(this.n===this.jql){j=this.jquery.pushStack(this.elements,"nodesContainingText");d.complete.call(j,j,this.textArray);if(d.returnAll===false&&d.walk===false){return this.jquery}return j}if(!f){return this.process()}k=b(f);var n=f.nodeName.toUpperCase(),l=n==="INPUT"&&b.attr(f,"type").toLowerCase();if(({SCRIPT:1,NOSCRIPT:1,STYLE:1,OBJECT:1,IFRAME:1})[n]){return this.process()
|
||||
}if(typeof d.subject==="string"){p=k.attr(d.subject)}else{if(d.altAndVal&&(n==="IMG"||l==="image")){p=k.attr("alt")}else{if(d.altAndVal&&({text:1,button:1,submit:1})[l]){p=k.val()}else{if(n==="TEXTAREA"){p=k.val()}else{m=f.firstChild;if(d.walk!==true){g=true}else{while(m){if(m.nodeType==1){g=true;break}m=m.nextSibling}}if(!g){p=k.text()}else{if(d.walk!==true){h=true}m=f.firstChild;while(m){if(m.nodeType==3&&m.nodeValue.match(/\S/)!==null){if(m.nodeValue.match(/<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)>/)!==null){if(m.nodeValue.match(/(\S+(?=.*<))|(>(?=.*\S+))/)!==null){h=true;break}}else{h=true;break}}m=m.nextSibling}if(h){p=k.html();p=d.stripScripts?p.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,""):p;this.jq=this.jq.not(k.find("*"))}}}}}}if(!p){return this.process()}this.elements.push(f);this.textArray.push(p);d.each.call(f,this.elements.length-1,f,p);if(d.async){setTimeout(function(){i.process()},d.async);return this.jquery}else{return this.process()}}};var c={not:"",async:false,each:function(){},complete:function(){},comments:false,returnAll:true,walk:true,altAndVal:false,subject:true,stripScripts:true};
|
||||
b.fn.nodesContainingText=function(d){d=b.extend({},c,b.fn.nodesContainingText.defaults,d);return new a().init(this,d)};b.fn.nodesContainingText.defaults=c})(jQuery);
|
||||
/*
|
||||
* jQuery Translate plugin
|
||||
* Version: 1.4.7
|
||||
* http://code.google.com/p/jquery-translate/
|
||||
* Copyright (c) 2009 Balazs Endresz (balazs.endresz@gmail.com)
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* This plugin uses the 'Google AJAX Language API' (http://code.google.com/apis/ajaxlanguage/)
|
||||
* You can read the terms of use at http://code.google.com/apis/ajaxlanguage/terms.html
|
||||
*/
|
||||
(function(c){function p(){}var d=true,g=false,e,u="".replace,v=String,k=Function,t=Object,n,l,f,q={},b,j=[],h={from:"",to:"",start:p,error:p,each:p,complete:p,onTimeout:p,timeout:0,stripComments:d,stripWhitespace:d,stripScripts:d,separators:/\.\?\!;:/,limit:1750,walk:d,returnAll:g,replace:d,rebind:d,data:d,setLangAttr:g,subject:d,not:"",altAndVal:d,async:g,toggle:g,fromOriginal:d,parallel:false,trim:true,alwaysReplace:false};function s(){c.translate.GL=n=google.language;c.translate.GLL=l=n.Languages;f=c.translate.toLanguageCode;c.each(l,function(y,z){q[z.toUpperCase()]=y});
|
||||
c.translate.isReady=d;var x;while((x=j.shift())){x()}}function i(z,y){var x={};c.each(z,function(A,B){if(y(B,A)===d){x[A]=B}});return x}function w(y,z,x){return function(){return y.apply(z===d?arguments[0]:z,x||arguments)}}function r(x){return x!==e}function o(y,B,A){var x,C={},z=c.grep(y,r);c.each(B,function(D,E){var F=c.grep(E[0],function(H,G){return r(z[G])&&z[G].constructor===H}).length;if(F===z.length&&F===E[0].length&&(x=d)){c.each(E[1],function(G,H){C[H]=z[G]});return g}});if(!x){throw A}return C}function m(A,z){var x=o(A,c.translate.overload,"jQuery.translate: Invalid arguments"),y=x.options||{};delete x.options;y=c.extend({},h,z,c.extend(y,x));if(y.fromOriginal){y.toggle=d}if(y.toggle){y.data=d}if(y.async===d){y.async=2}return y}function a(){this.extend(c.translate);delete this.defaults;delete this.fn}a.prototype={version:"1.4.7",_init:function(z,C){var B=C.separators.source||C.separators,y=this.isString=typeof z==="string",x=0,A;c.each(["stripComments","stripScripts","stripWhitespace"],function(E,D){var F=c.translate[D];
|
||||
if(C[D]){z=y?F(z):c.map(z,F)}});this.rawSource="<div>"+(y?z:z.join("</div><div>"))+"</div>";this._m3=new RegExp("["+B+"](?![^"+B+"]*["+B+"])");this.options=C;this.from=C.from=f(C.from)||"";this.to=C.to=f(C.to)||"";this.source=z;this.rawTranslation="";this.translation=[];this.i=0;this.stopped=g;this.elements=C.nodes;this._i=-1;this.rawSources=[];while(d){A=this.truncate(this.rawSource.substr(x),C.limit);if(!A){break}this.rawSources.push(A);x+=A.length}this.queue=new Array(this.rawSources.length);this.done=0;C.start.call(this,z,C.from,C.to,C);if(C.timeout){this.timeout=setTimeout(w(C.onTimeout,this,[z,C.from,C.to,C]),C.timeout)}(C.toggle&&C.nodes)?(C.textNodes?this._toggleTextNodes():this._toggle()):this._process()},_process:function(){if(this.stopped){return}var x=this.options,E=this.rawTranslation.length,I,J,G,F;var H=this;while((I=this.rawTranslation.lastIndexOf("</div>",E))>-1){E=I-1;J=this.rawTranslation.substr(0,E+1);G=J.match(/<div[> ]/gi);F=J.match(/<\/div>/gi);G=G?G.length:0;F=F?F.length:0;
|
||||
if(G!==F+1){continue}var A=c(this.rawTranslation.substr(0,E+7)),C=A.length,B=this.i;if(B===C){break}A.slice(B,C).each(w(function(M,P){if(this.stopped){return g}var L=c(P).html(),O=x.trim?c.trim(L):L,N=B+M,Q=this.source,R=!this.from&&this.detectedSourceLanguage||this.from;this.translation[N]=O;this.isString?this.translation=O:Q=this.source[N];x.each.call(this,N,O,Q,R,this.to,x);this.i++},this));break}if(this.rawSources.length-1==this._i){this._complete()}var z=w(this._translate,this);if(x.parallel){if(this._i<0){if(!x.parallel){c.each(this.rawSources,z)}else{var D=0,y=this.rawSources.length;function K(){z();if(D<y){setTimeout(K,x.parallel)}}K()}}}else{z()}},_translate:function(){this._i++;var x=this._i,y=this.rawSourceSub=this.rawSources[x];if(!y){return}n.translate(y,this.from,this.to,w(function(z){if(z.error){return this.options.error.call(this,z.error,this.rawSourceSub,this.from,this.to,this.options)}this.queue[x]=z.translation||this.rawSourceSub;this.detectedSourceLanguage=z.detectedSourceLanguage;
|
||||
this._check()},this))},_check:function(){if(!this.options.parallel){this.rawTranslation+=this.queue[this._i];this._process();return}var x=0;jQuery.each(this.queue,function(z,A){if(A!=e){x=z}else{return false}});if((x>this.done)||(x===this.queue.length-1)){for(var y=0;y<=x;y++){this.rawTranslation+=this.queue[y]}this._process()}this.done=x},_complete:function(){clearTimeout(this.timeout);this.options.complete.call(this,this.translation,this.source,!this.from&&this.detectedSourceLanguage||this.from,this.to,this.options)},stop:function(){if(this.stopped){return this}this.stopped=d;this.options.error.call(this,{message:"stopped"});return this}};c.translate=function(z,x){if(z==e){return new a()}if(c.isFunction(z)){return c.translate.ready(z,x)}var A=new a();var y=[].slice.call(arguments,0);y.shift();return c.translate.ready(w(A._init,A,[z,m(y,c.translate.defaults)]),g,A)};c.translate.fn=c.translate.prototype=a.prototype;c.translate.fn.extend=c.translate.extend=c.extend;c.translate.extend({_bind:w,_filter:i,_validate:o,_getOpt:m,_defaults:h,defaults:c.extend({},h),capitalize:function(x){return x.charAt(0).toUpperCase()+x.substr(1).toLowerCase()
|
||||
},truncate:function(D,y){var z,G,E,C,B,F,x=encodeURIComponent(D);for(z=0;z<10;z++){try{F=decodeURIComponent(x.substr(0,y-z))}catch(A){continue}if(F){break}}return(!(G=/<(?![^<]*>)/.exec(F)))?((!(E=/>\s*$/.exec(F)))?((C=this._m3.exec(F))?((B=/>(?![^>]*<)/.exec(F))?(C.index>B.index?F.substring(0,C.index+1):F.substring(0,B.index+1)):F.substring(0,C.index+1)):F):F):F.substring(0,G.index)},getLanguages:function(E,D){if(E==e||(D==e&&!E)){return l}var B={},A=typeof E,z=D?c.translate.getLanguages(E):l,F=(A==="object"||A==="function")?E:D;if(F){if(F.call){B=i(z,F)}else{for(var C=0,y=F.length,x;C<y;C++){x=c.translate.toLanguage(F[C]);if(z[x]!=e){B[x]=z[x]}}}}else{B=i(l,n.isTranslatable)}return B},toLanguage:function(y,A){var z=y.toUpperCase();var x=q[z]||(l[z]?z:e)||q[(c.translate.languageCodeMap[y.toLowerCase()]||"").toUpperCase()];return x==e?e:A==="lowercase"?x.toLowerCase():A==="capitalize"?c.translate.capitalize(x):x},toLanguageCode:function(x){return l[x]||l[c.translate.toLanguage(x)]||c.translate.languageCodeMap[x.toLowerCase()]
|
||||
},same:function(y,x){return y===x||f(y)===f(x)},isTranslatable:function(x){return n.isTranslatable(f(x))},languageCodeMap:{pt:"pt-PT","pt-br":"pt-PT",he:"iw",zlm:"ms","zh-hans":"zh-CN","zh-hant":"zh-TW"},isRtl:{ar:d,iw:d,fa:d,ur:d,yi:d},getBranding:function(){return c(n.getBranding.apply(n,arguments))},load:function(y,x){b=d;function z(){google.load("language",x||"1",{callback:s})}if(typeof google!=="undefined"&&google.load){z()}else{c.getScript(((document.location.protocol=="https:")?"https://":"http://")+"www.google.com/jsapi"+(y?"?key="+y:""),z)}return c.translate},ready:function(x,z,y){c.translate.isReady?x():j.push(x);if(!b&&!z){c.translate.load()}return y||c.translate},isReady:g,overload:[[[],[]],[[v,v,t],["from","to","options"]],[[v,t],["to","options"]],[[t],["options"]],[[v,v],["from","to"]],[[v],["to"]],[[v,v,k],["from","to","complete"]],[[v,k],["to","complete"]]],stripScripts:w(u,d,[/<script[^>]*>([\s\S]*?)<\/script>/gi,""]),stripWhitespace:w(u,d,[/\s\s+/g," "]),stripComments:w(u,d,[/<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)>/g,""])})
|
||||
})(jQuery);
|
||||
|
||||
(function(g){var f=true,a={text:f,button:f,submit:f},b={SCRIPT:f,NOSCRIPT:f,STYLE:f,OBJECT:f,IFRAME:f},e=g([]);e.length=1;function d(i){while(i&&i.nodeType!=9){i=i.parentNode}return i}function c(j,i){var k=j.css("text-align");j.css("direction",i);if(k==="right"){j.css("text-align","left")}if(k==="left"){j.css("text-align","right")}}function h(j,k){var l=j.nodeName.toUpperCase(),i=l==="INPUT"&&g.attr(j,"type").toLowerCase();k=k||{altAndVal:f,subject:f};return typeof k.subject==="string"?k.subject:k.altAndVal&&(l==="IMG"||i==="image")?"alt":k.altAndVal&&a[i]?"$val":l==="TEXTAREA"?"$val":"$html"}g.translate.fn._toggle=function(){var j=this.options,k=j.to,i;this.elements.each(g.translate._bind(function(l,m){this.i=l;var o=g(m),n=g.translate.getData(o,k,j);if(!n){return !(i=f)}this.translation.push(n);j.each.call(this,l,m,n,this.source[l],this.from,k,j)
|
||||
},this));!i?this._complete():this._process()};g.translate.extend({_getType:h,each:function(k,m,j,l,q,p,n){e[0]=m;g.translate.setData(e,p,j,q,l,n);g.translate.replace(e,j,p,n);g.translate.setLangAttr(e,p,n)},getData:function(k,m,l){var i=k[0]||k,j=g.data(i,"translation");return j&&j[m]&&j[m][h(i,l)]},setData:function(l,n,q,p,r,i){if(i&&!i.data){return}var j=l[0]||l,m=h(j,i),k=g.data(j,"translation");k=k||g.data(j,"translation",{});(k[p]=k[p]||{})[m]=r;(k[n]=k[n]||{})[m]=q},replace:function(m,u,s,k){if(k&&!k.replace){return}if(k&&typeof k.subject==="string"){return m.attr(k.subject,u)}var l=m[0]||m,q=l.nodeName.toUpperCase(),p=q==="INPUT"&&g.attr(l,"type").toLowerCase(),n=g.translate.isRtl,j=g.data(l,"lang");if(!k.alwaysReplace){if(j===s){return}}if(n[s]!==n[j||k&&k.from]){if(n[s]){c(m,"rtl")}else{if(m.css("direction")==="rtl"){c(m,"ltr")}}}if((!k||k.altAndVal)&&(q==="IMG"||p==="image")){m.attr("alt",u)}else{if(q==="TEXTAREA"||(!k||k.altAndVal)&&a[p]){m.val(u)}else{if(!k||k.rebind){this.doc=this.doc||d(l);
|
||||
var i=m.find("*").not("script"),r=g(this.doc.createElement("div")).html(u);g.translate.copyEvents(i,r.find("*"));m.html(r.contents())}else{m.html(u)}}}g.data(l,"lang",s)},setLangAttr:function(i,k,j){if(!j||j.setLangAttr){i.attr((!j||j.setLangAttr===f)?"lang":j.setLangAttr,k)}},copyEvents:function(j,i){i.each(function(l,o){var p=j[l];if(!o||!p){return false}if(b[p.nodeName.toUpperCase()]){return f}var k=g.data(p,"events");if(!k){return f}for(var n in k){for(var m in k[n]){g.event.add(o,n,k[n][m],k[n][m].data)}}})}});g.fn.translate=function(j,i,m){var k=g.translate._getOpt(arguments,g.fn.translate.defaults),l=g.extend({},g.translate._defaults,g.fn.translate.defaults,k,{complete:function(o,n){g.translate(function(){var r=g.translate.toLanguageCode(k.from);if(k.fromOriginal){o.each(function(s,t){e[0]=t;var u=g.translate.getData(e,r,k);if(!u){return true}n[s]=u})}var q=k.each;function p(s){return function(){[].unshift.call(arguments,this.elements);s.apply(this,arguments)}}k.nodes=o;k.start=p(k.start);
|
||||
k.onTimeout=p(k.onTimeout);k.complete=p(k.complete);k.each=function(t){var s=arguments;if(arguments.length!==7){[].splice.call(s,1,0,this.elements[t])}this.each.apply(this,s);q.apply(this,s)};g.translate(n,k)})},each:function(){}});if(this.nodesContainingText){return this.nodesContainingText(l)}k.nodes=this;g.translate(g.map(this,function(n){return g(n).html()||g(n).val()}),k);return this};g.fn.translate.defaults=g.extend({},g.translate._defaults)})(jQuery);
|
||||
|
||||
(function(a){var b={tags:["select","option"],filter:a.translate.isTranslatable,label:a.translate.toNativeLanguage||function(d,c){return a.translate.capitalize(c)},includeUnknown:false};a.translate.ui=function(){var g={},f="",d="",c="";if(typeof arguments[0]==="string"){g.tags=a.makeArray(arguments)}else{g=arguments[0]}g=a.extend({},b,a.translate.ui.defaults,g);if(g.tags[2]){d="<"+g.tags[2]+">";c="</"+g.tags[2]+">"}var e=a.translate.getLanguages(g.filter);if(!g.includeUnknown){delete e.UNKNOWN}a.each(e,function(h,i){f+=("<"+g.tags[1]+" value="+i+">"+d+g.label(i,h)+c+"</"+g.tags[1]+">")});return a("<"+g.tags[0]+' class="jq-translate-ui">'+f+"</"+g.tags[0]+">")};a.translate.ui.defaults=a.extend({},b)})(jQuery);
|
||||
|
||||
jQuery.translate.fn.progress=function(a,c){if(!this.i){this._pr=0}this._pr+=this.source[this.i].length;var b=100*this._pr/(this.rawSource.length-(11*(this.i+1)));if(a){var d=jQuery(a);if(!this.i&&!d.hasClass("ui-progressbar")){d.progressbar(c)}d.progressbar("option","value",b)}return b};
|
||||
|
||||
(function(a){a.translate.extend({toNativeLanguage:function(b){return a.translate.nativeLanguages[b]||a.translate.nativeLanguages[a.translate.toLanguageCode(b)]},nativeLanguages:{af:"Afrikaans",be:"Беларуская",is:"Íslenska",ga:"Gaeilge",mk:"Македонски",ms:"Bahasa Melayu",sw:"Kiswahili",cy:"Cymraeg",yi:"ייִדיש",sq:"Shqipe",ar:"العربية",bg:"Български",ca:"Català",zh:"中文","zh-CN":"简体中文","zh-TW":"繁體中文",hr:"Hrvatski",cs:"Čeština",da:"Dansk",nl:"Nederlands",en:"English",et:"Eesti",tl:"Tagalog",fi:"Suomi",fr:"Français",gl:"Galego",de:"Deutsch",el:"Ελληνικά",iw:"עברית",hi:"हिन्दी",hu:"Magyar",id:"Bahasa Indonesia",it:"Italiano",ja:"日本語",ko:"한국어",lv:"Latviešu",lt:"Lietuvių",mt:"Malti",no:"Norsk",fa:"فارسی",pl:"Polski","pt-PT":"Português",ro:"Român",ru:"Русский",sr:"Српски",sk:"Slovenský",sl:"Slovenski",es:"Español",sv:"Svenska",th:"ไทย",tr:"Türkçe",uk:"Українська",vi:"Tiếng Việt"}})
|
||||
})(jQuery);
|
||||
|
||||
(function(a){a.translate.extend({defer:function(){return a.translate._bind(a.translate,null,arguments)},run:function(d,c){var b=d.length;a.each(d,function(){var f=this(),e=f.options.complete;f.options.complete=function(){e.apply(this,arguments);if(!--b){c()}}})}})})(jQuery);
|
1546
helpdesk/static/helpdesk/jquery.translate-debug-all.js
Normal file
1546
helpdesk/static/helpdesk/jquery.translate-debug-all.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -9,13 +9,17 @@
|
||||
<title>{% block helpdesk_title %}Helpdesk{% endblock %} :: {% trans "Powered by django-helpdesk" %}</title>
|
||||
<script src='{{ STATIC_URL }}helpdesk/jquery-1.5.min.js' type='text/javascript' language='javascript'></script>
|
||||
<script src='{{ STATIC_URL }}helpdesk/jquery-ui-1.8.9.custom.min.js' type='text/javascript' language='javascript'></script>
|
||||
<script src='{{ STATIC_URL }}helpdesk/jquery.translate-1.4.7.NCT.core.NCT-adapter.ui.progress.native.parallel.min.js' type='text/javascript' language='javascript'></script>
|
||||
<link rel='stylesheet' href='{{ STATIC_URL }}helpdesk/helpdesk.css' type='text/css' />
|
||||
{% comment %}
|
||||
<script src='{{ STATIC_URL }}helpdesk/jquery.translate-debug-all.js' type='text/javascript' language='javascript'></script>
|
||||
{% endcomment %}
|
||||
<link rel='stylesheet' href='{{ STATIC_URL }}helpdesk/helpdesk.css' type='text/css' media="screen" />
|
||||
<link rel='stylesheet' href='{{ STATIC_URL }}helpdesk/helpdesk-print.css' type='text/css' media="print" />
|
||||
<link rel='stylesheet' href='{{ STATIC_URL }}helpdesk/jquery-smoothness-theme/jquery-ui-1.8.9.custom.css' type='text/css' />
|
||||
<link rel='alternate' href='{% url helpdesk_rss "user" %}{{ user.username }}/' type='application/rss+xml' title='{% trans "My Open Tickets" %}' />
|
||||
<link rel='alternate' href='{% url helpdesk_rss "recent_activity" %}' type='application/rss+xml' title='{% trans "All Recent Activity" %}' />
|
||||
<link rel='alternate' href='{% url helpdesk_rss "unassigned" %}' type='application/rss+xml' title='{% trans "Unassigned Tickets" %}' />
|
||||
|
||||
{% comment %}
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
@ -25,8 +29,9 @@
|
||||
function() { $('ul', this).css('display', 'none'); });
|
||||
|
||||
{% if helpdesk_settings.HELPDESK_TRANSLATE_TICKET_COMMENTS %}
|
||||
// add google translate functionality
|
||||
$.translate(function(){ //when the Google Language API is loaded
|
||||
// add translate functionality - google translate V1 is deprecated
|
||||
$.translate.load(bingID);
|
||||
$.translate(function(){ //when the Language API is loaded
|
||||
$.translate().ui({
|
||||
tags: ["select", "option"],
|
||||
// a function that filters the languages:
|
||||
@ -56,14 +61,20 @@
|
||||
})
|
||||
.appendTo('#translate_dropdown'); // insert the dropdown menu to the page
|
||||
|
||||
//insert Google's logo after the dropdown:
|
||||
$.translate.getBranding().appendTo('#translate_dropdown');
|
||||
|
||||
});
|
||||
{% endif %}
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endcomment %}
|
||||
|
||||
<style type="text/css">
|
||||
/* hide google translate top bar */
|
||||
.goog-te-banner-frame {display: none !important;}
|
||||
.goog-te-balloon-frame {display: none !important;}
|
||||
/* hide google translate tooltips (generated for every translated item) */
|
||||
.goog-tooltip {display: none !important; }
|
||||
</style>
|
||||
|
||||
<style type="text/css">
|
||||
/* header */
|
||||
|
@ -14,10 +14,10 @@
|
||||
{% if field.is_hidden %}
|
||||
{{ field }}
|
||||
{% else %}
|
||||
<dt><label for='id_{{ field.name }}'>{{ field.label }}</label>{% if not field.field.required %} <span class='form_optional'>{% trans "(Optional)" %}</span>{% endif %}</dt>
|
||||
<dt><label for='id_{{ field.name }}'>{% trans field.label %}</label>{% if not field.field.required %} <span class='form_optional'>{% trans "(Optional)" %}</span>{% endif %}</dt>
|
||||
<dd>{{ field }}</dd>
|
||||
{% if field.errors %}<dd class='error'>{{ field.errors }}</dd>{% endif %}
|
||||
{% if field.help_text %}<dd class='form_help_text'>{{ field.help_text }}</dd>{% endif %}</label>
|
||||
{% if field.help_text %}<dd class='form_help_text'>{% trans field.help_text %}</dd>{% endif %}</label>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</dl>
|
||||
|
9
helpdesk/templates/helpdesk/fr/email_html_base.html
Normal file
9
helpdesk/templates/helpdesk/fr/email_html_base.html
Normal file
@ -0,0 +1,9 @@
|
||||
<h1 style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 14pt; color: #6593C0'>{% block header %}Helpdesk{% endblock %}</h1>
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
<p style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 11pt;'>Cordialement,</p>
|
||||
|
||||
<p style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 11pt;'><b>{{ queue.title }}</b>{% if queue.email_address %}<br><a href='mailto:{{ queue.email_address }}'>{{ queue.email_address }}</a>{% endif %}</p>
|
||||
|
||||
<p style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 9pt; color: #808080;' color='#808080'>Ce courriel vous a été envoyé en tant qu'utilisateur de notre service de support, en accord avec notre politique de confidentialité. Merci de nous informer si vous pensez que ce message ne vous était pas destiné.</p>
|
6
helpdesk/templates/helpdesk/fr/email_text_footer.txt
Normal file
6
helpdesk/templates/helpdesk/fr/email_text_footer.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Cordialement,
|
||||
|
||||
{{ queue.title }}{% if queue.email_address %}
|
||||
{{ queue.email_address }}{% endif %}
|
||||
|
||||
Ce courriel vous a été envoyé en tant qu'utilisateur de notre service de support, en accord avec notre politique de confidentialité. Merci de nous informer si vous pensez que ce message ne vous était pas destiné.
|
9
helpdesk/templates/helpdesk/it/email_html_base.html
Normal file
9
helpdesk/templates/helpdesk/it/email_html_base.html
Normal file
@ -0,0 +1,9 @@
|
||||
<h1 style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 14pt; color: #6593C0'>{% block header %}Helpdesk{% endblock %}</h1>
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
<p style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 11pt;'>Cordiali saluti,</p>
|
||||
|
||||
<p style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 11pt;'><b>{{ queue.title }}</b>{% if queue.email_address %}<br><a href='mailto:{{ queue.email_address }}'>{{ queue.email_address }}</a>{% endif %}</p>
|
||||
|
||||
<p style='font-family: "Trebuchet MS", Arial, sans-serif; font-size: 9pt; color: #808080;' color='#808080'>Questa email vi è stata inviata in quanto utenti del nostro servizio di supporto clienti, in conformità con la nostra policy sulla privacy. Vi preghiamo di informarci se pensate di aver ricevuto questa email per errore.</p>
|
6
helpdesk/templates/helpdesk/it/email_text_footer.txt
Normal file
6
helpdesk/templates/helpdesk/it/email_text_footer.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Cordiali saluti,
|
||||
|
||||
{{ queue.title }}{% if queue.email_address %}
|
||||
{{ queue.email_address }}{% endif %}
|
||||
|
||||
Questa email vi è stata inviata in quanto utenti del nostro servizio di supporto clienti, in conformità con la nostra policy sulla privacy. Vi preghiamo di informarci se pensate di aver ricevuto questa email per errore.
|
@ -7,6 +7,9 @@
|
||||
{% if helpdesk_settings.HELPDESK_NAVIGATION_STATS_ENABLED %}
|
||||
<li><a href='{% url helpdesk_report_index %}'>{% trans "Stats" %}</a></li>
|
||||
{% endif %}
|
||||
{% if helpdesk_settings.HELPDESK_KB_ENABLED_STAFF %}
|
||||
<li><a href='{% url helpdesk_kb_index %}'>{% trans "Knowledgebase" %}</a></li>
|
||||
{% endif %}
|
||||
{% if user_saved_queries_ %}
|
||||
<li class="headerlink"><a>{% trans "Load Saved Query" %}</a>
|
||||
<ul>
|
||||
|
@ -1,6 +1,22 @@
|
||||
{% extends "helpdesk/public_base.html" %}{% load i18n %}
|
||||
|
||||
{% block helpdesk_body %}
|
||||
|
||||
{% if helpdesk_settings.HELPDESK_SHOW_KB_ON_HOMEPAGE %}
|
||||
<h2>{% trans "Knowledgebase Articles" %}</h2>
|
||||
|
||||
<table width='100%'>
|
||||
<tr class='row_tablehead'><td>{% trans "Knowledgebase Categories" %}</td></tr>
|
||||
<tr class='row_columnheads'><th>{% trans "Category" %}</th></tr>
|
||||
|
||||
{% for category in kb_categories %}
|
||||
<tr class='row_even row_hover'><th><a href='{{ category.get_absolute_url }}'>{{ category.title }}</a></th></tr>
|
||||
<tr class='row_odd'><td>{{ category.description }}</td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if helpdesk_settings.HELPDESK_VIEW_A_TICKET_PUBLIC %}
|
||||
<h2>{% trans "View a Ticket" %}</h2>
|
||||
|
||||
|
@ -42,8 +42,20 @@
|
||||
|
||||
{% block helpdesk_body %}
|
||||
{% if helpdesk_settings.HELPDESK_TRANSLATE_TICKET_COMMENTS %}
|
||||
{% comment %}
|
||||
<div id='translate_dropdown'>{% trans "Translate ticket comments into" %} </div>
|
||||
<div id='translate_block'>
|
||||
{% endcomment %}
|
||||
<div id="google_translate_element"></div><script>
|
||||
function googleTranslateElementInit() {
|
||||
new google.translate.TranslateElement({
|
||||
pageLanguage: 'auto',
|
||||
includedLanguages: 'en,fr,de,ru',
|
||||
autoDisplay: false,
|
||||
layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL
|
||||
}, 'google_translate_element');
|
||||
}
|
||||
</script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
|
||||
{% endif %}
|
||||
|
||||
{% include "helpdesk/ticket_desc_table.html" %}
|
||||
@ -95,6 +107,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div id='add-followup'>
|
||||
<h3>{% trans "Respond to this ticket" %}</h3>
|
||||
|
||||
<form method='post' action='update/' enctype='multipart/form-data'>
|
||||
@ -162,6 +175,9 @@
|
||||
|
||||
<dt><label for='id_priority'>{% trans "Priority" %}</label></dt>
|
||||
<dd><select id='id_priority' name='priority'>{% for p in priorities %}<option value='{{ p.0 }}'{% ifequal p.0 ticket.priority %} selected='selected'{% endifequal %}>{{ p.1 }}</option>{% endfor %}</select></dd>
|
||||
<dt><label for='id_due_date'>{% trans "Due on" %}</label></dt>
|
||||
<dd>{{ form.due_date }}</dd>
|
||||
|
||||
{% if tags_enabled %}
|
||||
<dt><label for='id_tags'>{% trans "Tags" %}</label></dt>
|
||||
<dd><input type='text' id='id_tags' name='tags' value='{{ ticket.tags }}'/></dd>
|
||||
@ -189,5 +205,6 @@
|
||||
|
||||
{% csrf_token %}</form>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -2,13 +2,13 @@
|
||||
<table width='100%'>
|
||||
<tr class='row_tablehead'><td colspan='2'>{{ ticket.id }}. {{ ticket.title }} [{{ ticket.get_status }}] <span class='ticket_toolbar'>
|
||||
{% if helpdesk_settings.HELPDESK_SHOW_EDIT_BUTTON_TICKET_TOP %}
|
||||
<a href='{% url helpdesk_edit ticket.id %}'><img src='{{ STATIC_URL }}helpdesk/buttons/edit.png' alt='Edit' title='Edit' width='60' height='15' /></a>
|
||||
<a href='{% url helpdesk_edit ticket.id %}' class="ticket-edit"><img src='{{ STATIC_URL }}helpdesk/buttons/edit.png' alt='Edit' title='Edit' width='60' height='15' /></a>
|
||||
{% endif %}
|
||||
{% if helpdesk_settings.HELPDESK_SHOW_DELETE_BUTTON_TICKET_TOP %}
|
||||
<a href='{% url helpdesk_delete ticket.id %}'><img src='{{ STATIC_URL }}helpdesk/buttons/delete.png' alt='Delete' title='Delete' width='60' height='15' /></a>
|
||||
<a href='{% url helpdesk_delete ticket.id %}' class="ticket-delete"><img src='{{ STATIC_URL }}helpdesk/buttons/delete.png' alt='Delete' title='Delete' width='60' height='15' /></a>
|
||||
{% endif %}
|
||||
{% if helpdesk_settings.HELPDESK_SHOW_HOLD_BUTTON_TICKET_TOP %}
|
||||
{% if ticket.on_hold %}<a href='unhold/'>{% trans "Unhold" %}</a>{% else %}<a href='hold/'>{% trans "Hold" %}</a>{% endif %}
|
||||
{% if ticket.on_hold %}<a href='unhold/' class="ticket-hold">{% trans "Unhold" %}</a>{% else %}<a href='hold/' class="ticket-hold">{% trans "Hold" %}</a>{% endif %}
|
||||
{% endif %}</span></td></tr>
|
||||
<tr class='row_columnheads'><th colspan='2'>{% blocktrans with ticket.queue as queue %}Queue: {{ queue }}{% endblocktrans %}</th></tr>
|
||||
|
||||
|
@ -20,9 +20,10 @@ from django.http import HttpResponse
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import loader, Context
|
||||
from django.utils import simplejson
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
from helpdesk.forms import TicketForm
|
||||
from helpdesk.lib import send_templated_mail
|
||||
from helpdesk.lib import send_templated_mail, safe_template_context
|
||||
from helpdesk.models import Ticket, Queue, FollowUp
|
||||
|
||||
STATUS_OK = 200
|
||||
@ -33,6 +34,7 @@ STATUS_ERROR_PERMISSIONS = 403
|
||||
STATUS_ERROR_BADMETHOD = 405
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
def api(request, method):
|
||||
"""
|
||||
Regardless of any other paramaters, we provide a help screen
|
||||
@ -191,11 +193,8 @@ class API:
|
||||
|
||||
f.save()
|
||||
|
||||
context = {
|
||||
'ticket': ticket,
|
||||
'queue': ticket.queue,
|
||||
'comment': f.comment,
|
||||
}
|
||||
context = safe_template_context(ticket)
|
||||
context['comment'] = f.comment
|
||||
|
||||
messages_sent_to = []
|
||||
|
||||
@ -266,11 +265,8 @@ class API:
|
||||
)
|
||||
f.save()
|
||||
|
||||
context = {
|
||||
'ticket': ticket,
|
||||
'queue': ticket.queue,
|
||||
'resolution': f.comment,
|
||||
}
|
||||
context = safe_template_context(ticket)
|
||||
context['resolution'] = f.comment
|
||||
|
||||
subject = '%s %s (Resolved)' % (ticket.ticket, ticket.title)
|
||||
|
||||
|
@ -18,7 +18,7 @@ from django.utils.translation import ugettext as _
|
||||
from helpdesk import settings as helpdesk_settings
|
||||
from helpdesk.forms import PublicTicketForm
|
||||
from helpdesk.lib import send_templated_mail, text_is_spam
|
||||
from helpdesk.models import Ticket, Queue, UserSettings
|
||||
from helpdesk.models import Ticket, Queue, UserSettings, KBCategory
|
||||
|
||||
|
||||
def homepage(request):
|
||||
@ -63,10 +63,13 @@ def homepage(request):
|
||||
form = PublicTicketForm(initial=initial_data)
|
||||
form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.filter(allow_public_submission=True)]
|
||||
|
||||
knowledgebase_categories = KBCategory.objects.all()
|
||||
|
||||
return render_to_response('helpdesk/public_homepage.html',
|
||||
RequestContext(request, {
|
||||
'form': form,
|
||||
'helpdesk_settings': helpdesk_settings,
|
||||
'kb_categories': knowledgebase_categories
|
||||
}))
|
||||
|
||||
|
||||
|
@ -15,6 +15,7 @@ from django.contrib.auth.models import User
|
||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||
from django.core.files.base import ContentFile
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core import paginator
|
||||
from django.db import connection
|
||||
from django.db.models import Q
|
||||
@ -85,18 +86,34 @@ def dashboard(request):
|
||||
# Queue 2 4 12
|
||||
|
||||
cursor = connection.cursor()
|
||||
cursor.execute("""
|
||||
SELECT q.id as queue,
|
||||
q.title AS name,
|
||||
COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
|
||||
COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
|
||||
COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
|
||||
FROM helpdesk_ticket t,
|
||||
helpdesk_queue q
|
||||
WHERE q.id = t.queue_id
|
||||
GROUP BY queue, name
|
||||
ORDER BY q.id;
|
||||
""")
|
||||
if helpdesk_settings.HELPDESK_DASHBOARD_HIDE_EMPTY_QUEUES:
|
||||
cursor.execute("""
|
||||
SELECT q.id as queue,
|
||||
q.title AS name,
|
||||
COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
|
||||
COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
|
||||
COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
|
||||
FROM helpdesk_ticket t,
|
||||
helpdesk_queue q
|
||||
WHERE q.id = t.queue_id
|
||||
GROUP BY queue, name
|
||||
ORDER BY q.id;
|
||||
""")
|
||||
else:
|
||||
cursor.execute("""
|
||||
SELECT q.id as queue,
|
||||
q.title AS name,
|
||||
COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
|
||||
COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
|
||||
COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
|
||||
FROM helpdesk_queue q
|
||||
LEFT OUTER JOIN helpdesk_ticket t
|
||||
ON q.id = t.queue_id
|
||||
GROUP BY queue, name
|
||||
ORDER BY q.id;
|
||||
""")
|
||||
|
||||
|
||||
dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)
|
||||
|
||||
return render_to_response('helpdesk/dashboard.html',
|
||||
@ -200,10 +217,20 @@ def view_ticket(request, ticket_id):
|
||||
|
||||
return update_ticket(request, ticket_id)
|
||||
|
||||
if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
|
||||
users = User.objects.filter(is_active=True, is_staff=True).order_by('username')
|
||||
else:
|
||||
users = User.objects.filter(is_active=True).order_by('username')
|
||||
|
||||
|
||||
# TODO: shouldn't this template get a form to begin with?
|
||||
form = TicketForm(initial={'due_date':ticket.due_date})
|
||||
|
||||
return render_to_response('helpdesk/ticket.html',
|
||||
RequestContext(request, {
|
||||
'ticket': ticket,
|
||||
'active_users': User.objects.filter(is_active=True).order_by('username'),
|
||||
'form': form,
|
||||
'active_users': users,
|
||||
'priorities': Ticket.PRIORITY_CHOICES,
|
||||
'preset_replies': PreSetReply.objects.filter(Q(queues=ticket.queue) | Q(queues__isnull=True)),
|
||||
'tags_enabled': HAS_TAG_SUPPORT,
|
||||
@ -223,6 +250,10 @@ def update_ticket(request, ticket_id, public=False):
|
||||
public = request.POST.get('public', False)
|
||||
owner = int(request.POST.get('owner', None))
|
||||
priority = int(request.POST.get('priority', ticket.priority))
|
||||
due_date = datetime(
|
||||
int(request.POST.get('due_date_year')),
|
||||
int(request.POST.get('due_date_month')),
|
||||
int(request.POST.get('due_date_day')))
|
||||
tags = request.POST.get('tags', '')
|
||||
|
||||
# We need to allow the 'ticket' and 'queue' contexts to be applied to the
|
||||
@ -317,6 +348,16 @@ def update_ticket(request, ticket_id, public=False):
|
||||
c.save()
|
||||
ticket.priority = priority
|
||||
|
||||
if due_date != ticket.due_date:
|
||||
c = TicketChange(
|
||||
followup=f,
|
||||
field=_('Due on'),
|
||||
old_value=ticket.due_date,
|
||||
new_value=due_date,
|
||||
)
|
||||
c.save()
|
||||
ticket.due_date = due_date
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
if tags != ticket.tags:
|
||||
c = TicketChange(
|
||||
@ -328,7 +369,7 @@ def update_ticket(request, ticket_id, public=False):
|
||||
c.save()
|
||||
ticket.tags = tags
|
||||
|
||||
if new_status == Ticket.RESOLVED_STATUS:
|
||||
if new_status in [ Ticket.RESOLVED_STATUS, Ticket.CLOSED_STATUS ]:
|
||||
ticket.resolution = comment
|
||||
|
||||
messages_sent_to = []
|
||||
@ -593,18 +634,27 @@ def ticket_list(request):
|
||||
else:
|
||||
queues = request.GET.getlist('queue')
|
||||
if queues:
|
||||
queues = [int(q) for q in queues]
|
||||
query_params['filtering']['queue__id__in'] = queues
|
||||
try:
|
||||
queues = [int(q) for q in queues]
|
||||
query_params['filtering']['queue__id__in'] = queues
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
owners = request.GET.getlist('assigned_to')
|
||||
if owners:
|
||||
owners = [int(u) for u in owners]
|
||||
query_params['filtering']['assigned_to__id__in'] = owners
|
||||
try:
|
||||
owners = [int(u) for u in owners]
|
||||
query_params['filtering']['assigned_to__id__in'] = owners
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
statuses = request.GET.getlist('status')
|
||||
if statuses:
|
||||
statuses = [int(s) for s in statuses]
|
||||
query_params['filtering']['status__in'] = statuses
|
||||
try:
|
||||
statuses = [int(s) for s in statuses]
|
||||
query_params['filtering']['status__in'] = statuses
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
date_from = request.GET.get('date_from')
|
||||
if date_from:
|
||||
@ -637,8 +687,15 @@ def ticket_list(request):
|
||||
sortreverse = request.GET.get('sortreverse', None)
|
||||
query_params['sortreverse'] = sortreverse
|
||||
|
||||
ticket_qs = apply_query(Ticket.objects.select_related(), query_params)
|
||||
print >> sys.stderr, str(ticket_qs.query)
|
||||
try:
|
||||
ticket_qs = apply_query(Ticket.objects.select_related(), query_params)
|
||||
except ValidationError:
|
||||
# invalid parameters in query, return default query
|
||||
query_params = {
|
||||
'filtering': {'status__in': [1, 2, 3]},
|
||||
'sorting': 'created',
|
||||
}
|
||||
ticket_qs = apply_query(Ticket.objects.select_related(), query_params)
|
||||
|
||||
## TAG MATCHING
|
||||
if HAS_TAG_SUPPORT:
|
||||
@ -733,7 +790,11 @@ def create_ticket(request):
|
||||
|
||||
form = TicketForm(initial=initial_data)
|
||||
form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()]
|
||||
form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in User.objects.filter(is_active=True).order_by('username')]
|
||||
if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
|
||||
users = User.objects.filter(is_active=True, is_staff=True).order_by('username')
|
||||
else:
|
||||
users = User.objects.filter(is_active=True).order_by('username')
|
||||
form.fields['assigned_to'].choices = [('', '--------')] + [[u.id, u.username] for u in users]
|
||||
if helpdesk_settings.HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO:
|
||||
form.fields['assigned_to'].widget = forms.HiddenInput()
|
||||
|
||||
@ -865,7 +926,7 @@ def run_report(request, report):
|
||||
periods = []
|
||||
year, month = first_year, first_month
|
||||
working = True
|
||||
periods.append("%s %s" % (months[month], year))
|
||||
periods.append("%s %s" % (months[month - 1], year))
|
||||
|
||||
while working:
|
||||
month += 1
|
||||
@ -935,7 +996,7 @@ def run_report(request, report):
|
||||
|
||||
elif report == 'usermonth':
|
||||
metric1 = u'%s' % ticket.get_assigned_to
|
||||
metric2 = u'%s %s' % (months[ticket.created.month], ticket.created.year)
|
||||
metric2 = u'%s %s' % (months[ticket.created.month - 1], ticket.created.year)
|
||||
|
||||
elif report == 'queuepriority':
|
||||
metric1 = u'%s' % ticket.queue.title
|
||||
@ -947,14 +1008,14 @@ def run_report(request, report):
|
||||
|
||||
elif report == 'queuemonth':
|
||||
metric1 = u'%s' % ticket.queue.title
|
||||
metric2 = u'%s %s' % (months[ticket.created.month], ticket.created.year)
|
||||
metric2 = u'%s %s' % (months[ticket.created.month - 1], ticket.created.year)
|
||||
|
||||
summarytable[metric1, metric2] += 1
|
||||
|
||||
table = []
|
||||
|
||||
header1 = sorted(set(list( i.encode('utf-8') for i,_ in summarytable.keys() )))
|
||||
|
||||
|
||||
column_headings = [col1heading] + possible_options
|
||||
|
||||
# Pivot the data so that 'header1' fields are always first column
|
||||
|
Loading…
Reference in New Issue
Block a user