11from django .db import models
22from django .contrib .auth import get_user_model
33from django .contrib .auth .models import User
4- from datetime import datetime
54from taggit .managers import TaggableManager
65from simple_history .models import HistoricalRecords
6+ import datetime
77
8- # Create your models here.
98
9+ # Select Dropdown Options
1010TICKET_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
1116
1217
1318class Ticket (models .Model ):
1419 ticket_type = models .CharField (max_length = 10 , choices = TICKET_TYPES )
1520 summary = models .CharField (max_length = 300 )
1621 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 )
2130 description = models .TextField ()
2231 tags = TaggableManager (blank = True )
2332 upvotes = models .IntegerField (default = 0 )
33+ screenshot = models .ImageField (
34+ upload_to = 'tickets/' , null = True , blank = True )
2435 history = HistoricalRecords ()
2536
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+
2647 def __str__ (self ):
2748 return self .summary
2849
2950 class Meta :
3051 verbose_name_plural = "Tickets"
31- # attachments = models.CharField(maximum_length=200)
3252
3353
54+ # Comment Model
3455class Comment (models .Model ):
3556 ticket = models .ForeignKey (Ticket , on_delete = models .CASCADE )
3657 user = models .ForeignKey (User , on_delete = models .CASCADE )
@@ -42,10 +63,3 @@ def __str__(self):
4263
4364 class Meta :
4465 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