Update ticketCC views and also reformat HTML files along with some improvements in form errors.

This commit is contained in:
bbe 2020-10-31 18:33:41 +01:00
parent 7564c5739b
commit 1788f2fb84
3 changed files with 187 additions and 122 deletions

View File

@ -1,72 +1,104 @@
{% extends "helpdesk/base.html" %}{% load i18n %} {% extends "helpdesk/base.html" %}
{% load i18n %}
{% block helpdesk_title %}{% trans "Add Ticket CC" %}{% endblock %} {% block helpdesk_title %}{% trans "Add Ticket CC" %}{% endblock %}
{% block helpdesk_breadcrumb %} {% block helpdesk_breadcrumb %}
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{% url 'helpdesk:list' %}">{% trans "Tickets" %}</a> <a href="{% url 'helpdesk:list' %}">{% trans "Tickets" %}</a>
</li> </li>
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{% url 'helpdesk:list' %}{{ ticket.id }}/">{{ ticket.queue.slug }}-{{ ticket.id }}</a> <a href="{% url 'helpdesk:list' %}{{ ticket.id }}/">{{ ticket.queue.slug }}-{{ ticket.id }}</a>
</li> </li>
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{% url 'helpdesk:ticket_cc' ticket.id %}">{% trans "CC Settings" %}</a> <a href="{% url 'helpdesk:ticket_cc' ticket.id %}">{% trans "CC Settings" %}</a>
</li> </li>
<li class="breadcrumb-item active">{% trans "Add CC" %}</li> <li class="breadcrumb-item active">{% trans "Add CC" %}</li>
{% endblock %} {% endblock %}
{% block helpdesk_body %} {% block helpdesk_body %}
<h2>{% trans 'Add Ticket CC' %}</h2> <h2>{% trans 'Add Ticket CC' %}</h2>
<div class="card mb-3"> <div class="card mb-3">
<div class="card-header"> <div class="card-header">
<i class="fas fa-hand-pointer"></i> <i class="fas fa-hand-pointer"></i>
{% trans 'To automatically send an email to a user or e-mail address when this ticket is updated, select the user or enter an e-mail address below.' %} {% trans 'To automatically send an email to a user or e-mail address when this ticket is updated, select the user or enter an e-mail address below.' %}
</div> </div>
<div class="card-body"> <div class="card-body">
<!-- Nav tabs --> <!-- Nav tabs -->
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="active"><a href="#EmailCC" data-toggle="tab">{% trans 'Email' %}</a> <li class="nav-item">
</li> <a class="nav-link{% if not form.errors.user %} active{% endif %}" href="#EmailCC" data-toggle="tab">
<li><a href="#UserCC" data-toggle="tab">{% trans 'User' %}</a> {% trans 'Email' %}
</li> </a>
</ul> </li>
<li class="divider"></li>
<li class="nav-item">
<a class="nav-link{% if form.errors.user %} active{% endif %}" href="#UserCC" data-toggle="tab">
{% trans 'User' %}
</a>
</li>
</ul>
<!-- Tab panes --> {% if form.errors %}
<div class="tab-content"> {% include 'helpdesk/include/alert_form_errors.html' %}
<div class="tab-pane in active" id="EmailCC"> <ul>{{ form.non_field_errors }}</ul>
<h4>{% trans 'Add Email' %}</h4> {% endif %}
<form method='post' action='./'>
<fieldset> <!-- Tab panes -->
<dl>{% for field in form_email %} <div class="tab-content">
<dt><label for='id_{{ field.name }}'>{{ field.label }}</label></dt> <div class="tab-pane{% if not form.errors.user %} in active{% endif %}" id="EmailCC">
<dd>{{ field }}</dd> <h4>{% trans 'Add Email' %}</h4>
{% if field.errors %}<dd class='error'>{{ field.errors }}</dd>{% endif %} <form method='post'>
{% if field.help_text %}<dd class='form_help_text'>{{ field.help_text }}</dd>{% endif %} {% csrf_token %}
{% endfor %}</dl> <fieldset>
</fieldset> <dl>
<button class="btn btn-primary" type='submit'>{% trans "Save Ticket CC" %}</button> {% for field in form_email %}
{% csrf_token %}</form> <dt>{{ field.label_tag }}</dt>
</div> <dd>{{ field }}</dd>
<div class="tab-pane fade" id="UserCC"> {% if field.name == 'email' and form.errors.email %}
<h4>{% trans 'Add User' %}</h4> <dd class='error'>{{ form.errors.email }}</dd>
<form method='post' action='./'> {% endif %}
<fieldset> {% if field.help_text %}
<dl>{% for field in form_user %} <dd class='form_help_text'>{{ field.help_text }}</dd>
<dt><label for='id_{{ field.name }}'>{{ field.label }}</label></dt> {% endif %}
<dd>{{ field }}</dd> {% endfor %}
{% if field.errors %}<dd class='error'>{{ field.errors }}</dd>{% endif %} </dl>
{% if field.help_text %}<dd class='form_help_text'>{{ field.help_text }}</dd>{% endif %} </fieldset>
{% endfor %}</dl> <button class="btn btn-primary" type='submit'>{% trans "Save Ticket CC" %}</button>
</fieldset> <a href="{% url 'helpdesk:ticket_cc' ticket.id %}" class="btn btn-secondary">
<button class="btn btn-primary" type='submit'>{% trans "Save Ticket CC" %}</button> {% trans "Cancel" %}
{% csrf_token %}</form> </a>
</form>
</div>
<div class="tab-pane{% if form.errors.user %} in active{% endif %}" id="UserCC">
<h4>{% trans 'Add User' %}</h4>
<form method='post'>
{% csrf_token %}
<fieldset>
<dl>
{% for field in form_user %}
<dt>{{ field.label_tag }}</dt>
<dd>{{ field }}</dd>
{% if field.name == 'user' and form.errors.user %}
<dd class='error'>{{ form.errors.user }}</dd>
{% endif %}
{% if field.help_text %}
<dd class='form_help_text'>{{ field.help_text }}</dd>
{% endif %}
{% endfor %}
</dl>
</fieldset>
<button class="btn btn-primary" type='submit'>{% trans "Save Ticket CC" %}</button>
<a href="{% url 'helpdesk:ticket_cc' ticket.id %}" class="btn btn-secondary">
{% trans "Cancel" %}
</a>
</form>
</div>
</div> </div>
</div> </div>
<!-- /.card-body -->
</div> </div>
<!-- /.card-body --> <!-- /.card -->
</div>
<!-- /.card -->
{% endblock %} {% endblock %}

View File

@ -1,65 +1,91 @@
{% extends "helpdesk/base.html" %}{% load i18n %} {% extends "helpdesk/base.html" %}
{% load i18n %}
{% block helpdesk_title %}{% trans "Ticket CC Settings" %}{% endblock %} {% block helpdesk_title %}{% trans "Ticket CC Settings" %}{% endblock %}
{% block helpdesk_breadcrumb %} {% block helpdesk_breadcrumb %}
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{% url 'helpdesk:list' %}">{% trans "Tickets" %}</a> <a href="{% url 'helpdesk:list' %}">{% trans "Tickets" %}</a>
</li> </li>
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{% url 'helpdesk:list' %}{{ ticket.id }}/">{{ ticket.queue.slug }}-{{ ticket.id }}</a> <a href="{% url 'helpdesk:list' %}{{ ticket.id }}/">{{ ticket.queue.slug }}-{{ ticket.id }}</a>
</li> </li>
<li class="breadcrumb-item active">{% trans "CC Settings" %}</li> <li class="breadcrumb-item active">{% trans "CC Settings" %}</li>
{% endblock %} {% endblock %}
{% block helpdesk_body %}{% blocktrans with ticket.title as ticket_title and ticket.id as ticket_id %} {% block helpdesk_body %}{% blocktrans with ticket.title as ticket_title and ticket.id as ticket_id %}
<h2>Ticket CC Settings</h2> <h2>Ticket CC Settings</h2>
<p>The following people will receive an e-mail whenever <em><a href='../'>{{ ticket_title }}</a></em> is updated. Some people can also view or edit the ticket via the public ticket views.</p> <p>The following people will receive an e-mail whenever <em><a href='../'>{{ ticket_title }}</a></em> is updated. Some people can also view or edit the ticket via the public ticket views.</p>
<p>You can add a new recipient to the list or delete any of the items below as required.</p>{% endblocktrans %} <p>You can add a new recipient to the list or delete any of the items below as required.</p>{% endblocktrans %}
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
{% trans "Ticket CC List" %} {% trans "Ticket CC List" %}
</div>
<!-- /.panel-heading -->
<div class="panel-body">
<div><a href='add/'><button class="btn btn-success btn-sm"><i class="fa fa-plus-circle"></i>{% trans "Add an Email or Helpdesk User" %}</button></a></div>
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>{% trans "E-Mail Address or Helpdesk User" %}</th>
<th>{% trans "View?" %}</th>
<th>{% trans "Update?" %}</th>
<th>{% trans "Delete" %}</th>
</tr>
</thead>
<tbody>
{% for person in copies_to %}
<tr class='row_{% cycle 'odd' 'even' %}'>
<td>{{ person.display }}</td>
<td>{{ person.can_view }}</td>
<td>{{ person.can_update }}</td>
<td><a href='{% url 'helpdesk:ticket_cc_del' ticket.id person.id %}'><button class="btn btn-danger btn-xs">{% trans "Delete" %}</button></a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- /.table-responsive -->
</div>
<!-- /.panel-body -->
</div>
<!-- /.panel -->
</div> </div>
<!-- /.col-lg-12 --> <!-- /.panel-heading -->
<div class="panel-body">
<div><a href='add/'><button class="btn btn-success btn-sm"><i class="fa fa-plus-circle"></i>{% trans "Add an Email or Helpdesk User" %}</button></a></div>
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>{% trans "E-Mail Address or Helpdesk User" %}</th>
<th class="text-center">{% trans "View?" %}</th>
<th class="text-center">{% trans "Update?" %}</th>
<th class="text-center">{% trans "Delete" %}</th>
</tr>
</thead>
<tbody>
{% for person in copies_to %}
<tr class='row_{% cycle 'odd' 'even' %}'>
<td>{{ person.display }}</td>
<td class="text-center">
{% if person.can_view %}
<i class="fa fa-2x fa-check text-success"></i>
{% else %}
<i class="fa fa-2x fa-times text-danger"></i>
{% endif %}
</td>
<td class="text-center">
{% if person.can_update %}
<i class="fa fa-2x fa-check text-success"></i>
{% else %}
<i class="fa fa-2x fa-times text-danger"></i>
{% endif %}
</td>
<td class="text-center">
<a href='{% url 'helpdesk:ticket_cc_del' ticket.id person.id %}'>
<button class="btn btn-danger btn-xs">
{% trans "Delete" %}
</button>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- /.table-responsive -->
</div>
<!-- /.panel-body -->
</div> </div>
<!-- /.row --> <!-- /.panel -->
</div>
<!-- /.col-lg-12 -->
</div>
<!-- /.row -->
<p><a href='{% url 'helpdesk:view' ticket.id %}'><button class="btn btn-primary btn-lg">{% blocktrans with ticket.title as ticket_title %}Return to <em>{{ ticket_title }}</em>{% endblocktrans %}</button></a></p> <p>
<a href='{% url 'helpdesk:view' ticket.id %}'>
<button class="btn btn-primary btn-lg">
{% blocktrans with ticket.title as ticket_title %}Return to <em>{{ ticket_title }}</em>{% endblocktrans %}
</button>
</a>
</p>
{% endblock %} {% endblock %}

View File

@ -1508,21 +1508,27 @@ def ticket_cc_add(request, ticket_id):
ticket = get_object_or_404(Ticket, id=ticket_id) ticket = get_object_or_404(Ticket, id=ticket_id)
ticket_perm_check(request, ticket) ticket_perm_check(request, ticket)
form = None
if request.method == 'POST': if request.method == 'POST':
form = TicketCCForm(request.POST) form = TicketCCForm(request.POST)
if form.is_valid(): if form.is_valid():
ticketcc = form.save(commit=False) user = form.cleaned_data.get('user')
ticketcc.ticket = ticket email = form.cleaned_data.get('email')
ticketcc.save() if user and ticket.ticketcc_set.filter(user=user).exists():
return HttpResponseRedirect(reverse('helpdesk:ticket_cc', form.add_error('user', _('Impossible to add twice the same user'))
kwargs={'ticket_id': ticket.id})) elif email and ticket.ticketcc_set.filter(email=email).exists():
else: form.add_error('email', _('Impossible to add twice the same email address'))
form_email = TicketCCEmailForm() else:
form_user = TicketCCUserForm() ticketcc = form.save(commit=False)
ticketcc.ticket = ticket
ticketcc.save()
return HttpResponseRedirect(reverse('helpdesk:ticket_cc', kwargs={'ticket_id': ticket.id}))
return render(request, 'helpdesk/ticket_cc_add.html', { return render(request, 'helpdesk/ticket_cc_add.html', {
'ticket': ticket, 'ticket': ticket,
'form_email': form_email, 'form': form,
'form_user': form_user, 'form_email': TicketCCEmailForm(),
'form_user': TicketCCUserForm(),
}) })
@ -1531,13 +1537,14 @@ ticket_cc_add = staff_member_required(ticket_cc_add)
@helpdesk_staff_member_required @helpdesk_staff_member_required
def ticket_cc_del(request, ticket_id, cc_id): def ticket_cc_del(request, ticket_id, cc_id):
ticket = get_object_or_404(Ticket, id=ticket_id)
cc = get_object_or_404(TicketCC, ticket__id=ticket_id, id=cc_id) cc = get_object_or_404(TicketCC, ticket__id=ticket_id, id=cc_id)
if request.method == 'POST': if request.method == 'POST':
cc.delete() cc.delete()
return HttpResponseRedirect(reverse('helpdesk:ticket_cc', return HttpResponseRedirect(reverse('helpdesk:ticket_cc', kwargs={'ticket_id': cc.ticket.id}))
kwargs={'ticket_id': cc.ticket.id}))
return render(request, 'helpdesk/ticket_cc_del.html', {'cc': cc}) return render(request, 'helpdesk/ticket_cc_del.html', {'ticket': ticket, 'cc': cc})
ticket_cc_del = staff_member_required(ticket_cc_del) ticket_cc_del = staff_member_required(ticket_cc_del)