|
1 import os |
|
2 |
|
3 from django.core.files.storage import FileSystemStorage |
|
4 from django.db import models |
|
5 from django.contrib.auth.models import User |
|
6 |
|
7 import tagging |
|
8 from tagging.fields import TagField |
|
9 |
|
10 from pytask.taskapp.utilities.helper import get_key |
|
11 |
|
12 GENDER_CHOICES = (( 'M', 'Male'), ('F', 'Female')) |
|
13 RIGHTS_CHOICES = ( |
|
14 ("AD", "Admin"), |
|
15 ("MG", "Manager"), |
|
16 ("DV", "Developer"), |
|
17 ("CT", "Contributor"),) |
|
18 |
|
19 STATUS_CHOICES = ( |
|
20 ("UP", "Unpublished"), |
|
21 ("OP", "Open"), |
|
22 ("LO", "Locked"), |
|
23 ("WR", "Working"), |
|
24 ("CD", "Closed"), |
|
25 ("DL", "Deleted"), |
|
26 ("CM", "Completed")) |
|
27 |
|
28 NOTIFY_CHOICES = ( |
|
29 ("MT", "Add Mentor"), |
|
30 ("DV", "Developer"), |
|
31 ("MG", "Manager"), |
|
32 ("AD", "Admin"), |
|
33 ("PY", "Assign credits"), |
|
34 ("CM", "Task completed"), |
|
35 ("CD", "Task closed"), |
|
36 ("DL", "Task deleted"), |
|
37 ("NU", "New User"), |
|
38 ("NT", "New Mentor"), |
|
39 ("ND", "New Developer"), |
|
40 ("NG", "New Manager"), |
|
41 ("NA", "New Admin"), |
|
42 ("AU", "Assign user"), ## i mean assign the task |
|
43 ("RU", "Remove user"), ## remove from working users list in task |
|
44 ) |
|
45 |
|
46 IMAGES_DIR = "./images" |
|
47 UPLOADS_DIR = "./uploads" |
|
48 |
|
49 class CustomImageStorage(FileSystemStorage): |
|
50 |
|
51 def path(self, name): |
|
52 """ we return images directory path. |
|
53 """ |
|
54 |
|
55 return os.path.join(IMAGES_DIR, name) |
|
56 |
|
57 def get_available_name(self, name): |
|
58 """ here we are going with username as the name of image. |
|
59 """ |
|
60 |
|
61 root, ext = os.path.splitext(name) |
|
62 file_name = get_key() + ext |
|
63 while self.exists(file_name): |
|
64 file_name = get_key() + ext |
|
65 return file_name |
|
66 |
|
67 class Profile(models.Model): |
|
68 |
|
69 user = models.ForeignKey(User, unique = True) |
|
70 dob = models.DateField(verbose_name = u"Date of Birth", help_text = "YYYY-MM-DD") |
|
71 gender = models.CharField(max_length = 1, choices = GENDER_CHOICES) |
|
72 rights = models.CharField(max_length = 2, choices = RIGHTS_CHOICES, default = u"CT") |
|
73 credits = models.PositiveSmallIntegerField(default = 0) |
|
74 |
|
75 aboutme = models.TextField(blank = True) |
|
76 foss_comm = TagField(verbose_name="FOSS Communities") |
|
77 phonenum = models.CharField(max_length = 15, blank = True, verbose_name = u"Phone Number") |
|
78 homepage = models.URLField(blank = True, verbose_name = u"Homepage/Blog") |
|
79 street = models.CharField(max_length = 80, blank = True) |
|
80 city = models.CharField(max_length = 25, blank = True) |
|
81 country = models.CharField(max_length = 25, blank = True) |
|
82 nick = models.CharField(max_length = 20, blank = True) |
|
83 photo = models.ImageField(storage = CustomImageStorage(),upload_to = IMAGES_DIR, blank = True) |
|
84 |
|
85 def __unicode__(self): |
|
86 return unicode(self.user.username) |
|
87 |
|
88 class Task(models.Model): |
|
89 |
|
90 prim_key = models.AutoField(primary_key = True) |
|
91 id = models.CharField(max_length = 10, unique = True) |
|
92 title = models.CharField(max_length = 100, verbose_name = u"Title", help_text = u"Keep it simple and below 100 chars.") |
|
93 desc = models.TextField(verbose_name = u"Description") |
|
94 status = models.CharField(max_length = 2, choices = STATUS_CHOICES, default = "UP") |
|
95 tags_field = TagField(verbose_name = u"Tags", help_text = u"Give comma seperated tags") |
|
96 |
|
97 credits = models.PositiveSmallIntegerField(help_text = u"No.of credits a user gets on completing the task") |
|
98 progress = models.PositiveSmallIntegerField(default = 0) |
|
99 |
|
100 mentors = models.ManyToManyField(User, related_name = "%(class)s_mentors") |
|
101 created_by = models.ForeignKey(User, related_name = "%(class)s_created_by") |
|
102 claimed_users = models.ManyToManyField(User, blank = True, related_name = "%(class)s_claimed_users") |
|
103 assigned_users = models.ManyToManyField(User, blank = True, related_name = "%(class)s_assigned_users") |
|
104 |
|
105 creation_datetime = models.DateTimeField() |
|
106 published_datetime = models.DateTimeField() |
|
107 sub_type = models.CharField(max_length=1, choices = (('D','Dependency'),('S','Subtask')), default = 'D') |
|
108 |
|
109 def __unicode__(self): |
|
110 return unicode(self.title) |
|
111 |
|
112 class Map(models.Model): |
|
113 |
|
114 main = models.ForeignKey('Task', related_name = "%(class)s_main") |
|
115 subs = models.ManyToManyField('Task', blank = True, null = True, related_name = "%(class)s_subs") |
|
116 |
|
117 class Comment(models.Model): |
|
118 |
|
119 task = models.ForeignKey('Task') |
|
120 data = models.TextField() |
|
121 created_by = models.ForeignKey(User, related_name = "%(class)s_created_by") |
|
122 creation_datetime = models.DateTimeField() |
|
123 deleted_by = models.ForeignKey(User, null = True, blank = True, related_name = "%(class)s_deleted_by") |
|
124 is_deleted = models.BooleanField() |
|
125 attachment = models.FileField(upload_to = UPLOADS_DIR, blank = True) |
|
126 |
|
127 def __unicode__(self): |
|
128 return unicode(self.task.title) |
|
129 |
|
130 class Request(models.Model): |
|
131 |
|
132 sent_to = models.ManyToManyField(User, related_name = "%(class)s_sent_to", blank = False) |
|
133 sent_by = models.ForeignKey(User, related_name = "%(class)s_sent_by", blank = False) |
|
134 role = models.CharField(max_length = 2, blank = False) |
|
135 reply = models.BooleanField(default = False, blank = False) |
|
136 remarks = models.TextField(default = "",blank = True) |
|
137 |
|
138 is_read = models.BooleanField(default = False, blank = False) |
|
139 is_valid = models.BooleanField(default = True, blank = False) |
|
140 |
|
141 creation_date = models.DateTimeField() |
|
142 reply_date = models.DateTimeField() |
|
143 is_replied = models.BooleanField(default = False) |
|
144 replied_by = models.ForeignKey(User, related_name = "%(class)s_replied_by", blank = True, null = True) |
|
145 |
|
146 task = models.ForeignKey(Task,related_name = "%(class)s_task", blank = True, null = True) |
|
147 receiving_user = models.ForeignKey(User, related_name = "%(class)s_receiving_user", blank = True, null = True) |
|
148 pynts = models.PositiveIntegerField(default=0) |
|
149 |
|
150 def __unicode__(self): |
|
151 |
|
152 return u"Request %s %s"%(self.sent_by.username, self.role) |
|
153 |
|
154 class Notification(models.Model): |
|
155 |
|
156 role = models.CharField(max_length = 2, choices = NOTIFY_CHOICES, blank = False) |
|
157 sent_to = models.ForeignKey(User, related_name = "%(class)s_sent_to", blank = False) |
|
158 sent_from = models.ForeignKey(User, related_name = "%(class)s_sent_from", null = True, blank = True) |
|
159 task = models.ForeignKey(Task, related_name = "%(class)s_task", null = True, blank = True) |
|
160 |
|
161 sub = models.CharField(max_length = 100) |
|
162 message = models.TextField() |
|
163 remarks = models.CharField(max_length = 100) |
|
164 |
|
165 sent_date = models.DateTimeField() |
|
166 is_read = models.BooleanField(default = False) |
|
167 is_deleted = models.BooleanField(default = False) |
|
168 |
|
169 def __unicode__(self): |
|
170 return u"%s %s %s"%(self.sent_to, self.message, self.sent_date.ctime()) |
|
171 |
|
172 tagging.register(Profile) |
|
173 tagging.register(Task) |