diff --git a/media/css/main.css b/media/css/main.css
index 48dd9f4..aad1b1c 100644
--- a/media/css/main.css
+++ b/media/css/main.css
@@ -127,6 +127,10 @@ ul.menu li {
ul.menu a {
}
+ul.errorlist {
+ background: #fcc;
+}
+
.links {
float: right;
text-align: right;
diff --git a/mgmt/models.py b/mgmt/models.py
index ff99bc3..ec20a66 100644
--- a/mgmt/models.py
+++ b/mgmt/models.py
@@ -45,6 +45,12 @@ class Bug(Object):
confirmed = models.ForeignKey(User,related_name='confirmed_bugs',null=True)
responsible = models.ForeignKey(User,related_name='resp_bugs',null=True)
status = models.ForeignKey(BugState)
+ component = models.CharField(max_length=64,null=True)
+ actions = models.TextField()
+ expected = models.TextField()
+ unexpected = models.TextField()
+ priority = models.SmallIntegerField(null=True)
+ complexity = models.SmallIntegerField(null=True)
class Meta:
verbose_name = _("Bug")
verbose_name_plural = _("Bugs")
diff --git a/mgmt/views.py b/mgmt/views.py
index 2cf1aa5..879304f 100644
--- a/mgmt/views.py
+++ b/mgmt/views.py
@@ -3,7 +3,7 @@
from datetime import datetime
-from django.http import HttpResponse,Http404,HttpResponseForbidden
+from django.http import HttpResponse,Http404,HttpResponseForbidden,HttpResponseRedirect
from django.core.paginator import Paginator
from django.template import RequestContext
from django.template.loader import get_template
@@ -11,6 +11,7 @@ from django.shortcuts import render_to_response
import django.newforms as forms
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
+from django.core.urlresolvers import reverse
from models import *
from context import add_blocks,debug_messages,add_menu
@@ -43,11 +44,15 @@ def get_comments(request,id,type):
############
class CommentForm(forms.Form):
- title = forms.CharField()
+ title = forms.CharField(required=False)
text = forms.CharField(widget=forms.Textarea())
class BugForm(forms.Form):
name = forms.CharField()
+ component = forms.CharField(required=False)
+ your_actions = forms.CharField(widget=forms.Textarea())
+ expected = forms.CharField(widget=forms.Textarea())
+ unexpected = forms.CharField(widget=forms.Textarea())
text = forms.CharField(widget=forms.Textarea())
class DocForm(forms.Form):
@@ -112,28 +117,48 @@ def one_project(request,id):
def project_bugs(request,id):
project = Project.objects.get(pk=id)
- if request.method=='POST':
- name = request.POST['name']
- text = request.POST['text']
- s0 = BugState.objects.get(pk=1)
- b = Bug(created=datetime.now(),
- author = request.user,
- project = project,
- status = s0,
- name = name,
- text = text)
- b.save()
bugs = Bug.objects.filter(project=project)
- if can(request.user,'send bug'):
- form = BugForm()
- else:
- form = None
+ can_report = can(request.user,'send bug')
return render_it('project_bugs.html',
{'project': project,
'bugs': bugs,
- 'form': form},
+ 'can_report': can_report},
request)
+def bug_report(request,pid):
+ project = Project.objects.get(pk=pid)
+ if request.method=='POST':
+ form = BugForm(request.POST)
+ if form.is_valid():
+ name = form.cleaned_data['name']
+ comp = form.cleaned_data['component']
+ actions = form.cleaned_data['your_actions']
+ expected = form.cleaned_data['expected']
+ unexpected = form.cleaned_data['unexpected']
+ text = form.cleaned_data['text']
+ s0 = BugState.objects.get(pk=1)
+ b = Bug(created=datetime.now(),
+ author = request.user,
+ project = project,
+ status = s0,
+ name = name,
+ component=comp,
+ actions=actions,
+ expected=expected,
+ unexpected=unexpected,
+ text = text)
+ b.save()
+ return HttpResponseRedirect(reverse('mgmt.views.project_bugs',args=(pid,)))
+ else:
+ return render_it('bug_report.html',
+ {'project': project, 'form': form},
+ request)
+ form = BugForm()
+ return render_it('bug_report.html',
+ {'project': project,
+ 'form': form},
+ request)
+
def project_documents(request,id):
project = Project.objects.get(pk=id)
docs = Document.objects.filter(project=project)
diff --git a/templates/bug_body.html b/templates/bug_body.html
index f37b503..a27a78c 100644
--- a/templates/bug_body.html
+++ b/templates/bug_body.html
@@ -7,5 +7,11 @@
{% if edit_link %}
<div class='links'><a href='{{edit_link}}'>Изменить</a></div>
{% endif %}
- <p>{{bug.text|markdown|safe}}</p>
+ {% if bug.component %}
+ <p><strong>Компонент:</strong> {{bug.component}}</p>
+ {% endif %}
+ <p><strong>Действия для воспроизведения:</strong> {{bug.actions}}</p>
+ <p><strong>Ожидаемое поведение:</strong> {{bug.expected}}</p>
+ <p><strong>Получаемое поведение:</strong> {{bug.unexpected}}</p>
+ <div>{{bug.text|markdown|safe}}</div>
</div>
diff --git a/templates/bug_report.html b/templates/bug_report.html
new file mode 100644
index 0000000..6568d11
--- /dev/null
+++ b/templates/bug_report.html
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+{% load prj_filters %}
+
+{% block title %}Отправить баг в проект {{project.name}}{% endblock %}
+
+{% block main %}
+<h2>Отправить баг в проект {{project.name}}</h2>
+
+{% form form %}
+
+{% endblock %}
diff --git a/templates/project_bugs.html b/templates/project_bugs.html
index 074c6a4..2f421b9 100644
--- a/templates/project_bugs.html
+++ b/templates/project_bugs.html
@@ -9,19 +9,35 @@
<h3><a href='{% url mgmt.views.all_bugs %}'>Баги:</a></h3>
+
{% if bugs %}
+ {% if can_report %}
+ <p><a href='{% url mgmt.views.bug_report project.id %}'>Отправить баг</a></p>
+ {% endif %}
<div class='bugs'>
{% for bug in bugs %}
- {% include "bug_body.html" %}
+ <div class='bug bug-state-{{bug.status.id}}'>
+ <div class='project-link'>
+ <a href='{% url mgmt.views.project_bugs project.id %}'>{{project.name}}</a>
+ </div>
+ <h3><a href='{% url mgmt.views.one_bug bug.id %}'>Баг #{{bug.id}}: {{bug.name}}</a></h3>
+ {% if edit_link %}
+ <div class='links'><a href='{{edit_link}}'>Изменить</a></div>
+ {% endif %}
+ {% if bug.component %}
+ <p><strong>Компонент:</strong> {{bug.component}}</p>
+ {% endif %}
+ <p><strong>Получаемое поведение:</strong> {{bug.unexpected}}</p>
+ <div>{{bug.text|markdown|safe}}</div>
+ </div>
{% endfor %}
</div>
{% else %}
<p>В этом проекте нет багов.</p>
{%endif%}
-{% if form %}
- <h3>Отправить баг:</h3>
- {% form form %}
+{% if can_report %}
+ <p><a href='{% url mgmt.views.bug_report project.id %}'>Отправить баг</a></p>
{% endif %}
{% endblock %}
diff --git a/urls.py b/urls.py
index 88c50d7..2f63473 100644
--- a/urls.py
+++ b/urls.py
@@ -11,6 +11,7 @@ urlpatterns = patterns('',
(r'^bugs/state/(\d+)/$', 'mgmt.views.bugs_by_state'),
(r'^bugs/(\d+)/$', "mgmt.views.one_bug"),
(r'^bugs/(\d+)/edit/$', "mgmt.views.edit_bug"),
+ (r'^bugs/report/(\d+)/$', 'mgmt.views.bug_report'),
(r'^bugs/$', "mgmt.views.all_bugs"),
(r'^create/doc/(\d+)/$', "mgmt.views.create_document"),
(r'^users/(\w+)/$', 'mgmt.views.user_page'),