models.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from django.db import models
  2. from hashlib import sha256
  3. import uuid
  4. levels = (
  5. ('1', 'Standard User'),
  6. ('2', 'Supervisor'),
  7. ('3', 'Administrator')
  8. )
  9. entry_status = (
  10. ('current', 'Current'),
  11. ('historical', 'historical')
  12. )
  13. class User(models.Model):
  14. status = models.BooleanField(default=True, blank=True)
  15. first_name = models.CharField(max_length=255, default="", blank=False)
  16. last_name = models.CharField(max_length=255, default="", blank=False)
  17. pin = models.CharField(max_length=255, null=False, blank=False, unique=True)
  18. level = models.CharField(max_length=255, blank=False, default="1", choices=levels)
  19. def save(self, *args, **kwargs):
  20. # Compare old vs new
  21. if self.pk:
  22. obj = User.objects.values('pin').get(pk=self.pk)
  23. if obj['pin'] != self.pin:
  24. self.pin = sha256(self.pin.encode('utf-8')).hexdigest()
  25. super(User, self).save(*args, **kwargs)
  26. def __str__(self):
  27. return "%s, %s (Enabled: %s)" % (self.last_name, self.first_name, self.status)
  28. class Project(models.Model):
  29. name = models.CharField(blank=False, max_length=50, default="")
  30. description = models.TextField()
  31. def __str__(self):
  32. return "%s" % (self.name,)
  33. class Entry(models.Model):
  34. uid = models.CharField(max_length=255, blank=False, default=uuid.uuid4, editable=False, unique=True)
  35. user = models.ForeignKey(User, on_delete=models.DO_NOTHING, default=None, null=True)
  36. date = models.DateField(blank=False)
  37. project = models.ForeignKey(Project, on_delete=models.CASCADE, blank=True, null=True)
  38. hours = models.CharField(max_length=2, default=0, blank=False)
  39. minutes = models.CharField(max_length=4, default=0, blank=False)
  40. status = models.CharField(default="", max_length=255, blank=False, choices=entry_status)
  41. validated = models.BooleanField(default=False)
  42. approved = models.BooleanField(default=False)
  43. def __str__(self):
  44. return "%s, %s %s" % (self.date, self.user.last_name, self.user.first_name)
  45. class Meta:
  46. verbose_name_plural = "Time Entries"
  47. class EntryNote(models.Model):
  48. entry = models.ForeignKey(Entry, on_delete=models.CASCADE)
  49. note = models.TextField(blank=False)
  50. def __str__(self):
  51. return "%s %s, %s - %s" % (self.entry.date, self.entry.user.last_name, self.entry.user.first_name, self.note)
  52. class Meta:
  53. verbose_name_plural = "Time Entry Notes"
  54. class Message(models.Model):
  55. message = models.TextField(blank=False)
  56. expire_date = models.DateTimeField(blank=False)
  57. recipient = models.ForeignKey(User, on_delete=models.CASCADE, blank=False)
  58. def __str__(self):
  59. return "%s" % (self.message,)
  60. class Setting(models.Model):
  61. setting = models.CharField(max_length=255, blank=False, default="")
  62. value = models.CharField(max_length=255, blank=False, default="")
  63. def __str__(self):
  64. return "%s" % (self.setting,)