Skip to content

Commit 28d622b

Browse files
committed
Add comments function
1 parent a5c9204 commit 28d622b

File tree

10 files changed

+171
-29
lines changed

10 files changed

+171
-29
lines changed

tickets/admin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib import admin
2-
from .models import Ticket
2+
from .models import Ticket, Comment
33

44
# Register your models here.
5-
admin.site.register(Ticket)
5+
admin.site.register(Ticket)
6+
admin.site.register(Comment)

tickets/forms.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django import forms
2-
from .models import Ticket
2+
from .models import Ticket, Comment
33

44
TICKET_TYPES = (('Bug', 'Bug'), ('Feature', 'Feature'))
55

@@ -12,6 +12,26 @@ class Meta:
1212
model = Ticket
1313
widgets = {
1414
'summary': forms.TextInput(attrs={'placeholder': 'Summary'}),
15-
'description': forms.Textarea(attrs={'placeholder': 'Further Details'}),
15+
'description': forms.Textarea(attrs={'placeholder': 'Details', 'rows': 4}),
16+
# 'tags': forms.TextInput(attrs={'placeholder': 'eg. Project Alpha, Testing'}),
1617
}
1718
fields = ('ticket_type', 'summary', 'description', 'tags')
19+
20+
21+
class AddCommentForm(forms.ModelForm):
22+
"""Adds a comment"""
23+
class Meta:
24+
model = Comment
25+
fields = ('comment_body',)
26+
widgets = {
27+
'comment_body': forms.Textarea(attrs={'placeholder': 'Leave a comment', 'rows': 3})
28+
}
29+
labels = {
30+
# 'comment_body': ('test'),
31+
'comment_body': '',
32+
}
33+
error_messages = {
34+
'comment_body': {
35+
'required': '',
36+
}
37+
}

tickets/migrations/0022_comment.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.24 on 2020-02-19 22:42
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
('tickets', '0021_auto_20200219_1713'),
15+
]
16+
17+
operations = [
18+
migrations.CreateModel(
19+
name='Comment',
20+
fields=[
21+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22+
('comment', models.CharField(max_length=300)),
23+
('date', models.DateTimeField(auto_now_add=True)),
24+
('ticket_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tickets.Ticket')),
25+
('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
26+
],
27+
options={
28+
'verbose_name_plural': 'Comments',
29+
},
30+
),
31+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.24 on 2020-02-19 22:59
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('tickets', '0022_comment'),
12+
]
13+
14+
operations = [
15+
migrations.RenameField(
16+
model_name='comment',
17+
old_name='comment',
18+
new_name='comment_body',
19+
),
20+
]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.24 on 2020-02-20 17:43
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('tickets', '0023_auto_20200219_2259'),
12+
]
13+
14+
operations = [
15+
migrations.RenameField(
16+
model_name='comment',
17+
old_name='ticket_id',
18+
new_name='ticket',
19+
),
20+
migrations.RenameField(
21+
model_name='comment',
22+
old_name='user_id',
23+
new_name='user',
24+
),
25+
]

tickets/models.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class Ticket(models.Model):
1515
created_date = models.DateTimeField(auto_now_add=True)
1616
status = models.CharField(max_length=50, default='New')
1717
priority = models.CharField(max_length=50, default='Medium')
18-
submitted_by = models.ForeignKey(User)
18+
submitted_by = models.ForeignKey(User, on_delete=models.CASCADE)
1919
assigned_to = models.CharField(max_length=200, default='Unassigned')
2020
description = models.TextField()
2121
tags = TaggableManager(blank=True)
@@ -27,3 +27,16 @@ def __str__(self):
2727
class Meta:
2828
verbose_name_plural = "Tickets"
2929
# attachments = models.CharField(maximum_length=200)
30+
31+
32+
class Comment(models.Model):
33+
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
34+
user = models.ForeignKey(User, on_delete=models.CASCADE)
35+
comment_body = models.CharField(max_length=300)
36+
date = models.DateTimeField(auto_now_add=True)
37+
38+
def __str__(self):
39+
return self.comment_body
40+
41+
class Meta:
42+
verbose_name_plural = "Comments"

tickets/templates/tickets.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ <h2>Tickets</h2>
77
<hr>
88
{% endblock %}
99
{% block content %}
10+
<a class="btn btn-success" href="{% url 'add_ticket' %}">Raise Ticket</a>
1011
<input type="text" placeholder="Search"><button class="btn btn-info">Go</button></input>
1112
<br>
1213
<br>
@@ -46,5 +47,4 @@ <h2>Tickets</h2>
4647
{% endfor %}
4748
</tbody>
4849
</table>
49-
<a class="btn btn-success" href="{% url 'add_ticket' %}">Raise Ticket</a>
5050
{% endblock %}

tickets/templates/view_ticket.html

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{% extends "base.html" %}
2+
{% load bootstrap_tags %}
23
{% block title %}
34
View Ticket | {{ ticket.id }}
45
{% endblock %}
@@ -18,16 +19,10 @@ <h4>Details</h4>
1819
</tr>
1920
</thead>
2021
<tbody>
21-
<!-- {% for key, value in ticket.items %}
2222
<tr>
23-
<th scope="row">{{ key }}</th>
24-
<td>{{ value }}</td>
23+
<th>Summary</th>
24+
<td>{{ ticket.summary }}</td>
2525
</tr>
26-
{% endfor %} -->
27-
<!-- <tr>
28-
<th>Ticket ID</th>
29-
<td>{{ ticket.id }}</td>
30-
</tr> -->
3126
<tr>
3227
<th>Ticket Type</th>
3328
<td>{{ ticket.ticket_type }}</td>
@@ -64,11 +59,11 @@ <h4>Details</h4>
6459
</table>
6560
<a class="btn btn-outline-primary" href="{% url 'edit_ticket' ticket.id %}">Edit</a>
6661
{% if ticket.status != 'Cancelled' %}
67-
<a class="btn btn-danger" href="{% url 'cancel_ticket' ticket.id %}">Cancel</a>
62+
<a class="btn btn-outline-warning" href="{% url 'cancel_ticket' ticket.id %}">Cancel</a>
6863
{% endif %}
64+
<a class="btn btn-outline-danger" href="{% url 'delete_ticket' ticket.id %}">Delete</a>
6965
</div>
7066
<div class="col col-6">
71-
{% comment %} History {% endcomment %}
7267
<h4>Change History</h4>
7368
<table class="table table-sm">
7469
<thead>
@@ -90,20 +85,21 @@ <h4>Change History</h4>
9085
</table>
9186
</div>
9287
</div>
93-
9488
<hr>
9589
<div class="row">
96-
<div class="col col-12">
97-
{% comment %} Comments {% endcomment %}
90+
<div class="col col-8">
9891
<h4>Comments</h4>
9992
<ul class="list-group">
100-
<li class="list-group-item">I agree</li>
101-
<li class="list-group-item">Same</li>
93+
{% for comment in comments %}
94+
<li class="list-group-item"><b>@{{ comment.user }}</b><span class="float-right">{{ comment.date }}</span>
95+
<br>{{ comment.comment_body }}
96+
</li>
97+
{% endfor %}
10298
</ul>
103-
<br>
104-
<form method="POST">
105-
<input type="text" class="form-control" placeholder="Leave Comment">
106-
<a class="btn btn-primary" href="#">Submit</a>
99+
<form method="post" enctype="multipart/form-data">
100+
{% csrf_token %}
101+
{{ form | as_bootstrap }}
102+
<button class="btn btn-outline-primary" type="submit">Submit</button>
107103
</form>
108104
</div>
109105
</div>

tickets/urls.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@
88
url(r'^edit_ticket/(?P<pk>\d+)/$', views.edit_ticket, name='edit_ticket'),
99
url(r'^cancel_ticket/(?P<pk>\d+)/$',
1010
views.cancel_ticket, name='cancel_ticket'),
11+
url(r'^delete_ticket/(?P<pk>\d+)/$',
12+
views.delete_ticket, name='delete_ticket'),
13+
# url(r'^add_comment/$', views.add_comment, name='add_comment'),
14+
# url(r'^add_comment/(?P<pk>\d+)/$', views.add_comment, name='add_comment'),
1115
]

tickets/views.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.shortcuts import render, get_object_or_404, redirect
22
from django.http import HttpResponse
3-
from .models import Ticket
4-
from .forms import AddTicketForm
3+
from .models import Ticket, Comment
4+
from .forms import AddTicketForm, AddCommentForm
55

66

77
# Create your views here.
@@ -15,7 +15,17 @@ def view_tickets(request):
1515
def view_ticket(request, pk):
1616
"""Display single ticket"""
1717
ticket = Ticket.objects.filter(id=pk)[0]
18-
return render(request, 'view_ticket.html', {'ticket': ticket})
18+
comments = Comment.objects.filter(ticket_id=pk)
19+
# If post (add comment button click)
20+
form = AddCommentForm(request.POST, request.FILES, instance=None)
21+
if (request.method == "POST"):
22+
if form.is_valid():
23+
comment_body = form.cleaned_data.get("comment_body")
24+
comment = Comment(
25+
ticket_id=pk, comment_body=comment_body, user_id=request.user.id)
26+
comment.save()
27+
return redirect(view_ticket, pk)
28+
return render(request, 'view_ticket.html', {'ticket': ticket, 'comments': comments, 'form': form})
1929

2030

2131
def add_ticket(request, pk=None):
@@ -56,6 +66,28 @@ def cancel_ticket(request, pk=None):
5666
ticket = get_object_or_404(Ticket, pk=pk) if pk else None
5767
ticket.status = "Cancelled"
5868
ticket.priority = "N/A"
59-
# set priorty to NA?
6069
ticket.save()
6170
return redirect(view_tickets)
71+
72+
73+
def delete_ticket(request, pk=None):
74+
ticket = get_object_or_404(Ticket, pk=pk) if pk else None
75+
ticket.delete()
76+
return redirect(view_tickets)
77+
78+
79+
# def add_comment(request):
80+
# """TESTAdd Ticket"""
81+
# print('test')
82+
# # On Submit
83+
# if (request.method == "POST"):
84+
# form = AddCommentForm(request.POST, request.FILES, instance=None)
85+
# if form.is_valid():
86+
# comment = form.save(commit=False)
87+
# # ticket.submitted_by = request.user
88+
# comment.save()
89+
# form.save_m2m()
90+
# return redirect(view_tickets)
91+
# else:
92+
# form = AddCommentForm(instance=None)
93+
# return render(request, 'view_ticket.html', {'form': form})

0 commit comments

Comments
 (0)