1
1
from django .db import models
2
2
from django .contrib .auth import get_user_model
3
3
from django .contrib .auth .models import User
4
- from datetime import datetime
5
4
from taggit .managers import TaggableManager
6
5
from simple_history .models import HistoricalRecords
6
+ import datetime
7
7
8
- # Create your models here.
9
8
9
+ # Select Dropdown Options
10
10
TICKET_TYPES = (('Bug' , 'Bug' ), ('Feature' , 'Feature' ))
11
+ PRIORITIES = (('Low' , 'Low' ), ('Medium' , 'Medium' ), ('High' , 'High' ))
12
+ STATUSES = (('New' , 'New' ), ('In Progress' , 'In Progress' ),
13
+ ('Resolved' , 'Resolved' ), ('Cancelled' , 'Cancelled' ))
14
+
15
+ # Ticket Model
11
16
12
17
13
18
class Ticket (models .Model ):
14
19
ticket_type = models .CharField (max_length = 10 , choices = TICKET_TYPES )
15
20
summary = models .CharField (max_length = 300 )
16
21
created_date = models .DateTimeField (auto_now_add = True )
17
- status = models .CharField (max_length = 50 , default = 'New' )
18
- priority = models .CharField (max_length = 50 , default = 'Medium' )
19
- submitted_by = models .ForeignKey (User , on_delete = models .CASCADE )
20
- assigned_to = models .CharField (max_length = 200 , default = 'Unassigned' )
22
+ resolved_date = models .DateTimeField (null = True , default = None )
23
+ status = models .CharField (max_length = 50 , default = 'New' , choices = STATUSES )
24
+ priority = models .CharField (
25
+ max_length = 50 , default = 'Medium' , choices = PRIORITIES )
26
+ submitted_by = models .ForeignKey (
27
+ User , on_delete = models .CASCADE , related_name = 'submitted_by' )
28
+ assigned_to = models .ForeignKey (
29
+ User , on_delete = models .CASCADE , related_name = 'assigned_to' , default = 1 )
21
30
description = models .TextField ()
22
31
tags = TaggableManager (blank = True )
23
32
upvotes = models .IntegerField (default = 0 )
33
+ screenshot = models .ImageField (
34
+ upload_to = 'tickets/' , null = True , blank = True )
24
35
history = HistoricalRecords ()
25
36
37
+ def age (self ):
38
+ created_date_only = self .created_date .date ()
39
+ return int ((datetime .date .today () - created_date_only ).days )
40
+
41
+ def days_to_resolve (self ):
42
+ if self .resolved_date :
43
+ return int ((self .resolved_date .date () - self .created_date .date ()).days )
44
+ else :
45
+ return None
46
+
26
47
def __str__ (self ):
27
48
return self .summary
28
49
29
50
class Meta :
30
51
verbose_name_plural = "Tickets"
31
- # attachments = models.CharField(maximum_length=200)
32
52
33
53
54
+ # Comment Model
34
55
class Comment (models .Model ):
35
56
ticket = models .ForeignKey (Ticket , on_delete = models .CASCADE )
36
57
user = models .ForeignKey (User , on_delete = models .CASCADE )
@@ -42,10 +63,3 @@ def __str__(self):
42
63
43
64
class Meta :
44
65
verbose_name_plural = "Comments"
45
-
46
-
47
- # class ChangeHistory(models.Model):
48
- # ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
49
- # user = models.ForeignKey(User, on_delete=models.CASCADE)
50
- # date = models.DateTimeField(auto_now_add=True)
51
- # field?
0 commit comments