aboutsummaryrefslogtreecommitdiff
path: root/snakeplan/projects/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'snakeplan/projects/models.py')
-rwxr-xr-xsnakeplan/projects/models.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/snakeplan/projects/models.py b/snakeplan/projects/models.py
new file mode 100755
index 0000000..b91ec7c
--- /dev/null
+++ b/snakeplan/projects/models.py
@@ -0,0 +1,95 @@
1from django.db import models as m
2from django.db.models import Model
3from django.contrib.auth.models import User
4
5
6STATUSES = (
7 (0, 'Active'),
8 (1, 'Inactive'),
9 )
10
11DISPOSITIONS = (
12 (0, 'Planned'),
13 (1, 'Carried Over'),
14 (2, 'Added'),
15 (3, 'Discovered'),
16 )
17
18TASK_TYPES = (
19 (0, 'Feature'),
20 (1, 'Debt'),
21 (2, 'Functional Test'),
22 (3, 'Acceptance Test'),
23 (4, 'Overhead'),
24 )
25
26
27class Project(Model):
28
29 name = m.CharField(max_length=200)
30 description = m.TextField(blank=True)
31 active = m.BooleanField(default=True)
32 hidden = m.BooleanField(default=False)
33 wiki_link = m.URLField(blank=True)
34
35 def __unicode__(self):
36 return self.name
37
38
39class Iteration(Model):
40
41 name = m.CharField(max_length=200)
42 project = m.ForeignKey(Project)
43 status = m.IntegerField(choices=STATUSES, default=0)
44 start_date = m.DateField()
45 end_date = m.DateField()
46 days_worked = m.DecimalField(default=0, decimal_places=2, max_digits=5)
47 description = m.TextField(blank=True)
48
49 def __unicode__(self):
50 return self.name
51
52
53class Story(Model):
54
55 name = m.CharField(max_length=200)
56 project = m.ForeignKey(Project)
57 iteration = m.ForeignKey(Iteration, blank=True)
58 disposition = m.IntegerField(choices=DISPOSITIONS)
59 customer = m.ForeignKey(User, blank=True, related_name='story_customer')
60 tracker = m.ForeignKey(User, blank=True)
61 status = m.IntegerField(choices=STATUSES, default=0)
62 priority = m.IntegerField()
63 order = m.IntegerField()
64 description = m.TextField(blank=True)
65
66 def __unicode__(self):
67 return self.name
68
69
70class Task(Model):
71
72 name = m.CharField(max_length=200)
73 story = m.ForeignKey(Story)
74 task_type = m.IntegerField(choices=TASK_TYPES)
75 disposition = m.IntegerField(choices=DISPOSITIONS)
76 acceptor = m.ForeignKey(User, blank=True)
77 estimated_hours = m.DecimalField(decimal_places=2, max_digits=5)
78 description = m.TextField(blank=True)
79
80 def __unicode__(self):
81 return self.name
82
83
84class LoggedTime(Model):
85
86 start_time = m.DateTimeField(blank=True)
87 end_time = m.DateTimeField(blank=True)
88 logged_date = m.DateField()
89 duration = m.DecimalField(decimal_places=2, max_digits=5)
90 person1 = m.ForeignKey(User, blank=True, related_name="person1")
91 person2 = m.ForeignKey(User, blank=True, related_name="person2")
92 description = m.TextField(blank=True)
93
94 def __unicode__(self):
95 return self.description