It seems I have fixed bug \#7: create verbose bugreport form.

portnov [2008-06-14 04:06:57]
It seems I have fixed bug \#7: create verbose bugreport form.
Filename
media/css/main.css
mgmt/models.py
mgmt/views.py
templates/bug_body.html
templates/bug_report.html
templates/project_bugs.html
urls.py
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'),
ViewGit